Unity 查找物体对象

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);

原文地址:https://www.cnblogs.com/allyh/p/10987126.html

时间: 2024-10-08 22:20:58

Unity 查找物体对象的相关文章

Unity查找物体的四大主流方法及区别

GameObject.Find()优点: 使用简单方便不会因为重名而报错,同时查找的是自上而下的第一个物体缺点 不能查找被隐藏的物体,否则出现“空引用异常”,这是很多新人在查找出现空引用bug的原因.全局查找(遍历查找),查找效率低,很消耗性能.代码演示: using System.Collections;using System.Collections.Generic;using UnityEngine; public class GameObjectFind : MonoBehaviour

【Unity游戏开发之四】GameObject.Find()、Transform.Find查找隐藏对象

GameObjectFindTransformFind查找游戏对象 前置条件 相关API 1 GameObjectFind 2 TransformFind 3 其他查找 实际测试 即使隐藏root节点gameObject也能进行查找的方法 GameObject.Find().Transform.Find查找游戏对象 1.前置条件 Unity中常用到查找对象,非隐藏的.隐藏的,各种方法性能有高有低,使用又有各种条件限制. 在此对查找的性能和条件进行分析.开发时遇到的主要问题是查找隐藏对象. 没有完

Unity GameObject.FindObjectOfType&lt;&gt;(); 按类型查找游戏对象

FindObjectOfType<>()   是按类型查找游戏对象.<>里面填写类型,那要是有多个这种类型的呢?来试一下. 1. 新建一个场景,新建一个Test.cs脚本,内容随便,再新建一个Test02.cs脚本,内容如下: using System.Collections; using System.Collections.Generic; using UnityEngine; public class Test02 : MonoBehaviour { public Test

unity3D中GameObject.Find()、Transform.Find查找隐藏对象分析(转)

GameObject.Find().Transform.Find查找游戏对象 1.前置条件 Unity中常用到查找对象,非隐藏的.隐藏的,各种方法性能有高有低,使用又有各种条件限制. 在此对查找的性能和条件进行分析.开发时遇到的主要问题是查找隐藏对象. 没有完美的查找方法,只有最合适的查找方法 最后附带上测试代码 2.相关API GameObject.Find Transform.Find GameObject.FindWithTag GameObject.FindGameObjectsWith

Unity 实现物体破碎效果(转)

感谢网友分享,原文地址(How to Make an Object Shatter Into Smaller Fragments in Unity),中文翻译地址(Unity实现物体破碎效果) In this tutorial I will show you how to create a simple shattering effect for your Unity game. Instead of just "deleting" a crate (or any other obje

opencv2对读书笔记——使用均值漂移算法查找物体

一些小概念 1.反投影直方图的结果是一个概率映射,体现了已知图像内容出如今图像中特定位置的概率. 2.概率映射能够找到最初的位置,从最初的位置開始而且迭代移动,便能够找到精确的位置,这就是均值漂移算法做的事情. 3.均值漂移算法是以迭代的方式锁定函数的局部最大值的. 关于均值漂移算法的过程(opencv) 事实上均值漂移算法就是寻找提前定义寻找区域中数据点的重心,或者说加权平均值.将寻找区域中心移动到数据点的重心处,并反复这个过程直到寻找区域重心收敛到一个稳定点. OpenCV中定义了两种终止条

windows中根据进程PID查找进程对象过程深入分析

这里windows和Linxu系列的PID 管理方式有所不同,windows中进程的PID和句柄没有本质区别,根据句柄索引对象和根据PID或者TID查找进程或者线程的步骤也是一样的. 句柄是针对进程而言,也就是句柄一定所属于某个进程,为某个进程私有的资源.句柄的分配来自于进程私有的句柄表.而进程PID和线程TID和句柄的分配原理是一样的,但是来源就不同了.进程PID来源于系统中一张全局的句柄表PSpcidtable.从级别上来说Pspcidtable和进程对象eprcess中的objecttab

js:面向对象,Document对象:查找元素对象,修改元素,事件

面向对象编程 面向对象的编程,那么是更符合人类所接触的世界的逻辑思维. 将一个系统划分为各个子系统,子系统又由各个模块构成,将每个模块,系统划分为一个个对象,给这些对象赋予某些角色(属性/功能/方法). 伪面向对象编程语言 ---> 面向对象编程语言 1.创建对象的方式 (1) 字面量的方式 //字面量的形式 var student = { name:"蔡徐坤", type:"练习生", like:"唱跳rap篮球", rap:functi

unity查找场景中所有物体

代码很简单就一句话,至于你想怎么用再往里面加东西就好 //查找场景中所有的物体 foreach (GameObject objj in UnityEngine.Object.FindObjectsOfType(typeof(GameObject))) { Debug.Log(objj.transform.name); } 原文地址:https://www.cnblogs.com/qq2351194611/p/11423827.html