Observables

変わったことを購読者に伝える値。スコアとそれを映すものが、手で突いて回る一覧なしで足並みを揃えます。

更新日 2026-09-07

スコアが変わればスコアボードを描き直す。ドアが開けば三つのものが反応する。手で書けば、フィールドがあり、セッターがあり、つつくものの一覧があり、そして誰かがひとつつつき忘れた時のバグがあります。

Udonite Observables は、そのパターンを一度だけ、普通の C# で書いたものです。

using Udonite.Observables;

public class Scoreboard : UdoniteBehaviour
{
    public TextMeshProUGUI label;

    private Observable<int> score = new Observable<int>();

    public override void Start()
    {
        score.Subscribe(OnScoreChanged, true);
        score.Value = 10;
    }

    private void OnScoreChanged(int value)
    {
        label.text = value.ToString();
    }
}

同じ値を入れ直しても誰にも通知しません。 それがこの型の要点です。毎フレーム代入する振る舞いは、コールバック一巡ではなく比較一回で済み、ラベルを描き直す購読者が変わっていないラベルを描き直すよう頼まれることはありません。

中身

通知するとき
Observable<T> 値が別のものに設定されたとき
ObservableList<T> 要素が追加、削除、置換、または全消去されたとき
ObservableDictionary<TKey, TValue> キーが別の値に設定、削除、または全消去されたとき

ISubscribable<T> は読む側です。この型のフィールドは購読できますが書き込めません。スコアを読むことと、スコアを変えてよいことの違いです。コレクションは自分自身に対してこれを実装しているので、三つとも同じ書き方で購読できます。

次に読むもの

はじめに は、空の振る舞いから、二つの振る舞いが反応する値までを追います。

リファレンス は三つの型のすべてのメンバーと、それぞれが何を通知するかです。

通知の規則 は公開前に読む価値のある部分です。通知の最中に購読、購読解除、書き戻しをしたときに何が起きるか、そしてそのうちどれを Udon がそもそも許さないか。

問題が発生しました 再読み込み