Unity Update优化

来源:互联网 发布:网络自媒体 编辑:程序博客网 时间:2024/06/03 20:15

测试一下MonoBehaviour自己的Update函数调用消耗

创建20000个物体,每个物体上挂载一个带有MonoBehaviour自己的Update,脚本如下:

public class TestUpdate1 : MonoBehaviour{    private void Update()    {        float a = 1.513f + 1.5141f;        float b = 1.513f + 1.5141f;        float c = 1.513f + 1.5141f;        float d = a * b / c;    }}

看看每帧耗时:
这里写图片描述

每帧大约耗时5毫秒


再来试试把所有的Update集中调用
创建20000个物体,每个物体上挂载一个集中调用的Update,脚本如下:

public class TestUpdate : ComponentBase, IUpdate{    public void OnUpdate()    {        float a = 1.513f + 1.5141f;        float b = 1.513f + 1.5141f;        float c = 1.513f + 1.5141f;        float d = a * b / c;    }}

然后使用一个UpdateManager统一调用,代码如下:

public class UpdateManager : SingletonBehaviour<UpdateManager>{    private List<IUpdate> _updateList = new List<IUpdate>();    /// <summary>    /// 添加更新    /// </summary>    /// <param name="call"></param>    public void Add(IUpdate call)    {        if (!_updateList.Contains(call))            _updateList.Add(call);    }    /// <summary>    /// 移除更新    /// </summary>    /// <param name="call"></param>    public void Remove(IUpdate call)    {        if (_updateList.Contains(call))            _updateList.Remove(call);    }    private void Update()    {        for (int i = 0; i < _updateList.Count; ++i)            _updateList[i].OnUpdate();    }}

再来看看每帧耗时:
这里写图片描述

每帧耗时不到1毫秒


说明集中调用确实会比使用MonoBehaviour自己的Update更有效率,同样Awake,Start这些生命周期函数也是一样的,但是这些函数只执行一次,一般可以不用优化.
经过测试,这个耗时差和场景对象数量成正比,数量越多,耗时差就越大.


非常的简单.

0 0
原创粉丝点击