
-
ゲームをレベルアップさせる方法
統一されたゲームプラットフォームを利用してゲームの魅力を高める方法を学びましょう。ゲームをレベルアップさせ、プレーヤー体験をさらに向上させるうえで役立つテクノロジーの全体像を紹介します。ゲームの構築、デバッグ、プロファイリングに不可欠な基本ツールについても概説します。
関連する章
- 0:00 - イントロダクション
- 1:19 - システムの利用体験
- 1:39 - パフォーマンスの強化
- 4:26 - プレーヤーのエンゲージメント向上
- 6:43 - ゲームテクノロジー
- 7:33 - プレイの開始
- 9:31 - 場所を問わずプレイ
- 12:52 - お気に入りの方法でプレイ
- 14:56 - グラフィックス
- 22:31 - 次のステップ
リソース
- Function constants and Framebuffer fetch
- Human Interface Guidelines: Designing for games
- Ray tracing with Intersection Function Buffer
関連ビデオ
WWDC25
- イマーシブなアプリを作成するためのMetalレンダリングの新機能
- Apple Gamesアプリによるプレイヤーのエンゲージメント向上
- Appleがホストするバックグラウンドアセットの詳細
- Game Centerの導入
- Metal 4の概要
- Metal 4ゲームの知識を深める
- Metal 4ゲームの詳細
WWDC24
-
このビデオを検索
Alexeyです Metal Games Ecosystemチームで エンジニアリングマネージャーをしています プレーヤーは皆さんが制作するゲームに 最高の体験を期待しています 常に進化し続けるAppleシリコンの性能と 効率性 そしてそれを支えるソフトウェアを 活用することで 最高の体験を提供できます AppleのSDKは Appleエコシステム全体の プレーヤーに向けた 次世代のゲーム開発に役立つ 幅広いツールを提供します 目を奪われるグラフィック、快適な操作性、 充実したソーシャル機能などを備える 統合されたゲームプラットフォームにより ゲームをiPhone、iPad、Macに 簡単に展開できます これまで 優れたゲーム体験を支える OSとフレームワークは 進化を続けてきました 今年は プレーヤーの体験を 一段と向上させる多数の機能が 追加されました 本日は 組み込みのシステム機能を活かして ゲームのパフォーマンスを 向上させる手法についてお話しします さらに プレーヤーがいつでもどこでも ゲームを楽しめるようにするために必須の ゲームテクノロジーについて解説します また Appleシリコンを最大限に活用し 新しいグラフィックス機能で ゲーム世界のイマーシブ感を 高める方法についてもご紹介します まず ゲーム中にデバイスの性能を 最大限に引き出すための 強力なシステム機能についてご紹介します ゲームの持続的なパフォーマンスを強化する 設定可能なシステムモードと プレーヤーのエンゲージメントや システム全体でのゲームの認知度を高める ソーシャル機能について説明します まずは ゲームのパフォーマンスを 強化する方法です ゲームモードは ゲームがより多くリソースを 使えるよう システムの動作を最適化します バックグラウンドの処理を減らすことで ゲームにより多くのCPU時間が割り当てられ レンダリングや物理シミュレーションなどの 複雑なタスクを処理できます また Bluetooth接続の遅延も改善され 入力やヘッドフォンの応答性が向上します macOSとiOSでは プレーヤーが ゲームを全画面で起動した場合に ゲームモードが有効になります ゲームモードが有効になると バナーが表示されます ゲームモードを ゲームに実装するのは簡単です info.plistにLSSupportsGameModeキーを 追加し 値をtrueに設定するだけです ゲームモードでは より多くの システムリソースを使えるようになり ゲームのパフォーマンスが高まります ゲームセッション全体を通じて プレーヤーの体験が一貫したものとなるよう ゲームモードを 適切に管理することが重要です そのためには Sustained Executionモードを 有効化するようシステムに指示します モードが有効になると システムにより ゲームの起動時からパフォーマンスが 定常状態に制限されます これにより ターゲットデバイスに応じた 適切な品質と パフォーマンスのレベルを迅速に確認でき プレーヤーに安定した体験を提供できます Sustained Executionモードは 数ステップの簡単な操作で有効にできます まず 対応するエンタイトルメントを ゲームに追加します そのためには Xcodeのツールで機能を有効にします 次に Apple Developerアカウントに ログインし このエンタイトルメントを ゲームのプロビジョニングプロファイルに 追加します これにより ゲームとOSが連携し スムーズなゲーム体験が実現します
様々なデバイスにおいて Appleシリコンの優れた電力効率により プレーヤーは場所を選ばず お気に入りのゲームを楽しめます macOS 26では バッテリー使用時に ゲームのエネルギー消費量が顕著に多い場合 通知が表示されます プレーヤーは ゲーム向けに最適化された 低電力モードに切り替えることで より長時間プレイできます
またプレーヤーは プレイ中にゲーム画面を 離れずに ゲームオーバーレイから直接 システムのエネルギーモードを 柔軟に変更することもできます
プレーヤーの体験をさらに高めるために 低電力モードに対応できるようゲームを 調整し 適応させることができます システムは 低電力モードが有効かどうかを 検出するAPIを提供します NSProcessInfoPowerStateDidChangeの通知を リッスンし 低電力モードの状態がenabledになった際に 品質設定を最適化するなどして プレイ時間をさらに延ばすことができます 統合ゲームプラットフォームの全体にわたり プレーヤーは様々な方法で友達を見つけ 一緒に遊ぶことができます その中心となるのがGame Centerです Appleのソーシャルゲームネットワークである Game Centerで プレーヤーは友達とつながり 友達が遊んでいるゲームや新しいゲームを 見つけたり 互いに競ったりできます デベロッパは Game Centerの多彩な機能を ゲームに導入して アチーブメント、Leaderboard、チャレンジ、 アクティビティなどを利用できます これらの機能によって プレーヤーは自分の 進行状況を確認したり 高得点を競ったり 友達を招待して 一緒に遊んだりすることができます Game Centerの設定はXcodeと完全に統合され アチーブメントの作成、 ローカリゼーションの設定、 チャレンジの構成が可能になりました 加えた変更はすべて コードレビューと バージョン管理の対象にできます 設定が完了したら 新しいGame Progress Managerを使用して プレーヤーに公開する前に ローカル環境でテストを実施できます Game Centerとその機能については 「Get started with Game Center」で 詳細をご確認ください
ゲームにGame Centerを統合すると システム上の多くの場所で見つかりやすく なるよう 調整が自動で適用されます そうした場所の1つが 新しいApple Gamesアプリです Gamesアプリは ゲームを楽しむための まったく新しいオールインワンのアプリです プレーヤーはアプリ内で 購入したゲームを起動したり 新しいゲームを見つけたり より楽しい方法で友達と遊んだりできます このアプリはMac、iPad、iPhoneに あらかじめインストールされており ウィジェット、通知、App Storeなど OS全体にわたり機能が統合されています 例えばプレーヤーは ゲーム画面を離れずに ゲームオーバーレイから直接 Leaderboardのランキングを チェックできます
「Engage players with the Apple Games app」のビデオでは Gamesアプリにゲームを登録して 既にプレイしている友人を通じて ゲームを見つけてもらいやすくする方法を 解説しています ゲームに最適化されたシステム体験を 活用することで ゲームの可能性を最大限に 引き出すことができます システムのパフォーマンス機能は 安定した スムーズなフレームレートを提供し ソーシャル機能は コミュニティの構築と プレーヤーエンゲージメント維持を支えます 次に ゲームとプレーヤーの体験を さらに向上させるために 既存および最新のゲームテクノロジーを 活用する方法を紹介します ゲーム向けの ヒューマンインターフェイスガイドラインは Appleプラットフォームならではの優れた 体験の提供方法を学ぶ際の最適な出発点です 各種のAppleデバイスをサポートするための 最適な方法を記載した 包括的なドキュメントであり プレーヤーの オンボーディング、様々な画面サイズに 合わせた調整、多彩な入力方法への対応など 幅広いトピックをカバーしています 優れたゲーム体験は 入念に設計された ゲームデザインと それを最大限に活かす 最適なテクノロジーを 組み合わせることによって実現します ゲーム体験は プレーヤーがゲームを インストールした瞬間から常に進展し その一連の体験は プレーヤーがゲームに どのように関わるかに左右されます ハイエンドゲームは 最初のダウンロードの サイズが大きくなりがちなため まず検討すべき課題は いかにして プレーヤーがすばやく ゲームを開始できるようにするかです 例として このサンプルゲームを見てみましょう このゲームは 1つの実行可能ファイルと コンテンツパッケージ内の数ギガバイトの テクスチャや音声録音で構成されており リッチなプレーヤー体験を提供します しかし ダウンロードに時間がかかり プレーヤーはすぐにプレイできません そこで この問題を改善するために ゲームコンテンツを2つの部分に分割します プレーヤーは 入門レベルのプレイに必要な 小さな部分だけ ダウンロードすれば済むようになりました プレーヤーは既にゲームを開始していますが それと並行して 残りのコンテンツが バックグラウンドでダウンロードされます Appleプラットフォームでこれを実現する Background Assetsフレームワークは ゲームの初回起動時の体験を 強化できるよう設計されています システムがデバイスにアセットを ダウンロードする際の方法を設定することで プレイ開始に必要なコンテンツを 優先的に取得できるようにします Background Assetsにより プレーヤーが ゲーム内で追加ダウンロードできる コンテンツを提供できます さらに ゲームアセットを メインのゲームバンドルとは別に アップデートすることもできます
新しいManaged Background Assetsは APIを強化し ワークフローを簡素化します TestFlightやApp Storeのゲームでは Appleによるアセットのホストを 最大200GBの容量まで利用できます また このAPIは使いやすく 帯域外でのアセットの自動更新や システム管理も 組み込みでサポートしています Managed Background Assetsは Appleプラットフォームでのゲーム配信の ワークフローとも緊密に統合されています TestFlightを使用して ゲーム内のコンテンツ変更をベータテストし その変更がApp Store Reviewで承認されれば プレーヤーに公開できます 「Discover Apple-Hosted Background Assets」で詳細をご覧ください Appleプラットフォームで ゲームを際立たせるには macOSとiOSの両方に 簡単に対応させることに加え プレーヤーの全デバイス間で ゲームの 進捗状況を同期可能にすることが必要です 例えば プレーヤーが自宅のデバイスで プレイを開始したとします 目標を達成したので ゲームをセーブし セーブデータをiCloudにアップロードします その後 そのプレーヤーはバスに乗ります プレーヤーはスムーズに iPhoneでゲームを起動し iCloudからセーブデータを読み込んで 続きをプレイできますし プレイ中もデータは常に同期されます 最後に プレーヤーはカフェに行き iPadでゲームをプレイすることにします より大きな画面でプレイしたいからです この場合も iCloudから 進捗状況を読み込みできます デバイス間で進捗状況を 同期するための鍵は クラウドセーブです 新しいGameSaveフレームワークでは ゲームでの クラウドセーブを簡単に実現できます このフレームワークはiCloudを利用しており ユーザーのプライバシーと データセキュリティを考慮して 設計されています 同じiCloudアカウントを持つデバイス間で ゲームデータを自動的に 同期および保存します プレーヤーがオフラインになった場合や iCloudからサインアウトした場合にも 対応しています
また GameSaveフレームワークが提供する デフォルトのUIを使用すると iCloudで同期中の セーブデータの進捗状況の表示、 セーブデータの競合の可能性がある場合の プレーヤーへの通知と 競合の解消のためのオプションの提示、 プレーヤーがiCloudからサインアウトした 際のアラートによる通知などを行えます さらに プレーヤーの体験を カスタマイズしたい場合は GameSave APIを使用してゲームのUIと統合し カスタムロジックを追加できます ゲームでGameSaveフレームワークを 有効にするのは簡単で わずか数ステップで行えます まず ゲームに iCloudエンタイトルメントを追加します そのためには Xcodeのツールで機能を有効にします ゲームプロジェクトの設定でのチェックボックスを選択し iCloudコンテナエンタイトルメントを 追加します 次に Apple Developerアカウントに ログインし このエンタイトルメントを ゲームの プロビジョニングプロファイルに追加します これで GameSaveフレームワークを ゲームで使用できるようになります 始め方をお見せしましょう GameSaveフレームワークの利用フローでは まずopenDirectoryを呼び出すのが通常です GameSaveが バックグラウンドで ユーザーのセーブデータの取得を開始します GameSaveによる同期中に 状態を確認できるよう ユーザーアラートを 表示するウインドウを提供できます 同期が完了すると セーブデータが URLから利用できるようになります これがサンプルコードです iCloudとの同期を開始するには ゲームのコンテナ識別子を使用して openDirectoryForContainerを呼び出します GameSaveフレームワークが バックグラウンドで同期を実行している間 finishSyncingの完了ハンドラを呼び出して 同期後のロジックを追加できます クラウド同期が完了したら stateを確認し 必要に応じてエラーを処理します 最後に directoryStateのURLを使用して プレーヤーのセーブデータにアクセスします これで サポートされているすべての デバイス間で セーブデータを共有できます GameSave APIとその機能について詳しくは フレームワークの ドキュメントをご覧ください プレーヤーがゲームを 操作する方法は様々であり 各自が好むやり方で プレイできることが大切です Appleプラットフォームは キーボード、 マウス、ゲームコントローラなどの 入力用の周辺機器を 包括的にサポートしています 他のプラットフォームとまったく同じ方法で プレーヤーにゲームを 楽しんでもらうことができます Game Controllerフレームワークは これらすべての入力タイプを ゲームで利用できるようにする APIを提供します モダンで柔軟な設計を備えているため イベントコールバックを登録することも プレーヤーの行動をオンデマンドで ポーリングすることもできます Appleの全プラットフォームで推奨される プレーヤーの入力の取得方法であり Playstation DualSenseなどの 最新のコントローラにも対応しています マウス、キーボード、コントローラに加え Appleは独自の方法により タッチ操作を重視したプラットフォームでも ハイエンドゲームをサポートします iPhoneやiPadで コントローラを使用するプレーヤーもいます しかし 大多数のプレーヤーは コントローラを使わないでしょう 新しいTouch Controlsフレームワークを 利用すれば 既存のゲームを タッチ操作に 簡単に対応させることができます 一般的な入力をサポートするための 多数のボタンのタイプや動作が 用意されています さらに ゲームのニーズに最も合うように 各ボタンの外観もカスタマイズできます また この新しいAPIはMetalと直接連携し 最高レベルのパフォーマンスを実現します これにより プレーヤーにオプションを 簡単に提供できます タッチ操作でのプレイを好む人もいれば コントローラが手元にない人もいます プレーヤーはいつでも好きな時に ゲームを楽しめます ゲーム内でタッチコントロールを 簡単に設定するための手順については ドキュメントで詳細をご覧ください また 「Design advanced games for Apple platforms」もぜひご視聴ください ゲームのベストプラクティスを確認できます これらのテクノロジーを活用することで ゲームを初めて起動した瞬間から プレーヤーに ハイレベルな体験を提供できます そして プレーヤーは望む通りの方法で ゲームを進めることができます さて次のトピックは ゲームのストーリーを 表現し その世界にプレーヤーを 引き込むための重要な要素 すなわちグラフィックスです Metalは 低レベルグラフィックスと コンピュートのためにAppleが提供するAPIで 最新のゲームやプロ向けアプリを含む 様々な世代の複雑なアプリで 利用されています Metalは 最高クラスのグラフィックスと パフォーマンスをゲームで提供するために 必要となる すべての機能をサポートしています Metal 4 APIは リソース管理やシェーダのコンパイルなどの より複雑なタスクの処理、 グラフィックスコマンドの エンコーディングにおけるCPU負荷の軽減、 レンダリングパイプラインでの 機械学習の活用を可能にします 新機能の詳細については 「Discover Metal 4」をご覧ください グラフィックエフェクトが複雑化する中で フレームタイムを制限内に収めるには より多くの労力が必要です また それを達成するために ビジュアル品質で妥協すべきではありません この課題は MetalFX Upscalingを ゲームでサポートすることで解決できます MetalFXは 低解像度の画像を 目標の 出力解像度までスケーリングする処理を 直接その目標解像度で レンダリングするより短時間で完了できます また 空間アップスケーリングと 時間アップスケーリングの両方を サポートするため ビジュアル品質と パフォーマンスをバランスよく両立できます MetalFXのフレーム補間を導入すると ゲームのフレームレートを さらに向上させることができます MetalFX Upscalingと組み合わせることで より一層パフォーマンスを強化できます フレーム補間を使用すれば ゼロからレンダリングするよりも はるかに短時間で 中間フレームを生成できます レイトレーシングなどの グラフィックス手法を使用している場合は MetalFXのノイズ除去を利用して ビジュアルを向上させることができます MetalFXは アップスケール処理中の ノイズ除去をサポートしているため レンダリングに使用した光線が少ない画像で 生じるノイズを除去し フルサイズの画質を提供できます M4 Max搭載の最新MacBook Proで実行している CD Projekt Redの「Cyberpunk 2077」では このような美しい映像を実現するために 複雑な技法が多数使用されています MetalFXの機能によって 通常より大幅に高く滑らかな フレームレートを実現しています 「Go further with Metal 4 games」では MetalFXの既存の機能や新機能を ゲームに導入して パフォーマンスや ビジュアルを強化する方法を紹介しています Game Porting Toolkit 3に Metal 4のサポートも追加されました Metal-cppは Game Porting Toolkitの一部であり 既存のC++コードベースへの Metalの統合を可能にします Metal-cppはMetal 4をフルサポートしており Metal-cppを既にお使いの場合は Metal 4の機能をすぐに導入できます さらに Metal-cppは ノイズ除去やフレーム補間といった MetalFXの最新機能もサポートしています Metal Shader Converterも便利なツールです HLSLシェーダを Metalに変換する際に役立ちます Metal Shader Converterが Metal 4をサポートしたことで 既存のシェーダバインディングテーブルを Metalレイトレーシングに 直接変換するために 交差関数バッファを レイトレーシングに使えるようになりました さらに HLSLコード内でMetalの機能を 直接有効にすることができます
シェーダ内に複雑なロジックがある場合に シェーダを効率的に特殊化するために 関数定数を使用して パフォーマンスを 向上させることができます また プログラマブルブレンディングなどの 利用を可能にする フレームバッファフェッチにより 複数のレンダリングパスの結果を 効率的に結合できます どちらの機能も エンジンに 大きな変更を加えることなく利用できます これらを導入するには 新しいサンプルコードの 「Function Constants and Framebuffer Fetch」と 「Ray tracing with Intersection Function Buffer」をご確認ください また Game Porting Toolkit 3の 新機能について詳しくは developer.apple.com/jp/gamesの ドキュメントをご確認ください ゲームポーティングの サンプルコードもご利用ください Metal 4は プロファイリングや デバッグを支援する 包括的なツールセットも提供しています Runtime APIとシェーダ検証ツールにより 問題の原因がフラグの欠如なのか シェーダにバインドされていないリソースを 読み取ろうとしたことなのかを 確認できます Metal Performance HUDは ゲームのパフォーマンスをリアルタイムで 分析するための 各種の パフォーマンスメトリックスを表示します XcodeのMetalデバッガは GPU処理の 詳細なプロファイリングデータを提供し ピクセルの挙動に違和感がある場合に ステップごとのデバッグを可能にします InstrumentsのMetalシステムトレースは ゲームのCPUとGPUの使用状況についての インサイトを提供します 改善の余地がある箇所を すばやく特定して確認できます Metal Performance HUDでは ゲームパフォーマンスの概要を把握できます ゲームのネイティブビルドの プロファイリングのほか Windowsゲームの評価環境でも利用できます ゲームのパフォーマンスを より効率的に分析するために 4つの新しい機能が導入されました Metal Performance HUDに パフォーマンスインサイトが追加され ゲームをより効果的に最適化し フレームレートを高めるための推奨事項が 提供されるようになりました また フレームの予期しないヒッチを リアルタイムで特定する上で役立つ シェーダコンパイル数など 追加のメトリックスも提供されます オプションとして これらすべてのデータを パフォーマンスレポートに集約して 後で確認できます Metal Performance HUDの 見た目もカスタマイズ可能になり 表示するデータやその表示位置を 指定できるようになりました 実際に見てみましょう これは Metal Performance HUDを Macで実行している様子です グローバルメニューで HUDの見た目を簡単に調整したり 新しい設定パネルにアクセスしたりできます 設定パネルのコントロールで HUDの見た目をさらにカスタマイズできます 例えば 追加のメトリックス を有効にすると 発生しているスタッターが シェーダの コンパイルに起因するかの判定に役立ちます 設定パネルのタブには があります この機能は このサンプルの Metal APIの使用状況を追跡し 改善できる点があれば 関連ドキュメントを教えてくれます このデータは経時的に集計され 必要に応じて適宜 詳細情報と推奨事項を含む インサイトが表示されます この例では いくつかのシェーダが実行時に まだコンパイル中であることがわかります パフォーマンス低下の原因なので 対処すべきですね パフォーマンスインサイトは ネイティブゲームでも Windowsゲーム用の評価環境で実行される ゲームでも利用できます これにより 開発プロセスの早い段階で パフォーマンス改善の可能性がある箇所を 特定することができます またMetal Performance HUDはオフラインで レビューできるパフォーマンスレポートも 生成できるようになりました グローバルメニューから 一定期間を対象に サンプルのパフォーマンスレポートを 生成できます その期間が経過すると レポートは一時フォルダに保存され レビューできるようになります レポートでは パフォーマンスインサイトを 含め Metal Performance HUDで収集される すべてのメトリックスを確認できます これにより 一定期間における サンプルのパフォーマンスを把握でき 特に負荷の高いレンダリングや コンピューティングのパスを検出して 改善の余地のある領域を特定できます Metal 4は Appleシリコン上での 優れたビジュアルとパフォーマンスの実現に 必要な機能とツールをすべて備えています 応答性に優れたスムーズなゲームプレイを 実現するために 組み込みのシステム機能を活用しましょう ゲームの核となるテクノロジーを 導入し 質の高いプレーヤー体験を提供しましょう Metal 4を利用して ゲームのビジュアルと パフォーマンスを強化しましょう Metal 4のその他の優れた機能については 「Explore Metal 4 games」をご覧ください また 「Engage players with the Apple Games app」では プレーヤーやその友達に ゲームを 見つけてもらいやすくする方法を学べます Appleプラットフォームでの 皆さんの新作ゲームが楽しみです ご視聴ありがとうございました
-
-
0:01 - React to Low Power Mode state
static let NSProcessInfoPowerStateDidChange: NSNotification.Name var isLowPowerModeEnabled: Bool { get }
-
12:13 - GameSave code sample
// Objective-C GameSave code sample #import <GameSave/GameSave.h> NSString* containerIdentifier = ///… container entitlement string, nil specifies the first in the entitlement array GSSyncedDirectory* directory = [GSSyncedDirectory openDirectoryForContainerIdentifier:containerIdentifier]; /// Where statusDisplay is an NSWindow or UIWindow where the alert will be anchored to [directory finishSyncing:statusDisplay completionHandler:^{ }]; GSSyncedDirectoryState* directoryState = [directory directoryState]; switch (directoryState.state) { case GSSyncStateError: error = directoryState.error; break; default: NSLog(@"Sync has finished"); } NSURL* saveURL = directoryState.url;
-