概览

游戏控制器配备了多项功能, 增强玩家互动和沉浸感。触感反馈、移动传感器和光线 Android 游戏控制器的功能 深化和丰富游戏体验。每个特征都会以独特的方式 激发了玩家的感官,从而培养更有意义的、更直观的互动, 游戏。

触感反馈

Android 游戏控制器中的触感反馈功能是一项至关重要的技术, 在游戏过程中提供逼真的触感反馈。

触感反馈技术通过振动为用户提供物理感觉 或动作。例如,当游戏中发生爆炸事件时,控制器 振动,让玩家能够真实地感受到冲击力。此外, 可以与角色行走的声音同步,或者 能够带来更逼真的体验此类触感反馈 让玩家能够亲身感受游戏内正在进行的各种活动。

这项技术可最大限度提升玩家沉浸感,增强情感反应,以及 丰富游戏动态Android 游戏控制器中的触感反馈设置 这不仅为游戏开发者拓宽了创作可能性 玩家将获得比以往更逼真的游戏体验。

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

如要使用振动,需要设置相应功能和权限。

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

如需详细了解 VibratorManager应用清单

移动传感器

增强游戏体验的最具创新性的技术之一就是 配备移动传感器的 Android 游戏控制器。这项技术在 检测用户的身体活动并将相应数据转化为操作 从而提供更直观、更身临其境的游戏体验。 在本简介中,我们将探讨移动传感器在 Android 游戏控制器可以正常工作。

移动传感器通常结合陀螺仪和加速度计来检测 以及用户身体的动作和方向

它需要实现加速和陀螺仪监听器类,并注册 这些监听器与控制器的传感器管理器相关联。

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

如需详细了解 移动传感器SensorEventListener

Android 游戏控制器的浅色设置增添了 通过视觉元素融入游戏内容。

灯光颜色功能利用控制器中的内置 LED 灯 显示各种颜色,以动态响应不同的游戏场景。 例如,当玩家的生命值严重或危险时,指示灯可能会闪烁红色 在用户完成特定任务时发出绿色的光,并提供视觉反馈 。这些浅色设置可以加深用户互动, 增加游戏的悬念和乐趣,让玩家更加沉浸其中 完全融入游戏世界

Android 游戏控制器中的浅色功能不仅具有 只是装饰目的,在营造气氛方面起着重要作用 以及改善用户体验

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

如要使用振动,需要设置相应功能和权限。

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

如需详细了解 LightsManager应用清单

控制器触控板

有些游戏控制器带有触控板,可用于执行各种 进行游戏内操作,例如在界面中导航菜单或控制游戏角色 更加直观。

游戏控制器上的触控板。
图 1. 游戏控制器上的触控板。

带有集成触控板的游戏控制器可以直接控制设备 Android。触摸触控板会生成屏幕鼠标指针, 实现类似于鼠标的直观导航。