Input Managerウィンドウでは、プロジェクトの入力軸とそれに関連するアクションを定義することができます。このウィンドウにアクセスするには、Unityのメインメニューから、 Edit > Project Settings を選択し、右のナビゲーションから Input Manager を選択します。
Input Manager は以下のタイプのコントロールを使用します。
The Physical keys option allows you to map key codes to the physical keyboard layout, rather than to the language-specific layout that may vary between users in different regions.
For example, on some keyboards the first row of letters reads “QWERTY”, and on others it reads “AZERTY”. This means if you scripted specific controls to use the well known “WASD” keys for movement, they would not be in the correct physical arrangement (like the arrow-key arrangement) on an AZERTY-layout keyboard.
With Physical Keys enabled, Unity uses a generic ANSI/ISO “Qwerty” layout to represent the physical location of the keys regardless of the user’s actual layout. This means if you specify the “Q” key, it will always be the left-most letter on the first row of letter keys, even if the user’s keyboard has a different letter in that position.
Note, you should not read key input for in-game text input, because this will not allow users to enter non-Latin characters. Instead, use Input.compositionString
.
作成するすべてのプロジェクトには、デフォルトで多くの入力軸があります。これらの軸を使用すると、キーボード、マウス、ジョイスティックの入力をプロジェクトですぐに使用できます。
これらの軸の詳細を見るには、Input Manager ウィンドウを開き、軸の名前の横にある矢印をクリックしてそのプロパティを展開します。
各入力軸には以下のプロパティがあります。
プロパティ | 機能 |
---|---|
Name (名前) | 軸名。これを使用して、スクリプトから軸にアクセスできます。 |
Descriptive Name、Descriptive Negative Name (正方向の通称、負方向の通称) | これらの値は廃止予定で、機能しません。以前は、ユーザー用に起動時に再バインドコントロール画面上に表示されましたが、この画面も廃止されました。 |
Negative Button、Positive Button (負方向ボタン、正方向ボタン) | 軸をそれぞれ負の方向と正の向きに押すためのコントロール。これらは、キーボードのキー、ジョイスティックやマウスのボタンなどに使用可能です。 |
Alt Negative Button、Alt Positive Button (負方向ボタン (副)、正方向ボタン (副)) | 軸をそれぞれ負の方向と正の向きに押すための別の (補足的) コントロール。 |
Gravity (重力) | 何も入力がない場合に軸がニュートラルになるための速さ (ユニット/秒)。 |
Dead (無効) | アプリケーションが動きを認識するために、 ユーザーがアナログスティックを動かす必要がある距離。ランタイムに、すべてのアナログデバイスからのこの範囲内の入力は null とみなされます。 |
Sensitivity (感度) | 軸がターゲット値に向かう速さ (ユニット/秒)。これはデジタルデバイスだけに使用できます。 |
Snap (スナップ) | これを有効にすると、逆方向に対応するボタンを押すと軸の値が 0 にリセットされます。 |
Type (タイプ) | 軸を制御する入力タイプ。以下の値から選択します。 - キーまたはマウスボタン - マウス動作 - ジョイスティック軸 |
Axis (軸) | この軸を制御する接続されたデバイスの軸。 |
JoyNum (ジョイスティック番号) | この軸を制御する接続されたジョイスティック。特定のジョイスティックを選択することも、すべてのジョイスティックからクエリ入力を行うこともできます。 |
軸の値は以下のとおりです。
仮想軸を加えるには、Size (サイズ) フィールドの数値を増やします。リストの一番下に新しい軸が作成されます。新しい軸は、前に記載されている軸のプロパティをコピーします。
仮想軸を削除するには、以下のいずれかを行います。
仮想軸をコピーするには、仮想軸を右クリックして Duplicate Array Element を選択します。
キーまたはボタンを軸にマップするには、その名前を Input Manager の Positive Button または Negative Button プロパティに入力します。
キーの名前は以下の命名規則に従います。
キーファミリー | 命名規則 |
---|---|
文字キー |
a , b , c … |
数字キー |
1 , 2 , 3 … |
矢印キー |
up , down , left , right
|
テンキー |
[1] , [2] , [3] , [+] , [equals] … |
修飾キー |
right shift , left shift , right ctrl , left ctrl , right alt , left alt , right cmd , left cmd
|
特殊キー |
backspace , tab , return , escape , space , delete , enter , insert , home , end , page up , page down
|
ファンクションキー |
f1 , f2 , f3 … |
マウスボタンには、mouse 0、mouse 1、mouse 2
などの名前が付けられます。
ジョイスティックのボタンには、以下の命名規則が適用されます。
ボタンの原点 | 命名規則 |
---|---|
任意のジョイスティックの特定のボタン |
joystick button 0 、joystick button 1 、joystick button 2 … |
特定のジョイスティックの特定のボタン |
joystick 1 button 0 、joystick 1 button 1 、joystick 2 button 0 … |
Input.GetKey
と上記の命名規則によって、特定のキーやボタンの入力を以下の例のようにクエリできます。
Input.GetKey("a");
キーにアクセスするもう 1 つの方法は、KeyCode
列挙型を使用することです。
スクリプトから仮想軸にアクセスするには、軸名を使用します。
例えば、水平軸の現在の値をクエリして変数に格納するには、以下の例のように Input.GetAxis
を使用します。
float horizontalInput = Input.GetAxis ("Horizontal");
動きではなくイベントを表す軸 (例えば、ゲーム内での武器の発射) の場合は、代わりに Input.GetButtonDown
を使用します。
2 つ以上の軸が同じ名前を持つ場合、クエリは最大の絶対値を持つ軸を返します。これにより、1 つの軸名に複数の入力デバイスを割り当てることができます。
例えば、Horizontal という名前の 2 つの軸を作成し、1 つをキーボード入力に割り当て、もう 1 つをジョイスティック入力に割り当てることができます。ユーザーがジョイスティックを使用する場合、入力はジョイスティックから行われ、キーボード入力は null です。それ以外の場合、入力はキーボードから行われ、ジョイスティックの入力は null です。これにより、複数のコントローラーからの入力を処理する単一のスクリプトを書くことができます。
例
水平 軸と 垂直 軸からの入力と transform.Translate
メソッドを使用して、ゲームオブジェクトを XZ スペース (前、後、左、右) に移動できます。以下のコードを移動したいゲームオブジェクトにアタッチされたスクリプトの update()
メソッドに加えます。
float moveSpeed = 10;
//Define the speed at which the object moves.
float horizontalInput = Input.GetAxis("Horizontal");
//Horizontal の入力軸の値を取得
float verticalInput = Input.GetAxis("Vertical");
//Vertical の入力軸の値を取得
transform.Translate(new Vector3(horizontalInput, verticalInput, 0) * moveSpeed * Time.deltaTime);
//それぞれ horizontalInput, 0, verticalInput によって定義された XYZ 座標にオブジェクトを移動します
Time.deltaTime
は最後のフレームから経過した時間を表します。moveSpeed
変数に Time.deltaTime
を乗算すると、moveSpeed
オブジェクトが毎フレーム一定のスピードで移動します。