Hello, World!
OSCの送信
クラス(構造体)の定義
「クラス」と説明している箇所は構造体でも可能です。
1. OSCで送信したいデータをクラスとして定義します。定義したクラスには、[OscPackable]アトリビュートをつけてください。
[OscPackable]を付与できるクラスの条件は次の通りです。
- Rootなクラスである。何かのクラスの入れ子ではない。
- 抽象クラスではない。
- Partialなクラスである。
2. OSCで送信したいプロパティまたはフィールドに[OscElementAt(int)]アトリビュートをつけてください。これがデータの並び順になるので、必ず連番にします。
ExampleData.cs
using ExtremeOsc;
// コードの自動生成のために、必ずpartialにします。
[OscPackable]
public partial class ExampleData
{
// OscElementAtの引数は必ず連番にします。
[OscElementAt(0)]
public int IntValue { get; set; }
[OscElementAt(1)]
public float FloatValue { get; private set; }
[OscElementAt(2)]
public string StringValue;
public ExampleData()
{
IntValue = 0;
FloatValue = 0.0f;
StringValue = string.Empty;
}
}
送信する
3. ExtremeOsc.OscClientでインスタンスを送信します。
MonoBehaviourで使用する例
ExampleClient.cs
public class ExampleClient : MonoBehaviour
{
private OscClient client = null;
private void Awake()
{
client = new OscClient("127.0.0.1", 5555);
}
private void OnDestroy()
{
client?.Dispose();
client = null;
}
// OscPackableなクラスのインスタンスを送信する
private void SendExample()
{
var data = new ExampleData
{
IntValue = Random.Range(0, 256),
FloatValue = Random.Range(0.0f 1.0f),
StringValue = "Hello, Example!"
};
client.Send("/example", data);
}
}
OSCの受信
クラス(構造体)の定義
1. OSCを受信してコールバックするクラスに[OscReceiver]アトリビュートをつけてください。
[OscReceiver]を付与できるクラスの条件は次の通りです。
- Rootなクラスである。何かのクラスの入れ子ではない。
- 抽象クラスではない。
- Partialなクラスである。
2. OSCを受信するためにExtremeOsc.OscServerを作成します。このOscServerにコールバックを実行したいクラスのインスタンスを登録します。
ExampleServer.cs
// コードの自動生成のために、必ずpartialにします。
[OscReceiver]
public partial class ExampleServer : MonoBehaviour
{
private OscServer server = null;
private void Awake()
{
server = new OscServer(5555);
// このクラスのインスタンスでコールバックしたいのでRegister
server.Register(this);
server.Open();
}
private void OnDestroy()
{
server.Unregister(this);
server?.Dispose();
server = null;
}
}
受信する
3. コールバックする関数を定義し、[OscCallback(address)]アトリビュートをつけてください。必ず最初の引数はstring addressにしてください。
ExampleServer.
[OscReceiver]
public partial class ExampleServer : MonoBehaviour
{
[OscCallback("/example")]
private void OnExample(string address, ExampleData data)
{
}
}