【问题标题】:Manually adding .NET 4.5 scripts to Unity: Potential issues?手动将 .NET 4.5 脚本添加到 Unity:潜在问题?
【发布时间】:2016-07-04 20:00:31
【问题描述】:

我最近不得不在 Unity 中进行一些工作,这些工作需要仅在更高版本的 .NET 中可用的类,而 Unity 尚不支持这些类。我设法下载了我丢失的极少数脚本并将其添加到我的项目中,它似乎工作正常。我想知道的是,为什么我不能直接将整个 .NET 源代码放入我的项目中?这样做有什么影响?

编辑:到目前为止,我添加的脚本是 WeakReference 的通用版本以及它所需的任何依赖项(System.Diagnostics.Contract 中的合同)。

编辑编辑:我基本上想知道为什么我不能简单地将 .NET 更高版本中的 C# 类文件转换为使用旧版本 .NET 的 Unity。是软件问题吗?是硬件问题吗?是不是因为Unity的系统组件是对应早期的.NET版本构建的?

【问题讨论】:

  • 您在脚本中特别利用了哪些 .NET 4.5 功能?您在这方面没有向我们提供很多详细信息,因此如果不过于宽泛,就不可能确定潜在问题。
  • Unity 使用非常旧的 Mono 构建,因此它不能很好地支持 .NET 4.5 配置文件。您只能安全地使用 .NET 4 兼容的东西。

标签: c# .net unity3d unity5


【解决方案1】:

简短回答:

安装Visual Studio Tools for Unity(它应该会在您安装 Unity 时自动安装),当您安装时,您可以在“目标框架”下拉列表中告诉您的 .csproj 以针对特定版本的 .NET Unity 使用而您只能编译具有 Unity 支持的方法和类型的 dll。


长答案:

这是因为 Unity 没有使用您计算机上已安装的 .NET 版本。 Unity 使用Mono,以及一个非常旧的版本。这允许统一在多个平台和操作系统上运行。因此,您只能使用受支持的 Mono 版本中的功能。

但是,如果您查看 at their roadmap alpha 版本,您将看到

脚本:C# 编译器升级
针对我们的升级 Mono C# 编译器 当前的 .Net 2.0 和 2.0 子集配置文件。请注意,这是升级 仅适用于 C# 编译器,而不是完整的 Mono 运行时

然后进入“研究”阶段

脚本:.NET 配置文件升级
将 .Net 配置文件升级到 4.6,从而可以访问最新的 .Net 功能和 API。


更新:

您可以从the stickied post here 获得使用 4.6 配置文件的实验版本。

这是5.6.0b5 beta release的注释

  • 对于这个版本,编辑器和以下玩家应该可以工作:
    • Windows、OSX、Linux 独立版
    • 带有 IL2CPP 的 iOS
    • 带有 IL2CPP 和 Mono 的 Android
  • 已知其他平台尚无法运行,可能不值得安装。
  • 此版本不支持通过 Visual Studio Tools for Unity 或 MonoDevelop 进行托管调试。如果你想使用 VSTU 编辑请使用底部链接的特殊版本 发布。
  • 编译器以 C# 6 语言为目标。
  • 编译器默认情况下仍将以 .Net 4.6 框架配置文件为目标。
  • 已知问题
    • Android/Mono 构建无法与托管代码剥离一起正常工作。请暂时禁用托管代码剥离。
    • 对于某些项目,Windows 独立播放器可能会在 Windows 8.1 上崩溃。这是间歇性的,所以我们希望看到任何崩溃 相关报告或数据

【讨论】:

  • 对于投反对票的人,请告诉我为什么您认为我的回答没有用,以便我更正它。
  • 既然 Mono 是一个 .NET 框架并且是为跨平台应用程序而设计的,它只包含 .NET 中完整类集的一个子集?因此,由于 Unity 是建立在 Mono 之上的,您只能使用 Mono 支持的类吗?
  • 正确,您只能使用 Mono Unity 使用的版本支持的类。现代 Mono 可以做很多 .NET 4.5,但 Unity 还没有使用现代 Mono,但它在他们的更新路线图上。
  • 谢谢,这就是我想知道的。
  • 截至2017年6月的现状:forum.unity3d.com/threads/…
【解决方案2】:

here 之前回答了类似的问题。就像我在你的另一个问题中描述的那样,你可以“注入”新的东西并使用它们,但迟早它们会适得其反(例如,不能编译到特定系统,可以编译但不能在任何移动商店中发布,出奇的慢执行、大型构建等。最坏的情况是您的项目会受到影响)。
如果您真的无法重构您正在处理的项目并且您觉得您必须使用“最新技术”,请记住注入的类代码必须是数据对象,也就是说,与GameObjects 完全不相关。
还建议在可能的时间和地点从ScriptableObject 派生。

编辑:但我会推荐我之前告诉你的内容(重构)或链接的内容答案描述(将与 mono/.net2.0 不兼容的代码“导出”到外部 dll 并从那里使用)

【讨论】:

    猜你喜欢
    • 2015-08-17
    • 2019-06-03
    • 1970-01-01
    • 1970-01-01
    • 2016-12-08
    • 1970-01-01
    • 2011-05-07
    • 2020-12-14
    • 1970-01-01
    相关资源
    最近更新 更多