のぼるゲーム開発備忘録

ゲーム開発のプログラマーです。ゲーム開発関連、調べた内容をアップしていきます。Unityを使用して個人開発を行っています。

【Unity】【Corgi Engine】キーボード入力方法の変更

f:id:ikeball:20210119071954p:plain

はじめに

Corgi Engineで初めて操作する際にキーボードの↑↓←→に反応しないのどうしてだろうと感じました。 確認したところ↑↓←→に反応していないわけではなく、プレイヤー2の割り当てとして使用されているためとなります。

「前振りはいらんのや」、「変更したいんや」って方は【入力方法変更】へ飛んでください。

ここでは移動方向について焦点をあてて説明していますが、他のボタン変更もやり方は同じ方法でできそうです。

使用アセット

Corgi Engine - 2D + 2.5D Platformer

作業環境

Unity 2019.4.16f1

公式ドキュメントの場所(英語)

Input | Corgi Engine Documentation

デフォルトの割り当て

公式ドキュメント

公式ドキュメントを確認したところ↑↓←→はPlayer2に割り当てられていました。

f:id:ikeball:20210119072847p:plain

操作入力を確認できるデモ

Assets/CorgiEngine/Demos/TheHunt に各プレイヤーの入力が確認できるデモがありました。

f:id:ikeball:20210119074623p:plain

ドキュメントに合わせて操作してみました。

f:id:ikeball:20210119074239g:plain

入力設定が行われている場所

Unityメニュー → Edit → Project Settings... を選択します。

f:id:ikeball:20210119075040p:plain

Input Managerを選択し、Axesを開きます。
入力の設定はここで行われています。

f:id:ikeball:20210119075446p:plain

入力方法変更

ここでは、プレイヤー1の操作を移動方向を↑↓←→に反応するようにしてみます。
他のボタンや別のキーを設定したい場合も下記手順を参考に設定してみてください。

、、、、ただ、問題があります。デフォルトのキー配置で既にキーボードの空きがほとんどない状態にあります。
この問題のため何かを割り切る必要がありそうです。
自身の作成に合うものを選択し対応してみてください。

f:id:ikeball:20210119072847p:plain

【案①】必要な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_ のところを開き設定します。

f:id:ikeball:20210119082923p:plain

【案②】Player1とPlayer2の操作を入れ替える

Player2の移動手段として↑↓←→は設定されているため、その設定を流用します。
下記手順を行った場合はPlayer1は↑↓←→で移動し、Player2がWSADで動くようになります。

変更手順

①Unityメニュー → Edit → Project Settings... を選択します。
②Input Managerを選択し、Axesを開きます。
Player1_Horizontal, Player2_Horizontalを開き
Name, Joy Numの値を入れ替えます。

f:id:ikeball:20210119084717p:plain

Player1_Vertical, Player2_Verticalを開き
Name, Joy Numの値を入れ替えます。

f:id:ikeball:20210119084642p:plain

移動操作以外にも変更したいボタンがあれば Player1 とPlayer2 の定義を置き換えます。

【案③】スクリプトを更新しでPlayer2の操作もPlayer1として解釈する

一人用のゲームと割り切って作成する場合は入力処理を触って変更することもできそうです。 この変更を行うとWSADと↑↓←→が共にPlayer1の入力して受け付けます。

基本機能のスクリプトはあまり触りたくはありませんが、複数の操作に反応できるメリットがあります。
PCゲームでWSADで移動するのは基本だと考えていますが、↑↓←→も反応したって良いじゃないかと考えた場合、一度挑戦してみてください。

変更手順

Assets/CorgiEngine/Common/Scripts/Managers/InputManager のスクリプトを開きます。

f:id:ikeball:20210119224740p:plain

InputManagerの定義の宣言に下記を追加します。
既存の仕組みでは1操作につき1入力しか保存していないため、2つ目の操作を受け取れるように追加しています。

        protected string _axisHorizontal2;
        protected string _axisVertical2;

f:id:ikeball:20210119225547p:plain

スクリプト220行目付近にある、InitializeAxis()に下記記述を追加します。
ここでは"Player2"を直接記載しています。
色々と変更すればここに書く必要なくできますが、ここでは手順が最も少ないと考えた内容になります。

        _axisHorizontal2 = "Player2" + "_Horizontal";
        _axisVertical2 = "Player2" + "_Vertical";

f:id:ikeball:20210119232711p:plain

スクリプト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);
                }

f:id:ikeball:20210119233429p:plain

別の考え方

キーボード操作カスタムについて確認してきましたが、別視点での考えをまとめました。

パッドを用意する

パッドがあって快適に操作できる分には申し分ないと考えていますが、パッドを持っていないユーザーが遊べなくなってしまうためやはりキーボード操作は必須ではないかと考えています。

キーコンフィグを作成する

これが全ての答えではないでしょうか。
ユーザーが自由に設定できる機能を実装できれば、WSADで移動したい人はそのまま、↑↓←→で移動したい人は、そのキーを設定することが出来れば解決します。
今回の記事ではキーコンフィグの実装までまとめられていませんが、別記事にて挑戦したいと思います。

おわりに

記事を書いていると考えがまとまって自身の勉強にもなっています。
キーコンフィグも実装して記事にしたいです。

関連記事

ikeball.hatenablog.com

ikeball.hatenablog.com