【问题标题】:3D Classes in a 2D Unity Game2D Unity 游戏中的 3D 类
【发布时间】:2016-08-27 19:06:16
【问题描述】:

我有很多为 3D 游戏编写的 Unity 脚本,这些脚本在 2D 游戏中很有用,我真的不想重新发明轮子将它们添加到该游戏中。所以我的问题是,我可以在 2D 游戏中使用我当前的 3D 游戏脚本(使用 Vector3s 并调用 Physics.Raycast()、Physics.Gravity 等)(其中所有游戏对象都有 2D 组件,如 Collider2D 和 Rigidbody2D 等)其他脚本会调用 Physics2D.Raycast()、Physics2D.Gravity 等)吗?我猜我 可以 做到这一点,但它会是愚蠢的低效,所以我不妨重新实现 2D 类。但我想我会先问。

感谢您的帮助!

【问题讨论】:

  • 你可以没问题。享受。这不是“愚蠢的低效”; 99% 的游戏几乎没有接近性能极限。在实践中,您会发现在大多数情况下修改为“2D”类很容易(而且很有趣!)。
  • @Joe Blow。谢谢你的回答!将所有内容修改为 2d 类是我实际上试图避免的。我已经为 3d 游戏编写了大量脚本,我不想花时间复制所有脚本,只是为了将每个 Vector3 更改为 Vector2 等。此外,这些 3d 脚本仍在开发中,因此创建 2d 副本需要每次更改两次。您只是建议我将所有 3d 脚本修改为 2d,还是我实际上必须这样做才能使它们在 2D 游戏中工作?

标签: unity3d game-physics 2d-games unity3d-2dtools


【解决方案1】:

就像乔的评论一样,你可以。不会有任何问题,因为 Unity 2D 函数将采用 vector2D 并且当 Vector3D 传入其中时,z 轴将被丢弃。

我的建议是为 3D2D 使用相同的脚本,因为这样可以让一切更容易使用。例如,当您在 3D 脚本中进行大的游戏逻辑更改时,您必须在 2D 脚本中做同样的事情。当您想对 2D 或 3D 代码进行故障排除时,这也是一个很大的痛苦。这是应该使用C# Preprocessor Directives 的地方。

#if USE2D
//Put your 2D specific API code
#else
//Put your 3D specific API code
#endif

现在,要测试 2D 代码,只需将 #define USE2D 放在代码顶部即可。当您想对 3D2D 代码进行故障排除时,这会很有帮助。您只需评论 #define USE2D 来测试3D 代码并取消评论 它来测试2D 代码。

【讨论】:

  • 哇,@Programmer,好主意!我从来没有想过使用条件编译。你知道 Unity 是否为此目的内置了任何#defines?
  • @Rabadash8820 Unity 确实有很多预处理器,但没有一个用于 2D/3D 的预处理器。您可以自行添加并在您想要构建 2D/3D 时启用它。请注意,您甚至可以使用[Conditional("USE2D")] 而不是#if USE2D,这样更简洁。有关这方面的更多信息,请参阅msdn.microsoft.com/en-us/library/4xssyw96(v=vs.90).aspx。有关 Unity 内置预处理器的更多信息,请参阅docs.unity3d.com/Manual/PlatformDependentCompilation.html。您甚至可以从编辑器中定义它。只需访问链接。
  • 很棒的链接,非常感谢您提供这个优雅的解决方案。我已将您的答案标记为正确答案!
猜你喜欢
  • 2016-06-22
  • 1970-01-01
  • 1970-01-01
  • 2022-08-19
  • 2016-11-29
  • 1970-01-01
  • 2014-08-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多