總覽

遊戲控制器配備額外功能, 強化玩家互動和沈浸感。觸覺技術、動作感應器和光線 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。輕觸觸控板會產生畫面上的滑鼠遊標 這種直覺式的操作介面