【Unity】Input.GetAxisとは?指定した入力軸における値を取得できるメソッド

Input.GetAxisとは? Unity

こんにちは、ともくんのゲーム作り部屋にようこそ!

このページでは、

「GetAxistってなに?」

「GetAxisを使うとどんなことができるの?」

というお悩みの方に向けた内容となっています。

キーボードやマウス、コントローラーなどからの入力を検知するInputクラスには、GetAxisというメソッドがあります。

GetAxisは、指定した入力軸に対する値を取得することができるメソッドで、この値を使うことで、キーやコントローラーでの操作でゲーム内の処理を行うことができます。

例えば、入力軸に「Horizontal」を指定した場合、キーボードの「A」「D」、または「←」「→」、コントローラーのスティックの操作を検知して、水平方向の軸に対する値を取得でき、キャラクターの移動処理などに使うことができます。

そこで、このページでは、Unityで入力処理に使うInput.GetAxisメソッドについて、どんなメソッドなのか、また使い方までをまとめていきます。

この記事を書いた人

ゲーム作りを学び始めた一児のパパです。
このブログは、子供から「ゲームを作ってみたい!」と言われ、非プログラマーでゲーム作りをしたことない僕が、ゲーム作りの本を読んで独学でゲーム開発を学んでいるブログです。
同じように初めてゲーム作りをしている方と一緒に学んでいけるようなブログに出来たらいいなと思っています。
また、「このコードはおかしい」とか「もっと良い書き方があるよ!」などあれば、どんどん指摘して頂けると助かります。

Input.GetAxisとは?

まずは、Input.GetAxisがどんなメソッドなのかを紹介していきます。

指定した入力軸の値を取得できるメソッド

GetAxisは、Inputクラスで定義されているメソッドで、指定した入力軸に対しての値を取得することができるメソッドです。

例えば、よくゲーム内でキャラクターを上下左右に操作する処理として、キーボードのWASDのキーを使って操作することがあります。

Unityでは、このうち「W」「S」は上下の縦の軸を操作するもので「Vertical」「A」「D」は左右の横の軸を操作するもので「Horizontal」、という2つの軸の名前で設定されています。

このそれぞれの軸における入力値を「-1」から「1」の値で返してくれるのが、GetAxisメソッドです。

具体的には、GetAxisメソッドで「Horizontal」を指定した場合、「D」を押すと「1」の値が返り、「A」を押すと「-1」の値が返ってきます。

同様に、「Vertical」を指定した場合、「W」を押すと「1」の値が返り、「S」を押すと「-1」の値が返ります。

他にも、いくつかの入力軸における操作を値で返す処理を行うのが、GetAxisメソッドになっていて、この値を使ってゲーム内での移動処理などを作ることができます。

なお、実際には、キーを押した瞬間の値は「1」「-1」ではなく、「0.01」などの小さい数値から始まり、徐々に大きくなることになります。

Input Managerで入力軸と入力ボタンが管理されている

先ほどの入力軸や入力操作は、UnityのInput Managerという項目で管理されています。

Input Managerを開く際は、メニューの「Edit」から「Project Settings…」を選択して、

開いたウィンドウで「Input Manager」を選ぶと、以下のような画面になります。

ここで「Axes」で表示されている一つ一つの項目が、GetAxisで指定する軸となる部分になっていて、例えば一番上にある「Horizontal」を開いてみます。

すると、「Negative Button」「Positive Button」に入力ボタンが入っているのが分かりますが、Negative Buttonは軸に対してマイナスの値に進む操作、Positive Buttonは軸に対してプラスに進む操作となっています。

つまり、この「Horizontal」の軸は、「←」もしくは「A」キーを押すとマイナスの値、「→」もしくは「D」キーを押すとプラスの値を返すという設定になっています。

他にも、下の方にある同じ軸名の「Horizontal」では、キーボードではなくコントローラーのスティックのX軸の操作で値を返す設定になっていたり、

マウスの横の動きを「Mouse X」、マウスの縦の動きを「Mouse Y」の軸で取得することができます。

Mouse X
Mouse Y

また、あまり変える必要はありませんが、それぞれの軸名や入力操作に関して変更することもできます。

Input.GetAxisの使い方

ここからは、実際にInput.GetAxisの使い方について紹介していきます。

Input.GetAxisの記述方法

Input.GetAxisを使う場合は、以下のように記述して使うことで、返り値を取得することができます。

Input.GetAxis("入力軸名")

GetAxisの引数で、Input Managerで設定している入力軸の名前をstring型で指定することで、その軸における値が返ってきます。

入力操作が無い場合は「0」の値が返り、操作がある場合は、基本的に「-1」から「1」の間で値が返ってくることになります。

Input.GetAxisの使用例

ここでは、Input.GetAxisでよく使われることが多い入力軸を使って、簡単な処理を作ってみます。

「Horizontal」で水平方向の移動処理を作る

前述の通り、「Horizontal」水平方向の軸で、キャラクターの左右の移動処理を作る場合などに使います。

プレイヤーとなるオブジェクトに、以下のようなスクリプトをアタッチしてみます。

using UnityEngine;

public class Test : MonoBehaviour
{
    float speed = 0.02f;    // スピードを決める変数

    void Update()
    {
        transform.Translate(Input.GetAxis("Horizontal") * speed, 0, 0); // オブジェクトを移動させる処理
    }
}

9行目でオブジェクトを移動させる処理として、Translateメソッドを使っています。

このTranslateメソッドのX軸の移動に対して、Input.GetAxisメソッドを使って「Horizontal」を指定しています。

この「Horizontal」は、キー操作で「←」「A」を押すと「-1」の値、「→」「D」を押すと「1」の値、またコントローラーであればスティックの横操作による入力で値を取得することができます。

実際にゲームを実行してみると、

それぞれの入力で、オブジェクトが左右に移動できているのが分かります。

「Vertical」で垂直方向の移動処理を作る

「Vertical」垂直方向の軸で、キャラクターの上下の移動処理を作る場合などに使います。

先ほどのスクリプトに修正を加える形で処理を作ってみます。

using UnityEngine;

public class Test : MonoBehaviour
{
    float speed = 0.02f;    // スピードを決める変数

    void Update()
    {
        transform.Translate(Input.GetAxis("Horizontal") * speed, Input.GetAxis("Vertical") * speed, 0); // オブジェクトを移動させる処理
    }
}

9行目のTranslateメソッドのY軸の移動に、Input.GetAxis「Vertical」を指定しています。

この「Vertical」は、キー操作で「↑」「W」を押すと「1」の値、「↓」「S」を押すと「-1」の値、またコントローラーであればスティックの縦操作による入力で値を取得することができます。

実際にゲームを実行してみると、

先ほどの左右の移動だけでなく、上下の移動も入力操作できるようになりました。

「Mouse X」「Mouse Y」でマウスの移動による処理を作る

「Mouse X」マウスの横軸「Mouse Y」マウスの縦軸で、それぞれマウスの移動を検知するのに使うことができます。

例えば、以下のキューブオブジェクトをマウスで回転させる処理を作ってみます。

オブジェクトに対して、以下のスクリプトをアタッチしておきます。

using UnityEngine;

public class Test : MonoBehaviour
{
    float rotationSpeed = 2.0f; // 回転する速度
    float rotationX;    // X軸の回転量
    float rotationY;    // Y軸の回転量

    void Update()
    {
        // マウスをクリックしている場合
        if (Input.GetMouseButton(0))
        {
            rotationX = Input.GetAxis("Mouse Y") * rotationSpeed;   // X軸の回転量を計算
            rotationY = Input.GetAxis("Mouse X") * rotationSpeed;   // Y軸の回転量を計算
            transform.Rotate(rotationX, -rotationY, 0); // オブジェクトを回転する処理
        }
    }
}

マウスをクリックしている場合の14行目と15行目で、それぞれの軸に対する値をInput.GetAxisで取得して、変数に代入しています。

注意点として、「Mouse X」で取得した値は、マウスのX軸(横軸)における値となりますが、オブジェクト側では、横への回転はY軸を中心とした回転量となるため、XとYの値を逆にする必要があります。

そして、16行目でRotateメソッドを使って、その変数を回転量に指定していますが、Y軸への回転量は変数にマイナスを付けて、負の値にしています。

これで実際にゲームを実行してみると、

マウスをクリックした状態で移動させると、オブジェクトが一緒に回転しているのが分かります。

なお、この「Mouse X」「Mouse Y」の軸をGetAxisで取得する場合、他の軸と異なり値は「-1」から「1」の範囲に収まらないことがあります。

「Mouse ScrollWheel」でマウスホイールを使った処理を作る

「Mouse ScrollWheel」は、マウスホイールにおける入力軸で、ホイール操作による処理を作る場合に使います。

例えば、マウスホイールを使って、カメラのズーム処理を作ってみます。

カメラオブジェクトに対して、以下のスクリプトをアタッチしておきます。

using UnityEngine;

public class Test : MonoBehaviour
{
    float zoomSpeed = 6.0f; // ズームスピードの変数

    void Update()
    {
        Camera.main.fieldOfView -= Input.GetAxis("Mouse ScrollWheel") * zoomSpeed;  // ホイールの値でズーム処理を行う
    }
}

ここでは3Dで作っているので、9行目でカメラの視野角である「fieldOfView」の変数に対して、GetAxisメソッドで取得したホイール操作の値を減算させる処理をおこなっています。

この「Mouse ScrollWheel」は、ホイールを奥に回すと正の値、ホイールを手前に回すと負の値を取得することができます。

これで実際にゲームを実行してみると、

マウスホイールを操作することで、カメラのズーム処理ができているのが分かります。

なお、カメラのズーム処理に関しては、以下のページでも詳しく解説していますので、参考にしてみてください。

まとめ

このページでは、Unityで様々な入力操作を検知できるInput.GetAxisについて、どんなメソッドなのか、また使い方や使用例までをまとめていきましたが、いかがでしたでしょうか?

Input.GetAxisは、指定した入力軸に対する値を取得することができるメソッドで、キーボードやマウス、コントローラーによる入力操作を検知するのに使用します。

このGetAxisで指定する入力軸は、Input Managerで管理されていて、それぞれの入力端末のどのボタンと連動しているかを設定することができます。

キャラクターの移動処理やオブジェクトの回転、カメラのズーム処理など、Input.GetAxisを使うことで、非常に簡単にゲーム内操作の処理を作ることができます。

最後までお読みいただきまして、ありがとうございました!

コメント