出題範囲(29分野)
- 中核となるインタラクションのプログラミング>全般160問
- アートパイプラインでの操作>全般160問
- アプリケーションシステムの開発>全般154問
- シーンと環境デザインのプログラミング>全般154問
- パフォーマンスとプラットフォームの最適化>全般153問
- ソフトウェア開発チームでの作業>全般160問
- 一般的なC#プログラミング構造155問
- 中核となるインタラクションのプログラミング>ゲームオブジェクトおよび環境の動作とインタラクションを実装する65問
- 中核となるインタラクションのプログラミング>入力とコントロールを実装する方法を特定する65問
- 中核となるインタラクションのプログラミング>カメラビューとカメラ動作を実装する方法を特定する65問
- アプリケーションシステムの開発>メニューシステム、UI ナビゲーション、アプリケーション設定などのアプリケーションインターフェースフロー65問
- アプリケーションシステムの開発>キャラクター作成システム、インベントリ、ストアフロント、アプリ内課金など、ユーザーが制御するカスタマイズ55問
- アプリケーションシステムの開発>Unity Analytics などのツールを使用したスコア、プレイヤーレベル、ゲーム内経済など、ユーザーの進行度に関する機能を実装する65問
- アプリケーションシステムの開発>ヘッドアップディスプレイ (HUD)、ミニマップ、広告などの 2D オーバーレイを実装する65問
- アプリケーションシステムの開発>アプリケーションデータとユーザーデータの保存と取得65問
- アプリケーションシステムの開発>ネットワーキング機能とマルチプレイヤー機能の価値と影響を認識60問
- シーンと環境デザインのプログラミング>オーディオアセットを実装するためのスクリプトを決定する65問
- シーンと環境デザインのプログラミング>ゲームオブジェクトのインスタンス化、破壊、管理を実装する方法を特定する60問
- シーンと環境デザインのプログラミング>Unity ナビゲーションシステムによる経路探索のスクリプトを決定する60問
- パフォーマンスとプラットフォームの最適化>Unity Profiler などのツールを使用してエラーやパフォーマンスの問題を評価する65問
- パフォーマンスとプラットフォームの最適化>特定のビルドプラットフォームやハードウェア構成の要件に対処するための最適化を確認する65問
- パフォーマンスとプラットフォームの最適化>XR プラットフォーム向けの一般的な UI アフォーダンスおよび最適化を決定する60問
- ソフトウェア開発チームでの作業>バージョン管理 : Unity Collaborate などのツールの影響と使用64問
- ソフトウェア開発チームでの作業>テストおよびソフトウェア開発プロセスに対するその影響65問
- ソフトウェア開発チームでの作業>モジュール性、可読性、再利用性を実現するためのスクリプトを構成する手法の理解60問
- アートパイプラインでの操作>マテリアル、テクスチャ、シェーダーの知識 — Unity レンダリング API65問
- アートパイプラインでの操作>ライティングの知識 — Unity ライティング API65問
- アートパイプラインでの操作>2D アニメーションおよび 3D アニメーションの知識 — Unity アニメーションAPI65問
- アートパイプラインでの操作>パーティクルシステムの知識 – Unity パーティクル API65問
Unity認定 プロフェッショナル:プログラマーの例題(6問・解説つき)
スキルサートのAIが出題範囲に沿って作成した演習問題です(過去問ではありません)。アプリでは毎週新しい問題が追加されます。
例題1中核となるインタラクションのプログラミング>全般
大規模なオープンワールドゲームにおいて、プレイヤーが周辺の多数のインタラクティブなオブジェクト(アイテム、ドア、スイッチなど)を効率的に検出したいと考えています。CPUのパフォーマンス負荷を最小限に抑えつつ、特定の距離内にある対象のみを特定するための実装として、最も適切なものはどれか。
- 毎フレーム、すべてのインタラクティブオブジェクトのリストをループして距離を計算する
- Updateメソッド内でFindObjectsOfTypeを使用して毎フレーム検索を行う
- 適切なLayerMaskを設定したPhysics.OverlapSphereNonAllocを使用する
- すべてのオブジェクトに大きなTrigger Colliderを付着させ、OnTriggerStayで判定する
- コルーチンを使用して0.1秒ごとに全オブジェクトの距離を総当たりでチェックする
解答と解説を見る
正解: 適切なLayerMaskを設定したPhysics.OverlapSphereNonAllocを使用する
正解は『適切なLayerMaskを設定したPhysics.OverlapSphereNonAllocを使用する』です。Physics.OverlapSphereNonAllocは、指定した範囲内のコライダーを検出する際に、ガベージコレクション(GC)の発生を抑えるために配列を再利用するメソッドです。LayerMaskを併用することで、物理演算の計算対象をインタラクティブなオブジェクトが属するレイヤーのみに限定できるため、非常に効率的です。対して、全リストのループやFindObjectsOfTypeの使用は、オブジェクト数が増えるにつれて指数関数的に計算負荷が増大するため、プロフェッショナルな開発においては避けるべき手法です。
例題2アートパイプラインでの操作>全般
大規模なプロジェクトにおいて、アーティストがインポートした全てのテクスチャアセットに対して、プラットフォームごとに適切な最大解像度と圧縮フォーマットを自動的に適用するツールを作成したいと考えています。この自動化を実現するために、Unityエディタ拡張で継承して利用すべき最も適切なクラスはどれか。
- TextureImporterInspector
- AssetModificationProcessor
- EditorWindow
- AssetPostprocessor
- ScriptableObject
解答と解説を見る
正解: AssetPostprocessor
正解は『AssetPostprocessor』です。AssetPostprocessorクラスを継承したスクリプトを作成し、OnPreprocessTextureメソッドなどのコールバックを実装することで、アセットがプロジェクトにインポートされる直前にその設定(圧縮設定や解像度制限など)をプログラムから動的に変更できます。AssetModificationProcessorはアセットの保存や削除、移動などをフックするために使用されるため、インポート時の設定変更にはAssetPostprocessorが適しています。これにより、手動設定ミスを防ぎ、プロジェクト全体で一貫したアセット最適化を自動で行うことが可能になります。
例題3アプリケーションシステムの開発>全般
Addressables Systemを使用してアセットをロードする際、メインスレッドのブロックを回避し、かつアセット間の依存関係を自動的に解決しながらロードを完了するために最も推奨されるAPIはどれか。
- AssetBundle.LoadFromFile
- UnityWebRequestAssetBundle.GetAssetBundle
- Resources.LoadAsync
- Addressables.Instantiate
- Addressables.LoadAssetAsync
解答と解説を見る
正解: Addressables.LoadAssetAsync
正解は「Addressables.LoadAssetAsync」です。Addressables Systemは、アセットの保存場所を問わずに名前やラベルでリソースを管理できる仕組みを提供します。このAPIは非同期で動作するため、メインスレッドをブロックしてアプリケーションがフリーズするのを防ぐことができます。また、指定したアセットが必要とする他のアセット(依存関係)も自動的に解決してロードされるため、開発者は複雑な管理から解放されます。一方、Resources.LoadAsyncはAddressablesの利点を持たず、AssetBundle関連の低レベルAPIは手動での依存関係管理が必要になるため、最新のシステム開発ではAddressablesが推奨されます。
例題4シーンと環境デザインのプログラミング>全般
Unityにおいて、SceneManager.LoadSceneAsyncを使用して複数のシーンをAdditive(加算)モードで読み込んだ際、シーン全体のライティング設定(スカイボックスや環境光など)を特定のシーンのデータに確実に切り替えるために使用すべきメソッドはどれか。
- SceneManager.LoadSceneParameters
- SceneManager.MergeScenes
- SceneManager.GetSceneAt
- SceneManager.MoveGameObjectToScene
- SceneManager.SetActiveScene
解答と解説を見る
正解: SceneManager.SetActiveScene
正解は「SceneManager.SetActiveScene」です。Unityで複数のシーンを同時に読み込んでいる場合、どのシーンの環境設定(Lightingパネルで設定したスカイボックス、フォグ、環境光など)を使用するかを決定するために「アクティブなシーン」を定義する必要があります。新しく読み込まれたシーンは自動的にアクティブにはならないため、このメソッドを呼び出して明示的に指定する必要があります。これにより、ランタイム中に環境デザインを動的に変更することが可能になります。
例題5パフォーマンスとプラットフォームの最適化>全般
Unityのインクリメンタルガベージコレクション(Incremental GC)の動作とパフォーマンスへの影響に関する説明として、最も適切なものはどれか。
- プログラムの実行を完全に停止させ、一度の処理で全ての未使用オブジェクトを回収することでスループットを最大化する。
- GCの作業を複数のフレームに分割して実行することで、GCによる長時間のメインスレッド停止(スパイク)を抑制する。
- 物理メモリが不足した際に、使用頻度の低いアセットを自動的にディスクキャッシュへ退避させる。
- マネージドヒープの断片化を自動的に解消し、メモリの連続性を確保することで割り当て速度を向上させる。
- スタックメモリに割り当てられたオブジェクトを優先的にスキャンし、ヒープアロケーションを動的に値型へ変換する。
解答と解説を見る
正解: GCの作業を複数のフレームに分割して実行することで、GCによる長時間のメインスレッド停止(スパイク)を抑制する。
正解は「GCの作業を複数のフレームに分割して実行することで、GCによる長時間のメインスレッド停止(スパイク)を抑制する。」です。従来のガベージコレクションは処理中にプログラムを一時停止させる「Stop-the-world」を発生させますが、インクリメンタルGCはこの処理を小さなステップに分割し、複数のフレームに分散して実行します。これにより、フレームレートの急激な低下を防ぐことができます。ただし、分割処理のオーバーヘッドにより、トータルのGC処理時間は通常よりも僅かに増加する可能性がある点に注意が必要です。
例題6ソフトウェア開発チームでの作業>全般
Unityプロジェクトをバージョン管理システム(GitやUnity Version Controlなど)で管理する際、アセットの参照関係を維持するために最も重要な設定または操作はどれですか。
- アセットのインポート設定をすべて手動で同期する
- Libraryフォルダをリポジトリの管理対象に含める
- メタファイルをリポジトリから除外する
- GUIDの一致により参照を維持する
- シーンファイルを常にバイナリ形式で保存する
解答と解説を見る
正解: GUIDの一致により参照を維持する
正解は「GUIDの一致により参照を維持する」です。Unityは各アセットに一意のGUID(Globally Unique Identifier)を割り当て、これを.metaファイルに記録します。プロジェクト内のアセット間の参照はこのGUIDに基づいているため、.metaファイルを正しくバージョン管理に含めることで、異なる開発環境間でも参照が壊れるのを防ぐことができます。Libraryフォルダは各環境で再生成可能であるため、通常は管理対象外とします。
Unity認定 プロフェッショナル:プログラマーの重要用語
- デリゲート (Delegate)
- メソッドを安全にカプセル化し、変数のように扱える参照型です。特定のイベントが発生した際に実行する処理を登録でき、オブジェクト間の疎結合を実現します。UnityではActionやFunc、UnityEventなどが広く利用されており、複数のメソッドを一つのデリゲートに登録して一斉に呼び出すマルチキャスト機能が、動的なインタラクションの実装に不可欠です。
- Scripted Importer
- Unityが標準でサポートしていない独自のファイル形式をアセットとしてインポートするための機能です。C#で記述することで、独自のインポート処理を定義でき、カスタムデータの解析や特定の設定を適用した状態でのインポートを自動化できます。プロフェッショナルな開発現場では、外部ツールとの連携やデータ最適化のために頻繁に使用されます。
- Addressable Asset System
- アセットの読み込みや管理を効率化するためのシステムです。従来のAssetBundleよりも抽象化されており、リモートやローカルなどの保存場所を問わず、アドレス文字列を使用して動的にアセットをロードできます。メモリ管理の自動化やビルド時間の短縮に寄与し、大規模なプロジェクトでのリソース管理においてプロフェッショナルレベルでは必須の知識となります。
- 遮蔽カリング (Occlusion Culling)
- カメラから見て他のオブジェクトの後ろに隠れている物体を描画対象から外す最適化手法です。視錐台カリングでは防げない、視界内にあっても見えない物体の描画負荷を削減します。多数のオブジェクトが重なる複雑なシーンにおいて、ドローコールとGPUの負荷を大幅に軽減するために不可欠な機能であり、事前にベイク処理が必要です。
- ドローコールバッチング
- 複数のメッシュを一つの描画命令としてまとめる手法。静的なオブジェクトをまとめる「静的バッチング」と、同じマテリアルを共有する動的なオブジェクトをまとめる「動的バッチング」がある。CPUのオーバーヘッドを削減し、レンダリングパイプラインの効率を向上させる。試験では、バッチングが適用される条件や制限事項についてよく問われる。
- Git
- ソースコードの変更履歴を管理する分散型バージョン管理システムです。チーム開発において、複数の開発者が同時に同じプロジェクトを編集する際の変更内容を記録し、必要に応じて過去の状態に戻すことができます。Unityプロジェクトでは、アセットの競合を避けるために適切な.gitignoreの設定や、大容量ファイルを扱うためのLFS(Large File Storage)の活用が推奨されます。
- デリゲート (Delegate)
- メソッドを一つの変数として扱うための仕組みです。特定のシグネチャを持つ関数を参照し、後で実行したり、他のメソッドの引数として渡したりすることが可能です。Unityのイベントシステムやコールバック処理の実装において非常に重要な役割を果たし、オブジェクト間の疎結合な連携を実現するために多用されます。
- レイキャスト (Raycast)
- 原点から特定の方向に不可視の線を飛ばし、シーン内のコライダーとの衝突を検出する手法です。プレイヤーの視線上のアイテム検知や、マウスクリックした位置にあるオブジェクトの特定に頻繁に使用されます。RaycastHit構造体を通じて、衝突点の座標、法線、距離、対象のコンポーネントなどの詳細情報を取得し、インタラクションのトリガーとして活用します。
よくある質問
- Unity認定 プロフェッショナル:プログラマーの問題はスキルサートで何問解けますか?
- 全2,490問・29分野の問題を用意しています。問題は出題範囲に沿って随時追加しています。
- 無料で使えますか?
- 無料プランで週10回の演習(1回10問)と、毎日の「今日の1問」を利用できます。解説を読み、わからない点はAIに質問できます。
- ここの問題は過去問ですか?
- 過去問ではありません。出題範囲に沿ってAIが作成した演習問題です。すべて解説つきで、間違えた問題は繰り返し解けます。
Unity認定 プロフェッショナル:プログラマーの対策はアプリで
AIが毎週生成する新作問題・ランクマッチ・週次ランキング・AI診断で「続けられる」資格学習を。無料で始められます。