1

我正在尝试使用一个名为 UnityOSC 的 Unity 库,它允许您接收来自其他应用程序的 OSC 消息。我有一个应用程序通过 UDP 在以下地址传输数据:

主机:127.0.0.1 端口:33433

我现在需要配置 UnityOSC 来监听该数据。该库有一个名为 OSCHandler.cs 的脚本,在 init 函数中,您可以设置客户端和服务器。我只是不确定如何设置它。

目前,我正在尝试这个:

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
        }
    }
}

但到目前为止,没有任何东西注册到调试器。知道我做错了什么吗?

4

2 回答 2

2

有两件事,请记住我是从命令行而不是在 Unity 编辑器中执行此操作的,因此情况可能会有所不同。

首先,OSCPacket.cs 中的第 50 行在命令行版本中抛出异常。不确定 Unity 是否选择 Trace.Assert 但删除该行不会造成任何伤害:

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

我猜 UnityOSC 作者的意思是:

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

否则,我不确定该断言将如何通过,因为 OSCMessage 是 OSCPacket 的派生类,直接调用其 ctor 中的 Address 属性。

其次,如果您尝试在本地机器上进行测试,您的端口需要匹配:

    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 之外工作,但只是稍微修改一下。

于 2012-09-25T19:44:35.330 回答
2

我走了一条不同的路线来让这个在 Unity 中工作——基于 James George 的一个名为 openTSPS 的旧项目。您可以在此处下载 - 它接受所有 OSC 数据:

https://github.com/heaversm/UnityOSC_FS

于 2012-09-28T15:59:43.670 回答