赞
踩
在 Hierarchy 视图中.
一个 game_scene场景.
下面有 MainCamera节点. Directional Light节点. game_root节点.
game_root节点下有:
如: Cube子节点. Sphere子节点.
组成了 game_scene场景树.
1 每个节点都有一个 Transform组件.
2 每一个继承自MonoBehaviour的组件. 都有一个数据成员. 指向这个节点的transform组件
// 可以通过任何一个组件来获得其所属节点的transfrom组件
通过this.transform获得.
3 每一个继承自MonoBehaviour的 组件 都有一个成员变量 gameObject. 指向组件实例所挂载的 场景节点对象 .
通过 this.gameObject获得.
Debug.Log(this.gameObject.name);//节点名字
Debug.Log(this.gameObject.layer);//节点所在层名字
Debug.Log(this.gameObject.tag);//节点的标记或标签值
Debug.Log(this.gameObject.activeSelf); // 自己这个属性是否可见,自己节点名字旁边的勾是否打了,结果是true或false
Debug.Log(this.gameObject.activeInHierarchy); // 自己在这个体系里面是否可见,也就是如果它的父节点设置为不显示,自己还是可见的,那么它的activeInHierarchy就是不可见,结果是true或false
this.gameObject.SetActive(true);//设置节点为可见
4 总结
一个节点上挂载的所有组件实例(包括 Transform组件). 都有一个数据成员 transform)
指向Transform组件.
所有的组件实例(包括Transform组件). 都有一个成员变量 gameObject
指向该节点.
所以. 经常使用 this.transform
和 this.gameObject
获得.
5 场景树的构成过程
每一个节点都有一个transform组件.
一个父transform组件下面有很多子transform组件.
而每一个transform组件都指向一个节点.
在transform组件构成transform时.
另一个方面也间接构成了节点树.
可以用transform组件,来访问或者获得节点下面的所有孩子节点
Transform trans = this.transform.Find("Cube");//找到孩子transform组件里节点名叫Cube的transform组件
GameObject cube= trans.gameObject;//通过Cube的transform组件再得到它的gameObject节点
Debug.Log(cube.name);//输出Cube节点名字
Transform trans = this.transform.FindChild("Sphere");
GameObject sphere= trans.gameObject;
Debug.Log(sphere.name);
多层节点查询需要些路径
this.transform.GetChild(0).gameObject.name;
//0代表第一个子节点的transform组件,1代表第二个,以此类推,性能比find好一些,但是我们通常用find
//查找一个父节点到底有多少个子节点,或者叫子transform组件
Debug.Log(this.transform.childCount);
每一个transform组件实例还有一个数据成员(parent)指向父节点的transform组件
MainCamera,Directional Light,game_root这些节点都是没有父节点的
他们的transform组件也没有父亲的transform组件
// 基于GameObject的查找,来找GameObject,全局查找,GameObject.Find静态函数
Debug.Log(GameObject.Find("game_root/Sphere/test").name);
基于Tag的全局查找,如果有多个节点的Tag是一样的,那么先找到的,先返回
查找的顺序好像不是是按顺序从上到下的,深的子节点反而先找到
Debug.Log(GameObject.FindWithTag("game_root").name);
Debug.Log(GameObject.FindWithTag("test").name);//多层嵌套的没关系,只要用自己的Tag查找就行了
// 如果有多个节点,都是同样的tag,会发生什么样的事情呢?
GameObject[] game_sets = GameObject.FindGameObjectsWithTag("test");//返回的是一个放着GameObject类型元素的数组
for (int i = 0; i < 2; i++) {
Debug.Log(game_sets[i].name);//先子后父
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。