「Unity/UniRx/Subject」の版間の差分
ナビゲーションに移動
検索に移動
| 34行目: | 34行目: | ||
<pre> | <pre> | ||
using UniRx; | using UniRx; | ||
private Subject<Unit> subject = new Subject<Unit>(); | class HogeRepository | ||
public IObservable<Unit> ObserveSubject { get => subject; } | { | ||
private Subject<Unit> subject = new Subject<Unit>(); | |||
public IObservable<Unit> ObserveSubject { get => subject; } | |||
public void OnComplete() | |||
{ | |||
// イベント発行 | |||
subject.OnNext(Unit.Default); | |||
} | |||
} | |||
var hogeRepository = new HogeRepository(); | |||
// イベント登録 | // イベント登録 | ||
ObserveSubject.Subscribe(_ => Debug.Log("ok")); | hogeRepository.ObserveSubject.Subscribe(_ => Debug.Log("ok")); | ||
</pre> | </pre> | ||
2023年6月18日 (日) 05:56時点における版
UniRxを使ったサンプル
using UniRx;
Subject<string> subject = new Subject<string>();
// イベント登録
subject.Subscribe(message => Debug.Log("msg1:" + message));
// イベント発行
subject.OnNext("hello");
ログ
msg1:hello
参考:https://qiita.com/toRisouP/items/2f1643e344c741dd94f8
値を返さない場合
using UniRx;
Subject<Unit> subject = new Subject<Unit>();
// イベント登録
subject.Subscribe(_ => Debug.Log("ok"));
// イベント発行
subject.OnNext(Unit.Default);
参考:https://light11.hatenadiary.com/entry/2018/11/01/232019
外部からsubjectを使えるように
using UniRx;
class HogeRepository
{
private Subject<Unit> subject = new Subject<Unit>();
public IObservable<Unit> ObserveSubject { get => subject; }
public void OnComplete()
{
// イベント発行
subject.OnNext(Unit.Default);
}
}
var hogeRepository = new HogeRepository();
// イベント登録
hogeRepository.ObserveSubject.Subscribe(_ => Debug.Log("ok"));
UniRxを使わない場合
上記の処理は、このように書く
System.Action<string> OnMsg = delegate (string msg) { };
OnMsg += (msg) =>
{
Debug.Log("msg1:" + msg);
};
OnMsg("hello");
参考:https://sunagimo-app.hatenablog.com/entry/2019/03/14/032357
値切り替え
Selectを使う
Subject<string> subject = new Subject<string>();
subject
.Select(
data => "メッセージは" + data
)
.Subscribe(
message => Debug.Log("msg1:" + message)
);
subject.OnNext("hello");
ログ
msg1:メッセージはhello
購読停止
disposable.Dispose()を使う。
Subject<string> subject = new Subject<string>();
// イベント登録
var disposable = subject
.Subscribe(
message => Debug.Log("msg1:" + message)
);
// イベント発行
subject.OnNext("hello");
// 購読停止
disposable.Dispose();
条件
Whereを使う
Subject<string> subject = new Subject<string>();
subject
.Where(
data => data == "world"
)
.Subscribe(
message => Debug.Log("msg1:" + message)
);
subject.OnNext("hello");
subject.OnNext("world");
worldだけでる。
重複削除
Distinctを使う。
Subject<string> subject = new Subject<string>();
subject
.Distinct()
.Subscribe(
message => Debug.Log("msg1:" + message)
);
subject.OnNext("hello");
subject.OnNext("world");
subject.OnNext("world");
ログ
msg1:hello msg1:world
参考;https://noriok.hatenadiary.jp/entry/2018/09/16/185716
errorやCompleted処理
Subject<string> subject = new Subject<string>();
subject
.Subscribe(
message => Debug.Log("msg1:" + message),
error => Debug.LogError("Error" + error),
() => Debug.Log("Completed")
);
subject.OnNext("world");
subject.OnCompleted();
ログ
msg1:world Completed
参考:https://light11.hatenadiary.com/entry/2018/11/20/225152
その他処理
オペレーター一覧