FindGameObjectWithTag(Tag Tag)与在Unity中为游戏对象使用公共变量的性能对比

本文关键字:Tag 变量 性能 对象 与在 Unity 游戏 FindGameObjectWithTag | 更新日期: 2023-09-27 18:02:24

基本上,我正在尝试针对移动设备针对Unity优化游戏。因此,必须包含CPU使用情况。因为这是一款复杂的游戏,所以许多脚本会相互引用(以及它们的GameObjects)。目前,我使用GameObject.FindGameObjectWithTag(Tag tag)来引用其他游戏对象、组件和脚本。我还知道,这可以通过在编辑器中使用拖放来处理公共变量。但因为我知道每个关卡会放入哪个GameObject,所以我发现第一个选项更容易使用,因为拖放会多次导致错误,而且使用起来很乏味。然而,这不会是一个问题,我觉得其中一个或另一个的性能超过了这些回落。我想知道这两种方法在性能方面是否存在差异,以及哪一种方法更适合高性能,移动方面。

FindGameObjectWithTag(Tag Tag)与在Unity中为游戏对象使用公共变量的性能对比

最坏情况下FindGameObjectWithTag()的复杂度为O(n)。如果你的场景中有少量的对象,并且少量的对象搜索有标签的对象,你就不会有性能问题。

另一种方法是在脚本中序列化这些对象并使用它们。使用这种方法,您可以减少CPU使用并增加内存使用,因为场景中不存在元对象,您可以为它们分配内存。

如果可能的话,我建议采用第三种方法。在Google和YouTube上搜索Singleton模式。它允许你对那个对象有一个引用,如果它一直是1,而不是每次都试图用FindGameObjectsWithTag()找到它……

根据我的经验,您最好的选择是创建一个公共变量,如果它在需要时没有分配,请使用您的findameobjectwithtag方法,或者无论您之前找到它,将其存储在该公共变量中,因此您只需要进行一次查找。只要你不是每一帧都使用FindGameObjectWithTag,查找结果应该不会太糟糕。