i-school - Input.GetAxisメソッドとInputManagerの関連性

Input.GetAxis メソッド


 Input.GetAxisメソッドは、Unityの持つ Input クラスが扱うメソッドの1つです。
入力の判定を行うメソッドであるため、他のInput系のメソッドと同じように Update メソッド内に記述をして利用します

Input.GetKeyメソッドやInput.GetButtonメソッドとは異なり、bool 型ではなくて、float 型の戻り値を返すようになっています。
 
void Update(){

    float vertical = Input.GetAxis("Vertical");

    float horizontal = Input.GetAxis("Horizontal");

}

参考サイト
Unity公式スクリプトリファレンス
Input.GetAxis
https://docs.unity3d.com/ja/current/ScriptReferenc...
Qiita RyotaMurohoshi 様
Input.GetAxisとInputManagerの関連設定について
https://qiita.com/RyotaMurohoshi/items/7868752a3f0...


InputManagerの設定


 Input.GetAxisメソッドは、引数として string 型を設定していますが、この文字列には InputManager で設定している文字列を指定する必要があります。
Input.GetButton系のメソッドと同じです。


 Unityの左上にあるメニューを Edit => Project Settings と選択していくと、Project Settingsというウインドウが開きます。
このProject Settings ウインドウの左側がメニューになっており、InputManagerという項目がありますのでそちらを選択してみてください。
画像のような表示になると思います。


<手順動画 InputManagerの表示方法>
https://gyazo.com/56c0b7d6a4bc1d43e145f249e25a3e0e


参考サイト
Unity公式マニュアル
Input Manager
https://docs.unity3d.com/ja/2019.4/Manual/class-In...


 試しに、Vertical という項目を選択してみてください。詳細情報が表示されます。


InputManagerのVertical



この中の Vertical という項目の中に、Name という部分があります。
この Name が文字列なのですが、この文字列を先ほどの Input.GetAxisメソッドの引数として記述する必要があります。
Veritcalは、垂直、という意味の単語です。

  float vertical = Input.GetAxis("Vertical");  <= この Vertical の文字列が、InputManagerの Name とつながっている。そのため、文字列が合致している必要がある


 Input.GetAxisメソッドの文字列の指定は、大文字・小文字が区別されますので、小文字で vertical と書くと実行時にエラーが表示されます
InputManagerに登録されている Name のつづりで記述しましょう。


Input.GetAxisメソッドのメリット


 ではこの Vertical という文字列を指定した場合に、一体どのキー入力を判定してくれるのか、という部分ですが
先ほどの InputManager の中にある、Vertical の項目内に、キーを指定している場所があります。
画像を見てみてください。





 Negative Button と Positive Button に、downと up が登録されています。これはキーボードの下矢印と上矢印のことです。
また、 Alt Negative Button と Alt Positive Button にも s と w が登録されてます。これもキーボードの Sキーと Wキーです。

 つまり、Input.GetAxis("Vertical") という命令を実行すると、上記の4つのキー入力を判定してそのキーの入力があったかどうかを処理してくれるようになっています。
少し処理の内容は違いますが、以下の処理を、1文で実装しているイメージです。

        float vertical;
        if (Input.GetKey(KeyCode.UpArrow) || Input.GetKey(KeyCode.W)) {
            vertical = 1.0f;
        }
        if (Input.GetKey(KeyCode.DownArrow) || Input.GetKey(KeyCode.S)) {
            vertical = -1.0f;
        }

 またもう1つのメリットとしては、キーの入力値を InputManager から変更できるため、スクリプトを変更せずにキーの変更が行えるようになります。
これは Input.GetButton系と同じメリットです。


処理の流れ


  float vertical = Input.GetAxis("Vertical");

 Input.GetAxisメソッドの処理は右辺の処理なので、処理の結果が戻り値として左辺に代入されます

初期設定でこれは、キーボードの上、下、あるいは S、W のいずれかのキー入力をしたら、その処理結果を左辺の vertical 変数に代入するという処理になります。

 キーボードの上矢印、あるいは W を入力すると 0.1f 〜 1.0f の値が代入されます。
差があるのは、押している時間が長いほど 1.0f に近づくように制御されているためです(アナログスティックのイメージ)。

 キーボードの下矢印、あるいは S を入力すると、- 0.1f 〜 - 1.0f の値が代入されます。

 この数値の動きを確認するには、Debug.Logを利用してみてください。
実際にどのような処理が動いているかをConsoleビューにて確認することが出来ます。


  float vertical = Input.GetAxis("Vertical");
 Debug.Log(vertical);   // <= 追加


<検証動画 Debug.Logを使って処理の流れを追う>
https://gyazo.com/253729f72781901bb27dcfa353f4bb70


Input.GetAxisRaw メソッド


 同じ種類のメソッドに、Input.GetAxisRawメソッドがあります。こちらは戻り値として、中間値を取らずに、1.0f、あるいは -1.0f のみを取得してくれます。
書式や使用方法は、Input.GetAxisメソッドと同じです。

void Update(){

    float vertical = Input.GetAxisRaw("Vertical");     // 入力を受け付けると 1.0f か -1.0fのみを戻す
    Debug.Log(vertical);

    float horizontal = Input.GetAxisRaw("Horizontal");      // 入力を受け付けると 1.0f か -1.0fのみを戻す

}


<検証動画 Debug.Logを使って処理の流れを追う>
https://gyazo.com/31ce3b2e2630b33ef19cb0c941c5865a