創建物體,腳本掛載到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
通過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