我正在为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>
答案 0 :(得分:6)
启动时这种事情的性能完全可以忽略不计,Inspector分配需要反序列化,而Find
需要消息调度,两者都是缓慢的操作,如果您认为重要,请对其进行分析。
无论如何我会用
FindObjectOfType<GameManager>() as GameManager
至少更加类型安全,如果可能,我不会使用编辑器检查,因为手动布线是许多小错误的根源。所以我给出了一个人性化的表现理由:
不要使用编辑器检查,因为如果你错过了连接的东西,你将不得不调试一个nullpointer,从长远来看会耗费你的时间。
如果您不仅仅需要找到1个组件而没有解决方法(除非您使用Svelto或Svelto-ECS,它们是相当高级的主题),您无论如何都要使用Editor Insection。