ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。
-
プラグインと再生:AppleフレームワークをUnityゲームプロジェクトに追加する
AppleプラットフォームでのUnity Appやゲームエクスペリエンスをさらに向上させることができるようになります。Apple.Core、Game Center、Game Controller、Accessibility、Core Haptics、PHASEの6つのプラグインで、Appleテクノロジーをご利用のプロジェクトに直接追加する方法をご覧ください。新たなゲームプレイの仕組みを追加したり、ゲームをもっと使いやすくしたり、Appleの最新機能やサービスを利用したりする方法について解説します。
リソース
- Accessibility
- Apple Unity Plug-Ins on GitHub
- Delivering Rich App Experiences with Haptics
- Game Controller
- Human Interface Guidelines: Game Center
- PHASE
関連ビデオ
WWDC23
WWDC22
WWDC21
- オーディオハプティックデザインの実践
- バーチャルゲームコントローラと物理ゲームコントローラの活用
- Physical Audio Spatialization Engine(PHASE)によるジオメトリを意識したオーディオの実現
WWDC20
-
ダウンロード
♪ Mellow instrumental hip-hop music ♪ ♪ こんにちはJared Marsauと言います AppleでGame Technologiesの仕事をしています 今日はAppleフレームワークを選択して Unityベースのゲームに新しい機能を 追加できる方法についてお話します 多くの方が Unityなどのツールを使って ゲームを作っていると思いますが 我々の目標はどんなツールを使っていても 最新の機能を提供することです 本日より新しいUnityプラグインのセットで あなたのゲームを強化してください Game Center プラグインを使用して プレイヤー認証・リーダーボード マッチメイキングなど GameKitの機能を追加できます Game Controller プラグインを使用して 入力のカスタマイズやボタンのグリフ MFi およびサードパーティ製コントローラの サポートが可能になりました Accessibilityプラグインは VoiceOverやDynamic Typeといった システム機能を通じて アクセシビリティを向上させます Apple のデータ駆動型リッチハプティック フィードバックシステムは Core Haptics プラグインで統合されます PHASEプラグインは高度な ジオメトリ認識空間オーディオを追加します 最後にApple.Coreプラグインを使って ビルド設定を管理し ビルドプロセスを簡素化しています このプラグインの初期セットにより 新しいゲームプレイの仕組みの追加 ゲームへのアクセス性の向上 そしてより迅速に最新の機能やサービスを 利用できるようになります この新しい Unity プラグイン群を使って 皆さんが作る素晴らしいゲームを 見るのが楽しみです ではプロジェクトの詳細について説明します まずこのプロジェクトの設計方針について そしてプロジェクトのコンセプトと 組織について説明します 次にプロジェクトのリポジトリとの 関わり方については重要なポインタがあります そして最後にそれぞれのプラグインについて 詳しく説明します ご存知のように Appleフレームワークはモジュラー方式で 機能をカプセル化しています これによりコンパクトで効率的な コードを維持しつつ Appに適した技術を選択することができます Unityのプラグインも同じようなパターンで それぞれのプラグインが一つの基本フレームワークに 対応する形になっています これによりゲームのニーズに応じて プラグインのセットを選ぶことができます それぞれのプラグインは C# ベースのUnity スクリプトを公開し フレームワークにできるだけ直接対応する という仕組みになっています このようにすることで フレームワークに精通していれば それをプラグインにも反映させることが できるようになるのです コンセプトや多くの場合フレームワークのAPI は そのまま引き継がれます 逆に言えばプラグインを学ぶということは フレームワークを暗黙的に学ぶことになる ということでもありますね もうひとつ重要なのはこれらのプラグインは Apple プラットフォームのネイティブ ライブラリとして構築されているという点です これらのライブラリは C# スクリプトと フレームワークAPI の間の 接着剤として動作しています Apple Unity のプラグインは Unity パッケージとしてまとめられており プロジェクトへの組み込みは Unity Editor のパッケージマネージャで 管理できます またプラグインには エディター機能が追加されている場合があり プラグインを使った作業がより簡単になり すでに馴染みのあるUnityインスペクター主導の ワークフローに沿うようになります もちろんそれぞれのプラグインには詳しい 説明やサンプル
関連する Apple Developer ドキュメントなどへのリンクが付属しています 次にワークフローの主要なコンセプトについて 簡単に説明します まず始めにワークフローを理解するために 必要なことを学びましょう まずGitHubからソースをクローンします プロジェクトのソースとドキュメントは すべてそこにあります Apple Unityのプラグインを使う人は ここからスタートします リポジトリをクローンしたら プラグインのビルドが 最初の作業のひとつになるでしょう この作業を簡単にするためにリポジトリには Python スクリプト build.py が リポジトリのルートに置かれています このスクリプトは ネイティブライブラリのビルド 正しい場所へのコピー Unity meta ファイルの更新 プラグインのパッキング そしてプラグインテストのビルドを行います スクリプトは最も単純な起動で 全てのプラグインをビルドし tarball にパッケージし プラグインをテストするように編成されています そしてそれらをビルドフォルダに保存し Unityプロジェクトに統合できるように 準備します なおプラグインを完全にビルドして パッキングするには Xcode・Python3・npm・Unity が必要です 最後にプロジェクトリポジトリの build.pyを使うための 詳しいドキュメントを掲載しています さていよいよ 各プラグインの詳細です それぞれのプラグインについて Unity プロジェクトへの追加方法 搭載機能の概要を説明します スクリプトのキーコンセプトそしてコードスニペット または Unity Editor の例 それらをプロジェクトに どう組み込むかを強調するものです まずは基本となるプラグイン Apple.Core から見ていきましょう Apple.Core は各プラグインのビルド設定を Unity のプロジェクト設定ウィンドウ内の ひとつの環境設定に統合しています それぞれのプラグインの ネイティブライブラリをコンパイルするため Apple.Core にはアセットプロセッサーを持ち インポート時に各プラグインのライブラリが
適切なプラットフォーム用に 設定されていることを確認します またApple.Core はプロジェクトのビルド時に ポストプロセスとして実行する スクリプトを含んでおり Xcodeの中間プロジェクトでネイティブライブラリが 正しく参照されていることを確認します それぞれのプラグインは基盤となる フレームワークと相互作用するので Apple.Coreは C#スクリプトとネイティブコード間の データ受け渡しを容易にする ランタイム相互運用型もいくつか定義します 最後にApple.Coreは 他のすべてのApple Unityプラグインが 依存する関係になっています つまりApple.Coreは他のプラグインよりも先に プロジェクト内に取り込むべきものだということです このデモでは Apple.Core を新しいプロジェクトに導入し Apple Build Settings 環境を 簡単に確認する方法を説明します プラグインのビルドとパックが完了したら Unity Package Manager で Apple.Core を読み込むことができます tarballからパッケージを 追加するオプションを選択し そしてパッケージされたプラグインを 参照すればよいのです
エディターがパッケージを読み込んで スクリプトをコンパイルします 完成するとApple.Coreは 使用可能な状態になります
Apple.Core のユーザー向けの主な機能は エディターのプロジェクト設定ウィンドウに
Apple Build Settings タブが 追加されていることです
Apple Unity プラグインをインポートすると 全てのビルドオプションがここに表示されます Apple.Core はデフォルトで OS の最低バージョンなどいくつかの 設定項目が用意されています
またどのプラグインでもポストプロセスの ビルドステップを無効にすることができます
最後に共通のセキュリティ設定を行うことができ これは中間 Xcode プロジェクトにも伝搬されます Game Centerプラグインを使ってより楽しく あなたのゲームをGame Centerに接続します Appleのソーシャルゲームネットワークと 連携できるようになります Game Centerはプレイヤーが Appleのプラットフォーム間でアイデンティティを構築し 安全でセキュアなプレイヤー認証 ゲーム内の実績 共有リーダーボード プレイヤー間のチャレンジ送信 マルチプレイヤー対戦などの機能を 利用できるようにします Game Centerのどの機能を ゲームに組み込むかは自由ですが プレイヤー認証から全てが始まります
Game Centerのプレイヤー認証を ゲームに追加すると Game Centerウィジェットで ホーム画面やApp Storeで ゲームが紹介されるようになるのです またプレイヤー認証を追加するのに 必要なコードはごくわずかです まずApple.CoreとGameKit プラグインを プロジェクトに追加してください GameKitプラグインは Game Centerサービスを接続します 認証時にGame Centerサービスと接続し GKLocalPlayerオブジェクトを初期化します 初期化されたらローカルプレイヤーの プロファイルに基づいて プレイヤーの制限を問い合わせます この制限には成人向けや 未成年向けの露骨なコンテンツへのアクセスを 制限することが含まれています あるいはゲーム内の通信を無効にするなど GKLocalPlayerとGame Centerサービスとの 相互作用を簡単に管理するには Unity でコンポーネントを 定義する方法があります 例えばここではシンプルな Game Manager コンポーネントを 定義しています このコンポーネントはGKLocalPlayerへの リファレンスを保持しています またstartメソッドでプレイヤーの認証と 制限の問い合わせを行っており プレイヤー認証はゲーム中に 一度だけあれば良いことになっています これはGameManagerコンポーネントの スクリプトです GKLocalPlayerをキャッシュするための フィールドを表示しています コンポーネントの start メソッド内で GKLocalPlayer.Authenticate という 1 回限りの呼び出しをしており GKLocalPlayer インスタンスを返す 静的メソッドが含まれています 認証に成功すると 今度はプレイヤー制限を確認します プレイヤー制限の確認は コード上で一連のブール値に分解され GameManagerコンポーネントスクリプト内の トライブロックに追加することが可能です ここで真にするとローカルプレイヤーは 露骨なコンテンツへのアクセスを 制限されることになります これが真ならローカルプレイヤーは マルチプレイヤー体験を制限された ものにする必要があるということです そして最後にこの「true」はゲーム内通信を 無効化することを意味します そしてこれがプレイヤー認証を 追加するために必要なコードの変更です ここからさらに2ステップで Game Centerを活用するための準備が整います まず中間Xcodeプロジェクトに Game Center機能を追加します これはXcodeのプロジェクトUIから行います 詳細は Apple Developer ドキュメントを 参照してください “Enabling and Configuring Game Center.”
次にApp Store Connectを使って AppにGame Center機能を追加します 詳細はApp Store Connectポータルを ご確認ください 以上の手順でプレイヤーと認証し 安全なゲーム環境を確保する準備ができました プレイヤー認証は Game Center Unity プラグインの機能の ほんの一部に過ぎません プレイヤー認証はゲームセンターで利用できる ようになった機能の一部に過ぎないのです ゲームの発見力を高めるには このセッションをチェックしてみて下さい 「Game Centerダッシュボードで 新しいプレイヤーにリーチする」
マルチプレイヤーと マッチメイキングについては昨年の 「Game Centerの新機能」をご覧ください プレイヤーはコントローラーを使って 自分の作った世界と対話することができるのです ゲームコントローラ・プラグインにより ゲームに信頼性と柔軟性をもたらすことが 可能になります Game Controller プラグインは ゲームコントローラのカスタマイズをサポートし ボタンをリマッピングできるようになり すべてのゲームに対して一箇所にまとめて 対応できるような機能が提供されました ボタングリフは一貫したユーザー エクスペリエンスを保証するために また全ての MFi コントローラー そしてサードパーティ製コントローラー 例えば Sony や Microsoft 製コントローラーを サポートしました 他のプラグインと同様に パッケージマネージャを使って Apple.Core および Game Controller プラグインを プロジェクトに追加してください Game Controllerプラグインをロードした状態で 最初にGCControllerServiceを初期化します すぐに分かるようにこのサービスは コントローラや その接続イベントにアクセスするためのものです 初期化後はGCControllerServiceに 現在システムに接続中のコントローラの 問い合わせを行ないます 接続されているコントローラは Game Controllerプラグインの GCControllerオブジェクトで表現されています 接続された各GCControllerに対して 制御状態の更新をポーリングしています ポーリングはゲームによって 必要な回数だけ行われますが Unityの定期更新ループで 始めるとよいでしょう
コントローラの状態が更新されたら それぞれのコントローラの入力に対して テストしてください 個々の要素例えばボタンサムスティック等の 入力をテストします 忘れてはならないのは ゲームのライフサイクルにおいて コントローラとの接続は 繋がったり切れたりしますので 接続・切断イベントを処理するコールバックを 登録してください Game Controllerプラグインを統合するには シンプルな入力管理コンポーネントを作ります このコンポーネントを使用して Game Controllerプラグインを統合できます このコンポーネントは 現在接続されている すべてのコントローラを保持するコンテナ 初期化のためのstartメソッド ポーリングと入力テストを処理する updateメソッドの 3つの主要な要素を持っています まずstartメソッドについて見ていきましょう ここで一度だけ必要な セットアップ作業を行います ゲームコントローラサービスの初期化は ここで行う必要があります 接続されているコントローラの初期チェックと 接続・切断イベントに対するコールバックの 登録と一緒に行いましょう これが入力マネージャコンポーネントの スクリプトです 1回限りのセットアップコードは コンポーネントのstartメソッドの中にあり GCControllerServiceへの呼び出しの Initialize()もその中に含まれます GetConnectedControllersを呼び出すと 現在接続している 全てのコントローラを列挙したコンテナが 取得されます 初期化の最終ステップではコントローラの 接続と切断のイベントに対する コールバックを登録しています 初期化が完了したので 接続された各コントローラをポーリングして 入力状態を更新するために 入力マネージャも 更新メソッドを必要とします 入力のポーリングは 接続されているコントローラの集合を 繰り返して開始されます GCControllerのPollメソッドを呼び出し 最新の状態を収集します その後各ボタンの状態を確認し それに応じた対応をします 以上がGame Controllerプラグインを使用して 接続されたコントローラーにアクセスし コントローラーの入力を取得する方法です Game Controller framework について より詳しく知りたい方は またサードパーティ製コントローラーや 非標準入力についても 過去のセッションを見てみて下さい “新しいゲームコントローラへの対応” そして “ゲームコントローラの進歩” アクセシビリティとはすべての人が 技術を利用できるようにすることです Accessibilityプラグインを使って Appleの様々な支援技術を Unityベースのゲームに統合できます
Accessibilityプラグインは VoiceOverなどの主要な機能を追加することができ プログラムによってタグ付けされたコンテンツを ユーザーに読み聞かせることができます スイッチコントロールは 様々な入力補助デバイスに対応します ゲーム内のテキストを簡単に拡大縮小できる Dynamic Typeは ゲーム内のテキストやUIを ユーザーの好みに合わせて拡大縮小できます Accessibility プラグインについては まだまだ説明することがたくさんありますので ぜひセッションで確認してみてください Unityゲームにアクセシビリティを追加する Accessibility Unityプラグインについて 深く掘り下げましたのでぜひご覧ください このセッションでは使用例を得るだけでなく 理解を深めることができます Appleのプラットフォームで アクセシビリティに何が可能なのかを 理解することができます 機会があれば是非チェックしてみてください ゲームに触覚フィードバックを加えることは ゲームプレイへの没入感を高める 素晴らしい方法と言えるでしょう Core Hapticsプラグインで Appleの高度なハプティック機能を統合します Core Haptics プラグインを使用すると 触覚と音声のイベントセットから 独自の触覚パターンを構築できます カスタムオーディオとハプティクスを 同期して再生します リアルタイムにパラメータを調整することで 触覚フィードバックをプログラムで定義したり 更新したりすることができます Apple Haptic and Audio Pattern file format (AHAP)を使用すると ファイルベースでパターンをデザインし アセットとして保存することができます インスペクターに対応したUnity Editorで Core Hapticsのパターンのチューニングが できます Core Hapticsプラグインを最大限活用するには Core Haptics に関する 4 つの基本要素と それらの相互の関連性について 理解する必要があります
最上位の要素はCHHapticEngine (ハプティックエンジン)です ハプティックエンジンはデバイス上の ハプティックサーバーへのリンクであり 任意のハプティックパターンの再生に 必要なものです CHHapticEngineは CHHapticPatternPlayersを作成します パターンプレイヤーは CHHapticPatternsの再生に使われ 開始停止一時停止再開などの コントロールが可能です CHHapticPatternは一つ以上の 触覚・聴覚イベントを 論理的にまとめたものとなります CHHapticEngineはパターンを使用して プレイヤーを作成します CHHapticEventは触覚体験を定義するための ビルディングブロックです Core Haptics はデータ駆動型の API で これにより触覚パターンをプログラムで あるいは AHAP ファイルを使って 直接定義することが可能になりました Core Haptics サポートを プロジェクトに追加する簡単な方法は
必要な Core Haptics オブジェクトを管理する Haptics コンポーネントを作成することです これはHapticsコンポーネントの例です CHHapticEngine CHHapticPatternPlayer そしてAHAP Assetを含みます AHAPアセットは Core Hapticsプラグインで定義された Unityのカスタムアセットになっています これによりAHAPファイルへのインポート エクスポートが容易になり またカスタムエディター拡張により パターン作成とカスタマイズの管理も 可能になりました もう少し詳しく見ていきましょう まずApple.Coreと Core Haptics プラグインが プロジェクトにインストールされていることを 確認します これらを追加すると ハプティクスでゲームを強化することができます これが先ほどの図を元に作成した ハプティクス部品です すぐに実装を確認しますので とりあえず飛行機に取り付けてみましょう
取り付け後このコンポーネントは AHAPアセットを必要としますが 私のAHAPアセットフォルダは 空っぽの状態になっています Assets > Create > Apple > CoreHaptics > AHAP で新規に作成します 作成したらMyHapticPatternという 素晴らしい名前にします Core Haptics プラグインには エディタ拡張機能があり インスペクタウィンドウで新しいパターンの 調整を行うことができます ここでCHHapticPatternの一部である
CHHapticEventが 再生可能であるよう定義されています デフォルトではTransient 一過性のイベントがありますが 簡単に連続したイベントを 追加することもできますね UIにはImportExportResetのボタンもあります Resetは追加したイベントをクリアして パターンをデフォルト状態に戻す ImportとExportは素晴らしい機能です これらによりプロジェクトでAHAPファイルを ロードしたり保存したりすることができます ここでは「Rumble」という定義済みの AHAPをインポートしました バイブレーションエフェクトを使いますが 少し調整が必要なようですね これでパターンを更新したので 新しいAHAPファイルにエクスポートできます この改善された触覚パターンを 他のチームと共有するためにです
アセットの作成と調整が終わったので 飛行機に戻って MyHapticPatternを使います 素晴らしい! すべて配線完了です これでハプティックパターンの 定義と参照は完了です あとはHapticsコンポーネントに ロジックを追加して 触覚のパターンを再生できるようにします これは2つの方法に分けることができます PrepareHapticsとPlayです PrepareHapticsでは ハプティックエンジンの初期化 ハプティックパターンプレイヤーの 作成が行われています CHHapticPatternPlayerの startメソッドを呼んで 再生が開始されるだけとなります そしてハプティックコンポーネントの スクリプトはこちらです ハプティックエンジンとプレイヤーの フィールドを定義しています ハプティックプレイヤーの フィールドは以下の通りです 重要なのはエディターUIでAHAPアセットを 設定できるように serializeField属性を追加していることです 次にCHHapticEngineを作成する コードを追加して起動し 参照されているアセットから 直接AHAPにアクセスして 触覚パターンプレイヤーを生成しています もちろんプレイヤーに Start を呼び出すと ハプティックパターンが再生されます Core Haptics Unityプラグインは ゲームに全く新しいレベルの 没入感を与えるためのツールを提供します Core Hapticsプラグインを使用すると 見た目も音もリアルな不思議なゲームの瞬間を 作り出すことができます Core Hapticsの詳細については “Core Hapticsの紹介” を見てみてください 魅力的なハプティクス体験をデザインするには 以下のセッションをご覧ください “オーディオとHapticによる体験をデザイン” “オーディオハプティックデザインの実践” 没入感のあるオーディオは 素晴らしいゲーム体験にとって非常に重要です PHASE Unityプラグインは あなたの創造力を解放し あなたのゲームの世界に豊かな音の風景を 作ってくれるでしょう PHASEを使えば複雑でダイナミックな オーディオ体験をゲームに提供できます Geometry-aware audioとは 音がシーンのメッシュから発せられて 相互作用することを意味しています ゲーム内の環境は残響と反射によって よりリアルに聞こえることでしょう 階層的なオーディオグラフを構築し ゲームプレイ中にダイナミックな オーディオコントロールを可能にします PHASEプラグインはゲームに対応した 定義済みのコンポーネント一式を含んでいます ゲームオブジェクトにアタッチするだけで 一行もコードを書かずに PHASEを使い始められるのです 最初のコンポーネントは PHASEListenerコンポーネントです これはゲームシーンの「耳」として機能し 位置や方向リバーブプリセットをもとに オーディオを処理します
次はPHASEOccluderというコンポーネントです PHASEOccluderはゲームオブジェクトに 形状データで取り付け シーン内で音源とリスナーの間に入った時に オーディオの減衰を行うものです 次にPHASESourceコンポーネントを紹介します これらはゲームオブジェクトに装着し そのオブジェクトのトランスフォームを使って ゲームワールドに配置するものです またPHASEプラグインでは 組み込みコンポーネントに加えて SoundEventアセットをカスタム定義しています
サウンドイベントはオーディオ再生イベントを 記述するオブジェクトで シーン内のソースが再生する オーディオを定義しています PHASEプラグインを使い始めるには まずApple.CoreとPHASEプラグインの両方を
プロジェクトに追加しておくことが必要です インストールされたら 含まれているコンポーネントを シーンに追加していくことができます このサンプルプロジェクトでは 3つのゲームオブジェクトを用意しています。 飛行機 建物そしてカメラです まずカメラにPHASEListenerコンポーネントを 装着してみます これによってシーンに「耳」を追加しています 次にPHASEOccluderコンポーネントを 装着して 建物をオクルーダーにします
最後にPHASESourceコンポーネントを 飛行機に取り付けて シーンにソースを追加してみます これで音源が追加されたので 音声を再生する必要があります そこでサウンドイベントを添付します しかしサウンドイベントのフォルダは 空の状態になっています Assets > Create > Apple > PHASE > SoundEvent で作成することが可能です サウンドイベントを作成すると PHASEプラグインはすぐに PHASEサウンドイベント作成ウィンドウを 開くようになりました これがサウンドイベントを構築するための キャンバスです まずウィンドウ内の任意の場所を 右クリックします このポップアップではイベントにノードを 追加することができます クリップを再生したいので サンプラーノードを作成します すでにアイドリング中の飛行機の 音声クリップを プロジェクトに追加したので ここで参照できます このままループさせて 飛行機の音が聞こえるようにします 飛行機の音を聞くには ミキサーにかける必要があります ミキサーを作るには 出力ラインをイベントコンポーザの キャンバスにドラッグして そこでミキサーの作成オプションが 表示されるようにしました
これで私のサウンドイベントは完成し 使用できるようになりました サウンドイベントをクリックすると インスペクタで直接設定を 確認することができます これによりサウンドイベントの コンポーザーに戻らなくても 値を調整することができるようになりました サウンドイベントができたので 先ほど飛行機に付けた PHASESourceコンポーネントで 参照できるようになりました そしてこれでシーン内の音声が ルートされて再生できるように設定されました PHASE Unityプラグインはゲーム内の オーディオデザインに全く新しい可能性をもたらします PHASEについてもっと知りたい 今日紹介したコンセプトを もっと深く知りたいという方は Apple Developer documentation siteと 昨年のWWDCセッションの 紹介ビデオも是非ご覧ください 以上新しいApple Unityプラグインの 概要を説明しました 今日はたくさんのことを説明しましたが もしあなたがApple Unity プラグインについて もっと知りたいなら GitHub 上のリポジトリから 始めてみるとよいでしょう そこにソースや詳しいドキュメント そして各プラグインのサンプルが入っています Unityゲームに アクセシビリティを取り入れるには “Unityゲームにアクセシビリティを追加する” またゲームの知名度を上げる方法については “Game Centerダッシュボードで 新しいプレイヤーにリーチする” を参照してください ご視聴ありがとうございました ♪
-
-
9:02 - Game Center - Example game manager component - C#
using Apple.GameKit; public class GameManager : MonoBehaviour { private GKLocalPlayer _localPlayer; private async Task Start() { try { _localPlayer = await GKLocalPlayer.Authenticate(); } catch (Exception exception) { // Handle exception... } } }
-
9:23 - Game Center - Example game manager component continued - C#
try { _localPlayer = await GKLocalPlayer.Authenticate(); if (_localPlayer.IsUnderage) { // Hide explicit game content. } if (_localPlayer.IsMultiplayerGamingRestricted) { // Disable multiplayer game features. } if (_localPlayer.IsPersonalizedCommunicationRestricted) { // Disable in-game communication UI. } }
-
13:11 - Game Controller - Example input manager component - C#
using Apple.GameController; public class InputManager : MonoBehaviour { void Start() { // Initialize the Game Controller service GCControllerService.Initialize(); // Check for connected controllers var controllers = GCControllerService.GetConnectedControllers(); foreach (GCController controller in controllers) { // Handle controllers } // Set up callbacks to handle connected/disconnected controllers GCControllerService.ControllerConnected += _onControllerConnected; GCControllerService.ControllerDisconnected += _onControllerDisconnected; } }
-
13:50 - Game Controller - polling and input handling - C#
foreach (GCController controller in _myConnectedControllers) { controller.Poll(); // Check the 'South' button ('A' button on most controllers) if (controller.GetButton(GCControllerInputName.ButtonSouth)) { //Handle button pressed } // Check other controller inputs… }
-
20:30 - Core Haptics - Example haptics component - C#
using Apple.CoreHaptics; public class Haptics : MonoBehaviour { private CHHapticEngine _hapticEngine; private CHHapticPatternPlayer _hapticPlayer; [SerializeField] private AHAPAsset _hapticAsset; private void PrepareHaptics() { _hapticEngine = new CHHapticEngine(); _hapticEngine.Start(); _hapticPlayer = _hapticEngine.MakePlayer(_hapticAsset.GetPattern()); } private void Play() { _hapticPlayer.Start(); } }
-
-
特定のトピックをお探しの場合は、上にトピックを入力すると、関連するトピックにすばやく移動できます。
クエリの送信中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください。