| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 游戏开发 -> Unity获取场景中物体的方法详解,以及如何获取active为false的根节点 -> 正文阅读 |
|
[游戏开发]Unity获取场景中物体的方法详解,以及如何获取active为false的根节点 |
下面以如下的测试场景作为例子,进行说明。此时测试的脚本是挂载在TestNode1上 一、GameObject.Find(string param) 根据名字查找 最常用的方法是GameObject.Find,这里参数可以填物体的名字,并且是全局搜索,与脚本所在的节点并没有关系,比如下面直接查找TestNode111和TestNode22,均可以找到对应的点
但是由于这个方法查找的是全局的物体,所以当物体比较多的时候会消耗较大的性能,所以不要过于频繁地调用。还有要注意的一点是,如果场景中存在同名节点的话。这里只会返回找到的第一个节点,所以要避免重名的情况。 还有就是GameObject.Find参数为物体名时,无法找到active为false的节点,可以尝试将TestNode111的active设为false,可以看到这时候就无法找到这个节点了 根据路径查找 参数还可以填路径,这里的路径可以是绝对路径和相对路径,通过路径来寻找节点的消耗,会比直接根据物体名称要低,节点结构还是如下 绝对路径是以"/"开头或者物体名字开头,并且场景名称是不在这个路径里面。比如查找TestNode111这个点。 绝对路径应该填GameObject.Find("/TestNode1/TestNode11/TestNode111") 如果填的是GameObject.Find("/TestScene/TestNode1/TestNode11/TestNode111")或者GameObject.Find("TestScene/TestNode1/TestNode11/TestNode111")都是无法查找到对应节点的。 相对路径的时候需要以物体的name开头,而不能以"/"开头 比如GameObject.Find("TestNode11/TestNode111") 查找成功 而GameObject.Find("/TestNode111")查找失败
在用绝对路径找active为false的时候,如果被查找的节点active为false,而父节点active为true,还是可以找到这个节点的。结果如下 ? ?用相对路径查找,则无法找到active为false的节点 而当他的父节点active也为false的时候查找就会失败,结果如下 ? 二、GameObject.FindWithTag GameObject.FindWithTag的逻辑跟GameObject.Find基本相同,同样是全局查找。跟GameObject根据名字查找的功能类似,只不过查找的是根据Tag属性,而且同样无法找到active为false的节点。 ?三.Transform.Find transform.Find是查找挂载脚本节点的子节点,并且只能找到孩子节点,直接Find孙子是无法找到的。如果想要找到孙子节点,就需要逐级地去调用Find函数。并且transform.Find也可以找到active为false的节点,下面是直接查找孩子节点和孙子节点的结果
?四、获取active为false的根节点的方法 因为transform可以通过层级关系查找active为false的节点。所以用transform.Find基本可以找到场景里的所有节点。对于不在这个Transfrom的节点树上的根节点,比如例子中的TestNode2,如果active为true,也可以直接用GameObject.Find来查找。 但是这里面还包含一种特殊的情况,就是不在同一个节点树上,active为false的根节点,下图中的TestNode2是active为false的根节点。 这时候有两种方法 UnityEngine.SceneManagement.SceneManager.GetActiveScene().GetRootGameObjects() Resources.FindObjectsOfTypeAll(typeof(GameObject)) 代码如下
可以看到下方的结果,两种方法都可以顺利到找到TestNode2 ? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/27 17:43:30- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |