這是我參與8月更文挑戰的第6天,活動詳情查看:8月更文挑戰markdown
一篇小白也能看懂的查找遊戲物體的方式解析 -- Unity 之 查找物體的幾種方式(二)。本文經過實際測試得出使用結論,你們進行簡單記錄,在使用時想不起來能夠再來看看,多用幾回基本就沒有問題了。ide
查找掛載物體父級,同級,子級物體:post
void TransformFind()
{
// 找父級
Transform parent = transform.Find("Root");
Debug.Log("找父級物體,是否找到:" + (parent != null));
// 找同級
Transform selfObj = transform.Find("Parent_1");
Debug.Log("找同級物體,是否找到:" + (selfObj != null));
// 找子級
Transform child = transform.Find("Child");
Debug.Log("找子級物體,是否找到:" + (child != null));
// 找子級隱藏物體
Transform childHide = transform.Find("ChildHide");
Debug.Log("找子級隱藏物體,是否找到:" + (childHide != null));
}
複製代碼
找多層級子物體:測試
// 找二級子物體
Transform child_1 = transform.Find("Child_1_1");
Debug.Log("找二級子物體 參數只寫名稱,是否找到:" + (child_1 != null));
// 找二級子物體
Transform child_1_1 = transform.Find("Child/Child_1_1");
Debug.Log("找二級子物體 參數寫全路徑,是否找到:" + (child_1_1 != null));
複製代碼
Find()得出結論:ui
通過測試和GameObject.FindObjectOfType()
沒什麼區別,測試結果一致,測試代碼和截圖就不發處理佔地方了。spa
測試時我發現 GameObject.FindObjectsOfType<類型>()
和Transform.FindObjectsOfType<Transform>()
被合併了,應該說徹底是一個方法了,根據下圖能夠看到,我雖然前打的是Transform
的標籤,可是它是灰色的,鼠標放上去看到方法引用的倒是GameObject.FindObjectsOfType
。3d
得出結論: Transform.FindObjectOfType() 和 GameObject.FindObjectOfType()使用方式同樣,結果也沒有區別...code
Transform.GetChild()
是找子物體的方法,也是我我的比較喜歡用的方式,弊端是不能隨意修改遊戲物體的層級關係。orm
使用起來也很簡單 好比:找一級子物體的第一個物體索引
Transform child1 = transform.GetChild(0);
複製代碼
找一級子物體的第一個物體的第三個子物體
Transform child1 = transform.GetChild(0).GetChild(2);
複製代碼
使用方式:幾個層級就幾個GetChild()
,參數就是當前層級的第幾個物體(從0開始)
使用拓展:
for (int i = 0; i < transform.childCount; i++)
{
Debug.Log(transform.transform);
}
複製代碼
獲取當前物體的父物體transform.parent
獲取當前物體的根物體transform.root
transform.GetChild()使用總結:
transform.parent.parent
的形式無限向上,而後再GetChild()
,就達到了查找父層級或更高層級物體的目的好了本文就介紹這裏了,感謝你觀看至此。若對你有所幫助,但願能夠三連支持下。若你還相關問題沒有獲得解決或者更好的處理方案,也但願你留言評論。
Unity基礎 之 查找遊戲物體的幾種方式解析(一):juejin.cn/editor/draf…