概要

ゲーム コントローラには、パフォーマンスを大幅に向上させる 没入感を高められますハプティクス、モーション センサー、光 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 ゲーム コントローラです。このテクノロジーは ユーザーの物理的な動きを検出し、そのデータをアクションに変換します。 より直感的で臨場感あふれるゲーム体験を提供できます。 この概要では、Google Pixel のモーション センサー機能が 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。タッチパッドをタップすると、画面上にマウスポインタが生成され、 マウスのような直感的な操作が可能です