[英]Unity - UWP: How to import dll/nuget-package/references to my project
语境
我得到了这个uwp 演示项目,它使用了这个sdk 。 sdk 适用于 Windows UWP C#。 运行它的解决方案可以正常工作,它会做它应该做的事情。 现在我想在我的unity项目中使用它,该项目是为ar眼镜HoloLens设置的(在unity中选择uwp作为构建平台)。
-------------------------------------------------- -------------------------------------------------- --------------------------------
问题
如何在我的统一项目中使用演示项目中的 dll?
-------------------------------------------------- -------------------------------------------------- --------------------------------
我试过的
1.我从演示项目的构建目录中取出dll并将它们导入统一。 我创建了一个文件夹Assets\Plugins
并将其放在那里。 尝试通过using Kinemic.Gesture
使用它时出现错误error CS0246: The type or namespace name 'Kinemic' could not be found (are you missing a using directive or an assembly reference?)
我还尝试通过 using 添加引用参考管理器并从 pluing 文件夹中获取 dll,但后来我收到了以下通知:
2.我拿了nuget-package,把格式改成.zip,这样我就可以解压,把dll取出来了。 但我只有目标:
3.我通过在unity中打开一个脚本在visual studio中打开了我的unity项目。 通过right click on solution → Add new project → Class Library (Universal Windows)
创建一个新项目。 这样我就可以通过 nuget 管理器添加 package :
我认为构建这个项目应该给我 dlls/references 但我得到的只是 Unity 中的这个错误:
-------------------------------------------------- -------------------------------------------------- --------------------------------
我的设置
统一2019.2.9f1
视觉工作室专业版 2019
在上面列出的试验中,将外部 DLL 添加到 unity 的唯一正确方法是第一种,其他所有方法都不会在运行时编译/构建或崩溃(保证)。
那么如何统一使用 UWP 库。
如果它显示类型:“托管”并针对一些 .NET xy,那么它就是。
1-2:同样,在第一个屏幕截图中,select 库,并编辑“包含平台”,仅选择 UWP(WSA 播放器)平台,包括编辑器在内的任何其他平台都不起作用。
1-3:构建您的项目,而不尝试使用库:
1-4:由于这是一个UWP库,并且没有统一的编辑器版本,你不会得到对它的智能支持,所以using Kinemic.Gesture
会在编辑器中产生错误,该库中的任何代码都需要包装在 UWP 平台的#if
指令中。
#if
指令只是告诉 unity 忽略该代码,直到应用程序在特定平台上运行,因为只有这样该库才能被 unity 使用,以了解更多信息: 平台相关编译
例如:
#if UNITY_WSA using Kinemic.Gesture; #endif using UnityEngine public class SomeClass: MonoBehaviour { public void SomeFunction { #if UNITY_WSA // call some code in the Kinemic.Gesture library. #endif } }
它比这有点棘手,但你得到了所有的智能支持,它仍然只能在构建中起作用。
一种方法是使用 PInvoke 从您的统一脚本与库进行互操作,有关更多信息,请参阅 Unity Nativ 插件
我喜欢的另一种方法是为此 C++ 库编写包装器 C# 库并将 C# 包装器导入统一,这是通过以下方式实现的:
从名为 UnitKinemicWrapper 的 class 开始,如下所示:
using Kinemic.Gesture; public class UnityKinemicWrapper { public static void KinemicConnect(string band) { Kinemic.Gesture.Engine.Connect(band); } }
现在在你的统一脚本中你可以调用
string band = "band"; UnityKinemicWrapper.KinemicConnect(band);
不要将任何 Kinemic 库导入统一。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.