声明:此篇文章是个人学习心得,并非教程。不保证百分百正确,仅供参考。如有错误,欢迎指出。谢谢!
目录
刚学Unity时候,知道SetActive能够隐藏游戏物体,从此不管三七二十一,想要看不见物体,全部SetActive(False)解决。直到前阵子才发现,想要性能优化的话,物体显隐其实并不是用SetActive。当然,没有数据口说无凭。以下是在Profiler下的测试数据
显隐游戏物体的三种方式
1.使用SetActive的API
2.使用位置移动
3.更改摄像机渲染不到的标签显隐游戏物体
总结
从上面的数据我们可以很直观的看到,SetActive的性能消耗是远远大于另外两个方法的。(Profiler面板不管是最低峰的运行时间还是最高峰运行时间都是远远大于另外两个显隐方法)SetActive这么消耗性能其实是因为每次激活关闭游戏物体,都会导致其挂载的组件重新调用(例如MeshRenderer要重新渲染游戏物体),脚本要执行一次OnEnable或OnDisable的生命周期函数。而上面测试中只有一个物体,并没有挂载脚本。假设游戏物体有子物体,并且都挂载脚本。那么性能就会消耗更多。
效率方面:移动位置=更改标签<SetActive。再从安全面分析,移动位置可能会导致一些意料不到的错误。所以最好的经常显影方式是更改游戏物体的标签。