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 で機能させるために、James George の openTSPS という古いプロジェクトに基づいて、別のルートに進みました。ここからダウンロードできます - すべての OSC データを受け入れます。

https://github.com/heaversm/UnityOSC_FS

于 2012-09-28T15:59:43.670 に答える
2

Unityエディターではなくコマンドラインからこれを行ったので、状況が異なる可能性があることに注意してください。

まず、コマンド ライン バージョンでは、OSCPacket.cs の 50 行目で例外がスローされます。Unity が Trace.Assert を取得するかどうかはわかりませんが、次の行を削除しても問題はありません。

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

UnityOSCの作成者は次のようなことをするつもりだったと思います:

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

そうしないと、OSCPacket の派生クラスである OSCMessage がその 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 に答える