有时,我们需要让场景中的某个物体,或是物体上的某个组件,暂时性地停止工作。比如我们想要制作一个暗门机关,当按下一个按钮的时候,墙面会暂时消失,隔一段时间才会恢复原样。
当然,你可以选择直接直接销毁墙面,这样也算是个暗门,但是销毁物体是非常浪费资源的一种做法,在这里我们完全可以只是让它暂时停止工作,而不是消灭它。想要做到这种功能,来看接下来的内容。
【1】控制组件的激活状态
如果我们仅仅是想要让一个游戏物体上的某个组件停止工作,我们可以使用enabled来控制组件的激活状态。例如:
1 public MeshRenderer mMesh; 2 3 void Update() 4 { 5 if(Input.GetKeyDown(KeyCode.Space)) 6 { 7 mMesh.enabled = false; 8 } 9 }
这样,这个组件就会暂时性地停止工作,直至开发者重新激活这个组件。当然,更简单的办法就是直接从Inspector面板中把对应组件取消勾选,那它也会停止工作。
【2】控制物体的激活状态
如果需要让整个物体都停止工作的话,就不能使用上文的那种方式了。对于GameObject,我们应该使用SetActive()来操作物体。例如:
1 void Start() 2 { 3 gameObject.SetActive(false); 4 }
当一个物体被关闭,其下所有的组件同样都不会工作。若一个父类物体被关闭,其子类同样会被关闭。同样,我们也可以直接操作Inspector面板来实现这个功能。
【3】相关的Unity函数
当物体激活或停止时,是可以触发一些生命周期函数的。例如:
- OnEnable():对象激活时调用。
- OnDisable():对象禁用时调用。
- OnDestroy():对象被销毁时调用。
配合这些Unity函数,就能够实现很多特定的功能。