[フレーム]
Version: 2018.3 (switch to 2019.1 )
Language: English
iOS Scripting
Advanced Unity Mobile Scripting
Other Versions
Cannot access other versions offline!

iOS Game Controller support

Unity supports a standardized Game ControllerA device to control objects and characters in a game.
See in Glossary
Input API provided by Apple as part of the standard Unity Input API.

Detecting attached Game Controllers

Calling Input.GetJoystickNames will enumerate the names of all attached controllers. Names follow the pattern: [$profile_type,$connection_type] joystick $number by $model. $profile_type might be either "basic" or "extended", $connection_type is either "wired" or "wireless". It could be used to detect the kind of connected controller. It is worth re-checking this list every few seconds to detect if controllers have been attached or detached. Here’s a C# example:

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());
}

When controllers are detected you can either hide on-screen touch controls or amend them to supplement controller input. The next task is to check for Game Controller input.

Handling input

The actual input scheme is highly dependent on the type of game you are developing. But it’s essentially about reading axes and button states. Take the following 2D game stage as a simple example:

The player controls the bean character, which can move right or left, jump and fire at the bad guys. By default, the Unity Input "Horizontal" axis is mapped to basic profile game controller D-pad and the left analog stick on extended profile controllers. So the code used to move the character back and forth is pretty simple:

float h = Input.GetAxis("Horizontal");
if (h * rigidbody2D.velocity.x < maxSpeed)
 rigidbody2D.AddForce(Vector2.right * h * moveForce);

You can set up jump and fire actions in Unity’s Input settings.

  • Access it from the Unity editor menu as follows: Edit > Project SettingsA broad collection of settings which allow you to configure how Physics, Audio, Networking, Graphics, Input and many other areas of your Project behave. More info
    See in Glossary
    , then select the Input category.

  • Pick joystick button "A" for the "Jump" action and "X" for "Fire".

  • Open the following actions in the Unity Input settings and specify "joystick button 14" for "Jump" and "joystick button 15" for "Fire".

The code handling then looks like this:

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);
}

The following cheatsheet should help you map controller input in the Unity Input settings:

Name KeyCode Axis
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 N/A Axis 1 (X) - Horizontal, Axis 2 (Y) - Vertical
Right Stick N/A 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 N/A
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

Final notes on Game Controller API support

Unity only includes the Game Controller framework in the project if a script in the project references Input.GetJoystickNames. Unity iOSApple’s mobile operating system. More info
See in Glossary
Runtime loads the framework dynamically, if it is available.

Apple documentation explicitly states that controller input must be optional and your game should be playable without them.


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?

Is something described here not working as you expect it to? It might be a Known Issue. Please check with the Issue Tracker at issuetracker.unity3d.com.

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:

Thanks for helping to make the Unity documentation better!

iOS Scripting
Advanced Unity Mobile Scripting
Copyright © 2019 Unity Technologies. Publication: 2018.3-002V. Built: 2019年04月15日.

AltStyle によって変換されたページ (->オリジナル) /