ゲームプランニング
Appleプラットフォーム向けに初めてゲームを開発する際は、開発に必要なツールやテクノロジーについて理解する時間を設けましょう。Appleは、Appleプラットフォームで次世代のゲームを制作するのに必要なハードウェア、グラフィックス、オーディオ、ソーシャルゲーム、開発および配信用のツールを提供しています。
Appleプラットフォーム向けに初めてゲームを開発する際は、開発に必要なツールやテクノロジーについて理解する時間を設けましょう。Appleは、Appleプラットフォームで次世代のゲームを制作するのに必要なハードウェア、グラフィックス、オーディオ、ソーシャルゲーム、開発および配信用のツールを提供しています。
Apple SDKは、すべてのAppleプラットフォーム向けの優れたゲームの制作に必要なすべてを備えています。SDKが提供するAPIは、GPUを活用したパワフルなグラフィックスから、ゲームコントローラの統合、臨場感のある空間オーディオにいたるまで、さまざまな機能を実現します。
ハイパフォーマンスのアドベンチャーゲーム、レースゲーム、アクションゲームの制作
ハードウェアアクセラレータを使用する3Dグラフィックス、触覚(ハプティクス)とサウンドのフィードバック、空間オーディオによってプレイヤーの臨場感を高める、アクション満載のゲームを開発できます。人気の高いゲームコントローラ、レーシングハンドル、デバイス固有のタッチやモーションに対応しましょう。
パズルや戦略ゲームの制作
標準のコントロールを使ってインターフェイスを構築できるだけでなく、独自の2Dビューを描画したり、ハードウェアアクセラレータを使用するアニメーションを実行したりできます。大規模なデータセットや計算はGPUにオフロードされます。
マルチプレイヤーゲームの制作
Game Centerでは、マッチメイキング、友達の検索、ボイスチャットなどのソーシャルゲーム機能を追加できます。Leaderboard、達成項目、チャレンジ機能でユーザーのプレイ意欲を刺激することができます。プレイヤーはSharePlayを使って、FaceTimeで家族や友達とゲームを始められます。
仮想世界と現実世界の融合
visionOSでは、ゲームのグラフィックスと空間オーディオを3D空間でプレイヤーの現実世界と組み合わせて、その空間をプレイヤーが選択するイマーシブ体験のレベルに合わせて調整できます。壁の穴から宇宙船を飛ばしたり、2Dボードゲームをプレイヤーのデスクに映し出したりできます。
すべてのデバイスで適切に動作
ゲームデータをiCloudに保存することで、プレイヤーはどのAppleデバイスからでもプレイを続けられます。iOS向けゲームをiPadOSやmacOSでもプレイできるようにしましょう。異なるバージョンのAppleプラットフォームのゲーム間で、コードを簡単に共有することもできます。
Appleテクノロジーを使ったゲーム開発は、Appleの統合開発環境であるXcodeで始めます。Xcodeには、コードエディタ、デバッグツール、デバイスシミュレータ、グラフィックスパフォーマンスおよび分析ツール、プラットフォームSDKが含まれています。
Xcodeには、iOS、iPadOS、macOS、tvOS、visionOS、watchOS向けの各SDKが用意されています。
まずXcodeプロジェクトを作成し、使用するプラットフォーム、ゲームテンプレート、ゲームテクノロジー(Metalなど)を選択します。MetalにC++を使う場合や、Unity™のプロジェクトがある場合は、以下の「既存のゲームのAppleプラットフォームへの展開」を参照してください。
優れたゲームには、ゲームが動作する各デバイスの特性や機能が反映されています。プレイヤーは移動しながら、机に向かいながら、ソファでくつろぎながら、あるいはリビングルームで立ったままプレイするかもしれません。多様なゲームプレイの場面を想定しましょう。可能な限り、プレイヤーがMulti-Touchジェスチャや音声コントロールを使ってゲームを操作できるようにします。高解像度ディスプレイ、Appleシリコン、外付けゲームコントローラ、ヘッドフォン、スピーカーも活用しましょう。visionOSでは、パススルーを許可したり、プレイヤーの周囲環境に合わせてオーディオを調整したり、タッチイベントの処理やカスタムジェスチャの追加を行ったりできます。プラットフォーム固有のデザインについては、「ヒューマンインターフェイスガイドライン」の「プラットフォーム」を参照してください。
Metalを使用することで、プレイヤーのパワフルなAppleハードウェアからグラフィックスパフォーマンスを最大限引き出すことができます。Metalでは、すべてのAppleプラットフォームに対応した、ハードウェアアクセラレータを使用する2Dおよび3Dグラフィックス用のローレベルAPIに加え、Appleシリコン専用に設計されたパワフルな各種機能が提供されます。
GPUにタスクを送信する。デバイスのグラフィックスプロセッシングユニット(GPU)でコマンドを実行するには、コマンドバッファを作成し、それにコマンドを書き込んで、コマンドキューにバッファをコミットします。詳細については、「GPUデバイスとタスクの送信」を参照してください。
アセットをGPUにストリーミングする。アセットデータをテクスチャやバッファに非同期でストリーミングすることで、グラフィックスリソースをより高速に読み込むことができます。詳細については、「リソースの読み込み」を参照してください。
アップスケーリングを使ってパフォーマンスを高速化する。ハイパフォーマンスのテンポラルアンチエイリアスや空間アップスケーリングを使って、3Dシーンのパフォーマンスを向上できます。MetalFXフレームワークを使用すると、画像を直接レンダリングするよりも短時間で低解像度の画像を高解像度の画像にアップスケーリングできます。
各GPUファミリーに合わせたシェーダを使用する。Metal Performance Shaderフレームワークを使用することで、画像にハイパフォーマンスフィルタを適用したり、行列やベクトルの乗算を行ったりできます。
GPUで計算を実行する。レンダリングパスと同時に実行されるパスの計算をGPUの複数のコアにエンコードすることで、グラフィックスのレンダリングが計算の影響を受けることはありません。GPUにレイトレーシングを実装する方法については、「Metalを使ったレイトレーシングの高速化」を参照してください。
実装に必要な機能について、動作するコードを確認するには、「Metalサンプルコードライブラリ」を参照してください。
パワフルなMetal開発ツールスイートを使用することで、高速で効率性に優れたゲームを制作できます。
Metal APIの問題を特定して修正する。Xcodeでゲームを実行してMetalコードを検証することで、シェーダ実行エラーを検出できます。詳細については、「アプリのMetal APIの使用状況の検証」と「アプリのMetalシェーダの使用状況の検証」を参照してください。
ゲームのデバッグとプロファイルを行う。Metalデバッガを使用することで、ビジュアルアーティファクトを調査してGPUパフォーマンスを最適化できます。Metalのワークロードを取得し、パフォーマンスタイムラインを使ってGPUの実行パフォーマンスを調べます。シェーダデバッガを使用すれば、ビジュアルアーティファクトから取得したMetalワークロードを調査できます。
グラフィックスの中断やスタッターを修正する。ゲームのフレームレートが遅いかどうかを分析するには、InstrumentsのGame Performanceテンプレートを使います。これは、スレッドおよびシステムコールの情報がMetal System Trace Instrumentと統合されているテンプレートです。詳細については、「Metalアプリのパフォーマンスの分析」を参照してください。
メモリ使用量を最適化する。Instrumentsのプロファイリングツールを使うと、メモリ占有量を抑えながらゲームのフレームレートを向上させることができます。詳細については、「ゲームメモリのプロファイルと最適化」を参照してください。
パフォーマンスをリアルタイムで分析する。ゲームにMetal Performance HUDをオーバーレイすることで、CPUとGPUのメトリックスをリアルタイムで確認できます。詳細については、「Metalアプリのグラフィックスのパフォーマンスのモニタリング」を参照してください。
ゲームのアクションに合わせたサウンドエフェクトや音楽を追加し、ゲームの臨場感やリアル感を高めましょう。
オーディオ、サウンド、音楽を追加する。AVFoundationを使用することで、オーディオの再生、カメラのコントロール、オーディオの処理を行うことができます。ボイスチャットを設定したり、ほかのソースとオーディオをミックスしたりするには、AVAudioSessionを使用します。再生をコントロールするには、AVAudioPlayerまたはAVAudioEngineを使用します。ライブラリのミュージックを再生するには、Media Playerを使用します。オーディオハードウェアを直接操作するには、Core Audioを使用します。
空間オーディオをシーンに組み込む。PHASE(Physical Audio Spatialization Engine)フレームワークを使用すると、リアルタイムでゲーム内のイベントやシーンに反応できる、よりリアルで臨場感のあるオーディオ体験を提供できます。PHASEは、プラットフォームや出力デバイス(ヘッドフォンやスピーカーなど)に関わらず、一貫した空間オーディオを実現します。
iPhoneとApple TVでは、Core Hapticsを使って、触覚(ハプティクス)とオーディオのフィードバックを組み合わせた物理的な感覚でプレイヤーを引き込みます。プレイヤーの注意を引き、アクションを強化できるよう、スイッチを切り替えるといった一時的なイベントや、バイブレーションや着信音のように継続的なイベントに基づいて、カスタムハプティックパターンを構築しましょう。ゲームコントローラを通じて触覚フィードバックを提供するには、以下の「入力デバイスのサポート」を参照してください。
Game Controllerフレームワークを使って、プレイヤーがゲームを自然に操作できるようにしましょう。
App Storeでは、コントローラがサポートされているゲームに、ゲームコントローラバッジが追加されます。
パワフルなAppleシリコンGPUを最大限に活用しましょう。
Appleシリコン向けにコードをビルドする。仮想メモリのページサイズ、キャッシュラインサイズ、可変長引数関数、同時に書き込みと実行が可能なメモリなどを活用できます。詳細については、「macOSコードでの異なるアーキテクチャへの対応」を参照してください。
CPUスレッドの優先度を更新する。POSIXスレッドの優先度とスケジューリングポリシーの使用に加え、Grand Central Dispatch(GCD)を使用することでスレッドのスケジューリングを管理してシステムの応答性を維持し、Quality of Service(QoS)をすることで、スレッドにセマンティクスを付加できます。詳細については、「Appleシリコンに対応したコードパフォーマンスの調整」を参照してください。
Neonを使ってパフォーマンスを高速化する。Neon命令セットでは、Single Instruction Multiple Data(SIMD)演算を提供することで、ARMプロセッサのパフォーマンスを高速化できます。Appleプラットフォーム上でオープンソースのNeonライブラリを使う方法については、「SSE2Neon」と「AVX2Neon」を参照してください。
GPUのパフォーマンスと効率を最適化する。イメージブロック、タイルシェーディング、ラスタ順序グループなどのGPU機能を使用するMetalコードを記述できます。詳細については、「AppleのGPUとタイルベースのディファードレンダリングに合わせたアプリのカスタマイズ」を参照してください。
visionOSで優れたイマーシブ体験を生み出すためのコードの修正方法を検討しましょう。
RealityKitを使って、現実世界の周囲にあるオブジェクトにリアルに溶け込むバーチャルオブジェクトを作成できます。
共有スペースでは、RealityKitにより、プレイヤーの部屋にある現実世界の照明がオブジェクトに適用されます。RealityKitでは、バーチャルオブジェクトをよりリアルにするその他のエフェクトも適用されます。たとえば、バーチャルオブジェクトが現実のオブジェクトの近くにある場合の奥行きの緩和、近距離でのビネット効果、パススルー、地面に映る影などです。
組み込みの物理ベースレンダリング(PBR)シェーダを使用したり、Reality Composer Proで編集するカスタムシェーダを作成したりできます。独自のカスタム照明エフェクトを適用することもできます。詳細については、「Reality Composer Proについて」をご覧ください。
モデルやテクスチャ、シェーダをデバイスに渡すと、デバイスで左右のそれぞれの目に対してレンダリングされます。プレイヤーを異空間にいざなうフルイマーシブなゲームの場合は、RealityKit、SwiftUI、ARKitを使用します。
GPUを直接制御する必要のある高性能グラフィックスの場合は、Compositor Servicesを使ってMetalにアクセスし、それぞれの目に対してシーンを手動でレンダリングします。次に、ARKitを使用してワールドトラッキングやハンドトラッキングを行います。詳細については、「イマーシブアプリのためのMetalについて」をご覧ください。
2Dゲームを3D空間でのプレイに対応させるには、オブジェクトを別々のレイヤでレンダリングしてパララックス効果を加えたり、平面から煙や火花などの要素が飛び出すようにしたりすることを検討します。詳細については、「空間ユーザーインターフェイスのためのデザイン」をご覧ください。
プレイヤーの手を含め、コンテンツを現実世界にアンカーするには、RealityViewを使用します。
3D空間でオブジェクトを生き生きと表現するには、シーン内の特定のエンティティでRealityKitを通じてオーディオを再生します。RealityKitは、リバーブと現実世界の音響を自動的にマッチングさせます。「卓越したサウンドトラックの作成」で取り上げられているその他のAPIを使用したオーディオの場合は、ARKitのqueryPose(atTimestamp:)
メソッドを使ってプレイヤーの頭の位置を取得して、ヘッドトラッキングを実装することができます。詳細については、「イマーシブなサウンドデザインについて」をご覧ください。
目や手、頭のポーズを入力デバイスとして使って、プレイヤーをゲームの世界に引き込みましょう。
SwiftUIでは、プレイヤーがオブジェクトに触れて選択したり、ドラッグしたりするようにできます。オブジェクトの形状を定義するにはCollisionComponent
を使用し、オブジェクトをインタラクティブなものにするにはInputTargetComponent
を使用します。
プレイヤーの手を使用するカスタムジェスチャを作成するには、ARKitを使って手をトラッキングし、部屋のバーチャルメッシュを取得します。ARKitを使うと、水平または垂直方向の平面を検出し、さらにカーペットや木材などの平面のマテリアルを取得することもできます。詳細については、「空間入力のためのデザイン」と「空間コンピューティング向けのARKitについて」をご覧ください。
従来のゲームの場合、プレイヤーはフルスペースでの実行時に、パススルーにより自分が持っているデバイスを見ることができるため、ゲームコントローラやキーボードを使用できます。
iPadやiPhone向けの既存のゲームは、デバイス上のウインドウで自動的に実行され、間接ジェスチャや直接ジェスチャを使ってプレイできます。ステレオスコピック(立体視)を追加し、ジェスチャ入力やエフェクトなどのデバイス機能を最大限に活用して、2Dゲームを3D空間でより魅力的なものにするには、RealityKitを使って、ゲームを空間コンピューティング向けにデザインします。
既存のUnity VRゲームについては、「UnityのVRアプリのフルイマーシブ空間への展開」と「イマーシブなUnityアプリの制作」をご覧ください。
まずは、RealityKitテンプレートを使ってvisionOSゲームを作成し、Apple Vision Proシミュレータでゲームを実行してみましょう。詳細については、「空間コンピューティング向けのアプリ構築のための準備」と「空間コンピューティング向けのゲーム開発」をご覧ください。
Appleは、既存のゲームをAppleプラットフォームでも展開できるよう、サポートとツールを提供しています。
Appleシリコン上でWindows実行可能ファイルを評価する。Windows™ゲームをMacに展開する場合も、Appleシリコンを使うことで、ゲームを修正することなく、Mac上でゲームのグラフィックスとパフォーマンスをテストできます。詳細については、「Macへのゲーム展開 Part 1:ゲームプランの作成」を視聴し、ゲームポーティングツールキットをダウンロードしてください。
UnityベースのゲームでAppleテクノロジーを使用する。UnityプロジェクトにApple Unityプラグインを使用することで、GameKit、Core Haptics、PHASE、Accessibility、Game Controllerフレームワークにアクセスできるようになります。
MetalでC++を使用する。既存のC++コードがある場合、引き続きMetalでも使用できます。Metal-cppを使うと、個別のObjective-CファイルやSwiftファイルを使うことなく、C++からMetal APIにアクセスできます。詳細については、「Metal-cppの概要」を参照してください。
シェーダコードをMetalに変換する。Metalシェーダコンバータを使用すると、DirectX Intermediate Language(DXIL)を、Xcodeプロジェクトに追加できるMetalライブラリに変換して時間を節約できます。詳細については、「既存のゲームのMacへの展開:シェーダのコンパイル」を視聴し、Metalシェーダコンバータをダウンロードしてください。
ゲームアセットを変換する。Windowsアセットの作成パイプラインがある場合は、Windows向けのMetalデベロッパツールを使用してアセットをAppleプラットフォームに移行できます。グラフィックスとコンピュートシェーダのコンパイルにはMetalコンパイラを、Metalがサポートする形式にテクスチャを変換するにはテクスチャコンバータを使います。
Game Centerを使用して、ソーシャルゲームやゲームデータの保存を行うための、Appleが提供するサービスを活用しましょう。プレイヤーがお互いに情報を共有したり、やり取りを行ったりすることで、ゲームを有機的にプロモーションできるようAppleがサポートします。
発見とエンゲージメントを促進する。AppleのソーシャルゲームネットワークであるGame Centerを有効にすることで、新規プレイヤーにApp Storeや友達を通じてゲームを見つけてもらい、既存プレイヤーには継続的にゲームを楽しんでもらえます。
コンペティションを通じてプレイ意欲を高める。GameKitフレームワークを使ってGame Centerにソーシャルゲーム機能を追加することで、友達やアクティビティを通じてゲームの楽しさをさらに高め、ゲームをプロモーションできます。
ゲームとプレイヤーのデータを保存する。GameKitまたはCloudKitを使用してプレイヤーのゲームデータをiCloudアカウントに保存することで、プレイヤーは複数のデバイスでゲームを継続できるようになります。さらに、すべてのプレイヤーがアクセスできるゲームの非公開または公開のiCloudコンテナにゲームデータを保存することもできます。
使い慣れたマルチプレイヤー操作を実現する。GameKitのMatchmaking APIとCommunication APIを使えば、マルチプレイヤー機能を簡単に追加できます。
詳細については、「ゲームに参加する複数のプレイヤーを見つける機能」を参照してください。
ゲームコンテンツをキャプチャして再生する。ScreenCaptureKitフレームワークを使用すれば、macOSゲームに画面共有機能やゲームストリーミング機能を追加できます。ScreenCaptureKitでは、最小限のCPUとGPUのオーバーヘッドで、指定したウインドウ、アプリ、およびディスプレイのビデオやオーディオを記録できます。
App Storeでは、あらゆるAppleプラットフォームを利用している世界中の何億人ものユーザーにゲームを簡単に配信できます。App Storeがユーザーからの決済処理、安全で信頼性の高いダウンロードの提供、リリースの管理、ゲームのプロモーションを行います。
ゲームをApp Storeで配信する。Apple Developer Programに登録し、Xcodeを使ってビルドをアップロードしましょう。App Store Connectを使用して、ゲームに合わせた機能の設定、ベータ版テストのためのゲームの配信、App Reviewへのビルドの送信を行うことができます。
ダウンロードサイズを小さくする。App Storeでは、各プラットフォームに合わせてビルドを最適化し、オンデマンドリソースをホストしてゲームのサイズを小さくしてダウンロードを高速化できます。詳細については、「配信に向けたアプリの準備」を参照してください。バックグラウンドアセットを使用して独自のリソースをホストすることもできます。
ユーザーにゲームを見つけてもらえるようにする。アプリプレビュー、スクリーンショット、説明文が表示されるApp Storeのプロダクトページを作成することで、ゲームに対するプレイヤーの注目を集められます。
macOSのゲームをAppleシリコン専用にする。M1チップ以降を搭載したMacのみを対象としてゲームを公開するには、「Mac App Storeへのアプリの提出」の「Appleシリコン専用アプリ」を参照してください。
macOSゲームの公証を受ける。Mac App Store外部で配信されているmacOSゲームがデベロッパ公式のゲームであり、既知の悪質なコンポーネントがないことを確認済みで、プレイヤーに安心してもらえるよう、Xcodeまたはnotarytool
コマンドラインツールを使用して、配信前にmacOSゲームの公証を受けることができます。
ゲームの健全性を保護する。Hardened Runtime機能を有効にすることで、悪意のあるコードインジェクション、ダイナミックライブラリハイジャック、プロセスメモリ空間の改ざんを防止するオプションを選択できます。
画期的な未公開のゲームを開発中で、Apple Arcadeゲームサブスクリプションサービスでの公開を検討されている場合は、ぜひお問い合わせください。