找到GameObject的更好(和更便宜)的方法?

时间:2019-02-01 09:29:38

标签: performance unity3d

我很困惑,希望有人能给我一些建议:)

就性能而言,找到游戏对象的“便宜”方式是什么?

1)

locTopicsListAdapter.notifyItemInserted(0);

2)

public GameObject myGO;

3)

GameObject myGO = this.transform.parent.GetChild(0).GetChild(0).gameObject;

4 个答案:

答案 0 :(得分:1)

如果您可以在一开始就在编辑器中为引用分配一个公共变量,则为100%,就是那个。

如果需要动态查找,请存储参考以供以后使用,因此只需查找一次即可。

答案 1 :(得分:0)

1是最快的,因为您的变量中已有引用。无需计算。

在2中,您有几个参考重定向,这很快。您还可以通过函数调用来获取第零项,这也应该足够快。我会说这是第二好的。

在3中,Unity在场景中的游戏对象中寻找名称。我不知道实现细节-除非它们进行某种哈希处理,否则将有许多字符串比较。无论哪种方式,这都感觉是最慢的一种。

但是,您不必担心此类代码的效率,除非您在一个帧中执行了数百次这样的代码。如果要提高游戏效率,请担心对象实例化。

答案 2 :(得分:0)

不建议使用Find方法,不仅因为性能成本高-基于必须在现场以特定方式命名的东西的代码是一种不良习惯。如果对象名称由于任何原因发生更改,您将无法找到对象。

答案 3 :(得分:0)

我避免存储引用的策略是使用父子方法(您的2种方式)(示例

https://docs.unity3d.com/ScriptReference/Transform-parent.html

https://docs.unity3d.com/ScriptReference/Transform.GetChild.html

)。

与“查找”相比,它速度很快,您无需存储引用。

确保1很快,但使用起来却不那么方便,这就是为什么我不总是使用它的原因。

PS。如果您需要获取主相机参考,还有更好的方法

https://docs.unity3d.com/ScriptReference/Camera-main.html