在Unity里面我们创建了一个GameObject放在Hierarchy视图上,如果要隐藏该物体可以通过Inspector视图来设置,最顶上的选项,取消选中则隐藏物体。

当然在实际的游戏编程中,往往是需要通过脚本来控制物体的隐藏和显示的,下面来看看如何通过代码的方式来实现:
一、设置Renderer状态
在游戏的开发中,所有能够被渲染的物体都包含有一个Renderer组件,使用它可以将物体渲染到屏幕上,那么如果禁用了这一组件的话,自然也就实现了物体的隐藏。
gameObject.renderer.enabled :是控制一个物体是否在屏幕上渲染或显示 而物体实际还是存在的 只是想当于隐身 而物体本身的碰撞体还依然存在的
using UnityEngine; using System.Collections; public class test : MonoBehaviour { public Transform target; void Start(){ } void OnGUI(){ //renderer control if(GUILayout.Button("display")){ MeshRenderer[] marr = target.GetComponentsInChildren<MeshRenderer>(true); foreach(MeshRenderer m in marr){ m.enabled = true; } } if(GUILayout.Button("hide")){ MeshRenderer[] marr = target.GetComponentsInChildren<MeshRenderer>(true); foreach(MeshRenderer m in marr){ m.enabled = false; } } } }
二、设置Active
gameObject.active :是否在场景中停用该物体 在你gameObject.active =false中 则你在场景中用find找不到该物体,如果该物体有子物体 你要用SetActive(false) 来控制是否在场景中停用该物体(递归的)
void EnableDisable(GameObject what, bool activate) { #if UNITY_3_5 what.SetActiveRecursively(activate); #else what.SetActive(activate); #endif }
三、设置Layer
假设现有Layer为:
Default = 0,TransparentFX = 1,Ignore Raycase = 2,Water = 4,MyLayer = 8.
设置相机Camera的Culling Mask为:Default+TransparentFX+Ignore Raycase+Water.

那么当设置物体的Layer为MyLayer时候,物体的Layer层在当前相机被忽略,也就相当于隐藏。具体代码为:
using UnityEngine; using System.Collections; public class test : MonoBehaviour { void OnGUI () { if(GUILayout.Button("Display")){ gameObject.layer = LayerMask.NameToLayer("Default"); } if(GUILayout.Button("Hide")){ gameObject.layer = LayerMask.NameToLayer("MyLayer"); } } }
