Unity は標準の Unity Input API の一部として Apple が提供する標準化された Game Controller Input API をサポートしています。
Input.GetJoystickNames
を呼び出すと、接続されたされているすべてのコントローラーの名前が列挙されます。名前は [$profile_type,$connection_type] joystick $number by $model
のパターンに従います。$profile_type は “basic” か “extended” のいずれかであり、$connection_type は “wired” か “wireless” です。それは接続されたコントローラーの種類を検出するために使用されます。コントローラーが接続されているかいないかを検出するには、このリストを数秒ごとに再チェックする必要があります。以下は C# の例です。
private bool connected = false;
IEnumerator CheckForControllers() {
while (true) {
var controllers = Input.GetJoystickNames();
if (!connected && controllers.Length > 0) {
connected = true;
Debug.Log("Connected");
} else if (connected && controllers.Length == 0) {
connected = false;
Debug.Log("Disconnected");
}
yield return new WaitForSeconds(1f);
}
}
void Awake() {
StartCoroutine(CheckForControllers());
}
コントローラーが検知されたら、オンスクリーンのタッチ制御を非表示にしたり、コントローラー入力の補完として使用することも可能です。次に、Game Controller の入力を確認します。
実際の入力スキームは、開発しているゲームの種類によって大きく異なります。しかし基本的には軸やボタンの状態を読みとることです。以下の 2D ゲームステージを簡単な例として取り上げます。
プレイヤーは、左右に移動し、悪人に飛び掛かり、発砲することができる豆のようなキャラクターを制御します。デフォルトでは、Unity Input の Horizontal (水平方向) 軸は基本的なプロファイルのゲームコントローラーの D-pad と、拡張されたプロファイルコントローラーの左のアナログスティックにマッピングされます。そのため、キャラクターを前後に移動させるコードはとてもシンプルです。
float h = Input.GetAxis("Horizontal");
if (h * rigidbody2D.velocity.x < maxSpeed)
rigidbody2D.AddForce(Vector2.right * h * moveForce);
Unity の Input 設定で “Jump” (ジャンプする) アクションと “Fire” (発砲する) アクションを設定できます。
Unity のエディターメニューから Edit > Project Settings の順にアクセスし、Input カテゴリを選択します。
“Jump” のアクションにはジョイスティックの “A” ボタンを、“Fire” には “X” ボタンを選びます。
Unity Input 設定で以下のアクションを開き、“Jump” アクションには “joystick button 14” を、“FIre” には “joystick button 15” を指定します。
コードの処理は以下のようになります。
if (Input.GetButtonDown("Jump") && grounded) {
rigidbody2D.AddForce(new Vector2(0f, jumpForce));
}
if (Input.GetButtonDown("Fire")) {
Rigidbody2D bulletInstance = Instantiate(rocket, transform.position, Quaternion.Euler(new Vector3(0,0,0))) as Rigidbody2D;
bulletInstance.velocity = new Vector2(speed, 0);
}
以下の表は Unity の Input 設定でコントローラー入力をマッピングするのに役立ちます。
Name | キーコード | 軸 |
---|---|---|
A | joystick button 14 | joystick axis 14 |
B | joystick button 13 | joystick axis 13 |
X | joystick button 15 | joystick axis 15 |
Y | joystick button 12 | joystick axis 12 |
Left Stick | 該当なし | Axis 1 (X) - Horizontal、Axis 2 (Y) - Vertical |
Right Stick | 該当なし | Axis 3 - Horizontal、Axis 4 - Vertical |
D-pad Up | joystick button 4 | Basic profile only: Axis 2 (Y) |
D-pad Right | joystick button 5 | Basic profile only: Axis 1 (X) |
D-pad Down | joystick button 6 | Basic profile only: Axis 2 (Y) |
D-pad Left | joystick button 7 | Basic profile only: Axis 1 (X) |
Pause | joystick button 0 | 該当なし |
L1/R1 | joystick button 8 / joystick button 9 | joystick axis 8 / joystick axis 9 |
L2/R2 | joystick button 10 / joystick button 11 | joystick axis 10 / joystick axis 11 |
プロジェクトのスクリプトが Input.GetJoystickNames
を参照している場合、Unity はプロジェクトの Game Controller フレームワークのみを含みます。Unity iOS Runtime は、使用可能な場合、動的にフレームワークを読み込みます。
Apple のドキュメントには、コントローラー入力はあくまでもオプションとして扱わねばならず、それ無しでもプレイ可能でなければならないと明記されています。
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.