对象树结构
实际开发中,游戏场景中的各种游戏对象,经常是嵌套的。比如2DRPG游戏中主角需要实现换装,那么在贴图显示的部分,除了角色素体,还需要为各种装备留出插槽,表现在Unity编辑器中,就是一个嵌套成树形结构的游戏对象。其实这种树形结构在传统GUI软件中也非常常见,HTML就是典型的例子。我们知道在前端领域,有JQuery这种神器,能够花式操作HTML的DOM树。Unity中,也提供了一系列API,能够实现对游戏对象树结构的增删改查。
Unity中,GameObject
本身是没有嵌套关系的,游戏对象的嵌套关系通过Transform
组件来表达,对游戏对象树的操作,也是围绕Transform
组件展开的。
查找子节点
transform.Find()
可以用来查找一个子节点。
public Transform Find(string n);
n
:游戏对象名,可以是带/
的形式,表示从对象的树结构路径
ammo = gun.transform.Find("magazine/ammo");
遍历子节点
Transform本身是可迭代的,我们直接遍历一个Transform即可遍历该组件的子节点了。
foreach (Transform trans in this.transform)
{
Debug.Log(trans.gameObject.name);
}
获取和设置父节点
有时我们需要改变一个游戏对象的父节点,这可以通过修改tranform.parent
实现。
例子代码:
Transform cube1Trans = this.transform.Find("Child1");
Transform cube2Trans = this.transform.Find("Child2");
cube2Trans.parent = cube1Trans;
上面代码中,我们将Child2
变更为了Child1
的子节点。
兄弟节点相关操作
对于同一层级的游戏对象,我们transform.GetSiblingIndex()
能够获取当前节点对象在所属层级的序号。
public int GetSiblingIndex();
同理,transform.SetSiblingIndex()
能够起到设置当前节点对象在层级中顺序的作用。
public void SetSiblingIndex(int index);
transform.SetAsFirstSibling()
和transform.SetAsLastSibling()
能够更直接的修改节点对象的顺序,将当前节点对象置于第一个位置或是最后一个位置。
public void SetAsFirstSibling();
public void SetAsLastSibling();
作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。