解説

プレイヤーの入力を検出する

この記事では、プレイヤーのキー入力を判定する方法を学びます。条件分岐と合わせて使うことでゲームらしい操作ができるようになります。

Unityプログラミング講座一覧はこちら

Unityプログラミング講座
ゲームエンジンUnityを使ってゲーム制作を始めようと思っている人へ向けた解説記事です。初心者がUnityをインストールするところから始めてゲームを制作するのに必要な知識をできる限りステップバイステップでまとめるつもりです。

ここがポイント

  • Input.GetKeyを使用して指定したキーが入力されたかどうかを取得できる。
  • Input.GetButtonを使用すればInput Managerでキーの割り当てを変更できる。
  • 十字キーやコントローラーのスティックなどの軸入力はGetAxisによってfloat型の値として取得できる。

キー入力を取得する

UnityではInputクラスを用いることで入力処理を判定することができるようになります。ここでは、よく使う処理としてキーボードの入力と軸入力を取得してみます。

Input.GetKey系でキーボードの入力を判定する

キーボードの入力はGetKey, GetKeyUp, GetKeyDownメソッドを使うことで検出できます。いずれもbool型の値を返しますが、trueとなる条件がそれぞれ異なります。

メソッドtrueになる条件
GetKey指定されたキーが押されている間
GetKeyUp指定されたキーが離された時
GetKeyDown指定されたキーが押された時

ボタン入力などはGetKeyGetKeyDownを主に使い、スマホでのタップ処理はGetKeyUpが良く使われます。

取得したいキーはメソッドに引数として指定します。例えば、マウスの左クリックの場合はKeyCode.Mouse0を、zキーの場合はKeyCode.Zといった具合です。

どこに書くか

プレイヤーはゲーム中の好きなタイミングでキーを入力します。Startメソッドは開始時に1度だけ呼ばれるメソッドなので、Startメソッドに書いてしまうと入力判定ができません。毎フレーム呼ばれるUpdateメソッドに書く必要があります。

Input.GetKeyを使う例

using UnityEngine;

class Test : MonoBehaviour
{
    int count = 0;

    void Update()
    {
        // マウスの左クリックを押している間countの値を増加させる
        if (Input.GetKey(KeyCode.Mouse0))
        {
            count++;
            Debug.Log(count);
        }
    }
}

前にも述べたように、コンポーネントとスクリプトのファイル名は同じにしてください。

Input.GetKeyDownを使う例

using UnityEngine;

class Test : MonoBehaviour
{
    int count = 0;

    void Update()
    {
        // マウスの左クリックを押した時にcountを増加させる
        if (Input.GetKeyDown(KeyCode.Mouse0))
        {
            count++;
            Debug.Log(count);
        }
    }
}

Input.GetKeyUpを使う例

using UnityEngine;

class Test : MonoBehaviour
{
    int count = 0;

    void Update()
    {
        // マウスの左クリックを離した時にcountを増加させる
        if (Input.GetKeyUp(KeyCode.Mouse0))
        {
            count++;
            Debug.Log(count);
        }
    }
}

Input.GetButton系でボタンの入力を判定する

GetKeyメソッドを用いることでキーの入力を検出することができましたが、GetKeyでは入力キーを変更するのに適さないという欠点があります。

例えば、Spaceキーを決定ボタンにしてゲームを作成していたとします。テストプレイをしていてSpaceよりもzキーのほうが良いと感じた場合にどうなるでしょうか。GetKeyを用いていた場合、その箇所をすべて変えなくてはなりません。1か所、2か所ぐらいならいいでしょうが、メニュー画面での選択だったり、プレイヤーをジャンプさせたりなど、様々な場所で使用されている場合には大変です。

キーの変更をより簡単にするためにはGetKeyを用いるのではなくGetButtonメソッドを使用します。GetButtonメソッドもGetKey同様にGetButtonUp, GetButtonDownがあります。

メソッドtrueになる条件
GetButton指定したボタンを押している間
GetButtonUp指定したボタンを離した時
GetButtonDown指定したボタンを押した時

試しにJumpボタンを使ってみる

メソッドの引数にはKeyCodeではなく使用するボタンの名前を文字列で指定します。例えば、Jumpボタンを使用する場合には”Jump”と書きます。

using UnityEngine;

class Test : MonoBehaviour
{
    int count = 0;
    void Update()
    {
        // ジャンプボタンを押した時にcountを増加させる
        if (Input.GetButtonDown("Jump"))
        {
            count++;
            Debug.Log(count);
        }
    }
}

デフォルトではJumpボタンはSpaceキーが割り当てられているので、上のスクリプトはSpaceキーに反応するはずです。

InputManagerでキーの設定を行う

GetButton系のメソッドを使えばキーの変更がより簡単になります。キーの割り当てを変更するにはメニューのEditProject Settings...からInput Managerを選び、変更したいボタンの名前を選択します。Positive Buttonとなっているところを変更すればキーの変更が反映されます。

Input Managerで表示されているボタンでは足りない場合は、AxesSizeの値を増やせば自由に追加できます。

Input.GetAxisで移動キーの入力を判定する

ゲームパッドのスティックや十字キーの入力に対応するにはGetAxisメソッドが便利です。GetAxisメソッドはGetButtonメソッドと同様にボタン名(軸の名称)を文字列で指定します。主に使うのは以下の2つです。

方向
Vertical上下(デフォルトだと上が正の向き)
Horizontal左右(デフォルトだと右が正の向き)

GetAxisメソッドの返り値はfloat型、つまり、小数値です。何も入力しない場合には0、正の方向を入力した場合には1、負の方向を入力した場合に-1になります。スティックを完全には傾けない場合は-1から1までの小数の値をとります。

例えば、左右の入力をHorizontalで取得する例はこのようになります。

using UnityEngine;

class Test : MonoBehaviour
{
    void Update()
    {
        // 左右の入力を取得する.
        float h_input = Input.GetAxis("Horizontal");
        Debug.Log(h_input); // -1.0fなら左、1.0fなら右
    }
}

デフォルトでは、HorizontalやVerticalは十字キーやスティック入力のほかにAやD、WやSでも反応するように割り当てられています。こちらの設定も上述のInput Managerを用いることで変更可能です。

まとめ

この記事ではInputクラスを用いてプレイヤーの入力を取得する方法を学びました。これを用いることでキャラクターやメニューの操作を実装できるようになります。

次回はプレイヤーの入力に応じてゲームオブジェクトの位置を動かしたり、色を変えたりしてみましょう。

Unityプログラミング講座一覧はこちら

Unityプログラミング講座
ゲームエンジンUnityを使ってゲーム制作を始めようと思っている人へ向けた解説記事です。初心者がUnityをインストールするところから始めてゲームを制作するのに必要な知識をできる限りステップバイステップでまとめるつもりです。
タイトルとURLをコピーしました