【Unity】キーボード入力の検出方法まとめ。GetKey()メソッドのサンプルスクリプト。

2023年2月9日

どうも、だらはです。
今回はキーボード入力の検出方法についてまとめたいと思います。
具体的には以下を紹介します。

  • Input.GetKey()メソッド
  • Input.GetKeyDown()メソッド
  • Input.GetKeyUp()メソッド

スポンサーリンク

キーボード押下を検出(連続)

キーボードのキーが押下されているかどうかはInputクラスGetKey()メソッドから取得できます。
キーが押下されている間はずっとtrue、押されていない間はfalseとなります。

public static bool GetKey(KeyCode key);
public static bool GetKey(string name);

引数は、KeyCodeと文字列の両方で与えることができます。
文字列だとスペルミスなどが怖いので、KeyCodeで入力する方が良いかもしれません。
KeyCodeはUnity公式HPに記載されています。

◆例) TabかSpaceキーを入力するとTrueを表示するスクリプト

using UnityEngine;

public class KeyIn : MonoBehaviour
{
    private void OnGUI()
    {
        Rect rect1 = new Rect(10, 50, 300, 100);
        Rect rect2 = new Rect(10, 100, 300, 150);
        GUI.Label(rect1, "" + Input.GetKey(KeyCode.Tab));
        GUI.Label(rect2, "" + Input.GetKey("space"));
    }
}

キーボード押下を検出(ON/OFFフラグ)

キーボードのキーを押下した瞬間、離した瞬間を検出するにはInputクラスGetKeyDown()メソッドGetKeyUp()メソッドを用います。
このメソッドはマウスボタンのGetMouseButtonDown()メソッド, GetMouseButtonUp()メソッドなどと同様の挙動です。

public static bool GetKeyDown(KeyCode key);
public static bool GetKeyDown(string name);

public static bool GetKeyUp(KeyCode key);
public static bool GetKeyUp(string name);

◆例) AかBキーを押して/離した回数を数えるスクリプト

using UnityEngine;

public class KeyIn : MonoBehaviour
{
    bool KeyAInUp = false;
    bool KeyAInDw = false;
    bool KeyBInUp = false;
    bool KeyBInDw = false;

    int KeyAUpDw = 0;
    int KeyBUpDw = 0;

    void Update()
    {
        KeyAInDw = Input.GetKeyDown(KeyCode.A);
        if (KeyAInDw) { KeyAUpDw++; }
        KeyAInUp = Input.GetKeyUp(KeyCode.A);
        if (KeyAInUp) { KeyAUpDw++; }

        KeyBInDw = Input.GetKeyDown("b");
        if (KeyBInDw) { KeyBUpDw++; }
        KeyBInUp = Input.GetKeyUp("b");
        if (KeyBInUp) { KeyBUpDw++; }
    }

    private void OnGUI()
    {
        Rect rect3 = new Rect(10, 150, 300, 200);
        Rect rect4 = new Rect(10, 200, 300, 250);
        GUI.Label(rect3, "Aを押して話した回数:" + KeyAUpDw);
        GUI.Label(rect4, "Bを押して話した回数:" + KeyBUpDw);
    }
}

◆上記全てをまとめたスクリプト

using UnityEngine;

public class KeyIn : MonoBehaviour
{
    bool KeyAInUp = false;
    bool KeyAInDw = false;
    bool KeyBInUp = false;
    bool KeyBInDw = false;

    int KeyAUpDw = 0;
    int KeyBUpDw = 0;

    void Update()
    {
        KeyAInDw = Input.GetKeyDown(KeyCode.A);
        if (KeyAInDw) { KeyAUpDw++; }
        KeyAInUp = Input.GetKeyUp(KeyCode.A);
        if (KeyAInUp) { KeyAUpDw++; }

        KeyBInDw = Input.GetKeyDown("b");
        if (KeyBInDw) { KeyBUpDw++; }
        KeyBInUp = Input.GetKeyUp("b");
        if (KeyBInUp) { KeyBUpDw++; }
    }

    private void OnGUI()
    {
        Rect rect1 = new Rect(10, 50, 300, 100);
        Rect rect2 = new Rect(10, 100, 300, 150);
        GUI.Label(rect1, "" + Input.GetKey(KeyCode.Tab));
        GUI.Label(rect2, "" + Input.GetKey("space"));

        Rect rect3 = new Rect(10, 150, 300, 200);
        Rect rect4 = new Rect(10, 200, 300, 250);
        GUI.Label(rect3, "Aを押して話した回数:" + KeyAUpDw);
        GUI.Label(rect4, "Bを押して話した回数:" + KeyBUpDw);
    }
}

最後に

いかがでしたでしょうか。

  • Input.GetKey()メソッド
  • Input.GetKeyDown()メソッド
  • Input.GetKeyUp()メソッド

今回は以上を紹介しましたが、ほぼマウス入力と同じ形ですね。
一つ覚えれば他のメソッドも覚えられるので是非覚えてみてください。
以上、だらはでした。

追記:2023.2.9

文字が小さいとのコメントを頂けましたので追記したいと思います!
結論としては、最初のコードを以下のように追記して頂けると文字を大きくすることができます。

using UnityEngine;

public class KeyIn : MonoBehaviour
{
    private void OnGUI()
    {
        Rect rect1 = new Rect(10, 50, 300, 100);
        Rect rect2 = new Rect(100, 100, 300, 150);
        GUI.Label(rect1, "" + Input.GetKey(KeyCode.Tab));

        //追記箇所
        GUIStyle style = new GUIStyle();
        style.fontSize = 100;
        GUI.Label(rect2, "" + Input.GetKey("space"), style);
    }
}

どのように手法を探したかというと、
Unityのスクリプトリファレンスにて「GUI.Label」を調べると、以下の引数を取ることが確認できました。

public static void Label (Rect position, string text);
public static void Label (Rect position, Texture image);
public static void Label (Rect position, GUIContent content);
public static void Label (Rect position, string text, GUIStyle style);
public static void Label (Rect position, Texture image, GUIStyle style);
public static void Label (Rect position, GUIContent content, GUIStyle style);

さらに、Unityのスクリプトリファレンスで「GUIStyle」を調べると、fontSizeという変数を取ることが分かりました。
ですので、GUIStyleをインスタンス化して、GUIStyle.fontSizeに値を代入することでフォントサイズを変更しました。

以上、だらはでした!

スポンサーリンク

基礎

Posted by daraha_gm