簡體   English   中英

使用TcpClient在Unity中構建UWP應用

[英]Building a UWP App in Unity using 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: 如何通過套接字從UWP應用連接到Unity游戲服務器套接字?

我考慮過只重寫所有代碼以與StreamSocket一起使用。 但是,由於我沒有編寫原始代碼,因此這將很困難且容易出錯。

我正在處理的代碼是Brekel Pro Face 2附帶的數據流腳本。我會從代碼中發布一些代碼片段,但是我不確定Brekel是否可以接受。

有任何想法嗎?

問題

Unity以Mono為目標,Mono要求插件為.NET平台DLL。 但是,Hololens支持Windows通用應用程序,該應用程序要求插件為通用窗口平台(UWP)DLL。 因此,不可能對Unity和Hololens使用相同的插件。 如果它適用於Unity,則為Hololens構建將失敗。

解決方案

解決方案是使用兩個版本的插件; .NET平台DLL和UWP DLL。 兩個DLL應該具有相同的接口,以便允許使用相同的代碼從兩個DLL中的任何一個引用類,方法等。

解決步驟

假設您已經創建了兩個具有相同接口(即名稱空間,公共類名稱等)的DLL文件(x.dll)和(x.uwp.dll),則解決方案應如下所示:

  1. 在Unity項目的Assets文件夾下創建一個Plugins文件夾。
  2. 將(x.dll)文件拖放到Plugins文件夾中並選擇它。
  3. 在“選擇插件平台”下的“檢查器”窗口中,確保僅選中“編輯器”。
  4. 在Plugins文件夾下創建一個名為WSA的子文件夾。
  5. 將(x.uwp.dll)文件拖放到WSA文件夾中,然后選擇它。
  6. 在“選擇插件平台”下的“檢查器”窗口中,確保僅選中WSAPlayer。

現在,當您在計算機上運行項目時,Unity將使用x.dll,而在為Hololens構建項目時,Unity將使用x.uwp.dll。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM