基本上,我正在尝试为移动设备优化 Unity 游戏。因此,必须控制 CPU 使用率。由于这是一个复杂的游戏,许多脚本相互引用(以及它们的 GameObjects)。目前,我正在使用GameObject.FindGameObjectWithTag(Tag tag)
引用其他游戏对象、组件和脚本。我也知道这可以通过使用编辑器中的拖放来使用公共变量来完成。但是我知道哪个 GameObject 会被放入每个关卡,我发现第一个选项使用起来更简单,因为拖放会导致多次错误并且使用起来很乏味。但是,这不是问题,我觉得其中一个或另一个的表现胜过这些后备。我想知道这两种方法在性能方面是否存在差异,哪一种更适合高性能、移动方面。
问问题
4910 次
2 回答
3
FindGameObjectWithTag()
O(n)
在最坏的情况下具有复杂性。如果场景中有少量对象并且少量对象搜索带有标签的对象,则不会出现性能问题。
另一种方法是在脚本中序列化这些对象并使用它们。使用这种方法,您可以减少 CPU 使用率并增加内存使用率,因为场景中不存在元对象,或者您没有为它们分配内存。
如果可能的话,我建议您使用第三种方法。在 Google 和 YouTube 上搜索 Singleton 模式。如果它始终为 1,它允许您对该对象进行引用,而无需每次都尝试使用FindGameObjectsWithTag()
... 查找它,从而导致 CPU 和内存使用量非常小。
于 2021-01-15T11:19:03.413 回答
2
根据我的经验,您最好的选择是创建一个公共变量,如果在您需要时没有分配它,请使用您的 FindGameObjectWithTag 方法,或者您之前找到它,将其存储在该公共变量中,这样您只需进行查找一次。只要您不执行 FindGameObjectWithTag 每一帧,查找命中应该不会太糟糕。
于 2015-07-13T01:22:44.500 回答