table2.png (9.72 KB, 下载次数: 0)
下载附件 保存到相册
2017-5-31 17:39 上传
可以看到这两者的区别是值得的。这是调用了10000次的测量结果。 写一个Manager 我写了一个非常简单的管理类命名为Boxmanager,用来管理BoxManaged脚本。Manager主要负责两个事情:1.保持被管理的物体的更新。2.当Manger的Update函数被调用时,在被管理物体中的类似Update的函数也要被调用。 代码写起来应该是像这样的: [C#] 纯文本查看 复制代码 ? 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 using UnityEngine; using System.Collections; using System.Collections.Generic; public class BoxManager : MonoBehaviour { public static BoxManager Instance { get ; private set ; } public List<BoxManaged> _managedBoxes = new List<BoxManaged>(); void Awake() { Instance = this ; } void Update() { // update objects here } public void Register(BoxManaged box) { _managedBoxes.Add(box); } public void Unregister(BoxManaged box) { _managedBoxes.Remove(box); } } 看起来很简单吧,在实现Update函数之前,先看一下BoxManaged.cs [C#] 纯文本查看 复制代码 ? 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 using UnityEngine; public class BoxManaged : MonoBehaviour { private Vector3 _position; private Transform _transform; void OnEnable() { BoxManager.Instance.Register( this ); } void OnDisable() { BoxManager.Instance.Unregister( this ); } public void ManagedUpdate() { // do what you normally do in Update here } } 在Enable时注册,在Disable时注销。ManageredUpdate函数将会取代“魔法函数”的Update()。我们来实现BoxManager.Update(),这样所有的BoxManaged.ManagedUpdate()都将立刻会被调用。 [C#] 纯文本查看 复制代码 ? 1 2 3 4 5 6 void Update() { for ( int i = 0; i < _managedBoxes.Count; ++i) { _managedBoxes[i].ManagedUpdate(); } } 就是这样啦!现在,在ManagerUpdate()函数中,你可以做任何原本需要在update中要做的事情。请注意,我并没有使用foreach循环。首先,它回产生少量的垃圾。其次,foreach本身就慢。 需要在意这些细节吗? 这主要取决于你所开发游戏的类型以及平台。问问你自己 –是不是有很多MonoBehaviour 对象的Update()函数被调用?它不需要Update(),或许它可以是挂在每一帧的任何东西。然后,如果是在移动平台,那就非常值得去试试!如果是PC端呢?仍然要考虑一些事情,特别是有大量的Object的时候。 有时候也需要manager,即使只是有少量的物体。在IOS的OnRender()函数上曾有一个问题(不知道现在是否已经修复)。30 ~40个物体会降低两倍的游戏性能!解决方案?一个类似前面提到的Manager,但不同的是调用的是OnRender()而不是Update()。这样是可以的。 记住,这是很多的优化策略中你可以使用的一种。这种策略非常隐蔽 –除非你非常了解它,否则你要发现它真的很困难。这就是这篇博客存在的原因。 引申阅读: https://blogs.unity3d.com/2015/12/23/1k-update-calls/ 原文作者:Tweets by @KnightsOfUnity 原文连接:http://blog.theknightsofunity.com/monobehavior-calls-optimization/ 扫描下方二维码关注 游戏蛮牛 官方微信~每日都有精选干货与你分享哟~155547iluo7umxezrb2ekr.png (57.7 KB, 下载次数: 0)
下载附件 保存到相册
2017-5-31 17:53 上传
