入力を取得するInputクラスについて

ここでは入力を取得できる「Inputクラス」について説明します。


※この記事で使用しているUnityのバージョン:Unity2019.1

Inputクラスとは

InputクラスはUnityで最初から用意されているクラスで、キーボード・マウス・ゲームパッド等からの入力を取得するメソッドをいくつか持ちます。

入力を取得するときに使うメソッドの中には入力軸を指定する必要があるものがあり、その際の入力軸には、入力設定(Input Manager)であらかじめ設定しておいた軸を指定する必要があります。

なおInput Managerについては「Unityの入力設定(Input Manager)について」で詳しく解説しているので、そちらも併せてご覧ください。

入力を取得するためのメソッドの使い方

では入力を取得するためのメソッドの使い方をみていきましょう。主なメソッドは次の4種類があります。

  1. Input.GetKey
  2. Input.GetMouseButton
  3. Input.GetButton
  4. Input.GetAxis

キーボードの入力を取得するInput.GetKey

Input.GetKeyメソッドを使うとキーボードのキー入力を取得することができます。引数はキーの名前の文字列か、KeyCodeという列挙型です。

例えば下の例では、Spaceキーの入力を毎フレームチェックして、入力があればその間デバッグログに「Space」という文字列を出力します。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TestScript : MonoBehaviour
{
    void Update()
    {
    if (Input.GetKey(KeyCode.Space))
    {
      Debug.Log("Space");
    }
    }
}

引数には文字列でキーの名前を指定しても良いのですが、KeyCodeを使ったほうが楽で間違いもないです。

さて、上の例ではキーを押している間ずっとデバッグログを出力しますが、例えばボタンを押した瞬間だけ入力を取得したい、といった場合もあるかと思います。そこで、そういった時のために専用のメソッドが用意されています。

  • Input.GetKeyDown:キーを押した瞬間だけ入力を取得
  • Input.GetKeyUp:キーを離した瞬間だけ入力を取得

まとめると次の表のとおりです。

メソッド 入力のタイミング
GetKey キーを押している間ずっと
GetKeyDown キーを押した瞬間だけ
GetKeyUp キーを離した瞬間だけ

マウスのクリックを取得するInput.GetMouseButton

次に、マウスのクリックを取得するにはInput.GetMouseButtonメソッドを使います。引数は0・1・2の3通りで、値が小さい順に左クリック・中クリック・右クリックに対応します

例えば、下の例では左クリックの入力を毎フレームチェックして、クリックされている間デバッグログを出力します。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TestScript : MonoBehaviour
{
    void Update()
    {
    if (Input.GetMouseButton(0))
    {
      Debug.Log("Click");
    }
    }
}

なお、マウス入力の場合もキーボードのときと同様に押した瞬間・離した瞬間だけ入力を取得できるメソッドが用意されています。

  • Input.GetMouseButtonDown:クリックした瞬間だけ入力を取得
  • Input.GetMouseButtonUp:クリックを離した瞬間だけ入力を取得

仮想ボタンの入力を取得するInput.GetButton

次は仮想ボタンの入力を取得するInput.GetButtonメソッドについてです。「仮想ボタン」というのは、Input Managerで設定した仮想的なボタンのことを指します。引数はInput Managerで設定した入力軸の名前です。

さて、ところでなぜ仮想ボタンなどというものが出てくるのかという話ですが…例えばゲームパッドを考えてみると、ゲームパッドによってボタンが違ったりしますよね。なのでキーボードのように直接ボタンを指定すると、あるゲームパッドでは操作できるけど、ほかのゲームパッドでは操作できない…といった事態になってしまいます。そこでInput Managerで仮想的なボタンを設定して、それを通して入力を取得することでゲームパッドごとの差異を解消しようというわけです。

さらに、この方法には他にもメリットがあります。それはゲームパッドだけでなくキー入力も同じボタンとして扱えるということです。つまりキーボードのSpaceキーと、ゲームパッドのAボタンを同じ「Jump」という仮想ボタンに設定しておけば、Input.GetButton(“Jump”)でキーボードとゲームパッドの両方の入力に対応できます。

…前置きが長くなってしまいましたが、要するに「GetButtonは便利」というわけです。上でGetKeyを紹介しましたが、今説明したような理由があるので基本的にはGetButtonを使ったほうが便利だと思います。

なお、こちらも先ほど紹介したメソッドと同様に押した瞬間・離した瞬間だけ入力を取得できるメソッドが用意されています。

  • Input.GetButtonDown:ボタンを押した瞬間だけ入力を取得
  • Input.GetButtonUp:ボタンを離した瞬間だけ入力を取得

仮想軸の入力を取得するInput.GetAxis

最後は仮想軸の入力を取得するInput.GetAxisメソッドについてです。「仮想軸」というのはInput Managerで設定した軸のことで、これを使えば方向の入力を取得できます。キーボードの方向キーやジョイスティックの入力を扱えるというわけですね。引数はこちらもInput Managerで設定した入力軸の名前です。

なお、このメソッドの兄弟分的なメソッドとしてInput.GetAxisRawというメソッドもあります。GetAxisとの違いは次の通りです。

  • GetAxis:補完あり
  • GetAxisRaw:補完なし

ここで補完というのは、入力の値を滑らかにすることを指します。例えばキーボードのキーを押したときのことを考えると、GetAxisRawは補完されないので押したら1、離したら0が返ってきます。一方でGetAxisの場合は補完されるので、アナログスティックを倒したときのような値を取得することが可能です。

ちなみに補完がどの程度行われるかはInput Managerの設定項目の「重力」と「感度」で決まるようです。