Überblick

Controller sind mit zusätzlichen Funktionen ausgestattet, die die Interaktion und Immersion der Spieler erheblich verbessern. Die Haptik, Bewegungssensoren und Lichtfunktionen von Android-Gamecontrollern tragen besonders zu einem vertieften und bereichernden Spielerlebnis bei. Jede Funktion stimuliert auf einzigartige Weise die Sinne des Spielers und ermöglicht sinnvollere und intuitivere Interaktionen im Spiel.

Haptik

Die Haptik in Android-Spielecontrollern ist eine wichtige Technologie, die während des Spiels realistisches haptisches Feedback bietet.

Die Haptiktechnologie vermittelt durch Vibrationen oder Bewegungen physische Empfindungen. Wenn beispielsweise im Spiel eine Explosion auftritt, vibriert der Controller, sodass der Spieler die Auswirkung realistisch spüren kann. Darüber hinaus können subtile Vibrationen mit dem Klang einer Figur synchronisiert werden, die gerade läuft oder läuft. So entsteht ein realistischeres Erlebnis. Diese Art haptisches Feedback ermöglicht es den Spielern, verschiedene Ereignisse im Spiel physisch zu spüren.

Diese Technologie maximiert das Eintauchen der Spieler, verstärkt emotionale Reaktionen und bereichert die Dynamik des Spiels. Die Haptikeinstellungen in Android-Gamecontrollern bieten nicht nur mehr kreative Möglichkeiten für Spieleentwickler, sondern bieten den Spielern auch ein realistischeres Spielerlebnis als je zuvor.

fun triggerVibrationMultiChannel(
  deviceId: Int, leftIntensity: Int, leftDuration: Int,
  rightIntensity: Int, rightDuration: Int) {
  val inputDevice = InputDevice.getDevice(deviceId)
  val vibratorManager = inputDevice!!.vibratorManager
  if (vibratorManager != null) {
    val vibratorIds = vibratorManager.vibratorIds
    val vibratorCount = vibratorIds.size
    if (vibratorCount > 0) {
      // We have an assumption that game controllers have two vibrators
      // corresponding to a left motor and a right motor, and the left
      // motor will be first.
      updateVibrator(vibratorManager.getVibrator(vibratorIds[0]), leftIntensity, leftDuration)
      if (vibratorCount > 1) {
        updateVibrator(vibratorManager.getVibrator(vibratorIds[1]), rightIntensity, rightDuration)
      }
    }
  }
}

fun updateVibrator(vibrator: Vibrator?, intensity: Int, duration: Int) {
  if (vibrator != null) {
    if (intensity == 0) {
      vibrator.cancel()
    } else if (duration > 0) {
      vibrator.vibrate(VibrationEffect.createOneShot(duration.toLong(), intensity))
    }
  }
}

Zur Verwendung der Vibration werden eine Funktion und eine Berechtigung festgelegt.

<application ...>
  ...
  <uses-feature android:name="android.hardware.gamepad" android:required="true"/>
  <uses-permission android:name="android.permission.VIBRATE"/>
  ...
</application>

Weitere Informationen zu VibratorManager und zum App-Manifest.

Bewegungssensoren

Eine der innovativsten Technologien zur Verbesserung des Spielerlebnisses ist der Android-Spielecontroller, der mit einem Bewegungssensor ausgestattet ist. Diese Technologie erkennt präzise physische Bewegungen der Nutzer und wandelt diese Daten in Aktionen innerhalb des Spiels um, sodass das Spielerlebnis intuitiver und immersiver wird. In dieser Einführung erfahren Sie, wie die Bewegungssensorfunktionen in Android-Spielecontrollern funktionieren.

Bewegungssensoren sind in der Regel in Gyroskopen und Beschleunigungsmessern integriert, um Bewegungen und Ausrichtungen von Nutzern zu erkennen.

Er muss Beschleunigungs- und Gyroskop-Listener-Klassen implementieren und diese Listener beim Sensor-Manager des Controllers registrieren.

fun setIntegratedAccelerometerActive(deviceId: Int) {
  val device = InputDevice.getDevice(deviceId)
  val sensorManager = device?.sensorManager
  val accelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER)
  if (accelerometer != null) {
    val accelerometerListener =
      GameControllerAccelerometerListener(accelerometer)
    sensorManager.registerListener(
      accelerometerListener, accelerometer,
      SensorManager.SENSOR_DELAY_GAME
    )
  }
}

fun setIntegratedGyroscopeActive(deviceId: Int) {
  val device = InputDevice.getDevice(deviceId)
  val sensorManager = device?.sensorManager
  val gyroscope = sensorManager?.getDefaultSensor(Sensor.TYPE_GYROSCOPE)
  if (gyroscope != null) {
    val gyroscopeListener = GameControllerGyroscopeListener(gyroscope)
    sensorManager.registerListener(
      gyroscopeListener, gyroscope,
      SensorManager.SENSOR_DELAY_GAME
    )
  }
}

class GameControllerAccelerometerListener(private val listenerAccelerometer: Sensor?) :
  SensorEventListener {
  override fun onSensorChanged(event: SensorEvent) {
    if (listenerAccelerometer != null) {
      synchronized(listenerAccelerometer) {
        if (event.sensor == listenerAccelerometer) {
          Log.d("Accelerometer",
            "onSensorChanged " + event.values[0] + ", "
            + event.values[1] + ", " + event.values[2])
        }
      }
    }
  }

  override fun onAccuracyChanged(sensor: Sensor, accuracy: Int) {
  }
}

class GameControllerGyroscopeListener(private val listenerGyroscope: Sensor?) :
  SensorEventListener {
  override fun onSensorChanged(event: SensorEvent) {
    if (listenerGyroscope != null) {
      synchronized(listenerGyroscope) {
        if (event.sensor == listenerGyroscope) {
          Log.d("Gyroscope",
            "onSensorChanged " + event.values[0] + ", " +
            event.values[1] + ", " + event.values[2])
        }
      }
    }
  }

  override fun onAccuracyChanged(sensor: Sensor, accuracy: Int) {
  }
}

Weitere Informationen zu Bewegungssensoren und SensorEventListener

Lichter

Die hellen Farbeinstellungen auf Android-Game-Controllern verleihen dem Gameplay durch visuelle Elemente eine neue Dimension der Immersion.

Bei der Lichtfarbenfunktion werden im Controller integrierte LEDs in verschiedenen Farben angezeigt, die dynamisch auf unterschiedliche Spielszenarien reagieren. Beispielsweise können die Lichter rot blinken, wenn der Zustand des Spielers kritisch ist, oder nach Abschluss einer bestimmten Mission grün leuchten, wodurch visuelles Feedback basierend auf den Ereignissen im Spiel gegeben wird. Diese hellen Farbeinstellungen verstärken die Nutzerinteraktion, steigern die Spannung und Spaß am Spiel und helfen den Spielern, besser in die Spielwelt einzutauchen.

Die hellen Farbfunktionen in Android-Spielecontrollern dienen mehr als nur einem dekorativen Zweck: Sie spielen eine wichtige Rolle bei der Stimmung des Spiels und verbessern die Nutzererfahrung.

fun changeControllerLightColor(deviceId: Int, color: Int) {
  val device = InputDevice.getDevice(deviceId)
  device?.let {
    if (it.sources and InputDevice.SOURCE_JOYSTICK == InputDevice.SOURCE_JOYSTICK) {
      val lightsManager = device.lightsManager
      lightsManager?.let { manager ->
        manager.lights.forEach { light ->
          val stateBuilder = LightState.Builder()
          stateBuilder.setColor(color)
          val requestBuilder = LightsRequest.Builder()
          requestBuilder.addLight(light, stateBuilder.build())
          val lightsSession = lightsManager.openSession()
          lightsSession.requestLights(requestBuilder.build())
        }
      }
    }
  }
}

Zur Verwendung der Vibration werden eine Funktion und eine Berechtigung festgelegt.

<application ...>
  ...
  <uses-feature android:name="android.hardware.gamepad" android:required="true"/>
  <uses-permission android:name="android.permission.LIGHTS" />
  ...
</application>

Weitere Informationen zu LightsManager und zum App-Manifest.

Controller-Touchpad

Einige Gamecontroller enthalten ein Touchpad, das für eine Vielzahl von In-Game-Aktionen verwendet werden kann, z. B. das Navigieren in Menüs oder die intuitivere Steuerung von Spielfiguren.

Touchpad auf dem Controller
Abbildung 1: Touchpad am Controller.

Controller mit integrierten Touchpads ermöglichen die direkte Gerätesteuerung unter Android. Beim Berühren des Touchpads wird auf dem Bildschirm ein Mauszeiger angezeigt, was eine intuitive mausähnliche Navigation ermöglicht.