游戏控制器配备了额外的功能,可显著提升玩家的互动体验和沉浸感。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
和应用清单。
控制器触控板
一些游戏控制器包含触控板,可用于执行各种游戏内操作,例如导航菜单或以更直观的方式控制游戏角色。
![游戏控制器上的触控板。](https://developer.android.google.cn/static/images/training/game-controller-touchpad.png?authuser=6&hl=nb)
具有集成触控板的游戏控制器可在 Android 上直接控制设备。触摸触控板会生成屏幕鼠标指针,实现类似鼠标的直观导航。