unity

unity获取游戏对象

安稳与你 提交于 2019-11-26 20:25:35
RectTransform tr = this.GetComponent<RectTransform>(); RectTransform rect = (this.transform as RectTransform); //直接获得对象身上的其它组件(类) Button bb = this.GetComponent<Button>();// ("Panel/center/left/btn_addRoom"); Image m = this.transform.GetComponent<Image>(); //获得当前游戏对象下面的其它子节点身上的组件,先找 //用多行表示 Transform ttr2 = this.transform; Transform ttr3 = ttr2.Find("Panel/center/left/btn_addRoom"); Button bb0 = ttr3.GetComponent<Button>(); bb0.onClick.AddListener(()=> { }); //简单表示 Transform trr = this.transform.Find("Panel/center/left/btn_addRoom"); Button bb2 = trr.GetComponent<Button>(); bb2.onClick

Unity Shader基础(1):基础

一笑奈何 提交于 2019-11-26 19:12:54
一.Shaderlab语法 1.给Shader起名字 Shader "Custom/MyShader" 这个名称会出现在材质选择使用的下拉列表里 2. Properties (属性) Properties { Name ("display name",ProperType)=DefaultValue //更多属性 } Name:用于Shader中访问的名字 display name:出现在材质面板的名字 ProperType:它的类型 3.SubShader 每一个Unity Shader文件可以包含多个SubShader语义块,但至少要有一个 SubShader { //可选的 [Tags] //可选的 [RenderSetup] Pass{ } //Other Pass } Pass尽量不要太多,太多往往会造成渲染性能的下降 (1)状态设置 下面是常见的状态设置选项 (2).Tags:是一个 键值对 (Key/Value Pair) 用来告诉Unity的渲染引擎:SubShader我希望怎么以及何时渲染这个对象 结构如下: Tags {"TagName1"="Value1" "TagName2"="Value2"} 支持的标签类型如下: (3)Pass语义块 Pass{ [Name] [Tags] [RenderSetup] //Other code } 1.Name

Unity 2D游戏 模拟物理系统

喜欢而已 提交于 2019-11-26 19:11:21
1.为什么不用自带的物理系统 用unity进行2D游戏开发的时候一般都不会使用unity自带的2D物理系统,有几个因素:不可控(位置 旋转 ) 2.静态的碰撞体 只带有碰撞体且没有刚体的物体属于静态碰撞体 如果需要让静态碰撞体移动 最好使用刚体使用物理方法 或者给对象加一个动力学刚体 不然也很消耗性能 3.移动 为了模拟真实的移动,你需要分别模拟 加速 匀速 减速 为了模拟这三种状态 你需要模拟加速度 和 摩擦力     //变速写法 inputHori = Input.GetAxis("Horizontal"); float s = 0.8f * speedChangeFactor; speedIncrement = 0; frictionPower = 0; //使用摇杆就清除所有除了遥感之外的横向反向速度 if (inputHori > 0.1f) { speedIncrement = s; if (shootDir.x < 0) { shootx = 0; shootSpeedX = 0; } if (reBoundDir.x < 0) { reBoundX = 0; reboundSpeedX = 0; } } else if (inputHori < -0.1f) { speedIncrement = -s; if (shootDir.x > 0) { shootx =

如何做一个跨平台的游戏App?

吃可爱长大的小学妹 提交于 2019-11-26 18:29:13
如何做一个跨平台的游戏App? iOS和安卓系统上的应用程序,根据提供的内容不同,按照开发方式和用户体验不同,可区分为app和游戏; 首先从 开发方式 不同来说明,app开发一般是用操作系统官方提供的开发套件来做对应的开发; 这里的开发套件就系统不同可做以下区别: iOS: Xcode, Objective-C android: AndroidStudio, Java/Kotlin 游戏的开发方式就很多了,不过最终一步一般都是生成对应IDE的项目工程,然后在对应的项目工程上进行配置设置,签名配置等步骤,最后完成打包.ipa和.apk的打包; 在最后一步前开发方式就根据项目需求以及其他因素考量,可采取不同的开发方案了; 之前有幸在做iOS的SDK开发,对接了上百款游戏,也算对游戏的开发环境有所了解了。 2D游戏一般用: Cocos2dx, Cordova,Corona,Contruct2等,当然也可以用Unity来开发2D游戏; 3D游戏一般用: Unity为主流; 最后从 用户体验 不同来说明, app在前几年时间里,界面一般要根据不同系统来做开发,市面上看到的很多app的iOS版本和安卓版本有一些UI是长的不一样的, 这里就导致用户体验不一致的问题,如果领导需要,可采取混合网页的方式,但是同时会带来体验不流畅的问题,这就要看沟通了,最终采取哪种方式了。 一般情况下

Unity3D 控制物体旋转详解 —— 自身绕轴旋转、缓慢旋转、鼠标控制旋转、欧拉数和四元数的关系

风流意气都作罢 提交于 2019-11-26 16:48:14
问题描述: 昨天需要实现一个功能是根据指令左转90度或者右转90度,当时脑汁可能是有浆糊吧,居然要用直接赋值rotation,这样一来就要牵扯到eulerAngles和四元数的Euler函数了,结果忙活了好久没解决,bug层出,今天经过详细了解,解决了相关问题,一并把其他关于角度和旋转的知识点整理出来。 一、问题的解决:如何让物体绕自身轴旋转 直接上关键代码: player_cube.Rotate(-90, 0, 0); player_cube是获取的需要旋转的物体的Transform,其中-90意味着,在unity面板中 rotation 中的 x 减少90,从而实现旋转; 如果想让物体直接旋转多少度,这个是最方便快捷的方法! 二、缓慢旋转 多见于FPS游戏中使用,用于转换摄像头角度,以下为自己以前做过的例子:(仅作参考) //获取鼠标移动 mouse_move_velocity.y = Input.GetAxis("Mouse X"); mouse_move_velocity.x = -Input.GetAxis("Mouse Y"); //rote camera Vector3 target_angle = transform.rotation.eulerAngles + mouse_move_velocity; //限定角度 //调整周期,限定角度 if (target

unity面试常见问题

你说的曾经没有我的故事 提交于 2019-11-26 16:46:35
给大家推荐一个 unity学习交流群 可以一起学习交流 Update Fixed Update Late Update有什么区别有什么运用? Update每帧调用,大部分的角色行为都依赖于Update执行。 Fixed Update在固定时间间隔调用,一般用于刚体的运动。 Late Update 在所有物体的Update执行完之后执行,一般用于控制摄像机运动。 Prefab是什么? Unity中的预制体相当于是一个游戏物体及其组件和属性的集合。也相当于一个新物体的模板。你在编辑器下修改的预制体能反映到每个你实际使用的预制体中。 AssetBundle有什么用? AseetBundle是一些你选择导出的资源包,这些资源包中的内容已经被妥善压缩,并且允许你在应用中正常使用。这也方便开发者能以流的形式加载模型贴图音效或整个场景。AssetsBundlej就是用于简化下载流程的工具。 Resources和StreamingAssets文件夹有什么区别? Unity的Resource文件夹中包括我们在游戏中需要用到的一些列资源,会在打包时打入UnityPlayer中,这些资源大多数没有必要在Inspector上直接附着于组件之上,任何一个在Resources的资源都可以通过Resources.Load函数来实时加载到游戏中使用

unity如何解析Excel表数据

送分小仙女□ 提交于 2019-11-26 16:45:58
大家在游戏开发工程中难免会和各种各样的数据打交道,因为这是不可避免的,除非你的能力不足,那么你可能不用和这些数据打交道。就比如一个非常简单的需求,赛车游戏里面。策划会制作Excel表,各种各样的汽车,那么他们的名称,属性,描述等都是独一无二不一样的。那么我们该怎么样才能用到他们写的Excel表里面的属性呢,换句话说,我们怎么读取或解析Excel表里面的数据呢?这个技术在开发工程中会用的很频繁,而且这也是非常有用的。好了,话不多说,我们着手开干。老规矩,先上效果图: 大家看看读取的是不是没错误,都一一对应上策划写的Excel表里面的内容了。那么这到底是怎么弄的呢?我们接下来就说明下原理。然后附上一部分代码,想要完整代码的可以私聊我哦! OK,首先我们需要把Excel表导出格式换成CSV(xml什么的也可以,这里用的csv),然后我们需要把它导入unity里面去,最好放在Resources文件里面,然后需要解析它,最后使用它。这就是步骤。脚本有点多,我就不全发了。这是非常全的一个模板,大家也可以用在工作中。先上关键脚本: 这就是核心的脚本了,篇幅有限,脚本有点多,代码也比较多。需要完整的代码可以加 unity学习交流群 哦。 来源: https://blog.csdn.net/voidinit/article/details/98957790

11 | 如何测试基于Unity3D引擎的游戏

泄露秘密 提交于 2019-11-26 16:14:55
11 | 如何测试基于Unity3D引擎的游戏 由于游戏的界面是通过游戏引擎渲染出来的,游戏界面没有系统原生的控件信息,所以对于游戏,我们需要接入Poco-SDK才能获取到游戏界面中的控件信息。下面以Unity开发的手游为例,介绍如何在Android和iOS平台进行连接。 11.1 Android 平台 从Poco SDK Repo将Unity3D这个文件夹克隆下来。 将克隆下来的Unity3D文件夹放置于你的Unity项目的Assets/Scripts文件夹下。 将Assets/Scripts/Unity3D目录下以未用到的UI系统命名的文件夹删除。例:假如您的项目使用的UI系统是UGUI,请将FairyGUI和NGUI两个文件夹删除,保留UGUI文件夹。 在Unity3D中打开您的项目,并将Unity3D/PocoManager.cs作为一个script component添加到您的GameObject中,通常情况下是您的主相机。 举例:点击demo这个场景下的Main Camera,会在右方出现inspector界面,点击inspector界面当中的Add Component。 在弹出的对话框中输入Poco,选择出现的Poco Manager这个选项。 完成后会在inspector界面出现如图所示的component。 点击界面左上角File->Build Settings,

3 | Poco的介绍和入门教学

谁说我不能喝 提交于 2019-11-26 16:14:07
3 | Poco的介绍和入门教学 3.1 前言 前面我们已经介绍了基于图像识别的测试框架Airtest,通过图像识别,已经可以编写大部分的测试脚本。但是在某些特殊情况下,例如对于游戏或App里的动态元素,通过图像识别定位较为困难。所以,我们的Airtest Project解决方案也提供了另外一种基于UI控件搜索的自动化框架Poco,下面我们来通过一个示例来看看Poco如何使用。 3.2 示例 3.2.1 原生应用 对于Android和iOS平台上的原生应用(包括系统界面),可以直接使用Poco。 准备工作:下载 AirtestIDE ,解压并运行。 (1)Android原生应用 准备一台Android手机,打开USB调试功能,然后连接电脑。正常情况下,就可以在AirtestIDE中看到手机列表: 点击connect,即可在AirtestIDE中看到设备屏幕。现在进入Android主界面,点击左侧的Poco辅助窗,选择Android模式,即可看到当前界面的UI树结构: 选择Poco辅助窗口中的 Poco Inspector 按钮,即可对页面上的UI控件进行定位: 与Airtest的使用方式类似,我们可以使用Poco提供的方法对界面上的元素进行操作: # Airtest IDE自动插入的初始化语句 from poco.drivers.android.uiautomation

世界

╄→尐↘猪︶ㄣ 提交于 2019-11-26 14:28:55
A World 拥有 EntityManager 和一组 ComponentSystems 。您可以根据需要创建任意数量的 World 对象。通常,您将创建模拟 World 和渲染或演示 World 。 默认情况下,我们 World 在进入“ 播放模式” 时创建单个,并使用 ComponentSystem 项目中的所有可用对象填充它,但您可以禁用默认 World 创建并通过全局定义将其替换为您自己的代码。 默认世界创建代码 (参见文件: Packages / com.unity.entities / Unity.Entities.Hybrid / Injection / DefaultWorldInitialization.cs ) 自动引导入口点 (参见文件: Packages / com.unity.entities / Unity.Entities.Hybrid / Injection / AutomaticWorldBootstrap.cs ) 来源: https://www.cnblogs.com/longsl/p/11323972.html