在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"); } } }