2019年8月9日 星期五

【Unity官方教學分享】啟動物件(Activating GameObjects)

網頁連結

如何使用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整個物件就從場景中消失,包含在它階層下的子物件,這次就到這裡。

沒有留言:

張貼留言

【自製小遊戲】水平思考猜謎(海龜湯)

遊戲連結 海龜湯的玩法是由出題者提出一個難以理解的事件,參與猜題者可以提出任何問題以試圖縮小範圍並找出事件背後真正的原因。但出題者僅能以「是」、「不是」或「沒有關係」來回答問題。 本遊戲蒐集各種論壇、平台的42個題目,提供給想玩海龜湯卻愁找不到題目的你們。 ...