【Unity优化】提高代码性能

CPU每帧需要处理数百万条指令,如果没有按时处理完,就会导致游戏卡顿。

打包过程

Untiy将代码编译为 CIL(Common Intermediate Language)

① AOT:CIL在打包时编译为机器码

② JIT:CIL在运行前编译为机器码

源码与机器码的关系

没有被编译的代码称为源码,决定了编译后机器码的结构和内容。

① 一些CPU指令要比其他的消耗更多时间;

② 一些在源码中看起来简单的处理,在编译后会变得非常复杂;

运行时引擎代码、用户代码的沟通

1)大多数引擎代码用C++编写,并且已经被编译为机器码。

2)用户代码被称为托管代码,被编译为机器码后,在托管运行时(managed runtime)上运行。MR负责自动内存管理、安全检查等。

3)当CPU在引擎代码和托管代码之间沟通时,就需要进行安全检查。当需要从托管代码传递数据到引擎代码时,需要进行格式转换,这一过程叫编组(marshalling)。

低性能代码

1)代码架构浪费性能

2)不必要的昂贵调用

3)不必要的方法调用

4)代码自身耗时长

提高代码性能

1)尽可能减少Update中的操作

2)仅当有变化时调用方法

3)Update中每隔几帧再做处理

4)缓冲对象,而不是每次创建

5)使用合适的数据结构

6)降低GC的影响

7)使用对象池

8)代码LOD,不重要的时候使用简单处理

避免调用昂贵的 Unity API

原则:每个API都有适用场合,只是有些不适合频繁调用。

1)SendMessage()、BroadcastMessage():用到了反射

2)Find():遍历所有对象和组件

3)更改 Transform 的 position 或 rotation 会向所有子对象发送 OnTransformChanged 事件。因此尽量少调用

4)使用 Transform.localPosition 替代 Transform.position:后者由前者计算转换得到

5)使用 Vector.sqrMagnitude 替代 Vector.magnitude;使用 int 和 float 计算替代 Vector

6)避免频繁使用 Camera.main

原文链接: https://www.cnblogs.com/hearthstone/p/13357918.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    【Unity优化】提高代码性能

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/369324

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月2日 下午6:53
下一篇 2023年3月2日 下午6:53

相关推荐