每个游戏对象(GameObject),其存在于游戏世界,都有一个位置、朝向、大小等基本定位信息;其存于Hierarchy面板,也存在与其他GameObject的相对关系,如父子关系、兄弟关系。Unity中使用Transform来描述和操作这些属性。
Transform的字面理解就是“变换”的意思,所有的GameObject,当其被创建完成之后,均自动创建了这样一个变换组件,你不需要手动创建这个组件,而且无法删除此组件。
接下来,我们将变换组件的主要属性和功能一一进行解释。
3.3.1、层次相关的属性和方法
层次面板
childCount:代表当前GameObject节点下方有几个子节点
hierarchyCount:代表在当前GameObject所处的相互关联的树状结构中,存在的层次数目。
相互关联的树状结构指的是:以Hierarchy面板中的一个顶层GameObject作为根节点出发的一棵树。任何一个GameObject都会存在于一棵树中。
可以预想的是,这个树状结构中的任意一个节点的hierarchyCount属性都是相同的。hierarchyCapacity:代表当前所在的树的层次容量。就是这棵树最大可以容纳的节点数目,从整个树中的任意一个节点访问此属性,所获取的层次容量都是相同的。
这个参数是自动增长的,即当GameObject发生层次变动时,如果当前树的容量不足,会自动扩容。
可以推测出:树中所有节点所查询的结果实际来自最顶层节点的属性,而当层次所发生变动时,Unity内部只需要修改顶层节点的这个属性即可。
需要注意的是,当频繁变化hierarchyCapacity时,是需要带来额外的内存消耗和性能消耗的,这与List类的内存扩容是一个道理。因此,应该为频繁增长的树的根节点在一开始就设置一个比较大的容量。parent:代表当前节点的父节点,返回一个Transform对象。当此parent为null时,就代表自己已经是顶层节点,也即树状结构中的根节点了。
root:获得当前树状结构中的根节点。
DetachChildren():分离子节点,意思就是将当前节点下方的所有直接子节点都分离出去,让他们成为根节点。有n个子节点,将产生n棵新的树。
Find(string name):根据路径查找子节点,虽然这里的参数在文档上显示为name,但是它实际代表一个路径。它可以是"magazine/ammo"这种格式,即可以向着叶节点深度方向查询多个层次,找到目标Transform并返回。如果找不到返回空。
GetChild(int index):根据
