Unity3D - GameObject.Find()vs Inspector Assignment性能

时间:2016-06-20 14:06:49

标签: c# performance unity3d

我正在为android制作pacman的移动克隆。一切都很好,但我想尽可能地优化我的游戏。

目前,在某些脚本中,我通过在我的脚本的GameObject函数中执行GameObject.Find()来查找Start(),如下所示:

void Start()
{
    ghosts      = GameObject.FindGameObjectsWithTag("Ghost");
    pacman      = GameObject.Find("Pacman");
    gameManager = GameObject.Find("Game Manager").GetComponent<GameManager>();
}

我的问题是,如果我为这些GameObject的检查员分配了一些变量而不是.Find(),那么性能会提高吗?

这是否会提高性能速度,或者看起来没有区别,好像我在.Find()函数中执行Start()一样?

显然如果在Update()中调用它会降低性能,因为脚本会尝试每帧都找到GameObject,但Start()函数只能搜索一次吗?< / p>

1 个答案:

答案 0 :(得分:6)

启动时这种事情的性能完全可以忽略不计,Inspector分配需要反序列化,而Find需要消息调度,两者都是缓慢的操作,如果您认为重要,请对其进行分析。

无论如何我会用

FindObjectOfType<GameManager>() as GameManager

至少更加类型安全,如果可能,我不会使用编辑器检查,因为手动布线是许多小错误的根源。所以我给出了一个人性化的表现理由:

不要使用编辑器检查,因为如果你错过了连接的东西,你将不得不调试一个nullpointer,从长远来看会耗费你的时间。

如果您不仅仅需要找到1个组件而没有解决方法(除非您使用Svelto或Svelto-ECS,它们是相当高级的主题),您无论如何都要使用Editor Insection。