Unity 3d-标签或重载功能

本文关键字:重载 功能 标签 3d- Unity | 更新日期: 2023-09-27 18:28:58

我有一个理论问题:我有两个场景,银河系和太阳系。每个场景调用一个与GUI相关的函数来显示当前选择的对象。银河系将经过一个GameoO项目,该项目本质上是一个GalacticItem预制件,而SolarSystem将通过一个GameObject SolarSystemItem预制件。我的团队就解决这个问题的方法进行了一些讨论:

方法1:标记每个预制件,并在函数中有一个If语句,区分一个预制件和另一个,以完成其任务

方法2:有一个重载函数:一个以Galaxy预制为参数,另一个以SolarSystem预制为参数。

哪种方法更有意义,为什么?

谢谢

编辑1:

使用一种方法与另一种方法相比是否有性能优势?

是否存在使用字符串/标签(方法1)的维护问题需要关注?IE:想象一下,我必须将SolarSystem预制标签从"SolarSystem"重命名为"StellarObject"。现在,我必须在它引用"SolarSystem"作为"StellarObject"字符串的每个地方更改代码。这是一个风险,因为程序员可能会错过一些东西,而且在编译时不会发现。

方法1真的是使用标签的正确方法吗?还是标签只是通过GameObject.FindWithTag识别特定对象?

Unity 3d-标签或重载功能

使用一种方法与另一种方法相比是否有性能优势?

过载方法会更快,无论如何,在这种情况下性能增益是最小的。

是否存在使用字符串/标签(方法1)的维护问题关心IE:想象一下我必须为SolarSystem重新命名标签预制从"太阳系"到"恒星物体"。现在我必须改变它引用"SolarSystem"作为字符串的每个地方的代码"恒星物体"。这是一种风险,因为程序员会错过一些东西,它不会在编译时间。

这正是主要问题。基本上,您使用字符串(tag)来定义类型,而不是依赖于语言本身。这是一种糟糕的做法,容易出现错误和重构问题。

方法1真的是使用标签的正确方法吗?或者只有标签通过GameObject.FindWithTag识别特定对象?

无论出于何种原因,都可以使用tags。在我看来,这种使用是无用的,也是有问题的,因为您有更安全、高效、可维护的方法来通过代码隐式地完成同样的事情。

我通常使用标签来快速搜索GameObject,或者在层不够的情况下,在冲突等过程中区分特定实例。。