2012-09-25 196 views
1

我試圖利用Unity的庫,名爲UnityOSC,它允許您從其他應用程序接收OSC消息。我有一個在下面的地址通過UDP傳輸數據的應用程序:在Unity中使用OSC配置客戶端和服務器

主機:127.0.0.1端口 :33433

我現在需要配置UnityOSC偵聽數據。圖書館有一個叫做OSCHandler.cs腳本,並在初始化函數,你可以設置你的客戶端和服務器。我只是不確定如何設置。

目前,我嘗試此:

public void Init() 
    { 
     CreateClient("FaceClient", IPAddress.Parse("127.0.0.1"), 33433);  
     CreateServer("FaceServer", 6666); 
    } 

我相匹配的客戶端參數的那些應用程序在與其信號傳遞數據,並且服務器僅僅是隨機的 - 但老實說,我不知道是什麼放入其中任何一個。從理論上說,如果我設置了客戶機/服務器正確,我應該能夠在我的更新功能來註冊信息是這樣的:

void Update() { 

    OSCHandler.Instance.UpdateLogs(); 
    //clients = OSCHandler.Instance.Clients; 
    servers = OSCHandler.Instance.Servers; 

    foreach(KeyValuePair<string, ServerLog> item in servers) 
    { 
     // If we have received at least one packet, 
     // show the last received from the log in the Debug console 
     if(item.Value.log.Count > 0) 
     { 
      int lastPacketIndex = item.Value.packets.Count - 1; 

      UnityEngine.Debug.Log(String.Format("SERVER: {0} ADDRESS: {1} VALUE 0: {2}", 
      item.Key, // Server name 
      item.Value.packets[lastPacketIndex].Address, // OSC address 
      item.Value.packets[lastPacketIndex].Data[0].ToString())); //First data value 
     } 
    } 
} 

但到目前爲止,沒有被登記到調試器。任何想法我做錯了什麼?

+0

你有一個網站鏈接到你正在玩的圖書館嗎? –

+0

http://opentsps.com/ – mheavers

回答

2

兩件事,牢記我是從命令行執行的,而不是在Unity編輯器中,所以事情可能會有所不同。

首先,OSCPacket.cs中的第50行在命令行版本中引發異常。不知道是否團結拿起Trace.Assert或沒有,但沒有通過移除線傷害:

Trace.Assert(string.IsNullOrEmpty(_address) == false); 

我猜UnityOSC筆者打算做這樣的事情:

Trace.Assert(string.IsNullOrEmpty(value) == false); 

否則我不能肯定這個說法怎麼會因爲OSCMessage,派生類OSCPacket的傳球,直接調用構造函數的地址屬性。

其次,如果你想測試這個在本地機器上,你的端口需要滿足:

public void Init() 
    { 
     CreateServer("Server", 5555); 
     CreateClient("Client", IPAddress.Parse("127.0.0.1"), 5555); 
    } 

最後,我手動創建:

 OSCHandler handler = new OSCHandler(); 
     handler.Init(); 
     handler.SendMessageToClient<string>("Client", "127.0.0.1", "TestMessage"); 
     handler.UpdateLogs(); 

我只好稍微修改作者的代碼是讓它在Unity之外工作,但只是略微。

相關問題