unity中场景特效优化

在美术制作场景的过程中,会使用到大量的粒子系统。比如场景中的火把。在我们的一个地下城场景中,美术们放置了大量的火把。整个场景中的各个地方,有100来个火把。

unity中,在摄像机范围外的粒子系统虽然不会被绘制。但是update是一直持续的。这也就意味着,这100多个火把,不论是否可见都在更新。

这个设计应该是很不合理的,在我看过的其他引擎中,都会有一个开关,来控制不可见的粒子系统是否需要update。有的粒子系统在不可见的时候需要更新,比如爆炸。有的不需要更新,比如火堆火把。

为了避免不必要的update开销,尤其是最后游戏是要发布到页游平台(web player只能使用一个cpu的核)。于是写了一个脚本,控制不可见的粒子系统就不更新。

该脚本主要是用到了2个MonoBehaviour的函数。OnBecameInvisible() 当变为不可见   和   OnBecameVisible() 当变成可见。 

要这2个函数起作用的前提是,该GameObject绑定了MeshRender组件。所以,我们要在粒子系统的GameObject放置在一个GameObject  下,且给该GameObject绑定一个MeshRender 与 MeshFilter。MeshFilter中的mesh可以随便找个cube。

在Start() 的时候,把最GameObject的scale设置为很小,以保证该cube不被看见。其实遍历所有的child,把active设置为false。

OnBecameVisible 中 遍历所有child,把active设置为true。

OnBecameInvisible中 遍历所有child,把active设置为false。

你可能感兴趣的:(性能优化,unity3d)