親指シフトの練習をするソフトをUnityで作成してしますが、キーボードから入力する処理をどのように実装してよいか悩みました。
結論から言うと、キーボードの入力はUniRxを使うと5行ほどのコードで楽に実装ができます。
UniRxを使わない場合は、Update関数に「KeyCode(KeyCode.A)」というように1フレームごとに入力されたキーを監視する方法を使うが、フラグだらけのソースコードになってしまうだろう。
UniRxとは?
UniRxは非同期処理向けのライブラリーです。ある値を監視して実行するような処理を実装するとき便利です。
例えば、3Dのゲームであれば、あるキャラがジャンプして地面に着地(着地したかの監視を毎フレームごとに必要)したときに何かしらのエフェクトを出したいような処理を実装するときに効果的です。
実際の実装例
UniRxを使ったキーボードの入力を受け取る方法を解説します。
やっていることは1フレームごとにキー入力があったかどうか監視して、入力があれば入力されたキーを出力します。
「using UniRx;」を宣言します。
その上で以下のようなコードを書きます。
//キーボードからの入力を取得する
var keyStream = Observable.EveryUpdate()
Select(_ => Input.inputString)
Where(xs => Input.anyKeyDown)
Subscribe(xs=> Debug.Log(xs));
キーを入力すると、Subscribeのところで入力した文字を受け取ることができます。
UniRxは、使い慣れるまで10時間ほどの時間がかかりますが、慣れてくると、いままで面倒だったところが楽になるので勉強しておいて損はないでしょう!