[Unity] キーコンフィグの実装

ゲームでキーコンフィグを実装する方法の紹介です。
これが実現できれば、ユーザの設定により自由なキー割り当てを設定できるようになります。

今回は簡易的に実装してみます。

KeyConfig.cs

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

public class KeyConfig : MonoBehaviour {
    // キーコンフィグの設定情報
    public static Dictionary<string, KeyCode> Config
        = new Dictionary<string, KeyCode>();

    // キー状態取得メソッド
    public static bool GetKey(string key) {
        return Input.GetKey(Config[key]);
    }
    public static bool GetKeyDown(string key) {
        return Input.GetKeyDown(Config[key]);
    }
    public static bool GetKeyUp(string key) {
        return Input.GetKeyUp(Config[key]);
    }
}

動的なキー割り当てはDictionaryにより実現できます。
そして、各種キー状態取得メソッドを実装しておけば簡単に利用できます。

実際の使い方の例です。

KeyConfigTest.cs

using UnityEngine;
using System.Collections;

public class KeyConfigTest : MonoBehaviour {
    // キーコンフィグ設定
    void Start() {
        KeyConfig.Config["Left"] = KeyCode.LeftArrow;
        KeyConfig.Config["Right"] = KeyCode.RightArrow;
        KeyConfig.Config["Shoot"] = KeyCode.Z;
    }

    // キーコンフィグ使用例
    void Update() {
        // 自機の移動
        if ( KeyConfig.GetKeyDown("Left") ) {
            Debug.Log("Move Left");
        }
        if ( KeyConfig.GetKeyDown("Right") ) {
            Debug.Log("Move Right");
        }

        // 自機の停止
        if ( KeyConfig.GetKeyUp("Left") ) {
            Debug.Log("Stop Left");
        }
        if ( KeyConfig.GetKeyUp("Right") ) {
            Debug.Log("Stop Right");
        }

        // ショットの発射
        if ( KeyConfig.GetKey("Shoot") ) {
            Debug.Log("Shooting!");
        }
    }
}

使い方はInput.GetKey~メソッドと一緒です。
上記の例はDictionaryのキーをstring型としていますが、ここは整数型でも列挙子型でも構いません。

非常に簡単に実現できますが、キーボード・マウス入力しか受け付けないというデメリットもあります。
ゲームパッドのボタンやスティックの入力を受け付けることは出来ません。

ゲームパッドの入力状態を取得するにはUnityのInputManagerにて設定を行い、Input.GetButton~、Input.GetAxis~メソッドを用いることにより行います。
ただし、これらのキー割り当ては実行時には変更できず、参照することも出来ません。

これらのキーコンフィグを実装する方法は次回にご紹介したいと思います。