繁体   English   中英

Unity - UWP:如何将 dll/nuget-package/references 导入我的项目

[英]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 库。

对于 C# 库

如果它显示类型:“托管”并针对一些 .NET xy,那么它就是。

在此处输入图像描述

  • 1-1:在前面的截图中,如果库 'Targets .NET 4.x 然后编辑您的项目设置以定位 .NET 4.x 在此处输入图像描述

  • 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# 包装器导入统一,这是通过以下方式实现的:

  • 创建 Class 库 (.NET Framework) C# 项目。
  • 从 nuget 或通过添加参考导入 Kinemic。
  • 从名为 UnitKinemicWrapper 的 class 开始,如下所示:

     using Kinemic.Gesture; public class UnityKinemicWrapper { public static void KinemicConnect(string band) { Kinemic.Gesture.Engine.Connect(band); } }
    • 构建您的 C# 包装库,并将其导入统一。
    • 使用本指南开头的步骤配置它,以配置 C# 库,除此之外,通过取消选中这些复选框来告诉 unity 不要处理此库,然后点击应用。

在此处输入图像描述

  • 现在在你的统一脚本中你可以调用

     string band = "band"; UnityKinemicWrapper.KinemicConnect(band);

仅适用于 UWP 项目的另一种方法

不要将任何 Kinemic 库导入统一。

  • 构建你的统一项目。
  • 打开 UWP 制作的项目。
  • 从那里,使用 UnityEngine.GameObject.SendMessage 联系 unity,更多关于SendMessage

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM