この記事では、プレイヤーのキー入力を判定する方法を学びます。条件分岐と合わせて使うことでゲームらしい操作ができるようになります。
Unityプログラミング講座一覧はこちら
キー入力を取得する
UnityではInput
クラスを用いることで入力処理を判定することができるようになります。ここでは、よく使う処理としてキーボードの入力と軸入力を取得してみます。
Input.GetKey系でキーボードの入力を判定する
キーボードの入力はGetKey
, GetKeyUp
, GetKeyDown
メソッドを使うことで検出できます。いずれもbool型の値を返しますが、trueとなる条件がそれぞれ異なります。
メソッド | trueになる条件 |
GetKey | 指定されたキーが押されている間 |
GetKeyUp | 指定されたキーが離された時 |
GetKeyDown | 指定されたキーが押された時 |
ボタン入力などはGetKey
やGetKeyDown
を主に使い、スマホでのタップ処理は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系のメソッドを使えばキーの変更がより簡単になります。キーの割り当てを変更するにはメニューのEdit
→ Project Settings...
からInput Manager
を選び、変更したいボタンの名前を選択します。Positive Button
となっているところを変更すればキーの変更が反映されます。
Input Manager
で表示されているボタンでは足りない場合は、Axes
のSize
の値を増やせば自由に追加できます。
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プログラミング講座一覧はこちら