Unity - UWP: Как импортировать dll / nuget-package / ссылки на мой проект - PullRequest
0 голосов
/ 15 октября 2019

Контекст
Я получил этот демонстрационный проект uwp , который использует sdk . SDK доступен для Windows UWP C #. Запуск его решения работает нормально, и он делает то, что должен делать. Теперь я хочу использовать его в своем проекте Unity, который настроен для очков HoloLens (выбранный в качестве единой платформы 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?) Я также пытался добавить ссылку, используя менеджер ссылок и извлекая dll из папки pluing, но затем я получил это уведомление:
enter image description here

2. Я взял пакет nuget и изменил формат на .zip, так что я могу разархивировать его и вынуть из него dll. Но у меня были только цели:
enter image description here
3. Я открыл свой проект Unity в Visual Studio, открыв сценарий в Unity. Создан right click on solution → Add new project → Class Library (Universal Windows) новый проект. Таким образом, я мог бы добавить пакет с помощью диспетчера nuget:

enter image description here
Я думал, что создание этого проекта должно дать мне DLL / ссылки, но все, что я получаю, это эта ошибка в Unity:
enter image description here
------------------------------------------------------------------------------------------------------------------------------------
Моя настройка
Unity 2019.2.9f1
Visual Studio Pro 2019

1 Ответ

1 голос
/ 15 октября 2019

Единственный правильный способ добавления внешних DLL к единице в перечисленных выше испытаниях - это первый, любой другой метод не будет компилироваться / собираться или аварийно завершать работу во время выполнения (гарантировано).

Так как использоватьБиблиотека UWP в единице.

Для библиотеки C #

Если в ней указано Тип: «Управляемый» и Целевой показатель для некоторого .NET xy, то это.

enter image description here

  • 1-1: Если на предыдущем снимке экрана библиотека «Targets .NET 4.x» отредактировала настройки своего проекта для целевой .NET4.x enter image description here

  • 1-2: Снова на первом снимке экрана выберите библиотеку и отредактируйте «Включить»Платформы "с только UWP (WSA Player) выбранная платформа, любая другая платформа не будет работать, включая редактор.

  • 1-3: Создайте свой проект, не пытаясь использовать библиотеку:

    • Безопасно ли он собран? отлично, переходите к следующему шагу.
    • Произошли ли ошибки? выясните, в чем причина и почему.
  • 1-4: Так как это библиотека UWP, и для нее нет версии редактора единствавы не получите поддержку Intellesense, поэтому using Kinemic.Gesture вызовет ошибки в редакторе, любой код в этой библиотеке должен быть заключен в директиву #if для платформы UWP.

    • Директива #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
    }

}

Для родной библиотеки

Это немногонемного хитрее этого, но вы получаете всю интеллектуальную поддержку, она все равно будет работать только в сборке, хотя.

Один из способов - взаимодействовать с библиотекой из ваших скриптов Unity с помощью PInvoke, для получения дополнительной информации см. Unity плагинов Nativ

AnДругой способ, который мне нравится, это написать библиотеку C # для этой библиотеки C ++ и импортировать оболочку C # в единицы, это достигается с помощью:

  • Создание проекта C # библиотеки классов (.NET Framework).
  • Импорт Kinemic из nuget или путем добавления ссылки.
  • Начните с класса UnitKinemicWrapper, который выглядит следующим образом:

    
    using Kinemic.Gesture;
    public class UnityKinemicWrapper
    {
     public static void KinemicConnect(string band)
     {
         Kinemic.Gesture.Engine.Connect(band);
     }
    }
    
    • Создайте свойБиблиотека обертки C # и импортируйте ее в unity.
    • Сконфигурируйте ее с шагами в самом начале этого руководства по настройке библиотек C #, в дополнение к этому, укажите Unity, чтобы не обрабатывать эту библиотеку, сняв галочку с этихустановите флажки, затем нажмите «Применить».

enter image description here

  • Теперь в ваших скриптах единства вы можете вызывать

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

Еще один подход только для проектов UWP

Не импортируйте библиотеки Kinemic в Unity.

  • Создайте свой проект Unity.
  • Открыть созданный UWP проект.
  • Оттуда cна единство, используя UnityEngine.GameObject.SendMessage, подробнее о SendMessage
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...