【100个 Unity小知识点】 | Unity两种获取游戏对象的方法,GameObject.Find 和 Transform.Find区别

在这里插入图片描述

Unity 小科普

老规矩,先介绍一下 Unity 的科普小知识:

  • Unity是 实时3D互动内容创作和运营平台 。
  • 包括游戏开发美术建筑汽车设计影视在内的所有创作者,借助 Unity 将创意变成现实。
  • Unity 平台提供一整套完善的软件解决方案,可用于创作、运营和变现任何实时互动的2D和3D内容支持平台包括手机平板电脑PC游戏主机增强现实虚拟现实设备。
  • 也可以简单把 Unity 理解为一个游戏引擎,可以用来专业制作游戏

Unity 小知识点学习

GameObject.Find 和 Transform.Find区别

在Unity中最常用的获取游戏对象的方法就是 GameObject.Findtransform.Find

这两种方法都是通过 游戏对象名称 来查找游戏对象的。

public static GameObject Find(string name);
public Transform Find(string name);

GameObject.Find 遍历整个当前场景,挨个查找,效率偏低,非特殊情况一般不要使用。

Transform.Find 只查找自己本身以及自己的子对象,效率比较高,用途比较大。

一般来说他俩有个最大的区别就是

  • Transform.Find 可以获取处于 激活/非激活状态 的游戏对象,返回值类型是Transform 类型。
  • GameObject.Find 只能获取处于 激活状态 的游戏对象,返回值类型是一个GameObject类型。

在层级面板中变灰的就是处于非激活的对象
此时使用 Transform.Find可以获取游戏对象 c,但是GameObject.Find 是没法获取到该对象的

在这里插入图片描述

所以一般来说需要获取游戏对象的时候使用Transform.Find即可。

当然也可以使用 Public拖拽 的方式手动获取游戏对象,性能方面差异跟Transform.Find不是特别大,所以注意代码规范即可。

Public拖拽 的优点在于少写代码,直接将游戏对象拖上去即可
但是如果出现代码丢失修改之类的情况时,可能无法正确找到使用Public拖拽 对应的游戏对象。

Transform.Find 的缺点是不便修改层级关系,一旦改变了场景中对象的层级关系,代码也会出现报错问题。

之前一直把 GameObject.FindTransform.Find 搞混了,此篇博客记录一下,避坑踩雷。

相关文章

实现Unity AssetBundle资源加载管理器 AssetBundle是实现资源...
Unity3D 使用LineRenderer绘制尾迹与虚线 1.添加LineRendere...
Unity 添加新建Lua脚本选项 最近学习Unity的XLua热更新框架的...
挂载脚本时文件名和类名的关联方式 写过Unity脚本的人应该都...
Unity单例基类的实现方式 游戏开发的过程中我们经常会将各种...
这篇文章主要介绍了Unity游戏开发中外观模式是什么意思,具有...