バーチャルパッドに対応させる
新しいInput Systemでバーチャルパッドを作ってみます。モバイルでは殆どの環境ではゲームパッドもキーボードもマウスも繋がっていないので、バーチャルパッドは悪い選択肢ではないと思います。特にカメラが追跡するタイプのサードパーソンゲームでは。
今回はゲームパッドの入力をオーバーライドしてUIからの操作を注入するアプローチをとります。前提としてゲームがNew Input Systemでゲームパッドに対応している必要があります。今回のゲームの場合「Leftスティックで移動」「Westボタンで弾が出る」という操作を事前に実装し、そのゲームにバーチャルパッド対応を行います。
なお、このバーチャルパッドは現行主流の押した位置からの差分ではなく、一世代古い固定位置からのバーチャルパッドです。
手順1:UIを作る
最初にUIのレイアウトを決めます。バーチャルスティック一つにボタンが二つといった感じでしょうか。アンカーも使って画面サイズが変わってもちゃんと追随できるようにしておきます。このUIはボタンで作っておくと、実際にタッチさせているかどうかが視覚的に分かりやすくて良いです。スティックは親を作っておくと座標を動かしやすくて良いです。
ゲームを再生してみるとUIが反応しないかもしれません。これはEventSystemに古いInput Systemのものを使用している為です。StandaloneInputModule
をInputSystemUIInputModule
に変更してやれば使用可能になります。
手順2:UIのボタンを押したら弾を出す
「Westボタンで弾が出る」の動作を、UIのボタンを押したら射撃を行うようにします。正確にはボタンのタップに合わせてWestボタンのステータスを更新するだけです。結果としてUIのボタンを押すと弾が出ます。
- UIの
Westボタン
にOnScreenButton
コンポーネントを追加 - Control Pathに
Button West[GamePad]
を選択
これでUIのボタンを押せばButton Westが押された事になります。
一点注意としては、このボタンのタップ判定はButtonのIntractable
ではなくImageのRaycast Target
が使用される点です。なのでUIを一気に無効化する場合はCanvasGroupのBlock Raycaster等を使用します。
手順3:スティックを動かしたら動く
「Leftスティックで移動」の動作を、UIのバーチャルスティックを動かしたら動く形に変更します。
- UIのスティック(ドラッグで動くUI)に
OnScreenStick
コンポーネントを追加 - Control Pathに
Left Stick[GamePad]
を選択
これでスティックを動かせばプレイヤーが動くようになります。あとはMovementRange
で感度を調整したりします。
オマケ:ボタン操作でプレイヤーを動かす
OnScreenButton
ではゲームパッドのボタンだけでなくキー入力も上書き出来るので、シミュレーションで「上」「下」「左」「右」といった厳密な操作が必要な場合は、ボタンとキーを上書きするのも面白いかもしれません。