ภาพรวม

เกมคอนโทรลเลอร์มาพร้อมฟีเจอร์เพิ่มเติม เพิ่มการโต้ตอบและความสมจริงให้กับผู้เล่น การโต้ตอบการสัมผัส เซ็นเซอร์ตรวจจับการเคลื่อนไหว และแสง ฟังก์ชันคอนโทรลเลอร์เกม 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 และ ไฟล์ Manifest ของแอป

เซ็นเซอร์ตรวจจับความเคลื่อนไหว

หนึ่งในเทคโนโลยีสุดล้ำที่ช่วยปรับปรุงประสบการณ์เกมเพลย์คือ เกมคอนโทรลเลอร์ Android ที่ติดตั้งเซ็นเซอร์ตรวจจับการเคลื่อนไหว ด้วยเทคโนโลยีนี้ ตรวจจับการเคลื่อนไหวทางกายภาพของผู้ใช้และแปลงข้อมูลดังกล่าวเป็นการกระทำ ภายในเกม ทำให้ประสบการณ์การเล่นเกม ที่ง่ายและสมจริงยิ่งขึ้น ในบทนำนี้ เราจะสำรวจว่าเซ็นเซอร์ตรวจจับการเคลื่อนไหว เกมคอนโทรลเลอร์ Android ใช้งานได้

เซ็นเซอร์ตรวจจับการเคลื่อนไหวมักจะรวมเครื่องวัดการหมุนและตัวตรวจวัดความเร่งเพื่อตรวจจับ การเคลื่อนไหวและการวางแนวของผู้ใช้

ต้องใช้คลาส Listener การเร่งความเร็วและเครื่องวัดการหมุน และลงทะเบียน Listener เหล่านี้ผ่านตัวจัดการเซ็นเซอร์ของตัวควบคุม

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 และ ไฟล์ Manifest ของแอป

ทัชแพดของคอนโทรลเลอร์

เกมคอนโทรลเลอร์บางรุ่นมีทัชแพดซึ่งใช้งานได้ การดำเนินการในเกม เช่น การไปยังเมนู หรือการควบคุมตัวละครในเกมใน ได้ง่ายขึ้น

วันที่ ทัชแพดบนเกมคอนโทรลเลอร์
รูปที่ 1 ทัชแพดบนเกมคอนโทรลเลอร์

เกมคอนโทรลเลอร์ที่มีทัชแพดแบบผสานรวมสามารถเปิดการควบคุมอุปกรณ์ได้โดยตรง Android การแตะทัชแพดจะสร้างตัวชี้เมาส์บนหน้าจอ ซึ่งช่วยให้ เพื่อการนำทางที่เหมือนกับเมาส์