Version: 2021.3
言語: 日本語
入力
モバイルデバイスの入力

Input Manager

Input Managerウィンドウでは、プロジェクトの入力軸とそれに関連するアクションを定義することができます。このウィンドウにアクセスするには、Unityのメインメニューから、 Edit > Project Settings を選択し、右のナビゲーションから Input Manager を選択します。

Input Manager は以下のタイプのコントロールを使用します。

  • Key (キー) は、W、Shift、スペースバーなど、物理キーボード上の任意のキーを指します。
  • Button(ボタン) は、Xbox One コントローラーの X ボタンなど、物体的なコントローラー (ゲームパッドなど) の ボタン を指します。
  • virtual axis (仮想軸、複数形はaxes) は、ボタンやキーとしてコントロールにマッピングされます。ユーザーがコントロールをアクティブにすると、軸は [–1..1] の範囲で値を受け取ります。この値はスクリプトで使用できます。

物理キー

物理キーオプションを使用すると、キーコードを、異なる地域のユーザー間で異なる可能性のある言語固有のレイアウトではなく、物理的なキーボードレイアウトにマッピングすることができます。

例えば、キーボードの 1 行目の文字が “QWERTY” と読めるものと、“AZERTY” と読めるものがあります。つまり、よく知られている “WASD” キーを移動に使用するように特定の操作をスクリプト化した場合、AZERTY 配列のキーボードでは、正しい物理的配置 (矢印キーの配置など) になりません。

物理キーを有効にすると、Unity はユーザーの実際のレイアウトに関係なく、キーの 物理的な位置 を表現するために汎用の ANSI/ISO “Qwerty” レイアウトを使用します。つまり、“Q” キーを指定した場合は、ユーザーのキーボードの該当する位置に別の文字が配置されていたとしても、常に文字キーの最初の行の一番左の文字になります。

ゲーム内のテキスト入力にキー入力を読み込むべきではありません。これは、ユーザーが非ラテン文字を入力することができないためです。代わりに、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 (ジョイスティック番号) この軸を制御する接続されたジョイスティック。特定のジョイスティックを選択することも、すべてのジョイスティックからクエリ入力を行うこともできます。

軸の値は以下のとおりです。

  • ジョイスティックとキーボード入力の場合は –1 と 1 の間。これらの軸のニュートラル位置は 0 です。キーボードのボタンなど、一部のタイプのコントロールは入力の強度に影響されないため、–1、0、1 以外の値を出力しません。
  • マウス入力に対するマウスデルタ (最後のフレームでのマウスの移動値)。ユーザーがマウスを素早く動かす場合、マウス入力軸の値は 1 より大きいか –1 より小さい値になります。

仮想軸の追加、削除、コピー

仮想軸を加えるには、Size (サイズ) フィールドの数値を増やします。リストの一番下に新しい軸が作成されます。新しい軸は、前に記載されている軸のプロパティをコピーします。

仮想軸を削除するには、以下のいずれかを行います。

  • Size フィールドの数値を小さくします。リストの最後の軸が削除されます。
  • 軸を右クリックして Delete Array Element (配列要素を削除) を選択します。
    ノート: この操作を元に戻すことはできません。

仮想軸をコピーするには、仮想軸を右クリックして 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 0joystick button 1joystick button 2
特定のジョイスティックの特定のボタン joystick 1 button 0joystick 1 button 1joystick 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 オブジェクトが毎フレーム一定のスピードで移動します。

入力
モバイルデバイスの入力