每個游戲?qū)ο?GameObject),其存在于游戲世界,都有一個位置、朝向、大小等基本定位信息;其存于Hierarchy面板,也存在與其他GameObject的相對關(guān)系,如父子關(guān)系、兄弟關(guān)系。Unity中使用Transform來描述和操作這些屬性。
Transform的字面理解就是“變換”的意思,所有的GameObject,當其被創(chuàng)建完成之后,均自動創(chuàng)建了這樣一個變換組件,你不需要手動創(chuàng)建這個組件,而且無法刪除此組件。
接下來,我們將變換組件的主要屬性和功能一一進行解釋。
3.3.1、層次相關(guān)的屬性和方法
層次面板
childCount:代表當前GameObject節(jié)點下方有幾個子節(jié)點
hierarchyCount:代表在當前GameObject所處的相互關(guān)聯(lián)的樹狀結(jié)構(gòu)中,存在的層次數(shù)目。
相互關(guān)聯(lián)的樹狀結(jié)構(gòu)指的是:以Hierarchy面板中的一個頂層GameObject作為根節(jié)點出發(fā)的一棵樹。任何一個GameObject都會存在于一棵樹中。
可以預(yù)想的是,這個樹狀結(jié)構(gòu)中的任意一個節(jié)點的hierarchyCount屬性都是相同的。hierarchyCapacity:代表當前所在的樹的層次容量。就是這棵樹最大可以容納的節(jié)點數(shù)目,從整個樹中的任意一個節(jié)點訪問此屬性,所獲取的層次容量都是相同的。
這個參數(shù)是自動增長的,即當GameObject發(fā)生層次變動時,如果當前樹的容量不足,會自動擴容。
可以推測出:樹中所有節(jié)點所查詢的結(jié)果實際來自最頂層節(jié)點的屬性,而當層次所發(fā)生變動時,Unity內(nèi)部只需要修改頂層節(jié)點的這個屬性即可。
需要注意的是,當頻繁變化hierarchyCapacity時,是需要帶來額外的內(nèi)存消耗和性能消耗的,這與List類的內(nèi)存擴容是一個道理。因此,應(yīng)該為頻繁增長的樹的根節(jié)點在一開始就設(shè)置一個比較大的容量。parent:代表當前節(jié)點的父節(jié)點,返回一個Transform對象。當此parent為null時,就代表自己已經(jīng)是頂層節(jié)點,也即樹狀結(jié)構(gòu)中的根節(jié)點了。
root:獲得當前樹狀結(jié)構(gòu)中的根節(jié)點。
DetachChildren():分離子節(jié)點,意思就是將當前節(jié)點下方的所有直接子節(jié)點都分離出去,讓他們成為根節(jié)點。有n個子節(jié)點,將產(chǎn)生n棵新的樹。
Find(string name):根據(jù)路徑查找子節(jié)點,雖然這里的參數(shù)在文檔上顯示為name,但是它實際代表一個路徑。它可以是"magazine/ammo"這種格式,即可以向著葉節(jié)點深度方向查詢多個層次,找到目標Transform并返回。如果找不到返回空。
GetChild(int index):根據(jù)