Unity基础 之 查找游戏物体的几种方式解析(二)

这是我参与8月更文挑战的第6天,活动详情查看:8月更文挑战markdown

前言:

一篇小白也能看懂的查找游戏物体的方式解析 -- Unity 之 查找物体的几种方式(二)。本文经过实际测试得出使用结论,你们进行简单记录,在使用时想不起来能够再来看看,多用几回基本就没有问题了。ide

一,Transform.Find()

查找挂载物体父级,同级,子级物体:post

void TransformFind()
{
    // 找父级
    Transform parent = transform.Find("Root");
    Debug.Log("找父级物体,是否找到:" + (parent != null));
    
    // 找同级
    Transform selfObj = transform.Find("Parent_1");
    Debug.Log("找同级物体,是否找到:" + (selfObj != null));
    
    // 找子级
    Transform child = transform.Find("Child");
    Debug.Log("找子级物体,是否找到:" + (child != null));
    
    // 找子级隐藏物体
    Transform childHide = transform.Find("ChildHide");
    Debug.Log("找子级隐藏物体,是否找到:" + (childHide != null));
}
复制代码

TransformFind


找多层级子物体:测试

// 找二级子物体
Transform child_1 = transform.Find("Child_1_1");
Debug.Log("找二级子物体 参数只写名称,是否找到:" + (child_1 != null));
// 找二级子物体
Transform child_1_1 = transform.Find("Child/Child_1_1");
Debug.Log("找二级子物体 参数写全路径,是否找到:" + (child_1_1 != null));
复制代码

找二级子物体

Find()得出结论:ui

  1. 只能找其子物体,不能找其同级或更高层级物体
  2. 找子物体时不考虑是否被禁用(隐藏)
  3. 找多层子物体时需写全路径(不然即便存在也找不到)

二,Transform.FindObjectOfType()

通过测试和GameObject.FindObjectOfType()没什么区别,测试结果一致,测试代码和截图就不发处理占地方了。spa

测试时我发现 GameObject.FindObjectsOfType<类型>()Transform.FindObjectsOfType<Transform>() 被合并了,应该说彻底是一个方法了,根据下图能够看到,我虽然前打的是Transform的标签,可是它是灰色的,鼠标放上去看到方法引用的倒是GameObject.FindObjectsOfType3d

测试结果

得出结论: Transform.FindObjectOfType() 和 GameObject.FindObjectOfType()使用方式同样,结果也没有区别...code


三,transform.GetChild()

Transform.GetChild()是找子物体的方法,也是我我的比较喜欢用的方式,弊端是不能随意修改游戏物体的层级关系。orm

使用起来也很简单 好比:找一级子物体的第一个物体索引

Transform child1 = transform.GetChild(0);
复制代码

找一级子物体的第一个物体的第三个子物体

Transform child1 = transform.GetChild(0).GetChild(2);
复制代码

使用方式:几个层级就几个GetChild(),参数就是当前层级的第几个物体(从0开始)


使用拓展:

  • 遍历子物体:
for (int i = 0; i < transform.childCount; i++)
{
     Debug.Log(transform.transform);
}
复制代码
  • 获取当前物体的父物体transform.parent

  • 获取当前物体的根物体transform.root


transform.GetChild()使用总结:

  • 以自身为基础,查找子物体(注意索引从0开始,写多报错)
  • 可使用transform.parent.parent 的形式无限向上,而后再GetChild(),就达到了查找父层级或更高层级物体的目的
  • 弊端是依赖游戏物体的层级关系,使用时需确保层级关系相对稳定。若不稳定会致使每次修改游戏体时还要修改代码,这就加大了工做量了。

好了本文就介绍这里了,感谢你观看至此。若对你有所帮助,但愿能够三连支持下。若你还相关问题没有获得解决或者更好的处理方案,也但愿你留言评论。

Unity基础 之 查找游戏物体的几种方式解析(一):juejin.cn/editor/draf…

相关文章
相关标签/搜索