Upgrade to Pro — share decks privately, control downloads, hide ads and more …

UniRx の1歩目

UniRx の1歩目

インフィニットループ仙台支社勉強会 OpenIL仙台 vol.1 発表資料
UniRx の1歩目 佐藤正基
告知記事
https://www.infiniteloop.co.jp/blog/2018/05/openilsendai-vol1/

Infiniteloop

October 17, 2023
Tweet

More Decks by Infiniteloop

Other Decks in Programming

Transcript

  1. 一例の紹介:時間経過によるイベント開始 private void Start() { StartCoroutine(HogeCoroutine()); } private IEnumerator HogeCoroutine()

    { while(true) { yield return new WaitForSeconds(1); // 1秒ごとの処理 Debug.Log(“1秒ごとの処理”); } } private void Start() { // 1秒ごとの処理 Observable.Interval(TimeSpan.FromSeconds(1)) .Subscribe(_ => Debug.Log(“1秒ごとの処理”)); } before after(UniRx使用)
  2. 一例の紹介:時間経過によるイベント開始 private void Start() { // 1秒ごとの処理 Observable.Interval(TimeSpan.FromSeconds(1)) .Subscribe(_ =>

    Debug.Log(“1秒ごとの処理”)); } 引数のTimeSpanごとにメッセージを発行するソース。
  3. 一例の紹介:時間経過によるイベント開始 private void Start() { // 1秒ごとの処理 Observable.Interval(TimeSpan.FromSeconds(1)) .Subscribe(_ =>

    Debug.Log(“1秒ごとの処理”)); } メッセージを受け取ったら、引数の処理を実行する。
  4. 一例の紹介:時間経過によるイベント開始 private void Start() { // 1秒ごとの処理 Observable.Interval(TimeSpan.FromSeconds(1)) .Subscribe(_ =>

    Debug.Log(“1秒ごとの処理”)); } 出力結果 “1秒ごとの処理” “1秒ごとの処理” “1秒ごとの処理” “1秒ごとの処理” (以下同じ)
  5. 一例の紹介:UIのイベント定義 before private void Start() { // ボタン押下時処理 button.OnClickAsObservable() .Subscribe(_

    => Debug.Log("ボタン押下時処理")); } after(UniRx使用) private void Start() { Button button = gameObject.GetComponent<Button>(); button.onClick.AddListener(TaskOnClick); } private void TaskOnClick() { Debug.Log("ボタン押下時処理"); }
  6. 一例の紹介:UIのイベント定義 private void Start() { // ボタン押下時処理 button.OnClickAsObservable() .Subscribe(_ =>

    Debug.Log("ボタン押下時処理")); } ボタン押下時にメッセージを発行するソース。
  7. 一例の紹介:ReactiveProperty<T>の利用 private void Start() { button.OnClickAsObservable() .Where(_ => !player.IsDead) .Subscribe(_

    => player.CurrentHp.Value --); player.CurrentHp.SubscribeToText(text); } public class Player { public IReactiveProperty<int> CurrentHp {get; private set;} public bool IsDead {get; private set;} public Player() { CurrentHp = new ReactiveProperty<int>(10); CurrentHp.Where(x => x <= 0) .Subscribe(_ => IsDead = true); } } Presenter Model
  8. 一例の紹介:ReactiveProperty<T>の利用 public class Player { public IReactiveProperty<int> CurrentHp {get; private

    set;} public bool IsDead {get; private set;} public Player() { CurrentHp = new ReactiveProperty<int>(10); CurrentHp.Where(x => x <= 0) .Subscribe(_ => IsDead = true); } } ReactivePropertyを定義 Model
  9. 一例の紹介:ReactiveProperty<T>の利用 public class Player { public IReactiveProperty<int> CurrentHp {get; private

    set;} public bool IsDead {get; private set;} public Player() { CurrentHp = new ReactiveProperty<int>(10); CurrentHp.Where(x => x <= 0) .Subscribe(_ => IsDead = true); } } ReactivePropertyは、値が更新された時にメッセージを発行する。 Model
  10. 一例の紹介:ReactiveProperty<T>の利用 private void Start() { button.OnClickAsObservable() .Where(_ => !player.IsDead) .Subscribe(_

    => player.CurrentHp.Value --); player.CurrentHp.SubscribeToText(text); } 引数がfalseの場合、メッセージをフィルタリングするオペレータ。 Presenter
  11. 一例の紹介:ReactiveProperty<T>の利用 private void Start() { button.OnClickAsObservable() .Where(_ => !player.IsDead) .Subscribe(_

    => player.CurrentHp.Value --); player.CurrentHp.SubscribeToText(text); } player.CurrentHpの更新に反応した、UIのTextであるtextの更新処理を宣言。 Presenter