Unity 查找物體對象


unity中查找游戲物體是很尋常的操作,有較多的方法,如下:

unity中提供了獲取對象的方法:

 

通過對象名稱(Find方法)GameObject.Find

通過標簽獲取單個游戲對象(FindWithTag方法)

通過標簽獲取多個游戲對象(FindGameObjectsWithTags方法)

通過類型獲取單個游戲對象(FindObjectOfType方法)

通過類型獲取多個游戲對象(FindObjectsOfType方法)

--------------------

Find方法:

static GameObject Find (string name)

傳入的name可以是單個的對象的名字,也可以是hierarchy中的一個路徑名,如果找到會返回該對象(活動的),如果找不到就返回null。

注:無論傳值是名字或則路徑名,只有對象存在就能返回該對象。建議傳具體的路徑名,以防有多個相同名字的對象的情況。且當有多個相同名字的對象的時候,返回為查找到的第一個對象。另不建議在每一幀都執行的函數(如update,fixupdate...)中調用該函數, 可以在Start這種函數中定義變量獲取返回值,在其他函數中使用。

注:

1.使用對象名的情況:可查找帶不帶腳本,不查找隱藏(隱藏為active=false)的物體對象,返回的不一定是要查找的對象(有多個名相同物體的情況下)

2.使用目錄結構:可查找帶不帶腳本,能查隱藏,可以確定是要找的對象

注:如果路徑查找中的任何一個父節點active=false,這個對象都將查找不到

---------------------------------------------------------------

對比:

transform.Find()

1.對象名 只能查當前對象下一級子目錄的對象,也基本確定,可查找隱藏對象,根節點需可見

2.目錄結構 可查找帶不帶腳本對象,可以查隱藏物體,可以確定是要找的對象

腳本示例:

1 GameObject.Find("GameObject"); 2 GameObject.Find("GameObject/ChildGameObject);

--------------------

總:使用目錄結構進行查找較通過名字查詢縮短了查詢時間和范圍,也更能確定對象,缺點是一旦路徑或結構調整后,容易影響到程序。方便使用,但效率低下。

---------------------------------------------------------------

FindWithTag方法:

static GameObject FindWithTag (string tag)

返回一個用tag做標識的活動的對象,如果沒有找到則為null。

tag設置:在hierarchy中選擇對象,右側的Inspector面板上面的選擇Tag(可添加自定義:利用下拉列表中的AddTag創建)

 

---------------------

FindGameObjectsWithTag方法:

static GameObject[] FindGameObjectsWithTag (string tag)

返回一個用tag做標識的活動的游戲物體的列表,如果沒有找到則為null。

---------------------

 

FindObjectOfType方法:

static Object FindObjectOfType(Type type)

返回類型為type的活動的第一個游戲對象

---------------------

 

FindObjectsOfType方法:

static Object FindObjectsOfType(Type type)

返回類型為type的所有的活動的游戲對象列表

 

 

注意:一定保證對象是active的才會找到

         效率問題,建議在初始函數中進行初始化

---------------------

對比:

Transform.Find

1.可以查找隱藏對象

2.支持路徑查找

3.查找隱藏對象的前提是transform所在的根節點必須可見,即active=true

---------------------

Resources.FindObjectsOfTypeAll

返回指定類型的對象列表。主要用於編輯器中,eg。檢測內存泄露、批量查找的功能等

---------------------

GameObject.Find("a"); // 相對路徑查找

GameObject.Find("/a"); // 絕對路徑查找

---------------------

即使隱藏root節點gameObject也能進行查找:

 

GetComponentsInChildren( typeof(Transform), true );

GetComponent<Transform>(true);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM