如何使用SetActive改變場景中物件Active狀態,並分辨activeSelf /activeInHierarchy確認物件Active狀態時的差別。
要在腳本中設定物件的Active狀態,你可以使用SetActive函式。
SetActive函式可以在場景中切換物件的Activate狀態,在以下的範例裡,我們在Start函式下寫一條簡單的程式碼gameObject.SetActive(false)。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class ActiveObjects : MonoBehaviour { void Awake() { gameObject.SetActive(false); } }接著執行Unity時,你可以看到表示物件Active狀態的打勾被取消,場景物件消失,Hierarchy視窗下字體顯示也變淡了,表示此物件處於一個未被啟動的狀態。
而物件Active狀態被取消後,需要注意有父子關係的物件,當父物件Active狀態為off(場景中名為P的物件),我們可以看到Hierarchy視窗下的子物件(場景中名為C的物件)會跟著父物件顯示相同的狀態,不過可以看到子物件的屬性欄位狀態是打勾的。
但是在場景中可以看到子物件確實消失了,代表子物件實際Active狀態的確是off,是會隨著父物件改變,接著我們使用以下腳本來看看activeSelf /activeInHierarchy的差別:
using System.Collections; using System.Collections.Generic; using UnityEngine; public class CheckState : MonoBehaviour { public GameObject myObject; void Start() { Debug.Log("Active Self: " + myObject.activeSelf); Debug.Log("Active in Hierarchy" + myObject.activeInHierarchy); } }activeSelf為true,代表這個函式用來表示物件的Active狀態是否打勾。
activeInHierarchy為false,代表這個函式用來表示物件在Hierarchy視窗下實際的Active狀態。
這次是用SetActive切換物件狀態,想的簡單一點就是設為off整個物件就從場景中消失,包含在它階層下的子物件,這次就到這裡。
沒有留言:
張貼留言