【发布时间】:2015-07-13 00:52:07
【问题描述】:
基本上,我正在尝试针对移动设备优化 Unity 游戏。因此,必须控制 CPU 使用率。由于这是一个复杂的游戏,许多脚本相互引用(以及它们的 GameObjects)。目前,我使用GameObject.FindGameObjectWithTag(Tag tag) 来引用其他游戏对象、组件和脚本。我也知道这可以通过使用编辑器中的拖放来使用公共变量来完成。但是我知道哪个 GameObject 将被放入每个级别,我发现第一个选项更易于使用,因为拖放会导致多次错误并且使用起来很乏味。然而,这不会是一个问题,我觉得其中一个或另一个的表现超过了这些后备。我想知道这两种方法在性能方面是否存在差异,哪一种更适合高性能、移动方面。
【问题讨论】:
-
最好简单测试一下。我知道那是平庸的“自己动手!”建议,但如果您将自己的代码与您自己的(其他)代码进行基准测试,您将获得针对您的特定场景的最可靠和最准确的信息。
-
@DanielHoffmann-Mitscherling 实际上我就是这么做的。我最初使用拖放方法,但由于代码导致非常混乱,包含许多不必要的(在我看来无论如何)公共变量,我选择使用 FindGameObject 选项。但是,我不知道我是否只是偏执,因为从一个到另一个有一个小的变化。我只是好奇是否有一个“正确”的答案,如果你愿意的话。
-
基准测试。使用 FindWithTag 和您的其他方法计时一些循环。看看哪个更快。
-
@Chris 是的,这基本上就是我所做的。我用两种方法查看了时间和游戏的帧速率。在查看分析器时,我发现 FindWithTag 选项得到了更好的优化,但具有讽刺意味的是,我认为 FPS 可能更倾向于拖放方法。这就是为什么我不知所措并想知道最后一条评论中是否有“已接受”的答案。
-
使用带有 [SerializeField] 标签的私有变量不是更好吗?
标签: c# performance mobile unity3d unity5