育兒與兒童

Unity 與層次結構一起使用以保持專案的有序性。你可以使用編輯器在層次結構中為物件分配位置,但你也可以通過程式碼執行此操作。

育兒

你可以使用以下方法設定物件的父級

var other = GetOtherGameObject();
other.transform.SetParent( transform );
other.transform.SetParent( transform, worldPositionStays );

每當你設定變換父項時,它都會將物件的位置保持為世界位置。你可以通過為 worldPositionStays 引數傳遞 false 來選擇使此位置相對。 **

你還可以使用以下方法檢查物件是否是另一個轉換的子物件

other.transform.IsChildOf( transform );

生孩子

由於物件可以彼此成為父物件,因此你還可以在層次結構中找到子物件。最簡單的方法是使用以下方法

transform.Find( "other" );
transform.FindChild( "other" );

注意:FindChild 呼叫查詢引擎蓋

你還可以在層次結構的下方搜尋子項。你可以通過新增“/”來指定更深層次。

transform.Find( "other/another" );
transform.FindChild( "other/another" );

獲取孩子的另一種方法是使用 GetChild

transform.GetChild( index );

GetChild 需要一個整數作為索引,該整數必須小於總子計數

int count = transform.childCount;

改變兄弟姐妹指數

你可以更改 GameObject 子項的順序。你可以這樣做來定義子項的繪製順序(假設它們處於相同的 Z 級別和相同的排序順序)。

other.transform.SetSiblingIndex( index );

你還可以使用以下方法快速將兄弟索引設定為第一個或最後一個

other.transform.SetAsFirstSibling();
other.transform.SetAsLastSibling();

分離所有兒童

如果要釋放轉換的所有子項,可以執行以下操作:

foreach(Transform child in transform)
{
    child.parent = null;
}

此外,Unity 為此提供了一種方法:

transform.DetachChildren();

基本上,迴圈和 DetachChildren() 都將第一深度孩子的父母設定為 null - 這意味著他們沒有父母。

(第一個深度的孩子:直接變換的子變換)