UnityのOSCパッケージであるuOSCの使い方について調べました。
hecomi/uOSC: OSC server / client implementation for Unity
基本的には開発者の方が詳しい解説記事を書いてくれているので、この記事を読むよりもそちらを読む方ががいいと思います。
Unity 向けの OSC 実装を作ってみた - 凹みTips
uOSC v2 をリリースしました - 凹みTips
本記事の内容はUnityバージョン2021.2.9f1、エディタ上でのみ検証しています。
インストール
Scoped Registryからインストールする
Scoped Registryからインポートします。
/Packages/manifest.json
に以下を追記します。
{
"scopedRegistries": [
{
"name": "Hecomi",
"url": "https://registry.npmjs.com",
"scopes": [
"com.hecomi"
]
},
...
],
"dependencies": {
"com.hecomi.uosc": "2.0.3",
...
}
}
Git URLでインストールする
Package ManagerのAdd package form git URL...
から以下のURLを追加してインポートします。
https://github.com/hecomi/uOSC.git#upm
unitypackageでインストールする
GitHubのReleasesページからunitypackageをダウンロードし、インポートします。
Projecct Settings > Package Manager
からScoped Registryを追加して、Package Manager
からインポートすることも可能です。
使い方
OSCの受信
uOscServer
コンポーネントを使用してOSCを受信します。uOscServer#onDataReceived
にOSC受信時に実行するメソッドを追加します。ここではスクリプトから追加していますが、uOscServer
コンポーネントのインスペクターから追加することも可能です。メソッドはメインスレッド実行されるので、Unity APIも使用可能です。
using UnityEngine;
using uOSC;
[RequireComponent(typeof(uOscServer))]
public class UOscServerSample : MonoBehaviour
{
uOscServer server;
void OnEnable()
{
if (server == null)
{
server = GetComponent<uOscServer>();
}
server.onDataReceived.AddListener(OnDataReceived);
}
void OnDisable()
{
server.onDataReceived.RemoveListener(OnDataReceived);
}
void OnDataReceived(Message message)
{
if (message.address == "/uOSC/sample")
{
Debug.Log($"uOSC receive: {(string)message.values[0]} {(float)message.values[1]} {(int)message.values[2]}");
}
}
}
OSCの送信
uOscClient
コンポーネントを使用してOSCを送信します。送るデータ型はint
、float
、string
、byte[]
に対応しています。
using UnityEngine;
using uOSC;
[RequireComponent(typeof(uOscClient))]
public class UOscClientSample : MonoBehaviour
{
uOscClient client;
void Start()
{
client = GetComponent<uOscClient>();
}
void Update()
{
client.Send("/uOSC/sample", "hoge", 123.456f, 100);
}
}
まとめ
UnityのOSCライブラリであるuOSCについて解説しました。シンプルなインターフェースになっており、簡単に使い方を理解できるなという印象です。すでに開発が停止しているOSCライブラリのUnityOSCの代替として丁度いいのではと思います。