【Unity】利用代码查找Active为False的物体
前言
在使用Unity进行开发,我们经常需要让一些代码和对应的物体/组件关联,而大多数开发者会选择直接在编辑器界面通过拖拽来完成这个操作
这个方法简单又简便,但就本人的一点经验而言,有以下弊端
1.有些时候重复拖拽非常麻烦
2.没办法在运行中解决绑定的需求,这一点在切换场景的时候特别容易造成错误
因此,拖拽是有极限的,所以我选择代码
利用代码绑定的方法很多(见文章末尾附录),其中有一个小问题就是如何查找Active为False的物体
如果我们使用一般的方法(直接GameObject.FindXXX系列指令),是无法获得Active为False的物体的
本文就旨在解决利用代码查找Active为False的物体这个问题
Transform.Find
使用
答案就是使用Transform.Find()
方法,transfor可以通过曾经关系来查找到active为false的节点
唯一需要注意的是,Transform.Find()进行的是逐层查找,也就是说只能找到子物体,而不能找到孙物体
当我们想要找到孙物体的时候,只能一级一级往下拨
例子
如果,比如此时我们想获得”UI”下的”TextBackGround”物体(可以看到此时它Active == false)
于是我们需要写下(前后文略):
1 | public GameObject theDialog ; |
此时我们完成了”找到UI物体”->”在“UI”下寻找其子物体”的操作
这里我是由于”UI”这个物体还有用,因此这么写,你也可以尝试直接一步到位
1 | theDialog = (GameObject.Find("UI")).transform.Find("TextBackGround").gameObject ; |
如果根节点/父节点也是false怎么办
建议直接建个空的gameObject放它们…然后把它设置为Active = true
然后“空gameObjetc” -> “根物体” -> “子物体”
如果不想这么干,就需要使用:
1 | UnityEngine.SceneManagement.SceneManager.GetActiveScene().GetRootGameObjects(); |
就不在这里赘述了,如何使用可以详见官方手册,很详细
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 RetenQ的博客!