Unity 脚本优化

在 Unity中选择正确的脚本优化比漫无目的地调整代码更能提高代码的执行效率。值得注意的是:最好的优化并不是简单地降低代码的复杂度。

1.在使用FixedUpdate函数时,在方法体内尽量不要写太多无须重复调用的代码,因为虚拟机在执行该方法时是以每秒50-100次的执行效率来处理每个脚本与对象的。当然,执行效率是可以改变的。依次打开菜单栏中的Edit->ProjectSettings->Time项,进而可以在Inspector视图中显示TimeManager属相面板。

FixedUpdate与Update的区别:Update会在每次渲染新的一帧时执行,它会受当前渲染物体的影响,渲染的帧率是变化的,所以渲染时间间隔也会变化,也就是说Updata更新频率和设备的性能有关;而FixedUpdate不受帧率的影响,它是以固定时间间隔被调用的。所以在用法的处理上,FixedUpdate更多地用于处理物理引擎。Update因为受渲染物体的影响,所以更多地把Update用于脚本逻辑的控制。

2.一般在新建类时会产生新的Update函数。如果代码不需要用到该函数,应该对该函数进行删除。另外,尽量不要在Update函数内执行Find,FindObjectOfType,FindGameObjectsWithTag这些寻找物体的函数,而应该尽量在Start或Awake函数中执行。

3.引用一个游戏对象的逻辑,可以在最开始的地方定义它。例如:

private Transform myTransform;
private Rigidbody myRigidbody;
void Start () {
    myTransform = transform;
    myRigidbody = rigidbody;
} 

4.当一个程序不必要每帧都执行时,可以使用Coroutines。定时重复调用可以使用InvokeRepeating函数实现。例如,启动1.5秒后每隔1秒执行一次DoSomeThing函数。

void Start() {
    InvokeRepeating("DoSomeTing", 1.5f, 1.0f);
{

5.尽量减少使用临时变量,特别是在Update等实时调用的函数中。

6.在游戏暂停,场景切换时,可以主动进行垃圾回收,从而及时去除游戏中已经不必要地内存占用。

Void Update() {
    if(Time.frameCount%50 == 0) {
        System.GC.Collection();
    }
}
时间: 2024-10-12 19:47:03

Unity 脚本优化的相关文章

unity —脚本优化— 消息处理系统

我们经常会遇到在运行状态下去找到一个现有对象.在这个例子中,我们需要添加新的敌人到EnemyManagerComponent中,以便于在我们的场景中可以按我们想的任何方式来控制敌人对象.由于涉及到开销,我们需要可靠和快速的方法作用于对象来查找已经存在的对象,而不用Find()方法和sendmessage()方法时,我们又该怎么做呢.这节主要讲解如果不用find(),又该完成对象之间的调用呢. 我们可以采用多种方法来解决这个问题,每一个都有自己的好处和弊端: 静态类: 单例组件: 分配引用到预先存

Unity性能优化(4)-官方教程Optimizing graphics rendering in Unity games翻译

本文是Unity官方教程,性能优化系列的第四篇<Optimizing graphics rendering in Unity games>的翻译. 相关文章: Unity性能优化(1)-官方教程The Profiler window翻译 Unity性能优化(2)-官方教程Diagnosing performance problems using the Profiler window翻译 Unity性能优化(3)-官方教程Optimizing garbage collection in Uni

Unity性能优化(2)-官方文档简译

本文是Unity官方教程,性能优化系列的第二篇<Diagnosing performance problems using the Profiler window>的简单翻译. 简介 如果游戏运行缓慢,卡顿,我们知道游戏存在性能问题.在我们尝试解决问题前,需要先知道引起问题的原因.不同问题需要不同的解决方案.如果我们靠猜测或者其他项目的经验去解决问题,那么我们可能会浪费很多时间,甚至使得问题更严重. 这时我们需要性能分析,性能分析程序测量游戏运行时的各个方面性能.通过性能分析工具,我们能够透过

Unity 脚本的未来发展

最近,我们谈到了Unity 的WebGL . 在那篇文中我们简要谈论到脚本在 WebGL  中的运行的新技术称为"IL2CPP" .然而IL2CPP 所代表的不只是适用于WebGL 的脚本解决方案,同时也是我们自己为了在更多平台上执行 .NET时能有高效能的方案. 在深入探究未来之前,让我们先谈谈现在吧. Unity 中脚本的现状 我们利用Mono (以及在 Windows Store App 和Windows Phone 上的WinRT )让C#变得容易使用,存取第三方资料库并最接近

Unity内存优化(贴图层面)

聊聊近况: 距离上一篇文章已经过了好久,主要原因是我懒了.公司项目也到了开始优化的阶段,上网找的资料,看过了就忘.还是想把它整理一下,写出来.其实我说的东西,网上都有,我只是搬运工而已. 贴图压缩: Android平台使用ETC1格式压缩. 目前主流的Android机型基本都支持ETC1格式压缩.但ETC1只能支持非Alpha通道的图片压缩. 所以一般把RGB和ALPHA分离出来,r值,g值,b值从RGB图获取,a值从Alpha图里获取. 随着OPENGL ES 3.0的发布,etc2也出了,支

Unity内存优化

对项目优化有很多,如:mesh合并,减少DrawCall和模型骨骼以及物理计算,合并材质球,优化代码等等. 优化: 1. 更新不透明贴图的压缩格式为ETC 4bit,因为android市场的手机中的GPU有多种,每家的GPU支持不同的压缩格式,但他们都兼容ETC格式. 2.对于透明贴图,我们只能选择RGBA 16bit 或者RGBA 32bit. 3.减少FPS 在ProjectSetting-> Quality中的VSync Count 参数会影响你的FPS,EveryVBlank相当于FPS

Unity内存优化技术测试案例

笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D实战核心技术详解>电子工业出版社等. CSDN视频网址:http://edu.csdn.net/lecturer/144 Unity引擎优化技术,无非涉及到三点:CPU优化,GPU优化,内存优化. 先谈谈内存优化:大概可以分成三大部分: 1. Unity3D内部的内存 2. Mono的托管内存 3. 引入的DLL或者第

Unity脚本在层级面板中的执行顺序测试4-附加内容

测试4为一些附加内容,后面的各种tips都加在此. 前几篇测试的链接: Unity脚本在层级面板中的执行顺序测试1 http://www.cnblogs.com/hont/p/4298110.html Unity脚本在层级面板中的执行顺序测试2 http://www.cnblogs.com/hont/p/5034419.html Unity脚本在层级面板中的执行顺序测试3 http://www.cnblogs.com/hont/p/5179427.html 1.基本执行顺序 Awake OnEn

Unity 脚本的执行顺序

在Unity脚本中常用到的函数就是下面这些,他们的顺序也是按照箭头的方向执行的. Awake ->OnEable-> Start -> FixedUpdate-> Update  -> LateUpdate ->OnGUI ->OnDisable ->OnDestroy 1.Awake 用于在游戏开始之前初始化变量或游戏状态.在脚本整个生命周期内它仅被调用一次.Awake在所有对象被初始化之后调用,所以你可以安全的与其他对象对话或用诸如GameObject.