統合エンジンキーボードキーと意味単位キー


キー定義


ユーザーにより意味のある体験を提供するには、さまざまな選択肢を提供する必要があります.キーボード入力により、ユーザーはゲームの機能を簡単に使用でき、プログラムを自由に複数の方法で使用することができます.
上記の理由により、現在のプロジェクトはキーボードキーと意味単位キーを定義し、管理します.
実際には、Unity Engineが提供するInput Managerを使用できますが、個人的にはあまり満足していません.いくつかの機能しか選択していません.
現在のアイテムは、次のようにキーボードキーとセマンティック単位キーを定義します.

キーボードキー


キーボードキーは、物理的なキーボードに存在するキーのセットです.
A~Z, a~z
키보드 0~9
키패드 0~9
F1~F12
등등...

セマンティックたんいキー


「意味単位キー」は、実行プログラムが持つ操作のセットです.
이동 키
점프 키
공격 키
인벤토리 키
등등..

キーセットの設定


キーボードキーは、UnityEngineを列挙します.キーコードとして定義され、列挙要素にはキーボードキーが含まれています.詳細については、UnityEngine.KeyCode公式ドキュメントを参照してください.
意味単位キーも列挙的に管理されます.現在のアイテムには、[意味キー別](By Effective Key)の列挙が宣言されています.
enum KeyType : int
{
	None,
	MoveL, MoveR, // 좌, 우 이동
   	Sit, Jump, Dash, // 플레이어가 기본적으로 취할 수 있는 동작
	Skill1, Skill2, Skill3,
	Inventory, ESC,
	등등.. 필요한 키 세팅들
}

キーセット間の関係の定義


キーボードキーと意味単位キーを設定した後、2つのキーセットの関係を定義する必要があります.この関係はみんなのゲームが実現するにつれて千差万別になります.
鍵セット間の関係をFとして定義する.キーセットI、意味単位キーセットKの場合、関係Fは以下のようになる.
F: I → K
つまり、次のリレーションシップテーブルを作成します.
// 방향키 조작을 위해
UnityEngine.KeyCode.LeftArrow = KeyType.MoveL
UnityEngine.KeyCode.RightArrow = KeyType.MoveR
UnityEngine.KeyCode.DownArrow = KeyType.Sit
UnityEngine.KeyCode.C = KeyType.Jump

// WASD 조작을 위해
UnityEngine.KeyCode.A = KeyType.MoveL
UnityEngine.KeyCode.D = KeyType.MoveR
UnityEngine.KeyCode.S = KeyType.Sit
UnityEngine.KeyCode.Space = KeyType.Jump

등등.. 키 집합 간 관계를 설정해준다.

入力状態を保存する配列


鍵のセットの関係を定義したら、実際の鍵入力情報を格納するためにスペースを空ける必要があります.現在のプロジェクトでは、1次元boolean配列Bを作成および管理しています.
Unity EngineはInputクラスに対してKey Down,Key Up,Key Presingを検出する関数を提供する.
UnityEngine.Input.GetKeyDown(KeyCode)
UnityEngine.Input.GetKeyUp(KeyCode)
UnityEngine.Input.GetKey(KeyCode) // Pressing 상태 감지
現在のアイテムは、PressType列挙タイプを作成することによって、各KeyCodeのKeyDown、KeyUp、およびKeyPresingを区別します.PressTypeが列挙した要素セットはPとして定義される.
enum PressType
{
	Down, Up, Pressing
}
要するに、各キーには3つのブール値があります.
従って、本明細書で定義される1次元Boolean配列Bは、(キーボードキーセットIの要素数)*3の長さを有する.すなわちboolean配列は次のようになります.
{ Input.GetKeyDown(KeyCode.A), Input.GetKeyUp(KeyCode.A), Input.GetKey(KeyCode.A), ... } : bool[]
本稿の結論は,集合IとPを用いてブール集合Bの演算を生成することである.集合I,Pの関数Gを定義し,以下に示す.
G: (I, P) → B

逆関係の多変性問題の解決


F:I→KセットとG:(I,P)→Bセットを得た.しかし,ユーザが実際に暴露する集合はKである.コレクションBを作成するには、Inverse Fを使用する必要があります.最終的には次の関係になるでしょう.
G: (Inverse F, P) → B
一方、Inverse Fは、1つの意味単位キーと複数のキーボードキーとの関係である.集合Kにおける任意のキーは、集合Iにおける複数のキーに関係する.これは関数の多星と呼ばれています.難しいかもしれませんが、この問題は思ったより簡単に解決できます.
KeyType.JumpはUnityEngineです.KeyCode.SpaceとUnityEngine.KeyCode.Cと関係があると仮定します.機能は、1つの入力時に動作し、2つの入力時に動作します.すなわち、関係セットIにおけるキーとOR演算が実行される.
実際のコンピュータシステムの疑似コードは以下の通りです.
1. Inverse F의 입력 k∈K가 집합 I'={i|i∈I}를 출력한다.
2. 판단하고 싶은 입력 유형 p∈P 1개를 결정한다.
3. G: (I', p) → B를 수행한다.
	3-1. 집합 I'의 모든 원소 i에 대해, 입력 유형 p에 대해, 다음을 수행한다.
       	if, p == PressType.Down and Input.GetKeyDown(i) => return true;
        if, p == PressType.Up and Input.GetKeyUp(i) => return true;
        if, p == PressType.Pressing and Input.GetKey(i) => return true;
4. return false;