Unity復習問題集 ── 2日目:頭で考えて言語化する
対象:Unityの教科書 Unity 6完全対応版 Chapter 3〜8 履修済みの方
方針:コードは見ながらでOK。暗記不要。「なぜ?」「何が起きる?」「どう変える?」を考える問題です。
使用ゲーム:CatEscape・ClimbCloud・AppleCatch・Igaguri
作業前の確認(GitHub Desktop)
2日目で使うリポジトリとブランチ確認
| リポジトリ | 使う問題 | 確認すること |
|---|---|---|
| CatEscape | Q12〜Q15・Q19 | review ブランチになっているか確認 |
| ClimbCloud | Q13・Q17 | review ブランチになっているか確認 |
| AppleCatch | Q16 | review ブランチを新たに作成 |
ブランチの確認・切り替え方:
- GitHub Desktop の左上でリポジトリを切り替える
- ブランチが
reviewになっていればOK - なっていない場合:ブランチ名をクリック →
reviewを選択
コミットのタイミング:各問題を解き終わったら
Q12完了のように Summary に書いて Commit しておきましょう。
2限:Find / GetComponent 概念③(null・自分自身)
コードを見ながら考えてください。Unityは起動しなくてもOKです。
Q12【失敗ケース】GetComponent が null を返すのはどんなとき?
次のコードを見てください。
GameObject obj = GameObject.Find("Enemy");
ArrowController ac = obj.GetComponent<ArrowController>();
ac.Stop();このコードが実行時エラーになる可能性があるケースを2つ挙げてください。
ヒント:Find と GetComponent がそれぞれ「失敗する」のはどんな状況でしょうか?
| ケース | なぜエラーになるか |
|---|---|
| ① | |
| ② |
Q13【自スクリプトのコンポーネント取得】this と GameObject.Find の違い
次の2つのコードはどちらも Rigidbody2D を取得していますが、使い方が違います。
// パターンA(ClimbCloudで使われている)
this.rb = GetComponent<Rigidbody2D>();
// パターンB
GameObject player = GameObject.Find("Player");
Rigidbody2D rb = player.GetComponent<Rigidbody2D>();| 問い | 答え |
|---|---|
パターンAは「誰の」Rigidbody2D を取得している? |
|
| パターンBはどんな場面で必要になる? | |
| 自分自身のコンポーネントをパターンBで書くのはなぜ良くない? |
3限:改造・設計①(ゲームオーバー・タグ判定)
実装の詳細コードは書けなくてもOKです。「どこに・何を・なぜ」を日本語で説明してください。
Q14【設計】ゲームオーバー画面を追加するには?
ClimbCloud では SceneManager.LoadScene("ClearScene") でクリア画面に遷移しています。
同じ仕組みを使って CatEscape に「HPが0になったらゲームオーバー画面に遷移する」機能を追加するとしたら、どのスクリプトの・どこに・何を追加しますか?
| どのスクリプト | どのメソッド内 | 追加する処理の内容 |
|---|---|---|
Q15【タグ判定の必要性】矢に種類を追加するには?
CatEscape では距離計算で「矢に当たったか」を判定しています。
ここに「金の矢に当たったらHPが回復する」仕様を追加したい場合、現在の距離判定コードだけでは何が足りませんか?どう改修しますか?
(何が足りないか・どう変えるかを書いてください)4限:改造・設計②(難易度・アニメーション)
Q16【難易度設計】AppleCatch のタイマー仕組みを読み解く
AppleCatch では時間が経つにつれてゲームが難しくなります。
コードを見ながら「どのような仕組みで難易度が変化しているか」を自分の言葉で説明してください。
(仕組みの説明を書いてください)さらに: 難易度を「最初はゆっくり上がり、後半は急激に上がる」に変えるとしたら、どう改修しますか?
(改修のアイデアを書いてください)Q17【アニメーション理解】ClimbCloud のスプライト切り替えを読み解く
ClimbCloud では次のような配列でアニメーションを実現しています。
this.spriteRenderer.sprite = this.sprites[1 - idx];| 問い | 答え |
|---|---|
sprites 配列に何が入っている? |
|
1 - idx という式で idx が 0→1、1→0 と入れ替わることで何を実現している? |
|
| 歩き画像を3枚に増やすには、どう変える必要がある? |
5限:バグ探し・2D vs 3D
Q19【バグ探し】猫が動かない!原因はどこ?
次のコードは「左右キーで猫を動かす」つもりで書いたのに、まったく動きません。
原因を指摘し、修正方法を書いてください。
using UnityEngine;
public class PlayerController : MonoBehaviour
{
void Update()
{
if (Keyboard.current.leftArrow.wasPressedThisFrame)
{
transform.Translate(-0.1f, 0, 0);
}
}
}| 問い | 答え |
|---|---|
| 原因はどこ? | |
| どう修正する? |
ヒント:Roulette のコードの先頭を思い出してください。
Q20【2D vs 3D】どちらのコンポーネントを使うべきか
次の仕様のゲームを作るとき、Rigidbody2D と Rigidbody(3D)のどちらを使いますか?
理由も答えてください。
| ゲーム仕様 | 使うべきコンポーネント | 理由 |
|---|---|---|
| 横スクロールアクション(XY平面のみ動く) | ||
| 3Dシューティング(XYZ空間を飛ぶ) | ||
| 見下ろし型2Dパズル | ||
| Igaguriのような3Dクリックゲーム |
6限:総合設計 → 発表・全体振り返り
Q18【総合設計】新ゲーム「コインキャッチ」を設計しよう
「上から落ちてくるコインをバケツで受け取る2Dゲーム」を作るとします。
これまで学んだパターン(Instantiate・Find・GetComponent・Destroy・tag)を使って、必要なスクリプトを設計してください。
| スクリプト名(自由) | 担当する役割 | 使うUnityの機能 |
|---|---|---|
余裕があれば: 実際にUnityで実装してみましょう。
作成:2026年4月