C# Unity 3d-标签还是重载函数?

C# Unity 3d-标签还是重载函数?,c#,unity3d,C#,Unity3d,我有一个理论问题: 我有两个场景,银河系和太阳系。每个场景调用一个GUI相关函数来显示当前选定的对象。银河系将通过一个基本上是银河系预制件的游戏对象,而SolarSystem将通过一个游戏对象SolarSystemItem预制件。我的团队就解决这个问题的方法进行了一些讨论: 方法1: 标记每个预置,并在函数中使用If语句区分一个预置和另一个预置来执行其任务 方法2: 有一个重载函数:一个使用Galaxy预置作为参数,另一个使用SolarSystem预置 哪种方法更有意义?为什么 多谢各位 编辑1

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

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

方法2: 有一个重载函数:一个使用Galaxy预置作为参数,另一个使用SolarSystem预置

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

多谢各位

编辑1:

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

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

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

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

重载方法将更快,但在这种情况下,性能增益最小

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

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

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

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


我通常使用标签进行快速搜索
GameObject
,或者在层不够的情况下,为了区分碰撞等过程中的特定实例。

我可以想象(强调我还没有测试过这一点)重载该方法会降低运行速度,因为执行哪个方法将在编译时决定。对我来说,如果它们的呈现方式有明确的区别,代码也会更清晰。谢谢。就我个人而言,我正在使用重载函数推进方法2。一般来说,我对C#和.Net有很多经验,但我对unity非常陌生,所以我想知道我是否遗漏了一些关于标记的重要内容。