Sardinal is a messaging system for Unity C#, VRChat Udon(U#). It supports Pub/Sub with parameters.
Sardinal は Unity C#、VRChat Udon(U#) 用のメッセージングシステムです。
パラメータ付きの Pub/Sub をサポートしています。
View on GitHub Pages
Unity 2022.3+ が必要です
HoshinoLabs - Sardinal
の横の「+」ボタンを押す。vpm add repo https://vpm.hoshinolabs.com/vpm.json
cd /your-unity-project
vpm add com.hoshinolabs.sardinal
以下を UPM でインストールします。
https://github.com/ikuko/Sardinal.git?path=Packages/com.hoshinolabs.sardinal
Sardinal はリリースタグを使用するので以下のようにバージョンを指定できます。
https://github.com/ikuko/Sardinal.git?path=Packages/com.hoshinolabs.sardinal#1.0.0
次のような Udon があるとする。
public interface MySignal { }
public class HelloSardine : UdonSharpBehaviour {
[Subscriber(typeof(MySignal))]
public void Hello(string arg) {
Debug.Log($"Hello {arg}.");
}
}
public class SardinalDemo : UdonSharpBehaviour {
[SerializeField]
Signal signal = new Signal<MySignal>();
private void Start() {
signal.Publish($"Sardinal");
}
}
依存関係を記述したスクリプトを作成します。
シーン上にオブジェクトを作成し SceneScope
コンポーネントと作成したスクリプトを追加します。
public class CustomInstaller : MonoBehaviour, IInstaller {
public void Install(ContainerBuilder builder) {
builder.RegisterEntryPoint<HelloSardine>(Lifetime.Cached);
builder.RegisterEntryPoint<SardinalDemo>(Lifetime.Cached);
}
}
実行するとコンソールに以下のように表示されます。
Hello Sardinal.
例ではメッセージの受信先の存在を知らなくても送信することが確認できます。
シーンに最初から存在するサブスクライバは自動でサブスクライブされます。
コンテナなどで動的に生成されたサブスクライバは手動でサブスクライブが必要です。
次のような Udon があるとします。
public interface MySignal { }
public class HelloSardine : UdonSharpBehaviour {
[SerializeField]
Signal signal = new Signal<MySignal>();
private void Start() {
Subscribe();
SendCustomEventDelayedSeconds(nameof(Unsubscribe), 5f);
}
public void Subscribe() {
signal.Subscribe(this);
}
public void Unsubscribe() {
signal.Unsubscribe(this);
}
[Subscriber(typeof(MySignal))]
public void Hello(string arg) {
Debug.Log($"Hello {arg}.");
}
}
public class SardinalDemo : UdonSharpBehaviour {
[SerializeField]
Signal signal = new Signal<MySignal>();
private void Start() {
Publish();
}
public void Publish() {
signal.Publish($"Sardinal");
SendCustomEventDelayedSeconds(nameof(Publish), 1f);
}
}
依存関係を記述したスクリプトを作成します。
シーン上にオブジェクトを作成し SceneScope
コンポーネントと作成したスクリプトを追加します。
public class CustomInstaller : MonoBehaviour, IInstaller {
public void Install(ContainerBuilder builder) {
builder.RegisterEntryPoint<HelloSardine>(Lifetime.Cached);
builder.RegisterEntryPoint<SardinalDemo>(Lifetime.Cached);
}
}
実行するとコンソールに以下のように表示されます。
Hello Sardinal.
Hello Sardinal.
Hello Sardinal.
例では開始されると受信側はサブスクライブを開始し送信側は1秒ごとにメッセージを送信しています。
受信側は5秒立つとアンサブスクライブしメッセージの受信を終了しています。
以上のように実行時にサブスクライブすることで動的に生成されたオブジェクト間でメッセージのやり取りを行うことができます。
MIT
利用頂いた際は使用ワールドなどを教えて頂けると幸いです。
また任意ですがクレジットの掲載もして頂けると嬉しいです。
com.hoshinolabs.sardinal
https://github.com/hoshinolabs/Sardinal
0.9.2
2022.3 or later
No dependencies
No legacy packages
Undefined