めーぷるのおもちゃばこ

- アイドルになりたいエンジニア女子の制作日記 -

【Unity】数字キーどれかが押された時、みたいな判断をする方法

なにか特定のキーが押されたときではなくて、ざっくり「数字キーの中からどれかが押された時」とか「A、B、C、D、Eの中からどれかが押されたとき」のタイミングでキーが押された判断をしつつ、どのキーが押されたか、みたいな感じにしたい時の実装の備忘録です。

private KeyCode[] _key = new KeyCode[] 
{
    KeyCode.Alpha0, KeyCode.Alpha1, KeyCode.Alpha2, 
    KeyCode.Alpha3, KeyCode.Alpha4, KeyCode.Alpha5, 
    KeyCode.Alpha6, KeyCode.Alpha7, KeyCode.Alpha8, 
    KeyCode.Alpha9
};

private int _pushKeyNum;

public bool IsNumberKeyDown()
{
    if (Input.anyKeyDown)
    {
        for(int i = 0; i < _key.Length; i++)
        {
            if (Input.GetKeyDown(_key[i]))
            {
                _pushKeyNum = i;
                return true;
            }
        }
    }
    else
    {
        return false;
    }

    return false;
}

public int KeyNumber()
{
    if (IsNumberKeyDown())
    {
        return _pushKeyNum;
    }
    else
    {
        return 0;
    }
}


   

解説

private KeyCode[] _key = new KeyCode[] 
{
    KeyCode.Alpha0, KeyCode.Alpha1, KeyCode.Alpha2, 
    KeyCode.Alpha3, KeyCode.Alpha4, KeyCode.Alpha5, 
    KeyCode.Alpha6, KeyCode.Alpha7, KeyCode.Alpha8, 
    KeyCode.Alpha9
};

数字キーの中からどれかが押されたとき、とか これらのキーの中からどれかが押された時、みたいな判断をするために、キーの配列に判断するためのキーを格納しておきます。
今回の例では数字キーを入れておきました。
   

if (Input.anyKeyDown)
{
    for(int i = 0; i < _key.Length; i++)
    {
        if (Input.GetKeyDown(_key[i]))
        {
            _pushKeyNum = i;
            return true;
        }
    }
}

まずInput.anyKeyDownでなにかしらキーが押されたことを判断し、
そのあとfor文で配列に入っているキーをチェックし、押したキーが配列のなかに入っているものであればtrueを返しています。
今回は数字キーが押されたあと、どの数字が押されたのかを判断したかったので、
int型の_pushKeyNumに押されたキーを数字で格納しています。
後からその数字を数字として使用したかったのでint型にし、配列に入れてる数字の順番と配列番号が一致するのでここではiを入れています。

以上です。