Unity 3d - 标签或重载功能?

时间:2014-11-04 13:45:09

标签: c# unity3d

我有一个理论问题: 我有2个场景,Galaxy和SolarSystem。每个场景调用GUI相关功能以显示当前选择的对象。 Galaxy将传递一个基本上是GalacticItem预制件的GameoOject,而SolarSystem将传递一个GameObject SolarSystemItem预制件。我的团队对如何解决这个问题进行了一些讨论:

方法1: 标记每个预制件并在函数中使用If语句区分一个预制件和另一个预制件以执行其任务

方法2: 有一个重载功能:一个带有Galaxy预制件作为参数,另一个带有SolarSystem预制件。

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

谢谢

修改1:

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

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

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

1 个答案:

答案 0 :(得分:2)

  

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

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

  

是否存在使用字符串/标签(方法1)的维护问题   关心? IE:想象一下我必须重命名SolarSystem的标签   预制从“SolarSystem”到“StellarObject”。现在我必须改变   代码在每个地方引用“SolarSystem”作为字符串   “StellarObject”。这是一种风险,因为有机会   程序员会错过一些东西而且不会被抓住   编译时间。

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

  

方法1是否真的是使用标签的正确方法?或者只有那里的标签   通过GameObject.FindWithTag?

来识别特定对象

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

我通常使用标记进行快速搜索GameObject,或者在图层不足时区分特定实例等等。