はじめに
Corgi Engineで初めて操作する際にキーボードの↑↓←→に反応しないのどうしてだろうと感じました。 確認したところ↑↓←→に反応していないわけではなく、プレイヤー2の割り当てとして使用されているためとなります。
「前振りはいらんのや」、「変更したいんや」って方は【入力方法変更】へ飛んでください。
ここでは移動方向について焦点をあてて説明していますが、他のボタン変更もやり方は同じ方法でできそうです。
使用アセット
Corgi Engine - 2D + 2.5D Platformer
作業環境
Unity 2019.4.16f1
公式ドキュメントの場所(英語)
Input | Corgi Engine Documentation
デフォルトの割り当て
公式ドキュメント
公式ドキュメントを確認したところ↑↓←→はPlayer2に割り当てられていました。
操作入力を確認できるデモ
Assets/CorgiEngine/Demos/TheHunt に各プレイヤーの入力が確認できるデモがありました。
ドキュメントに合わせて操作してみました。
入力設定が行われている場所
Unityメニュー → Edit → Project Settings... を選択します。
Input Managerを選択し、Axesを開きます。
入力の設定はここで行われています。
入力方法変更
ここでは、プレイヤー1の操作を移動方向を↑↓←→に反応するようにしてみます。
他のボタンや別のキーを設定したい場合も下記手順を参考に設定してみてください。
、、、、ただ、問題があります。デフォルトのキー配置で既にキーボードの空きがほとんどない状態にあります。
この問題のため何かを割り切る必要がありそうです。
自身の作成に合うものを選択し対応してみてください。
【案①】必要なPlayer数だけ考慮して設定を行う
デフォルト設定では4人プレイ想定のため空きがない状態となりますが、4人プレイのゲームを作らない限り他Playerのキー操作は無視してもいいはずです。
下記変更手順を行った場合は、Player1の操作でPlayer2もお同様に移動するようになります。
変更手順
①Unityメニュー → Edit → Project Settings... を選択します。
②Input Managerを選択し、Axesを開きます。
③Player1_Horizontal を開き
Negative Button にleft
Positive Button にright
Alt Negative Button を空に設定します。
④Player1_Verticalを開き
Negative Button にdown
Positive Button にup
Alt Positive Button を空に設定します。
他にも必要なボタンの変更があれば Player1_ のところを開き設定します。
【案②】Player1とPlayer2の操作を入れ替える
Player2の移動手段として↑↓←→は設定されているため、その設定を流用します。
下記手順を行った場合はPlayer1は↑↓←→で移動し、Player2がWSADで動くようになります。
変更手順
①Unityメニュー → Edit → Project Settings... を選択します。
②Input Managerを選択し、Axesを開きます。
③Player1_Horizontal, Player2_Horizontalを開き
Name, Joy Numの値を入れ替えます。
④Player1_Vertical, Player2_Verticalを開き
Name, Joy Numの値を入れ替えます。
移動操作以外にも変更したいボタンがあれば Player1 とPlayer2 の定義を置き換えます。
【案③】スクリプトを更新しでPlayer2の操作もPlayer1として解釈する
一人用のゲームと割り切って作成する場合は入力処理を触って変更することもできそうです。 この変更を行うとWSADと↑↓←→が共にPlayer1の入力して受け付けます。
基本機能のスクリプトはあまり触りたくはありませんが、複数の操作に反応できるメリットがあります。
PCゲームでWSADで移動するのは基本だと考えていますが、↑↓←→も反応したって良いじゃないかと考えた場合、一度挑戦してみてください。
変更手順
Assets/CorgiEngine/Common/Scripts/Managers/InputManager のスクリプトを開きます。
InputManagerの定義の宣言に下記を追加します。
既存の仕組みでは1操作につき1入力しか保存していないため、2つ目の操作を受け取れるように追加しています。
protected string _axisHorizontal2; protected string _axisVertical2;
スクリプト220行目付近にある、InitializeAxis()に下記記述を追加します。
ここでは"Player2"を直接記載しています。
色々と変更すればここに書く必要なくできますが、ここでは手順が最も少ないと考えた内容になります。
_axisHorizontal2 = "Player2" + "_Horizontal"; _axisVertical2 = "Player2" + "_Vertical";
スクリプト340行目付近にある、SetMovement()に下記記述を追加します。
これは入力1の操作が何もなければ、Player2側の入力情報を見に行くという処理になります。
Player1, Player2側の操作が同時に行われた場合は、先にみているPlayer1側の入力が有効になります。
if (_primaryMovement == Vector2.zero) { _primaryMovement.x = Input.GetAxis(_axisHorizontal2); _primaryMovement.y = Input.GetAxis(_axisVertical2); } if (_primaryMovement == Vector2.zero) { _primaryMovement.x = Input.GetAxisRaw(_axisHorizontal2); _primaryMovement.y = Input.GetAxisRaw(_axisVertical2); }
別の考え方
キーボード操作カスタムについて確認してきましたが、別視点での考えをまとめました。
パッドを用意する
パッドがあって快適に操作できる分には申し分ないと考えていますが、パッドを持っていないユーザーが遊べなくなってしまうためやはりキーボード操作は必須ではないかと考えています。
キーコンフィグを作成する
これが全ての答えではないでしょうか。
ユーザーが自由に設定できる機能を実装できれば、WSADで移動したい人はそのまま、↑↓←→で移動したい人は、そのキーを設定することが出来れば解決します。
今回の記事ではキーコンフィグの実装までまとめられていませんが、別記事にて挑戦したいと思います。
おわりに
記事を書いていると考えがまとまって自身の勉強にもなっています。
キーコンフィグも実装して記事にしたいです。