facebook twitter hatena line email

「Unity/UniRx/Subject」の版間の差分

提供: 初心者エンジニアの簡易メモ
移動: 案内検索
(errorやCompleted処理)
(errorやCompleted処理)
行89: 行89:
 
subject.OnCompleted();
 
subject.OnCompleted();
 
</pre>
 
</pre>
 +
ログ
 +
<pre>
 +
msg1:world
 +
Completed
 +
</pre>
 +
 
参考:https://www.fast-system.jp/unirx-%E7%9F%A5%E3%82%89%E3%81%AA%E3%81%84%E3%81%A8%E4%BA%BA%E6%A8%A9%E3%81%8C%E7%84%A1%E3%81%84%E6%B0%97%E3%81%8C%E3%81%97%E3%81%A6%E3%81%8D%E3%81%9F%E3%81%AE%E3%81%A7%E5%8B%89%E5%BC%B7%E3%81%97/
 
参考:https://www.fast-system.jp/unirx-%E7%9F%A5%E3%82%89%E3%81%AA%E3%81%84%E3%81%A8%E4%BA%BA%E6%A8%A9%E3%81%8C%E7%84%A1%E3%81%84%E6%B0%97%E3%81%8C%E3%81%97%E3%81%A6%E3%81%8D%E3%81%9F%E3%81%AE%E3%81%A7%E5%8B%89%E5%BC%B7%E3%81%97/
  
 
参考:https://light11.hatenadiary.com/entry/2018/11/20/225152
 
参考:https://light11.hatenadiary.com/entry/2018/11/20/225152

2021年10月14日 (木) 03:25時点における版

サンプル

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

UniRxを使わない場合

上記の処理は、このように書く

using 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だけでる。

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://www.fast-system.jp/unirx-%E7%9F%A5%E3%82%89%E3%81%AA%E3%81%84%E3%81%A8%E4%BA%BA%E6%A8%A9%E3%81%8C%E7%84%A1%E3%81%84%E6%B0%97%E3%81%8C%E3%81%97%E3%81%A6%E3%81%8D%E3%81%9F%E3%81%AE%E3%81%A7%E5%8B%89%E5%BC%B7%E3%81%97/

参考:https://light11.hatenadiary.com/entry/2018/11/20/225152