| | |—| | 重要: Input Manager は古い機能であり、新しいプロジェクトには推奨されません。新しいプロジェクトの場合は、Input System パッケージを使用します。 |
Input Manager (入力マネージャー) ウィンドウでは、プロジェクトの入力軸とそれに関連する動作を定義できます。このウィンドウにアクセスするには、Unity のメインメニューから Edit > Project Settings を選択し、右のナビゲーションから Input Manager を選択します。
Input Manager は以下のタイプのコントロールを使用します。
Physical Keys (物理キー) オプションを使用すると、(ユーザーの地域によって異なる場合がある言語別のレイアウトではなく) 物理的なキーボードレイアウトにキーコードをマップできます。
例えば、1 行目の文字が “QWERTY” と並ぶキーボードもあれば、“AZERTY” と並ぶものもあります。つまり、一般的に知られる “WASD” キーを使用して移動を行うようにコントロールのスクリプトを記述した場合、AZERTY レイアウトのキーボードでは、(矢印キーの配列のような) 物理的に正しい配列になりません。
Unity で Physical Keys オプションを有効にすると、ユーザーが使用している実際のレイアウトに関係なく、キーの物理的な位置を表す一般的な ANSI/ISO の “QWERTY” レイアウトが使用されます。つまり、“Q” キーを指定した場合、ユーザーのキーボードでその位置に別の文字が割り当てられていたとしても、必ず文字キーの最初の行の一番左の文字になります。
ゲーム内のテキスト入力に対するキー入力の読み取りは、ユーザーがラテン文字以外の文字を入力できなくなるため、行うべきではありません。代わりに Input.compositionString を使用してください。
作成するすべてのプロジェクトには、デフォルトで多くの入力軸が作成されています。これらの軸を使用すると、キーボード、マウス、ジョイスティックの入力を、プロジェクトですぐに使用できます。
これらの軸の詳細を確認するには、Input Manager ウィンドウを開き、軸の名前の横にある矢印をクリックしてそのプロパティを展開します。
各入力軸には以下のプロパティがあります。
| プロパティ | 機能 |
|---|---|
| 名前 | 軸の名前です。スクリプトから軸にアクセスするために使用します。 |
| Descriptive Name、Descriptive Negative Name (正方向の通称、負方向の通称) | これらの値は廃止予定で、機能しません。以前は起動時の Rebind Controls 画面にユーザー向けに表示されましたが、この画面も廃止されました。 |
| Negative Button、Positive Button (負方向ボタン、正方向ボタン) | 軸をそれぞれ負の方向と正の方向に押すためのコントロールです。キーボードのキー、ジョイスティックやマウスのボタンなどで使用できます。 |
| Alt Negative Button、Alt Positive Button (負方向ボタン (副)、正方向ボタン (副)) | 軸をそれぞれ負の方向と正の向きに押すための別の (補足的) コントロール。 |
| Gravity | 何も入力がない場合に軸がニュートラルになるための速さ (ユニット/秒)。 |
| Dead (無効) | アプリケーションが動きを認識するために、ユーザーがアナログスティックを動かす必要がある距離を指します。ランタイムでのこの範囲内の入力は、どのアナログデバイスであっても null とみなされます。 |
| Sensitivity (感度) | 軸がターゲット値に向かうスピード (ユニット/秒) です。デジタルデバイスのみに適用されます。 |
| Snap (スナップ) | これを有効にすると、逆方向に対応するボタンを押すと軸の値が 0 にリセットされます。 |
| タイプ | 軸を制御する入力の種類です。以下の値から選択します。 - Key or Mouse button (キーまたはマウスボタン) - Mouse Movement (マウスの動作) - Joystick 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 になります。これにより、複数のコントローラーからの入力を処理する単一のスクリプトを作成できます。
例
Horizontal 軸と Vertical 軸からの入力を transform.Translate メソッドと使用して、ゲームオブジェクトを XZ スペース (前、後、左、右) に移動できます。以下のコードを、移動させたいゲームオブジェクトにアタッチされたスクリプトの update() メソッドに追加します。
float moveSpeed = 10;
//Define the speed at which the object moves.
float horizontalInput = Input.GetAxis("Horizontal");
//Get the value of the Horizontal input axis.
float verticalInput = Input.GetAxis("Vertical");
//Get the value of the Vertical input axis.
transform.Translate(new Vector3(horizontalInput, verticalInput, 0) * moveSpeed * Time.deltaTime);
//Move the object to XYZ coordinates defined as horizontalInput, 0, and verticalInput respectively.
Time.deltaTime は、最後のフレームからの経過時間を表します。moveSpeed 変数に Time.deltaTime を乗算すると、ゲームオブジェクトが毎フレーム一定のスピードで移動します。
InputManager