ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Unity 查找物体对象

2022-01-25 20:36:29  阅读:140  来源: 互联网

标签:返回 对象 GameObject 物体 Unity 查找 --------------------- Find


unity中查找游戏物体是很寻常的操作,有较多的方法,如下:

unity中提供了获取对象的方法:

 

通过对象名称(Find方法)GameObject.Find

通过标签获取单个游戏对象(FindWithTag方法)

通过标签获取多个游戏对象(FindGameObjectsWithTags方法)

通过类型获取单个游戏对象(FindObjectOfType方法)

通过类型获取多个游戏对象(FindObjectsOfType方法)

--------------------

Find方法:

static GameObject Find (string name)

传入的name可以是单个的对象的名字,也可以是hierarchy中的一个路径名,如果找到会返回该对象(活动的),如果找不到就返回null。

注:无论传值是名字或则路径名,只有对象存在就能返回该对象。建议传具体的路径名,以防有多个相同名字的对象的情况。且当有多个相同名字的对象的时候,返回为查找到的第一个对象。另不建议在每一帧都执行的函数(如update,fixupdate...)中调用该函数, 可以在Start这种函数中定义变量获取返回值,在其他函数中使用。

注:

1.使用对象名的情况:可查找带不带脚本,不查找隐藏(隐藏为active=false)的物体对象,返回的不一定是要查找的对象(有多个名相同物体的情况下)

2.使用目录结构:可查找带不带脚本,能查隐藏,可以确定是要找的对象

注:如果路径查找中的任何一个父节点active=false,这个对象都将查找不到

---------------------------------------------------------------

对比:

transform.Find()

1.对象名 只能查当前对象下一级子目录的对象,也基本确定,可查找隐藏对象,根节点需可见

2.目录结构 可查找带不带脚本对象,可以查隐藏物体,可以确定是要找的对象

脚本示例:

1 GameObject.Find("GameObject"); 2 GameObject.Find("GameObject/ChildGameObject);

--------------------

总:使用目录结构进行查找较通过名字查询缩短了查询时间和范围,也更能确定对象,缺点是一旦路径或结构调整后,容易影响到程序。方便使用,但效率低下。

---------------------------------------------------------------

FindWithTag方法:

static GameObject FindWithTag (string tag)

返回一个用tag做标识的活动的对象,如果没有找到则为null。

tag设置:在hierarchy中选择对象,右侧的Inspector面板上面的选择Tag(可添加自定义:利用下拉列表中的AddTag创建)

 

---------------------

FindGameObjectsWithTag方法:

static GameObject[] FindGameObjectsWithTag (string tag)

返回一个用tag做标识的活动的游戏物体的列表,如果没有找到则为null。

---------------------

 

FindObjectOfType方法:

static Object FindObjectOfType(Type type)

返回类型为type的活动的第一个游戏对象

---------------------

 

FindObjectsOfType方法:

static Object FindObjectsOfType(Type type)

返回类型为type的所有的活动的游戏对象列表

 

 

注意:一定保证对象是active的才会找到

         效率问题,建议在初始函数中进行初始化

---------------------

对比:

Transform.Find

1.可以查找隐藏对象

2.支持路径查找

3.查找隐藏对象的前提是transform所在的根节点必须可见,即active=true

---------------------

Resources.FindObjectsOfTypeAll

返回指定类型的对象列表。主要用于编辑器中,eg。检测内存泄露、批量查找的功能等

---------------------

GameObject.Find("a"); // 相对路径查找

GameObject.Find("/a"); // 绝对路径查找

---------------------

即使隐藏root节点gameObject也能进行查找:

 

GetComponentsInChildren( typeof(Transform), true );

GetComponent<Transform>(true);

标签:返回,对象,GameObject,物体,Unity,查找,---------------------,Find
来源: https://www.cnblogs.com/guangzhiruijie/p/15844355.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有