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

编程入门 行业动态 更新时间:2024-10-22 19:24:38

Unity查找<a href=https://www.elefans.com/category/jswz/34/1765220.html style=物体的四大主流方法及区别"/>

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

GameObject.Find()
Transform.Find()
GameObject.FindGameObjectsWithTag()
FindObjectsOfType()

不少新人在刚接触unity查找物体的方法时,因为没有认识到几种查找物体方法它们之间的区别,而遇到bug 即“空引用异常”报错,我在这里说明一下它们的区别,供大家参考。同时这几种方法也没有绝对的好与坏,每种方法都有其适合使用的一些情况。

GameObject.Find()

优点:

  • 使用简单方便
  • 不会因为重名而报错,同时查找的是自上而下的第一个物体

缺点

  • 不能查找被隐藏的物体,否则出现“空引用异常”,这是很多新人在查找出现空引用bug的原因。
  • 全局查找(遍历查找),查找效率低,很消耗性能。

代码演示:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class GameObjectFind : MonoBehaviour {private GameObject thing;void Start () {thing = GameObject.Find("C4");thing.name = "thing";}
}

Transform.Find(),通过Transform组件查找子物体。

  • 用这个方法查找物体时,根节点一定要处于“显示”状态,不能被隐藏。
  • 用它查找孙物体及孙孙物体,一定要使用“绝对路径”,否则出现“空引用异常”。

代码演示:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class TransformFind : MonoBehaviour {private Transform m_Transform;private GameObject one;private GameObject two;void Start () {m_Transform = gameObject.GetComponent<Transform>();one = m_Transform.Find("D2").gameObject;two = m_Transform.Find("D2/D3").gameObject;Debug.Log(one.name);Debug.Log(two.name);}
}

GameObject.FindGameObjectWithTag()和GameObject.FindGameObjectsWithTag(),通过Tag标签查找物体。

GameObject.FindGameObjectsWithTag():通过Tag标签查找到一组物体,返回一个数组。
GameObject.FindGameObjectWithTag():查找到这类tag标签,自上而下第一个物体。

代码演示:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class TagFind : MonoBehaviour {private GameObject thing;private GameObject[] things;void Start () {things = GameObject.FindGameObjectsWithTag("Player");thing = GameObject.FindGameObjectWithTag("Player");Debug.Log(things.Length);Debug.Log(thing.name);}	
}

FindObjectsOfType()

FindObjectsOfTypeAll():返回指定类型的对象列表。

代码演示:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class FindObjectOfType : MonoBehaviour {private GameObject[] things;private GameObject thing;void Start () {things = FindObjectsOfType<GameObject>();thing = FindObjectOfType<GameObject>();Debug.Log("第一个" + thing.name);for(int i = 0; i < things.Length; i++){Debug.Log(things[i].name);}	}
}

其他方法

有一种方法,即使根节点被隐藏也能查找,大家自行百度。

喜欢的话可以关注我!别忘了点赞哦

更多推荐

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

本文发布于:2023-07-28 18:41:01,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1277444.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:物体   区别   主流   方法   Unity

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!