Praxis: Konfiguration und Verwenden von Joysticks in Unity

Einleitung

Für einen gegenwärtigen Kundenauftrag sollten wir diesmal keine VR Experiance in Unity zaubern, sondern ein klassisches Game, dass mit einem Joystick verwendet wird.

In diesen Beispiel beschreibe ich kurz, welche Schritte notwendig sind, damit eine Konfiguration gut funktioniert. In diesem Projekt verwende ich den Joystick "Hotas X", der eine Vielzahl von Funktionen besitzt:

Selbstverständlich kann auch ein anderen Joystick verwendet werden.

Konfiguration des Joysticks

Je nach Anwendung ist es notwendig, über das "Input" in Unity die Joystick Knöpfe und Regler entsprechend zu konfigurieren. In diesen Menü kommt man in Unity über folgendes Menü "Edit/Project Settings/Input":

Im Inspector wird nun der Input Dialog angezeigt und man kann hier die Diversen "Achsen" und "Buttons" konfigurieren:

Die hier gewählten Bezeichnungen und "Name" können später in der Programmierung angesprochen werden.

Unity bietet hier die Möglichkeit bis zu 28 Achsen zu definieren, die man verwenden kann:

Bei den Buttons ist es leider nicht so bequem und man muss hier den korrekten Button Namen eintragen:

Ermitteln der Achsen und der Buttons

Möchte man nun die korrekten Axen und Buttons ermitteln, kann das durchaus Zeitaufwändig sein.

Für mich hat es sich bewährt ein kleines Script in die Unity Szene zu importieren, so dass man die aktuellen Werte mitgeteilt bekommt. Hiermit habe ich bspw. ein falsches Mapping aufdecken können, das mir einiges an Schwierigkeiten bereitet hat:

using System.Collections.Generic;  
using UnityEngine;

public class JoystickDebugger : MonoBehaviour {

    // Use this for initialization
    void Start () {
        var names = Input.GetJoystickNames();
        Debug.Log("Connected Joysticks:");
        for(int i = 0; i < names.Length;i++)
        {
            Debug.Log(string.Format("Joystick {0} = {1}", i, names[i]));
        }

    }

    // Update is called once per frame
    void Update () {

        var axisH = Input.GetAxis("Horizontal");
        var axisV = Input.GetAxis("Vertical");
        var axisT = Input.GetAxis("Throddle");
        var axisP = Input.GetAxis("Paddle");

        Debug.Log(string.Format("Axis H {0} / Axis V {1} / Axis T {2} / Axis P {3}", axisH, axisV, axisT, axisP));

        if (Input.GetButton("Fire1"))
        {
            Debug.Log("Fire 1 pressed");
        }

    }
}

Wie man sehr schön an diesen C# Script sieht ist, dass man die Input Parameter ganz einfach mit ihren Namen ansprechen und auswerten kann. Mit Input.GetAxis kann man den Achsenwert ermitteln, der üblicherweise zwischen -1 und 1 liegt und mit Input.GetButton bekommt man "True" oder "False" als Ergebnis, je nachdem ob der Button gedrückt wurde.

Diese Ausgabe diesen Script wird in Unity in der Console als Ergebnis angezeigt:

Sehr Hilfreich zum Ermitteln der Achsen und Buttons ist auch folgendes kleines Programm: http://www.planetpointy.co.uk/joystick-test-application/

Hier kann man sich genau Anzeigen lassen, welche Achsen welche Werte zurückmelden und anschließend die Konfiguration durchführen:

In diesen Beispiel, wird beim Drücken des Fire-Buttons bei mir der "Button 5" zurück gemeldet.

Entsprechend musste ich diesen Konfigurieren. Natürlich mit dem "Wert 4", da die Zählweise nicht mit 1 sondern mit 0 beginnt:

Zusammenfassung

Ich hoffe diese Erklärung konnte Ihnen bei ihren Projekt weiterhelfen. Bitte kontaktieren Sie mich, wenn Sie Hilfe benötigen oder hinterlassen Sie einen Kommentar.