我很困惑,希望有人能给我一些建议:)
就性能而言,找到游戏对象的“便宜”方式是什么?
1)
locTopicsListAdapter.notifyItemInserted(0);
2)
public GameObject myGO;
3)
GameObject myGO = this.transform.parent.GetChild(0).GetChild(0).gameObject;
答案 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