gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 10:38:08 25 4
gpt4 key购买 nike

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

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

方法二:有一个重载函数:一个以 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com