在美术制作场景的过程中,会使用到大量的粒子系统。比如场景中的火把。在我们的一个地下城场景中,美术们放置了大量的火把。整个场景中的各个地方,有100来个火把。
unity中,在摄像机范围外的粒子系统虽然不会被绘制。但是update是一直持续的。这也就意味着,这100多个火把,不论是否可见都在更新。
这个设计应该是很不合理的,在我看过的其他引擎中,都会有一个开关,来控制不可见的粒子系统是否需要update。有的粒子系统在不可见的时候需要更新,比如爆炸。有的不需要更新,比如火堆火把。
为了避免不必要的update开销,尤其是最后游戏是要发布到页游平台(web player只能使用一个cpu的核)。于是写了一个脚本,控制不可见的粒子系统就不更新。
该脚本主要是用到了2个MonoBehaviour的函数。OnBecameInvisible() 当变为不可见 和 OnBecameVisible() 当变成可见。
要这2个函数起作用的前提是,该GameObject绑定了MeshRender组件。所以,我们要在粒子系统的GameObject放置在一个GameObject 下,且给该GameObject绑定一个

本文探讨了Unity中大量粒子系统对性能的影响,特别是摄像机范围外仍在更新的问题。通过编写脚本利用OnBecameInvisible()和OnBecameVisible()函数,当粒子系统不可见时停止更新,以减少不必要的CPU开销,适应页游平台的性能需求。实现方法是将粒子系统放在带有MeshRender和MeshFilter组件的游戏对象下,并在适当时机调整子物体的活跃状态。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



