UnityでOscCoreを使用してOSC通信を行う
UnityでOSC通信を行うには、OscCoreというライブラリを使用します。
今回はインストールから送受信までを紹介します。
前提条件
- UnityHub・Visualstudioはインストール済み
 - Unity 2022.3.21f1
 
OscCoreのインストール
まず、OscCoreライブラリをプロジェクトに追加します。
OscCoreはGitHubで公開されており、以下の手順でインストールできます。
- OscCoreのGitHubにアクセスします
 - パッケージをダウンロードする
 - 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の受信をチェックすることができます。
スペースを押すたびにこんな感じで表示されました。
メッセージを送信する
先ほど送信したメッセージを今度は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からメッセージを送信してみる。
まとめ
比較的簡単にOSCの送受信が可能でした。
TwinklyというOSCを受信することで制御できる電飾があり、それを使用する機会がありましたので、機会があればUnityとTwinklyの連携について書いていこうと思います。
Twinklyについて ※おまけ
普通の電飾と異なるところとして、
専用のスマートフォンアプリを使ってキャリブレーションが行えるというところがあります。
OSC通信も行えるので空間全体の演出を行う際に有用な気がしています。

