在 Unity 5 中使用 .NET 4.5 代码

Posted

技术标签:

【中文标题】在 Unity 5 中使用 .NET 4.5 代码【英文标题】:Using .NET 4.5 code in Unity 5 【发布时间】:2015-05-18 17:16:34 【问题描述】:

我正在使用 Unity3D 版本 5 开发游戏。该游戏应使用已在 C# .NET4.5 引擎中编程的严格业务规则。使用 Xamarin/Mono,我们希望可以在 windows、android 等其他平台上使用它......

我尝试将引擎构建到 dll 中,并将其用作 Unity 中的托管插件。但是 Unity 使用旧版本的 Mono 编译整个游戏并且拒绝使用 .NET 4.5 dll。

我确实需要使用此代码,我考虑将其降级到 .NET 3.5,但考虑到引擎上已经完成的工作,这不是一个可接受的解决方案。

关于 android,我认为使用 Xamarin 来获取原生 android 代码并将其用作 Unity 中的原生插件。现在我需要一个适用于 Windows 的解决方案。我正在寻找在 C++ 中使用 C# 代码制作非托管 dll 的方法,但我正在努力理解 COM 互操作、C++/CLI 或其他方法之间适用的方式。

有没有人知道在 Unity 中包含 .NET 4.5 的代码而无需/很少努力的方法?

【问题讨论】:

你必须让你的类库成为 PCL 类库 @Ewan :在我看来 Unity 不接受 PCL 用于 Windows8/8.1 应用程序以外的任何其他应用程序。此外,仅 .NET 4.0+ 支持 PCL 您是否将它与 win 8 的新 .net 核心内容混淆了?我在 iphone xamarin 上完成了单声道的 PCL 工作,您需要安装单声道框架才能定位它 您将无法使用 .net 4.5 功能,但如果它只是您的核心逻辑,您不应该使用 当我在 Visual Studio 中创建 PCL 项目时,我可以选择 Xamarin.Android 作为目标等,但如果我希望它适用于 Windows,我将需要 .NET 目标,而不是建议在 4.0 下。此外,PCL 限制了可用组件,我使用 XmlDocument 或 Tasks 之类的东西。这就是为什么我需要 .NET 4.5 而不能简单地编译为 3.5。 【参考方案1】:

Unity 似乎正在升级到 4.6+ 并且现在提供测试版

https://forum.unity3d.com/threads/upgraded-mono-net-in-editor-on-5-5-0b4.433541/

【讨论】:

截至2017年6月的现状:forum.unity3d.com/threads/…【参考方案2】:

使用 Visual Studio 插件:unmanaged exports,我已经能够将 C# .NET 4.5 导出到可以在 Unity 引擎中使用的非托管/本机 dll。 这迫使只调用简单的函数,但只需很少的工作,我就可以封装我的引擎的核心。

【讨论】:

您在引擎中使用dynamicAsync / Await 等吗?如果是,请提供一些如何包装它的提示 一个月前在一个专业项目中,我无法再访问代码了。但如果我没记错的话,我在代码中有 Async/Await,但不需要通过包装调用它们,所以它非常简单。 所以,只要你在更新循环中检查一些传入命令的集合(我想集合必须被锁定)并在“另一端”与订阅者一起生成一些消息,这就是全部好的?应用程序计划在哪些平台上运行(或正在运行)? 很抱歉,我无法准确回忆起我们做了什么或没有成功做什么。但最终由于各种原因我们不得不切换到 .NET 3.5,兼容性问题就是其中之一。【参考方案3】:

简短的回答是否定的。

根据official blog post 的说法,Unity 具有“.NET 2.0/3.5 时代的功能”。

根据同一篇文章,Unity 的未来版本将升级为“.NET 的现代版本”,但没有给出这项重大任务的时间表。

注意:此答案是针对问题的原始版本而编写的,即是否可以直接在 Unity 中使用 .NET 4.5 库。

【讨论】:

你说简短的回答是否定的。但长篇大论是什么?我真的需要使用这段代码,我考虑将它降级到 .NET 3.5,但考虑到引擎上已经完成的工作,这不是一个可接受的解决方案。关于 android,我认为使用 Xamarin 获取原生 android 代码并将其用作 Unity 中的原生插件。现在我需要一个适用于 Windows 的解决方案。我正在寻找在 C++ 中使用 C# 代码制作非托管 dll 的方法,但我正在努力理解 COM 互操作、C++/CLI 或其他方法之间适用的方式。 即使您可以降级到 3.5,也不能保证它会起作用,因为 Unity 没有完整的 3.5 支持。 Unity 确实支持本机 Windows 调用,但如何将您的库转换为 Windows 本机,恐怕我不知道。祝你好运! 谢谢,我正在编辑问题以更准确。 @Warrows - 关于 Stack Overflow 的友好提示。最好小心以这种方式编辑问题,从根本上改变问题,因为它可能使现有答案(如我之前接受的答案)不完整甚至是错误的。这意味着其他用户可能会认为我的回答不好,并且可能会投反对票。 @Warrows - 另外,我认为在这种情况下,如果您提出关于如何将 C# 库转换为 Windows 本机代码的单独、更具体的问题,您可能更有可能获得具体的帮助。关于“很少/没有努力”的问题的问题在于它含糊不清,一些用户甚至可能会投票结束您的问题,因为“太宽泛了”。

以上是关于在 Unity 5 中使用 .NET 4.5 代码的主要内容,如果未能解决你的问题,请参考以下文章

Unity 4.5:让角色开始触摸触发的动画

在 C# .NET 4.5 中使用 SAML 2.0

.net 4.5 中可绑定的 WPF Richtextbox

在 .net 4.5 中尝试使用 HttpClient 使 cookie 无法响应

可以从 Team Foundation Server 2010 构建代理运行 .NET 4.5 代码分析吗?

使用 .NET 2.0 在 XP 上运行 .NET 4.5 程序 [关闭]