学習記事一覧 · Unity

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 ブランチを新たに作成

ブランチの確認・切り替え方:

  1. GitHub Desktop の左上でリポジトリを切り替える
  2. ブランチが review になっていればOK
  3. なっていない場合:ブランチ名をクリック → review を選択

コミットのタイミング:各問題を解き終わったら Q12完了 のように Summary に書いて Commit しておきましょう。


2限:Find / GetComponent 概念③(null・自分自身)

コードを見ながら考えてください。Unityは起動しなくてもOKです。


Q12【失敗ケース】GetComponentnull を返すのはどんなとき?

次のコードを見てください。

GameObject obj = GameObject.Find("Enemy");
ArrowController ac = obj.GetComponent<ArrowController>();
ac.Stop();

このコードが実行時エラーになる可能性があるケースを2つ挙げてください。

ヒント:FindGetComponent がそれぞれ「失敗する」のはどんな状況でしょうか?

ケース なぜエラーになるか

Q13【自スクリプトのコンポーネント取得】thisGameObject.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】どちらのコンポーネントを使うべきか

次の仕様のゲームを作るとき、Rigidbody2DRigidbody(3D)のどちらを使いますか?
理由も答えてください。

ゲーム仕様 使うべきコンポーネント 理由
横スクロールアクション(XY平面のみ動く)
3Dシューティング(XYZ空間を飛ぶ)
見下ろし型2Dパズル
Igaguriのような3Dクリックゲーム

6限:総合設計 → 発表・全体振り返り


Q18【総合設計】新ゲーム「コインキャッチ」を設計しよう

「上から落ちてくるコインをバケツで受け取る2Dゲーム」を作るとします。
これまで学んだパターン(InstantiateFindGetComponentDestroytag)を使って、必要なスクリプトを設計してください。

スクリプト名(自由) 担当する役割 使うUnityの機能

余裕があれば: 実際にUnityで実装してみましょう。


作成:2026年4月