2016-09-02 3 views
0

Я пытаюсь создать приложение UWP в единстве, используя плагин C#, который использует TcpClient. Плагин использует System.Net.Sockets. Когда я создаю автономный исполняемый файл, приложение отлично работает на моей локальной машине. Однако, когда я пытаюсь построить его для платформы Universal 10, это не сработает. Это важно, потому что моя цель - развернуть приложение на Hololens.Создание приложения UWP в Unity с использованием TcpClient

я получаю CS0246 ошибки в консоли:

The type or namespace TcpClient could not be found (are you missing a using directive or an assembly reference?)

Я встречал людей, которые работают в подобных проблем с получением TcpClient работать с Unity. Я попытался установить пакет предустановок System.Net.Sockets 4.1 на это решение: https://github.com/dotnet/corefx/issues/5939

Я открыл проект C# в Visual Studio, и я успешно установил версию 4.1. Однако, когда я попытался построить снова, меня встретила такая же ошибка. Вот мой packages.config файл:

<?xml version="1.0" encoding="utf-8"?> 
<packages> 
    <package id="System.IO" version="4.0.0" targetFramework="net461" /> 
    <package id="System.Net.Primitives" version="4.0.10" targetFramework="net461" /> 
    <package id="System.Net.Sockets" version="4.1.0-beta-23516" targetFramework="net461" /> 
    <package id="System.Runtime" version="4.0.0" targetFramework="net461" /> 
    <package id="System.Threading.Tasks" version="4.0.0" targetFramework="net461" /> 
</packages> 

Я также пришел через это решение, которое использует StreamSocket из пакета Windows.Networking.Sockets вместо: How to connect to Unity game server socket from UWP app via sockets?

Я рассмотрел только переписав все кода для работы с StreamSocket. Однако это было бы сложно и подвержено ошибкам, так как я не писал оригинальный код.

Код, с которым я имею дело, - это сценарий потоковой передачи данных, включенный в Brekel Pro Face 2. Я бы опубликовал некоторые фрагменты кода, но я не уверен, что Брекель будет в порядке с этим.

Любые идеи?

ответ

1

Проблема

Единство цели Mono, которая требует плагин быть платформа .NET DLL. Тем не менее, Hololens поддерживает приложения Windows Universal, для которых плагин должен быть библиотекой универсальной оконной платформы (UWP). Поэтому невозможно использовать один и тот же плагин для Unity и Hololens. Если это сработает для Unity, то строительство Hololens не удастся.

Раствор

Решение состоит в том, чтобы использовать две версии плагина; DLL платформы .NET и UWP DLL. Обе библиотеки DLL должны иметь одинаковые интерфейсы, чтобы разрешать ссылки на классы, методы и т. Д. Из любой из двух библиотек DLL, используя тот же код.

Решение Шаги

Предполагая, что вы создали две DLL-файлы (x.dll) и (x.uwp.dll) с одинаковыми интерфейсами (т.е. пространства имен, имена общественных классов и т.д.), то решение должно быть таким простым, как:

  1. Создайте папку плагинов в папке «Активы» в проекте «Единство».
  2. Перетащите файл (x.dll) в папку «Плагины» и выберите его.
  3. Из окна «Инспектор» в разделе «Выбор платформ для плагина» убедитесь, что установлен только «Редактор».
  4. Создайте подпапку под именем WSA под папкой «Плагины».
  5. Перетащите файл (x.uwp.dll) в папку WSA и выберите его.
  6. Из окна «Инспектор» в разделе «Выбор платформ для плагина» убедитесь, что установлен только WSAPlayer.

Теперь Unity будет использовать x.dll при запуске проекта на вашем компьютере и использовать файл x.uwp.dll при создании проекта для Hololens.

Смежные вопросы