タイピングゲームの制作記の7回目です。
なかなか制作が進まないです。(^_^;)
入力をInputManagerからInputSystemに変更
今まではInputManagerを使ってUpdateメソッド内で今打つべき文字を打ったかどうか?で判断していました。
ですが、今回は新しい入力システムであるInputSystemへと変更することにしました。

Updateメソッド内でキーを打ったかどうか?で判断する場合はキーを打った時にUpdateメソッド内の処理をしていない場合(処理が遅くなった場合)はキーを打っても無視されてしまいます。
InputSystemの場合はキーを打った時のイベントハンドラを登録しておくことで、キーを打った時にそのメソッドが実行されるので、処理の抜けがなくなります。
1 2 3 4 5 6 7 8 9 10 11 12 13 | private void OnEnable() { Keyboard.current.onTextInput += OnTextInput; } private void OnDisable() { Keyboard.current.onTextInput -= OnTextInput; } void OnTextInput(char c) { // キーが打たれた時の処理 } |
これはInputManagerを使ってもイベントを使えば出来ると思いますが、やり方がわからないので簡単なInputSystemを採用しました。(^_^;)
タイピングの処理の部分で多少変更の必要はありましたが、いらない処理をしていた部分を省くことも出来ました。
スクリーンスペース内に敵がいなければ打てないようにする
前回は壁などの遮蔽物が敵とカメラの間にある場合は敵を打てないようにしましたが、今回はスクリーンスペース内(カメラが描画している範囲)に敵がいなければタイピング出来ないようにしました。
遮蔽物の時と同じように敵が持つ複数のポイントがスクリーンスペース内にあるかどうかで判断し、スクリーンスペースの範囲を外れた時は敵のリストから排除しました。
敵が遠い場合は打てないようにする
敵が遠い場合は打つべき文字列も小さいので遠い敵はテキスト群を非表示にしてタイピング出来ないようにしました。
どこからが遠いか?を判断するのは難しいですが適当な距離を設定しました。(^_^;)
敵が近づいたらテキストをワールドスペースからスクリーンスペースに変更する
今までは敵の子にテキスト群を配置し、ワールドスペースのCanvasで敵と一緒にテキスト群を動かしていました。
しかし敵がキャラクターに近づくとテキスト群も近づいてしまってテキストが見えなくなってしまいました。
そこで敵がキャラクターと一定距離に近づいたらワールドスペースに設定していたテキスト群をスクリーンスペースへと変換し、さらにスクリーンスペース内にテキスト群が留まるように変更しました。
敵がキャラクターから遠ざかった場合はスクリーンスペースからワールドスペースへと戻します。
変換時に多少ブレが生じますが許容できる範囲にしました。
ただ、ワールドスペースの状態でゲーム画面外から敵が出てくるときはテキスト群が見切れます。
敵が打たれた時にダメージアニメーションをする
今まではタイピングしても敵は無反応で全部の文字列を打ち終わった時だけラグドールで倒れる処理をしていました。
そこで、タイピングした時に敵がダメージを受けたアニメーションを再生するようにしました。
これはとりあえず作ったという感じです。
今回の成果物
今回の成果物は以下のようになります。
敵が遠くにいるとタイピングが出来なくなり、一定距離に近づくとワールドスペースからスクリーンスペースへと文字列群が変わっています。
終わりに
大きな処理の部分は大体出来てきたので細かい部分の処理やタイトル画面やUIの作成等もしていかなければなりませんね。
次回はサンプルのゲームステージ、UIの作成、タイピング速度計算の処理、タイトル画面等を作っていこうかと思います。