创建物体,脚本挂载到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获取子节点
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
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获取游戏对象
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
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获取节点
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
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