大家好,这里是七七,今天又来更新Unity脚本优化篇了,话不多说,直接上主题。
一、注意缓存Transform的变化
Transform组件只存储与其父组件相关的数据。这意味着访问和修改Transform组件的position、rotation和scale属性会导致大量未预料到的矩阵乘法计算,从而通过其父Transform为对象生成正确的Transform表示。对象在Hierarchy窗口中的位置越深,确定最终结果需要进行的计算就越多。
然而,这也意味着使用localPosition、localRotation和localScale的相关成本相对较小,因为这些值直接存储在给定的Transform中,可以进行检索,不需要任何额外的矩阵算法。因此,应该尽可能使用这些本地属性值。
遗憾的是,将数学计算从世界空间更改为本地空间,会使原本很简单的问题变得过于复杂,因此进行这样的更改会破坏实现方案,并引入大量以外的bug。有时,为了更容易地解决复杂的3D数学问题,牺牲一点性能是值得的。
不断更改Transform组件属性的另一个问题是,也会向组件(如Collider、RigidbodyLight和Camera)发送内部通知,这些组件也必须进行处理,因为物理和渲染系统都需要知道Transform的值,并相应地更新。
在复杂的事件链中,在同一帧中多提提换Transform组件的属性是很常见的。每次发生这种情况时,都会触发内部消息,即使它们发生在同一帧甚至同一个函数调用期间。因此,应该尽量减少修改Transform属性的次数,方法是将它们缓存在一个成员变量中,只在帧的末尾提交它们。
二、避免在运行时使用Find()和SendMessage()方法
三、禁止未使用的脚本和对象
3.1通过可见性禁用对象
3.2通过距离禁用对象
四、使用距离平方而不是距离
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。