もんりぃ is undefined.

育児ネタとか、技術ネタとか。

UniRx 使ったキーボード入力処理ライブラリを書いた

unirx_observablekeyevent

is 何?

  • キーボード入力を IObservable<Unit> なストリームとして通知するためのライブラリです。
  • あ、もちろん Unity 用です。

何が嬉しいの?

  • 毎回 Update() の中で if (Input.GetKeyDown(KeyCode.Escape)) とかやっていた処理を UniRx でスッキリ書けます。
  • UnityEngine.Component の拡張メソッドも用意してあり、Component の Destroy に併せて購読が破棄されるようになっています。
    • 内部的には単に TakeUntilDestroy() 付けた Wrapper ですw

どうやって使うの?

  • README に書いてありますw
  • 一例として「モバイルあるある」なAndroid のバックキー対応をする場合は以下のようなコードになります。
using UniRx;
using UniRx.Triggers;
using UnityEngine;

class Sample : MonoBehaviour {
    private void Start() {
        this.OnKeyDownAsObservable(KeyCode.Escape).Subscribe(_ => Debug.Log("バックキー押された!"))
    }
}

独り言

  • 初期実装では、Singleton な実装にしていて、KeyCode 毎にストリームを Dictionary にキャッシュするような仕組みになっていましたが、UniRx 的に無駄な実装だと気付き踏みとどまりましたw
  • OnAndroidBackKeyDown() 的なメソッドを生やそうかとも思いましたが、プラットフォーム依存だし完全に蛇足なのでやめました。
  • この記事執筆時点で、クラスの配置ディレクトリが微妙に間違っているのに気付いており、早く直したい気持ちでいっぱいですw
    • 帰宅中の電車内で書いているので、帰ったら直す。
    • v1.0.1 として修正しました。
  • テストコード書きたいんだが、キーボード入力ってテストできんのか…?