 
							- 
							
							新しいゲームコントローラへの対応iOS 13、macOS Catalina、tvOS 13のGame Controllerフレームワークでは、広く知られている複数のコンソールゲームコントローラに新たに対応しています。このセッションでは、新しく追加されたコントローラと、入力の伝達方法について説明します。また、オプションのボタンを処理するために推奨されているベストプラクティスと、macOSへの対応における適切なアプローチも紹介します。 リソース関連ビデオWWDC20
- 
							このビデオを検索(音楽) ゲームテクノロジーチームの ジェームズ・ケリーです Game Controllerフレームワークに ついて 今年導入された新機能や 変更点を説明します Game Controllerフレームワークは iOSやtvOS macOS用ゲームの MFiコントローラをサポートします コントローラハードウェアを 共通APIで抽象化し コードを1回書けます データのマッピングは 心配無用です 今年 サポートするコントローラが 追加されました まず MicrosoftのBluetooth対応 Xboxワイヤレスコントローラ ゲームとのシームレスな統合が 可能になりました 更にはSonyの DuakShock 4コントローラも 新たにサポートされます フレームワークを通じ コントローラ対応の どのゲームにも使えます コントローラ対応の 優れたゲームが多くあります 「レイマンアドベンチャー」 「Transistor」 「Sky Force Reloaded」 「Alto's Adventure」 App Storeにあるほんの一例です フレームワークを使えば Xboxワイヤレスや DualShock 4コントローラが使えます プラットフォームはiOS 13 tvOS 13 macOS Catalinaです この動画ではコントローラの参照方法や インプットへのアクセス― MFi対応などの UIのベストプラクティスを紹介 古いフレームワークを使った― macOSゲーム用の アップデート方法もお勧めします まずは 新しいコントローラ対応への 変更点です フレームワークを使用中のゲームは 無償で対応します MFiコントローラ対応なら Xboxワイヤレスや DualShock 4コントローラも使えます インプットのアクセスは GCControllerの GCExtendedGamepadProfile経由です 初心者のためにコントローラの 検出方法を説明します コントローラはGCControllerという クラスで表示されます このクラスはMFi他 すべてのコントローラで同じです シリアルリモートも GCControllerのインスタンスです まず接続中のコントローラの リスト取得 GCControllerの コントローラクラスメソッドを使うと 全コントローラの インスタンスのアレイが返ります 接続がなければアレイは空です App起動時に確認し 必要なら接続を App動作中 コントローラの オンオフはよくあります ゲーム起動後にオンになったり 電池切れや圏外になったりする場合です オブザーバを追加して GCControllerの接続と切断の 通知を取得します application did finish launching with optionsメソッドがお勧めです コントローラの インスタンスを取得しました ボタンや他のインプット アクセス方法を説明します コントローラの インプットのおさらいです トリガが2つ 方向パッド スティックが2つ メニューボタン 4つのフェイスボタン プログラム可能なLEDが4つ 2つのショルダーボタン 実際のボタンと APIのマッピングです フェイスボタンの例です ゲームパッドプロファイルにある― 4つのプロパティのリストです 4つのフェイスボタンは ここにマッピングされます Xboxワイヤレスコントローラも 同様です DualShock 4は少し違います 文字の代わりに シンボルでボタンが表示 インプットのマッピングが あいまいな場合 マッピングに 等価位置の概念を使います 4つのフェイスボタンが ひし形で配列されるとします 下のXボタンはMFiコントローラの Aボタンと同じ位置なので マッピング先はAボタンです 右側の○ボタンはBボタン… という風に続きます 次はL3とR3と呼ばれる クリッカブルなスティックです 対応しているのはiOS 12.1や― tvOS 12.1 macOS Mojave 10.14.1です XboxワイヤレスとDualShock 4は クリッカブルですが MFiコントローラの一部は違います ではコード例を見ていきましょう L3のクリックで キャラクターを屈ませます OSが古いバージョンの場合は 対応するAPIがあるかを まず確認します しかし 実際のコントローラに クリッカブルなスティックが ない場合は? 左スティックが 新しいか確認します その場合 “屈ませる”という L3にマッピングする操作が 他の方法でも 実行可能にします クリッカブルなスティックがあるなら L3のプレスハンドラに割り当てます これで 左スティックで 操作がトグル可能に このAPIがないバージョンのOSで ゲームしている場合 代替パスのコードが必要です XboxワイヤレスとDualShock 4の APIに追加されたボタンがあります 補助ボタンといって 一般的にコントローラの中央にあります まずメニューボタン ポーズメニューの表示や プレイのポーズ用です 全コントローラにあります 次にOptionsボタン 汎用ボタンですが スピード重視の用途は避けましょう 離れた位置にあるからです 未搭載の場合もあります 既存のMFiコントローラに 新APIをマッピングしましょう メニューボタンは GCExtendedGamepadの buttonMenuプロパティに対応 このコントローラは Optionsボタンがないので buttonOptionsプロパティは空です 次はXboxワイヤレスコントローラ 複数の補助ボタンがある場合 マッピングに等価位置を使います この例では 右の補助ボタンはメニューボタンで buttonMenuに マッピングされます 左の補助ボタンはビューボタンで buttonOptionsにマッピングされます 中央のXboxボタンは システムで予約済みです DualShock 4も アプローチは同じで― ボタンマッピングに等価位置が使えます 右のDualShock 4の Optionsボタンは buttonMenuにマッピング 一方 左のDualShock 4の ビューボタンは buttonOptionsに マッピングされます 中央のPSボタンも予約済みです controllerPausedHandlerは 非推奨です 代わりにbuttonMenu APIを 使ってください このコード例を見てみましょう メニューボタンで ゲームのポーズや解除をします iOS tvOS macOSの 古いバージョンの場合 まず メニューボタンのAPIが あるかを確認 あれば― extendedGamepad.buttonMenuに pressedChangedHanderを登録します ハンドラ内でポーズメニューを トグルします ゲームをポーズする場合 迅速さが必要なので ボタンを放すより押すことで 動作をトリガします この新APIがなくても 旧controllerPausedHandlerで 機能を登録できます メニューボタン押下でトリガされます メニューボタンの説明でした 次にOptionsボタンですが 全部のコントローラに 搭載されていません こちらのコード例も見てみましょう Optionsボタンで ゲーム中の設定メニューを呼びます OSのバージョンが古い場合 まず このボタンがあるかを確認 実際にOptionsボタンが ないこともあります Optionsボタンが新規か確認し そうなら 他の手段で 設定メニューにアクセスが必要です ポーズメニューの項目にするのも 一例です Optionsボタンがあれば buttonOptions.pressed ChangedHandlerに動作を割り当てます Optionsボタンのクリックで 設定メニューをトグルできます 新APIがなければ 設定メニューにつながる別のパスが 必要です Game Controllerフレームワークに 今年導入された新APIの概略でした 次はコントローラごとの UIベストプラクティスです ユーザに最高のゲーム体験を 届けましょう Game Controllerフレームワークを 拡大したことで 新たな課題があります ボタンやインプットの見た目が コントローラ間で違うことです Bボタンは MFiコントローラと一致しますが Xboxワイヤレスではボタンは赤 DualShock 4は○です これをどう扱うか説明します 例えば 機能紹介で ブロックの方法を― ゲーム中に表示するとします ここではブロック機能は GCExtendedGamepadの Bボタンにマッピングされています MFiコントローラでは Bボタンを表示します しかしXboxワイヤレスは微調整を加え Bボタンを赤にします DualShock 4使用時には ○ボタンを表示します 使うコントローラに関係なく プロンプトを理解できます そのためのコード例を見ましょう getBlockButtonAssetは 該当のアセットを返します まずはプロダクトカテゴリを変更 コントローラの種類を決定する 今年の新プロパティです Xboxワイヤレスの場合は 赤のBボタンアセット DualShock 4では 赤の○ボタンアセットを返します 最後はデフォルトで MFiの緑のBボタンアセットです こうして いろいろな MFiコントローラに対応し 将来 追加されるものにも 対応するでしょう ブロックの例に戻ります コントローラごとに アセットを作る代わりに 汎用シンボルを 使うやり方もあります 等価位置にのみ依存する 汎用プロンプトで ゲーム内ガイダンスを コントローラに関係なく理解できます 右のボタンを押せばいいのは 明らかです 最後に 複数のコントローラを 同時に接続する場合です それらに対応し 切り替えができるようにしましょう 各コントローラの インプット認識のため フレームごとに引くか インプットハンドラを登録します また最後に使ったコントローラに ガイダンスなどを合わせます MFiコントローラを使用中なら MFiアートアセットを表示 DualShock 4のインプットなら 自動的にDualShock 4の アートアセットを使います 最後のコントローラに ビジュアルを合わせることで 直感的な操作性が提供できます macOSで以前のゲームコントローラを 実装している場合は 新たな案内事項です Game Controllerフレームワークを 採用するだけで MFi Xboxワイヤレスなど 新しいコントローラが使えます ハードウェア間の違いに関わらず iOS tvOS macOS間で Appに統一性を持たせます これにより将来のOSアップデートにも 適合できます IOKitなど下位のAPIで ハードコードした方は Game Controllerフレームワークへの 移行をお勧めします 新コントローラは 両方に対応しますから 競合しないよう IOKitの方を削除してください 単一インターフェイスにコード化し 新しいサポートも無料です では動画のまとめです Game Controllerフレームワークは 共通APIを通じハードウェアを抽象化 コントローラのレベル差を心配せず コードを1回書けます つまりXboxワイヤレスや DualShock 4などの― 新コントローラに 自動的に対応できるのです ですがユーザに 最高の体験を提供するには 使用中のコントローラに合わせ ゲームのUIを変えます 最後に 将来のOSアップデートに 適合するよう Game Controllerフレームワークへ 移行しましょう 詳細な情報は Appleデベロッパサイトを 以上がゲームコントローラの 更新情報でした ぜひ参考にして 素晴らしいゲームを作ってください 
-