🙄

UnityでOSC通信を行う

2024/08/23に公開

UnityでOscCoreを使用してOSC通信を行う

UnityでOSC通信を行うには、OscCoreというライブラリを使用します。
今回はインストールから送受信までを紹介します。

前提条件

  1. UnityHub・Visualstudioはインストール済み
  2. Unity 2022.3.21f1

OscCoreのインストール

まず、OscCoreライブラリをプロジェクトに追加します。
OscCoreはGitHubで公開されており、以下の手順でインストールできます。

  1. OscCoreのGitHubにアクセスします
  2. パッケージをダウンロードする
  3. UnityProjectにインストール

メッセージを送信する

using OscCore;
using UnityEngine;

using UnityEngine;
using OscCore;

public class OSCSender : MonoBehaviour
{
    private OscClient client;
    public string address = "/example";
    public string ipaddress = "127.0.0.1"; //localhost
    public int portNum = 9000;

    void Start()
    {
        client = new OscClient(ipaddress, portNum);
    }

    void Update()
    {
        // スペースキーでメッセージを送信
        if (Input.GetKeyDown(KeyCode.Space))
        {
            client.Send(address, 1); // とりあえずintを送信してみる
        }
    }
}

上記のスクリプトをGameobjectにアタッチし、
スペースキーを押すと指定したアドレスにOSCメッセージが送信されます。

受信を確認する

こちらのアプリを使用することで、
ローカル内でOSCの受信をチェックすることができます。

https://hexler.net/protokol

スペースを押すたびにこんな感じで表示されました。

スクリーンショット 2024-06-19 120910.png

メッセージを送信する

先ほど送信したメッセージを今度はUnity内で受信してみます。

using OscCore;
using UnityEngine;

public class OscReceiver : MonoBehaviour
{
    [SerializeField] private int port = 9000;
    private const string OscAddress = "/example";
    private OscServer server;

    private void Awake()
    {
        server = new OscServer(port);
        server.TryAddMethod(OscAddress, ReadValues);
    }

    private void OnDestroy()
    {
        server.Dispose();
    }

    private void ReadValues(OscMessageValues values)
    {
        Debug.Log(values.ReadIntElement(0));
    }
}

OSCRecieverをGameObjectにアタッチし、
スペースキーを押してOSCSenderからメッセージを送信してみる。

スクリーンショット 2024-06-19 123509.png

まとめ

比較的簡単にOSCの送受信が可能でした。
TwinklyというOSCを受信することで制御できる電飾があり、それを使用する機会がありましたので、機会があればUnityとTwinklyの連携について書いていこうと思います。

Twinklyについて ※おまけ

https://twinkly.com/ja-jp

普通の電飾と異なるところとして、
専用のスマートフォンアプリを使ってキャリブレーションが行えるというところがあります。
OSC通信も行えるので空間全体の演出を行う際に有用な気がしています。

Discussion