在使用unity3d開發遊戲的過程中,我們常常會遇到需要隱藏或者顯示的操作,針對這一點,下面做了一些總結。
一、設置Renderer狀態
在遊戲的開發中,所有能夠被渲染的物體都包含有一個Renderer組件,使用它可以將物體渲染到屏幕上,那麼如果禁用了這一組件的話,自然也就實現了物體的隱藏。
下面就是實現這一功能的代碼:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | 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 ; } } } } |
在這裏我做了一個遍歷,因爲有的物體可能會有多個面片這種情況下就需要把物體的所有面片上的MeshRenderer全部禁用掉。但是也可能會有一些較爲複雜的渲染可能會有Trail Renderer,Line Renderer,Skinned Mesh Renderer,Mesh Renderer等,那就找到它,禁用/激活它來實現隱藏或顯示。
二、設置Active
unity4.x寫法:
1 2 | gameObject.SetActive( true ); //顯示物體 gameObject.SetActive( false ); //隱藏物體 |
unity3.x寫法:
1 2 | gameObject.SetActiveRecursively( true );顯示物體 gameObject.SetActiveRecursively( false );隱藏物體 |
unity4.x會保持當前物體子物體所有的狀態,unity3.x則是如果設置active爲true,所有子物體全部變爲true。 這也是unity升級後改進的一點。
三、設置Layer
假設現有Layer爲:
Default = 0,TransparentFX = 1,Ignore Raycase = 2,Water = 4,MyLayer = 8.
設置相機Camera的Culling Mask爲:Default+TransparentFX+Ignore Raycase+Water.
那麼當設置物體的Layer爲MyLayer時候,物體的Layer層在當前相機被忽略,也就相當於隱藏。具體代碼爲:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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" ); } } } |
以上各種方法謹供大家參考,在選用的時候要根據實際的情況來選用適合的方法來實現物體的隱藏與顯現。