出題範囲(22分野)
- テックリードエンジニアが作成/設計した既存のシステムへの統合で扱われたコードを評価する110問
- コーディング標準とベストプラクティスを適用する。109問
- 指定されたインタラクションまたはプログラミングロジックを実行するコードを判別する110問
- シーン間のトランジションを実装するプロセスを決定する109問
- 静的変数やPlayerPrefsなどのアプローチを使って、シーン間やセッション間でデータを保存する110問
- UnityのAPIドキュメントに従って、UnityのAPIメソッドを使用して定義された結果を取得します109問
- GameObjectのプロパティ、スクリプト、コンポーネントを必要なタスクに応じて適切に選択する110問
- 基本的な継承とインターフェースの違いを説明する110問
- リスト、配列、辞書を含むがこれらに限定されない、特定の状況に対して一般的に使用される適切なデータ構造を選択する110問
- 浮動小数点数、ブール値、文字列など、特定の状況に応じて適切なデータ型を選択する108問
- WebGLまたはパーソナルコンピュータにアプリケーションをビルドする109問
- アンカー、ピボット、グループを使用して、定義されたレイアウトに従ってキャンバス上にUIコンポーネントを配置する109問
- 様々なUI要素にデータを表示するために必要なプロセスを特定する105問
- UnityEventシステムを使用してユーザー入力に応答する方法を説明する105問
- コードが期待通りに実行されなかった場合に考えられる原因を特定するためのプログラム・デバッグ・メッセージ110問
- コードブロックからコンパイルエラーの原因を特定する110問
- ヌル変数に起因するエラーの特定110問
- 定義されたコーディング標準に適合するようにコードをリファクタリングし、改善するために必要なテクニックを特定する110問
- 適切なプロファイリング・ツールを選択し、パフォーマンス問題の原因を特定する108問
- シーンでのプレハブの使い方を説明する110問
- ネストされたプレハブまたはプレハブの変形を変更するプロセスと結果を説明する110問
- Unityで作業する際のバージョン管理の主な目的を説明する105問
Unity認定 アソシエイト:プログラマーの例題(6問・解説つき)
スキルサートのAIが出題範囲に沿って作成した演習問題です(過去問ではありません)。アプリでは毎週新しい問題が追加されます。
例題1テックリードエンジニアが作成/設計した既存のシステムへの統合で扱われたコードを評価する
テックリードエンジニアが、敵やプレイヤーなどダメージを受ける可能性のある全オブジェクト向けに IDamageable インターフェースを設計しました。この既存システムに、新しく「破壊可能な樽(Barrel)」を追加して統合する場合、最も適切な実装方法はどれですか。
- GameObject.SendMessageを使用して、ダメージ通知を全コンポーネントに送信する。
- 攻撃側のスクリプトを修正して、衝突したオブジェクトのタグがBarrelかどうかを判定する処理を追加する。
- IDamageableを実装し、TakeDamageメソッド内で破壊処理を定義する。
- Barrelクラスを既存のEnemyベースクラスから継承させる。
- Updateメソッド内で常に周囲の攻撃判定を監視し、HPが0になったら自身を破棄する。
解答と解説を見る
正解: IDamageableを実装し、TakeDamageメソッド内で破壊処理を定義する。
正解は「IDamageableを実装し、TakeDamageメソッド内で破壊処理を定義する」です。テックリードが設計したインターフェースを利用することで、既存の攻撃システム側を一切変更することなく、新しい種類のオブジェクトをシステムに統合できます。これにより、オブジェクト間の結合度を下げ、拡張性の高いコードベースを維持することが可能になります。インターフェースの活用は、ポリモーフィズムを通じて疎結合な設計を実現するための基本原則であり、既存システムへの安全な統合において非常に重要です。
例題2コーディング標準とベストプラクティスを適用する。
UnityのC#コーディング規約において、一般的にクラス名やメソッド名に採用される命名規則はどれですか。
- snake_case
- camelCase
- PascalCase
- UPPER_SNAKE_CASE
- kebab-case
解答と解説を見る
正解: PascalCase
正解は「PascalCase」です。UnityおよびMicrosoftのC#コーディングガイドラインでは、クラス名、構造体名、メソッド名、プロパティ名には各単語の先頭を大文字にするPascalCase(パスカルケース)を使用することが推奨されています。一方で、メソッド内のローカル変数やプライベートなフィールド変数には、最初の単語の先頭を小文字にするcamelCase(キャメルケース)が一般的に使用されます。一貫した命名規則を適用することで、チーム開発におけるコードの可読性と保守性が大幅に向上します。規約に従うことは、予期せぬバグの防止にも繋がります。
例題3指定されたインタラクションまたはプログラミングロジックを実行するコードを判別する
物理的な衝突が発生した際に、相手のオブジェクトのタグが "Enemy" であることを確認してデバッグログを表示するコードとして、適切なものはどれか。
- void OnCollisionEnter(Collision collision) { if (collision.gameObject.CompareTag("Enemy")) { Debug.Log("Hit Enemy"); } }
- void OnCollisionHit(Collision collision) { if (collision.CompareTag("Enemy")) { Debug.Log("Hit Enemy"); } }
- void OnCollisionEnter(Collider other) { if (other.gameObject.tag == "Enemy") { Debug.Log("Hit Enemy"); } }
- void OnTriggerEnter(Collider other) { if (other.tag == "Enemy") { Debug.Log("Hit Enemy"); } }
- void Update() { if (OnCollision("Enemy")) { Debug.Log("Hit Enemy"); } }
解答と解説を見る
正解: void OnCollisionEnter(Collision collision) { if (collision.gameObject.CompareTag("Enemy")) { Debug.Log("Hit Enemy"); } }
正解は「void OnCollisionEnter(Collision collision) { if (collision.gameObject.CompareTag("Enemy")) { Debug.Log("Hit Enemy"); } }」です。物理的な衝突(非トリガー)を検知するには OnCollisionEnter を使用し、引数には Collision 型を取ります。タグの比較には文字列の直接比較(==)よりも、メモリ割り当てを抑えられる CompareTag メソッドを使用するのが Unity プログラミングにおけるベストプラクティスです。OnTriggerEnter は Is Trigger が有効な場合にのみ機能するため、物理的な衝突の文脈では不適切です。
例題4シーン間のトランジションを実装するプロセスを決定する
SceneManager を使用して、現在のシーンを完全に終了させ、新しいシーンを同期的にロードするために使用する最も標準的なメソッドはどれか。
- SceneManager.CreateScene
- SceneManager.GetActiveScene
- SceneManager.UnloadSceneAsync
- SceneManager.LoadScene
- SceneManager.SetActiveScene
解答と解説を見る
正解: SceneManager.LoadScene
正解は「SceneManager.LoadScene」です。Unityでシーンを遷移させるための最も基本的な方法は、UnityEngine.SceneManagement 名前空間にある SceneManager.LoadScene メソッドを使用することです。このメソッドは、指定されたシーンの名前またはビルドインデックスを引数に取り、現在のシーンをメモリから破棄した上で新しいシーンを読み込みます。同期的(Synchronous)に実行されるため、ロードが完了するまでメインスレッドの処理が一時的に停止する特性があります。小規模なシーンや、ロード中にフリーズが発生しても問題ない場合に適しています。
例題5静的変数やPlayerPrefsなどのアプローチを使って、シーン間やセッション間でデータを保存する
PlayerPrefsを用いて保存できるデータの型として、正しい組み合わせはどれか。
- bool、float、byte
- int、bool、string
- float、double、string
- int、float、string
- int、Vector3、string
解答と解説を見る
正解: int、float、string
正解は「int、float、string」です。UnityのPlayerPrefsクラスは、プラットフォームを跨いで簡単なデータを保存するための仕組みを提供していますが、サポートされているデータ型は整数型(int)、浮動小数点型(float)、および文字列型(string)の3種類のみに限定されています。bool型を保存したい場合は、0をfalse、1をtrueとしてint型で代用するなどの工夫が必要です。また、Vector3やカスタムクラスなどの複雑なデータ構造を直接保存することはできないため、JsonUtilityなどを使用して文字列に変換してから保存する必要があります。この制約を理解しておくことは、データ設計において非常に重要です。
例題6UnityのAPIドキュメントに従って、UnityのAPIメソッドを使用して定義された結果を取得します
ゲームオブジェクトを、そのオブジェクトの回転に関わらず「ワールド空間のZ軸方向」へ毎秒5ユニット移動させたい。Updateメソッド内で使用するUnity APIの記述として適切なものはどれか。
- transform.Rotate(0, 0, 5 * Time.deltaTime, Space.World);
- transform.Translate(Vector3.forward * 5 * Time.deltaTime);
- transform.Translate(0, 0, 5, Space.World);
- transform.Translate(0, 0, 5 * Time.deltaTime, Space.World);
- transform.position = new Vector3(0, 0, 5);
解答と解説を見る
正解: transform.Translate(0, 0, 5 * Time.deltaTime, Space.World);
正解は「transform.Translate(0, 0, 5 * Time.deltaTime, Space.World);」です。transform.Translateメソッドを使用する際、第4引数にSpace.Worldを指定することで、オブジェクトの現在の回転状態に影響されずワールド座標軸に沿って移動させることができます。また、毎秒一定の距離を移動させるためには、Time.deltaTimeを乗算してフレームレートの変動を補正し、実行環境に依存しない一定の速度を実現する必要があります。
Unity認定 アソシエイト:プログラマーの重要用語
- シングルトンパターン
- 特定のクラスのインスタンスがシステム内で1つだけに制限される設計パターンです。Unityでは、GameManagerなどのグローバルにアクセスが必要な管理用クラスでよく用いられます。既存システムとの統合では、複数のインスタンスが生成されないよう注意深く扱う必要があり、テックリードが設計した共通基盤へのアクセス手段として頻出します。
- 命名規則 (Naming Conventions)
- コードの可読性を高めるために、変数や関数に名前を付ける際の共通ルールのことです。Unityでは一般的に、クラス名やメソッド名には先頭を大文字にする「PascalCase」、プライベート変数には先頭を小文字にする「camelCase」が用いられます。一貫した規則を適用することで、チーム開発において他者がコードを理解しやすくなり、保守性が向上します。
- Input.GetButtonDown
- ユーザーが特定のボタンを押し下げた瞬間に1回だけTrueを返すメソッドです。ジャンプや攻撃など、押しっぱなしではなく「アクションを開始した瞬間」を検知するロジックに頻繁に使用されます。引数にはInput Managerで設定された仮想軸の名前を指定し、コード上でユーザーの意図を正確に判別するために重要です。
- SceneManager
- Unityにおけるシーンの管理や遷移を制御するための中心的なクラスです。UnityEngine.SceneManagement名前空間をインポートすることで使用可能になります。実行中のシーンの読み込み、追加、アンロード、および現在アクティブなシーンの情報を取得するためのメソッドが提供されており、ゲーム内での画面遷移の実装には欠かせない要素です。
- PlayerPrefs
- Unityが提供する、プレイヤーの設定や簡単なゲーム進行状況をデバイスに保存するためのクラスです。整数、浮動小数点数、文字列の3種類のデータを「キー」に関連付けて保存できます。アプリケーションを終了してもデータが保持されるため、ハイスコアや音量設定などの保存に適していますが、セキュリティ面が弱いため、暗号化が必要な重要なデータの保存には注意が必要です。
- Unity Scripting API
- Unityが提供するクラスやメソッドの集まりです。開発者はこれを活用して、オブジェクトの移動、衝突判定、ユーザー入力の処理などをプログラムで記述します。公式ドキュメント(スクリプトリファレンス)には、各メソッドの使い方や引数、戻り値の詳細が記載されており、効率的な開発にはこのドキュメントを正しく読み解く能力が不可欠です。
- GameObject
- Unityのシーンを構成する最も基本的なオブジェクトです。それ自体は機能を持たない空の器のような存在ですが、Transformコンポーネントを必ず保持しており、様々なコンポーネントを追加することで、キャラクターやカメラ、ライト、UIなどの具体的な役割を持たせることができます。シーン内のすべての要素は、このGameObjectとして管理されます。
- 継承
- 既存のクラス(基底クラス)の機能を別の新しいクラス(派生クラス)へ引き継ぐ仕組みです。コードの再利用性を高めるために使用されます。C#では単一継承のみが認められており、1つのクラスは1つの親クラスからしか継承できません。主に「AはBの一種である」というis-a関係を表す際に用いられ、基本機能の共通化に役立ちます。
よくある質問
- Unity認定 アソシエイト:プログラマーの問題はスキルサートで何問解けますか?
- 全2,396問・22分野の問題を用意しています。問題は出題範囲に沿って随時追加しています。
- 無料で使えますか?
- 無料プランで週10回の演習(1回10問)と、毎日の「今日の1問」を利用できます。解説を読み、わからない点はAIに質問できます。
- ここの問題は過去問ですか?
- 過去問ではありません。出題範囲に沿ってAIが作成した演習問題です。すべて解説つきで、間違えた問題は繰り返し解けます。
Unity認定 アソシエイト:プログラマーの対策はアプリで
AIが毎週生成する新作問題・ランクマッチ・週次ランキング・AI診断で「続けられる」資格学習を。無料で始められます。