読者です 読者をやめる 読者になる 読者になる

LIFULL Creators Blog

「株式会社LIFULL(ライフル)」の社員によるブログです。

GameController.frameworkをつかってG550ゲームパッドとSpriteKitゲームを接続してみよう

サムです。今日はGameController.frameworkについて軽く触れます。
GameController.frameworkは、MFiのiPhone/iPod/iPadとBluetoothまたは物理接続したコントローラの入力をアプリケーション側に受信できるものです。
そこで、2013/12/24にロジクールから発売された「G550 パワーシェル コントローラ + バッテリー」を使って、SpriteKit + GameController.frameworkについて書きます。

0. 今回の環境

OS X Version: 10.8.5
Xcode Version: 5.0.2
Development Target: 7.0
Devices: iPhone 5S, G550

1. GameController.frameworkの追加

XcodeのプロジェクトからTARGET > General > Linked Frameworks and LibrariesGameController.frameworkを追加します。

f:id:nextdeveloper:20140305224351p:plain

2. import

SKSceneクラスを拡張してあるシーンにGameControllerを追加します。

3. ゲームパッド用のプロパティを宣言

まず、ゲームパッドのクラスオブジェクトには2タイプあります。

GCGamepad Class

こちらはとてもシンプルなゲームパットクラスで、次のコントロールを結びつけています。

  • Two shoulder buttons.
  • Four face buttons arranged in a diamond pattern.
  • One directional pad (D-pad).

GCExtendedGamepad

一方のGCExtendedGamepadクラスは、GCGamepadクラスとは事なり、より多くのコントロールに関連しています。

  • Two shoulder buttons.
  • Two triggers.
  • Four face buttons arranged in a diamond pattern.
  • One directional pad.
  • Two thumbsticks.

G550はGCGamepadクラス用のゲームパッドなので、次のように宣言します。

4. ゲームパッドの接続、切断を検出を通知するコードを追加

ゲームパッドは、Bluetoothで接続されても、ケーブルを介して直接接続されても、ゲーム上では同じように動作されます。
ゲームパッドが接続または切断されたときは、GameController.frameworkからNotificationが発生するので、これを受け取るセレクターを用意します。
この通知は、ゲームコントローラの接続/切断が変更されるたびに呼び出されます。

4-2. ワイヤレスゲームパッドの場合

ワイヤレスコントローラは、通常ゲームの外で接続されます(Bluetoothゲームパッドとかを利用したとき?)
そのため、ゲームの起動前に接続しておく(または、接続した後にゲームを再起動する)必要があります。

けれどもstartWirelessControllerDiscoveryWithCompletionHandlerクラスメソッドを使うことで、ゲーム内でゲームパッド(優先、無線含む)を直接接続することもできます。
この検出プロセスを実行すると、新しいコントローラが自動的に検出され、ゲームパッドとして接続されます。

検出プロセスは自動的にタイムアウト(30秒くらい?)されますがstopWirelessControllerDiscoveryクラスメソッドを呼び出すことで、現在実行されている検索プロセスを停止させることができます。

これらのクラスメソッドは、アプリケーションで適切なユーザインターフェースを設計して、提供する必要があります。
※例えば、ゲーム設定とかに「ワイヤレスコントローラと接続する」的な項目を追加したりとか

まとめ

以上で、GameController.frameworkを使ってG500ゲームパッドに接続することができます。
次回は、ボタンのイベントを取得してみようと思います。
これらのソースコードはGitHubで公開しております。

参考、引用元

Apple Developer - Game Controller Programming Guide