出題範囲
- Debugging / problem-solving / APIの解釈
- Creating code
- Evaluating code
- Navigating the interface
例題に挑戦
スキルサートのAIが生成した演習問題のサンプルです。アプリでは毎週新しい問題が追加されます。
例題1
次のC#スクリプトを実行した際、コンソールに整数「3」が出力されるようにしたい。コード内の(A)に入る記述として最も適切なものはどれか。
int count = 0;
int[] numbers = { 1, 3, 5, 7, 9 };
foreach (int n in numbers) {
if (n > 4) {
(A)
}
}
Debug.Log(count);
- count = n;
- continue;
- count = count + n;
- break;
- count++;
解答と解説を見る
正解: count++;
正解は「count++;」です。与えられた配列「numbers」には {1, 3, 5, 7, 9} が格納されており、foreach文で順番に要素を評価しています。if文の条件「n > 4」を満たす要素は、配列内の 5, 7, 9 の合計3つです。最終的にDebug.Logで「3」という数値を出力するためには、条件に一致した回数分だけ変数countをインクリメント(1ずつ加算)する必要があります。count++は「count = count + 1」の略記法であり、このロジックを評価する上で最も適切です。
例題2
Unityのスクリプトにおいて、実行時に「NullReferenceException(ヌル参照例外)」が発生するリスクが最も高いコード記述はどれか。
- int health = 100;
- GetComponent<Renderer>().material.color = Color.red;
- transform.position = new Vector3(0, 0, 0);
- Debug.Log("Processing Started");
- if (gameObject != null) { Debug.Log(gameObject.name); }
解答と解説を見る
正解: GetComponent<Renderer>().material.color = Color.red;
正解は「GetComponent<Renderer>().material.color = Color.red;」です。このコードは、スクリプトがアタッチされているゲームオブジェクトにRendererコンポーネントが存在しない場合、GetComponentはnullを返します。nullに対してドット演算子でmaterialプロパティにアクセスしようとすると、プログラムは参照先を見つけられずNullReferenceExceptionをスローします。安全なコードを記述するためには、事前にコンポーネントの取得結果がnullでないかを確認する評価処理を入れることが推奨されます。
重要用語
- Debug.Log
- スクリプトの実行中にコンソールウィンドウへメッセージや変数の値を表示するためのメソッドです。プログラムが意図した通りに動作しているか、特定の処理が実行されたかを確認するために使用されます。開発のあらゆる段階で活用される最も基本的なデバッグ手法の一つであり、問題が発生している箇所の特定やデータの流れを追跡するのに非常に役立ちます。
- コンソールウィンドウ (Console Window)
- Unityエディタ上でログ、警告、エラーメッセージを確認するためのパネルです。Debug.Logの出力や、スクリプト実行時に発生したエラーの詳細が表示されます。エラーメッセージをダブルクリックすることで、原因となっているスクリプトの該当行を直接開くことができるため、バグの修正作業において中心的な役割を果たすインターフェースです。
- NullReferenceException
- オブジェクトの実体(インスタンス)が割り当てられていない変数に対して、メソッドやプロパティの操作を行おうとした際に発生するランタイムエラーです。例えば、InspectorでGameObjectをアタッチし忘れた場合に頻発します。このエラーが発生した際は、どの変数が「null(空)」の状態であるかを特定し、適切な初期化や参照設定を行う必要があります。
- ブレークポイント (Breakpoint)
- Visual Studioなどの外部エディタにおいて、プログラムの実行を特定の行で一時停止させるための機能です。Unityとエディタを接続した状態で実行すると、設定した行で処理が止まり、その時点での変数の値やメモリの状態を詳細に調査できます。複雑な論理エラーを特定する際、コードを1行ずつ追いながら挙動を確認できるため、非常に強力なデバッグツールとなります。
- スクリプトリファレンス (Scripting API Reference)
- Unityが提供するクラス、コンポーネント、メソッド、プロパティの仕様をまとめた公式の技術文書です。特定のAPIがどのような引数を取り、どのような戻り値を返すのかを正確に理解するために不可欠です。試験においても、リファレンスの情報を正しく読み取り、目的に応じた適切なクラスやメソッドを選択できる能力が問われます。
- コンパイルエラー (Compiler Error)
- スクリプトの文法ミスや型の不整合などにより、Unityがコードを正しく解析できない状態を指します。このエラーが発生している間は、プロジェクトを再生することができません。コンソールに赤色のアイコンで表示され、修正すべきファイルと行番号が示されます。タイポ(打ち間違い)や括弧の閉じ忘れ、型定義の誤りなどが主な原因となります。
- ステップ実行 (Step Over / Step Into)
- デバッガを使用して、停止したプログラムを1行ずつ進めていく操作です。「ステップオーバー」は現在の行を実行して次の行へ進み、「ステップイン」は呼び出されているメソッドの内部に入って詳細を確認します。プログラムの実行経路や、どのタイミングで変数の値が予期せず変化したのかを突き止めるために使用される重要なトラブルシューティング技術です。
- インスペクターでのデバッグ (Debugging in Inspector)
- UnityのPlayモード中に、Inspectorウィンドウを使ってリアルタイムにコンポーネントのプロパティを確認・変更するデバッグ手法です。public変数や[SerializeField]属性を付けた変数はInspectorに表示されるため、コードを書き換えずに数値を調整して挙動の変化をテストしたり、オブジェクトの状態が期待通りかを即座に確認したりすることが可能です。
Unity認定 ユーザー:プログラマーの対策はアプリで
AIが毎週生成する新作問題・ランクマッチ・週次ランキング・AI診断で「続けられる」資格学習を。無料で始められます。