| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 游戏开发 -> Unity 使用技巧与常见问题 -> 正文阅读 |
|
[游戏开发]Unity 使用技巧与常见问题 |
注意:本文章将长期更新,长期修改。 快速找到对象在Hierarchy选中需要查找的对象,在Scene视图中F,即可快速找到需要的对象 快速对齐对象在Game视图中选到对象之后,按住V,此时可以看到移动的中心变到了鼠标所在的位置。现在尝试移动即可将两个Cube无缝连接在一起。 BMFont 使用使用了一个大佬开放插件。 刚体与碰撞体刚体使gameObject拥有物理属性,碰撞体使gameObject拥有碰撞属性。 运行时使程序暂停在需要停止的地方添加如下代码即可。编辑器将进入暂停状态:
Image Preserve Aspect启用 Preserve Aspect 复选框。这样可以使图像在 Rect Transform 内尽可能增大,但不会被压缩或拉伸。 未勾选: 模型的显示如下图所示,模型在层级面板中显示的是下图中的第二个,模型是只读的,当我们尝试删除其中的内容时会弹窗显示无法删除。 SkinnedMeshRenderer模型由一个包含三角形的网格组成,该网格由 Mesh Renderer(网格渲染器)进行“渲染”,从而使该网格可见。Skinned Mesh Renderer 是一种特殊类型的 Mesh Renderer,可让网格根据模型所有的骨骼的位置和旋转来改变形状。 Has Exit Time 的作用HasExitTime有两个作用: 命名约定公共成员变量/局部变量: myParam Canvas Group画布组 (Canvas Group) 可集中控制整组 UI 元素的某些方面,而无需单独处理每个元素。画布组的属性会影响所在的游戏对象以及所有子对象。
Mathf.Approximately比较两个浮点值,如果它们相似,则返回 true。 Input.GetAxisUnity 有一个输入管理器(Edit-ProjectSetting-InputManager)用来定义可按名称找到的各种按钮和轴。例如,其中有一个称为 Horizontal 的轴,由 A 和 D 键以及向左和向右键表示。因此,通过该检查,玩家的计算机可以决定角色应该向左还是向右移动。
动画状态添加StateMachineBehaviour在Animator界面中,选中需要添加脚本的动画,在Inspector中选中AddBehaviour添加StateMachineBehaviour脚本。 Spine插件下载问题如果在Spine官网下载的文件不是.unitypackage的话,而是**.gz结尾**的文件的话。尝试换个浏览器下载,笔者换了谷歌浏览器之后就可以下载到.unitypackage。 Spine 动画未播放完,重新播放问题两行代码都需要添加
模型动画重复问题选中模型中的动画,在Inspector中选中Animation,勾选下方的LoopTime。最后需要点击 Apply才会生效。 SpriteAtlas 的使用设置Sprite Packer 模式Edit---->ProjectSetting------->Editor--------->Mode sprite Atlas是2017版本之后的图集打包方式, Sprite Atlas 针对旧版本的图集打包系统Sprite Packer在性能和易用性上的不足,进行了全面改善。 创建sprite Atlas如下所示创建sprite Atlas: 加入spriteAtlasspriteAtlas支持通过文件夹添加,所以建议通过文件夹添加,那样就不用一个一个添加了。添加完之后就可以点击PackPreview查看效果。 查看效果这里我们可以回到上面设置Sprite Packer模式中,通过来回修改SpritePacker为enabled for builds或always enabled,然后点击Stats查看效果 模型动画优化文件压缩方式:选中含有动作的.fbx文件,再选中Animation,修改Anim.Compression。 降低内存垃圾回收(GC)对性能的影响String
Unity 函数调用
Boxing(打包)避免在引用类型变量处传入值类型变量,因为这样做会导致系统创建一个临时对象,在背地里将值类型转换为对象类型(如int i = 123; object o = i ),从而产生垃圾回收的需求。尽量使用正确的类型重写来传入想要的值类型。泛型也可用于类型覆写。 Coroutines(协同程序)虽然 yield 不会产生垃圾回收,但新建 WaitForSeconds 对象会。我们可以缓存并复用 WaitForSeconds 对象,不必在 yield 中再度创建。
降低每帧的代码量有许多代码并非要在每帧上运行,这些不必要的逻辑完全可以在 Update、LateUpdate 和 FixedUpdate 中删去。这些事件函数可以保存那些必须每帧更新的代码,任何无须每帧更新的逻辑都不必放入其中。
避免在 Start/Awake 中加入繁重的逻辑当首个场景加载时,每个对象都会调用如下函数:Awake,OnEnable,Start。 避免加入空事件即使是空的 MonoBehaviours 也会占用资源,因此我们应该删除空的 Update 及 LateUpdate 方法。
如此一来,在编辑器中的 Update 测试便不会对构建版本造成不良的性能影响。 删去 Debug Log 语句Log 声明(尤其是在Update、LateUpdate及FixedUpdate中)会拖慢性能,因此我们需要在构建之前禁用 Log 语句。你可以用预处理指令编写一条 Conditional 属性来轻松禁用 Debug Log。比如下方这种的自定义类:
使用哈希值、避免字符串Unity 底层代码不会使用字符串来访问 Animator、Material 和 Shader 属性。出于提高效率的考虑,所有属性名称都会被哈希转换成属性 ID,用作实际的属性名称。
选择正确的数据结构由于数据结构每帧可能会迭代上千次,因此其结构对性能有着较大的影响。如果你不清楚数据集合该用 List、Array 还是 Dictionary 表示,可以参考 C# 的 MSDN 数据结构指南来选择正确的结构。 避免在运行时添加组件在运行时调用 AddComponent 会占用一定的运行成本,Unity 必须检查组件是否有重复或依赖项。 缓存 GameObjects 和组件调用 GameObject.Find、GameObject.GetComponent 和 Camera.main(2020.2以下的版本)会产生较大的运行负担,因此这些方法不适合在 Update 中调用,而应在 Start 中调用并缓存。
使用 ScriptableObjects(可编程对象)固定不变的值或配置信息可以存储在 ScriptableObject 中,不一定得储存于 MonoBehaviour。ScriptableObject 可由整个项目访问,一次设置便可应用于项目全局。 声明:
使用:
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 10:47:30- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |