unity中查找对象的五种方法

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

  1. 通过对象名称(Find方法)
  2. 通过标签获取单个游戏对象(FindWithTag方法)
  3. 通过标签获取多个游戏对象(FindGameObjectsWithTags方法)
  4. 通过类型获取单个游戏对象(FindObjectOfType方法)
  5. 通过类型获取多个游戏对象(FindObjectsOfType方法)

Find方法:
static GameObject  Find  (string  name )
传入的name可以是单个的对象的名字,也可以是hierarchy中的一个路径名,如果找到会返回该对象(活动的),如果找不到就返回null。
var cubeF = GameObject.Find("/CubeFather");
if (null != cubeF)
{
	Debug.Log("find cube father~");
}
cubeF = GameObject.Find("CubeFather");
if (null != cubeF)
{
	Debug.Log("find cube father, no /~");
}

var cubeS = GameObject.Find("/CubeFather/CubeSon");
if (null != cubeS)
{
	Debug.Log("find cube son~");
}
cubeS = GameObject.Find("CubeFather/CubeSon");
if (null != cubeS)
{
	Debug.Log("find cube son, no /~");
}
cubeS = GameObject.Find("CubeSon");
if (null != cubeS)
{
	Debug.Log("find cube son, no one /~");
}

结果如上,可见不论参数是对象名字还是对象的路径,只要对象存在都会查找到,但是建议最好是写详细的路径名例如CubeFather/CubeSon,这样的话,在unity查找的过程中会省很多事,效率高;另外不要在每一帧都执行的函数中调用该函数,可以看上图结果中会执行好多次,用到某个对象时可以在Start这种只执行一次的函数中定义变量获取Find的返回值,再在每帧都执行的函数中使用该变量即可~


FindWithTag方法:
static GameObject FindWithTag (string tag
返回一个用tag做标识的活动的对象,如果没有找到则为null。
var sphere = GameObject.FindWithTag("Sphere");
if (null != sphere)
{
	Debug.Log("Sphere~");
}
将hierarchy中某个对象的Inspector面板上面的Tag自定义一个,然后为其选择自定义(上述例子中用的Sphere)
,当然没有的话,利用下拉列表中的AddTag构建


FindGameObjectsWithTag方法:
static GameObject[] FindGameObjectsWithTag (string tag)
返回一个用tag做标识的活动的游戏物体的列表,如果没有找到则为null。具体代码略过~


FindObjectOfType方法:
static Object FindObjectOfType(Type type)
返回类型为type的活动的第一个游戏对象


FindObjectsOfType方法:
static Object FindObjectsOfType(Type type)
返回类型为type的所有的活动的游戏对象列表


注意:一定保证对象是active的才会找到
         为了效率高,一定要保证别在每帧都调用的函数中使用上述函数

  • 17
    点赞
  • 109
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值