使用TcpClient在Unity中构建UWP应用程序

时间:2016-09-02 20:04:03

标签: c# sockets unity3d uwp tcpclient

我正在尝试使用利用TcpClient的C#插件来统一构建UWP应用程序。该插件使用System.Net.Sockets。当我构建独立的可执行文件时,该应用程序在我的本地计算机上运行完美。但是,当我尝试为Universal 10平台构建它时,它不起作用。这很重要,因为我的目标是在Hololens上部署应用程序。

我在控制台中收到错误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

我在Visual Studio中打开了C#项目,并成功安装了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>

我也遇到过这个解决方案,它使用来自Windows.Networking.Sockets包的StreamSocket:  How to connect to Unity game server socket from UWP app via sockets?

我考虑过重写所有代码以使用StreamSocket。但是,由于我没有编写原始代码,因此这很难并且容易出错。

我正在处理的代码是Brekel Pro Face 2中包含的数据流脚本。我会从代码中发布一些代码片段,但我不确定Brekel是否可以使用它。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

问题

Unity目标是Mono,它要求插件是.NET平台DLL。但是,Hololens支持Windows Universal应用程序,它要求插件是通用窗口平台(UWP)DLL。因此,Unity和Hololens都不可能使用相同的插件。如果它适用于Unity,那么Hololens的构建将失败。

解决方案

解决方案是使用两个版本的插件; .NET平台DLL和UWP DLL。这两个DLL应该具有相同的接口,以允许使用相同的代码从两个DLL中的任何一个引用类,方法等。

解决方案步骤

假设您已经创建了具有相同接口的两个DLL文件(x.dll)和(x.uwp.dll)(即命名空间,公共类名等),解决方案应该像以下一样简单:< / p>

  1. 在Unity项目的Assets文件夹下创建一个Plugins文件夹。
  2. 将(x.dll)文件拖放到Plugins文件夹中并选择它。
  3. 从Select platforms for plugin下的Inspector窗口中,确保仅选中Editor'。
  4. 在Plugins文件夹下创建一个名为WSA的子文件夹。
  5. 将(x.uwp.dll)文件拖放到WSA文件夹中并选择它。
  6. 从Select platforms for plugin下的Inspector窗口中,确保仅选中WSAPlayer。
  7. 现在,Unity将在您的计算机上运行项目时使用x.dll,并在为Hololens构建项目时使用x.uwp.dll。