小白_Unity引擎_訪問組件--GameObject.Find()和transform.Find();


 

創建物體,腳本掛載到Cube2上

   #region 通過 GameObject.Find(""):查找游戲對象
     
        
        //1.通過名稱查找游戲對象
        obj = GameObject.Find("Cube1");
        obj.GetComponent<MeshRenderer>().material.color = Color.red;

        //2.查找Cube1的子節點 Cube2, find游戲對象名稱都可以找到
        obj = GameObject.Find("Cube2");
        obj.GetComponent<MeshRenderer>().material.color = Color.black;

        //3.可以直接查找游戲對象的路徑,可以查找同名的游戲對象,可以通過路徑來區分
        obj = GameObject.Find("Cube1/Cube2");
        obj.GetComponent<MeshRenderer>().material.color = Color.blue;
        
        //4.如果同一個節點下有幾個相同的名稱的游戲對象,會查找到層級面板Hierarchy中最后的同名游戲對象
            //通過遞歸的方法查找物體,返回層級面板中最后查找的物體
        obj = GameObject.Find("Cube");
        obj.GetComponent<MeshRenderer>().material.color = Color.red;
       

 總結:GameObject.Find(""):查找游戲對象
         * 1.可以查找任何層級的物體,不受腳本所綁定的物體層級位置的影響
         * 2.可以指定層級查找,也可以不用指定層級去查找
         *      若指定層級,則會在對應的層級中查找
         *      若不去指定層級,則會在所有層級中查找(名稱不能重復)
         * 3.如果沒有指定層級,而查找的物體是多個相同名稱的物體,則會查找到Hierarchy面板中列表的最后一個的同名物體
         * 4.不支持查找隱藏的物體

 

 1  #region transform.Find(); 查找游戲對象
 2     
 3         //腳本掛載在Cube2上
 4         ///1.可以查找到子節點游戲物體
 5         ///2.可以查找到全路徑的游戲物體
 6         //1.查找Cube1
 7         //tran = transform.Find("Cube1");//查找不到
 8         //tran = transform.Find("Cube2");//查找不到
 9         //tran = transform.Find("Cube3");//查找到了
10        // tran = transform.Find("/Cube1/Cube2"); //查找了
11         tran = transform.Find("/Cube");//查找到
12         tran.gameObject.GetComponent<MeshRenderer>().material.color = Color.red;
13 
14         #endregion

        
  transform.Find(); 查找游戲對象
         * 1.只能查找到子集的物體
         * 2.如果想查找其他層級(同級或者父級)的物體,則需要使用完整路徑進行查找
         * 3.支持查找隱藏的物體
     

Transform獲取子節點

 

 1         #region 通過父物體查找子物體
 2         //注意: 只能獲取到自己子節點,不可以獲取到子節點的子節點
 3         Transform tran = GameObject.Find("Cube1").transform.FindChild("Cube2").FindChild("Cube3");
 4 
 5         //獲取父節點
 6         Transform parentTran =   GameObject.Find("Cube3").transform.parent.parent;
 7 
 8         //parentTran.childCount;有幾個子節點
 9         for (int i = 0; i < parentTran.childCount; i++)
10         {
11             parentTran.GetChild(i).name = i+"";
12         }
13         
14         
15         #endregion
通過父節點獲取子節點

 

通過Tag獲取游戲對象

 1         #region 通過標簽查找子節點
 2 
 3         //1.獲取CubeTag 標記的游戲對象(單個)
 4         GameObject obj = GameObject.FindWithTag("CubeTag");
 5 
 6         obj = GameObject.FindGameObjectWithTag("CubeTag");
 7         //獲取CubeTag 標記的所有游戲對象,並存放放到一個數組中返回
 8         GameObject[] objs = GameObject.FindGameObjectsWithTag("CubeTag");
 9 
10 
11         #endregion
通過tag獲取節點

 

通過Type獲取節點

 1         #region 通過Type類型查找物體
 2         //Object.FindObjectOfType
 3         //Object.FindObjectsOfType
 4         //返回Type類型的所有激活的加載的物體列表
 5         //它將返回任何資源(網格,紋理, 預設,,,,)或激活的物體
 6         //注意這個函數是非常慢的。不推薦在每幀使用這個函數,大多數情況下可以使用單例模式代替
 7 
 8 
 9         //獲取所有有碰撞器的物體
10         Collider[] cols = GameObject.FindObjectsOfType(typeof(Collider)) as Collider[];
11         foreach (Collider item in cols)
12         {
13             item.isTrigger = true; //所有的觸發器打開
14         }
15 
16 
17         #endregion
通過Type獲取節點

 


免責聲明!

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



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