我有一个理论问题: 我有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
来识别特定对象?
答案 0 :(得分:2)
使用一种方法与另一种方法相比,是否有性能优势?
过载方法会更快,无论如何在这种情况下性能增益最小。
是否存在使用字符串/标签(方法1)的维护问题 关心? IE:想象一下我必须重命名SolarSystem的标签 预制从“SolarSystem”到“StellarObject”。现在我必须改变 代码在每个地方引用“SolarSystem”作为字符串 “StellarObject”。这是一种风险,因为有机会 程序员会错过一些东西而且不会被抓住 编译时间。
这正是主要问题。基本上,您使用字符串(tag
)来定义类型,而不是依赖于语言本身。这是一种不好的做法,容易出错和重构问题。
方法1是否真的是使用标签的正确方法?或者只有那里的标签 通过GameObject.FindWithTag?
来识别特定对象
无论出于何种原因,您都可以使用tags
。在我看来,这种用法是无用的,也是有问题的,因为你有更安全,有效,可维护的方式来代码隐含地做同样的事情。
我通常使用标记进行快速搜索GameObject
,或者在图层不足时区分特定实例等等。