c# - Unity 3d - 标签或重载函数?

标签 c# unity-game-engine

我有一个理论问题: 我有 2 个场景,银河系和太阳系。每个场景调用GUI相关函数来显示当前选择的对象。星系将传递一个 GameoOject,它本质上是一个 GalicateItem 预制件,而 SolarSystem 将传递一个 GameObject SolarSystemItem 预制件。我的团队对解决这个问题的方法进行了一些讨论:

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

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

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

谢谢

编辑 1:

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

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

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

最佳答案

Is there a performance benefits of using one method vs the other?

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

Is there a maintenance issue of using strings/tags (method 1) to be concerned about? IE: imagine I have to rename the tag for SolarSystem prefab from "SolarSystem" to "StellarObject". Now I have to change code in every place it references "SolarSystem" as a string to "StellarObject". This is a risk, because there is a chance a programmer will miss something and it will not be caught at compilation time.

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

Is Method 1 really is a proper way to use tags? Or are tags there only to id a specific object via GameObject.FindWithTag?

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

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

关于c# - Unity 3d - 标签或重载函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26736682/

相关文章:

c# - MVC 3 Razor 模型未更新 : 'Model' does not contain a definition for 'PropertyName'

c# - 统一来自相机的光线转换

c# - Unity3D在C#中的Vector3声明

c# - 如何将特定页面限制为证书身份验证?

c# - Orderby C# 字符串记录

c# - 在 Outlook VSTO 加载项下显示带有 WPF 窗口的对话框

c# - 我的 if 语句不起作用。我做错了什么?

ios - Xcode 和 Unity 缺少库 'lGoogleUtilities'

android - Google Play 服务 - API 版本 6 太高

c# - 如何在 Dapper 中为多映射支持命名列?