初心者用 Unityで収集アニメを作る にわとりの卵がカゴにポトン!

Left Caption
にわとりが落としたたまごがカゴに入り、タップで動くまでのアニメーションをUnityで作ってみようと思います。

かごの作成

Assets/Images から basketをシーンにドラッグアンドロップしてbucketオブジェクトを作成し、

Polygon Collider 2Dを付けます。

シーンで当たり判定が緑色の線で表示されると思います。
「コライダーの編集」のマークをクリックすると緑色の線を編集することができます。たまごがカゴの中にあるように見えれば大丈夫です。

Left Caption
再生ボタンを押すと!
Left Caption
にわとりがダクトに当たるとたまごが出てきて、カゴに落ちるまでが出来ました。

たまごがカゴに入ったら消える

Left Caption
Unity2Dでたまごが落ちてきて、カゴに入ってカゴをタップしたらたまごが消えるシステムを作りたいんだけど、カゴにはポリゴンコライダーを付けて、タップするためにボックスコライダーを付けてたまごは、カゴをタップするまで消えないように出来る?
Right Caption
うん、もちろんできます😊 仕組みを整理すると、こういう流れでだね👇

🎯目的の動作

  1. たまごが落下して「カゴ」に入ると、カゴの中にたまごが貯まる(消えない)
  2. プレイヤーがかごをタップしたときに、カゴ内のたまごが消える

🧩必要なコンポーネント構成

🧺 カゴ(Basket)

  • Polygon Collider 2D → たまごが物理的に入る判定
  • Box Collider 2D(Triggerにする) → タップ判定用(ちょっと大きめでもOK)
  • Basket.cs(以下に作るスクリプト)

🥚 たまご(Egg)

  • Rigidbody2D(Gravity有効)
  • Collider2D(Circle など)
  • Tag を "Egg" に設定

🎬 スクリプト名:Basket.cs

using System.Collections.Generic;
using UnityEngine;

public class Basket : MonoBehaviour
{
    [Header("カゴに入ったたまごリスト")]
    private List<GameObject> eggsInBasket = new List<GameObject>();

    [Header("タップ判定用コライダー")]
    [SerializeField] private Collider2D tapCollider;

    private void Start()
    {
        if (tapCollider == null)
        {
            // 同じオブジェクト上にあるBoxCollider2Dを自動取得
            tapCollider = GetComponent<BoxCollider2D>();
        }
    }

    private void OnTriggerEnter2D(Collider2D collision)
    {
        // たまごが入ったら記録
        if (collision.CompareTag("Egg"))
        {
            Debug.Log("🥚 たまごがカゴに入りました!");
            eggsInBasket.Add(collision.gameObject);
        }
    }

    private void Update()
    {
        // タップを検出(スマホ/PC対応)
        if (Input.GetMouseButtonDown(0))
        {
            Vector2 worldPoint = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            Collider2D hit = Physics2D.OverlapPoint(worldPoint);

            if (hit != null && hit == tapCollider)
            {
                Debug.Log("🧺 カゴをタップしました!");
                ClearEggs();
            }
        }
    }

    private void ClearEggs()
    {
        // カゴ内のたまごをすべて消す
        foreach (var egg in eggsInBasket)
        {
            if (egg != null)
                Destroy(egg);
        }
        eggsInBasket.Clear();

        Debug.Log("✨ カゴの中のたまごを全部消しました!");
    }
}

⚙️設定手順

  1. Basketオブジェクトに上記スクリプトをアタッチ。
  2. Polygon Collider 2D(たまご用)と Box Collider 2D(タップ用)の両方を付ける
    • タップ用コライダーは “Is Trigger" をON にする。
  3. たまご(Egg)には Tag"Egg" に設定しておく。
  4. カメラには「MainCamera」タグを必ず付ける(クリック判定に必要)。
Left Caption
「4.カメラには「MainCamera」タグを必ず付ける(クリック判定に必要)。」は、どういうこと?
Right Caption
この一文 — 「カメラには『MainCamera』タグを必ず付ける」— は、 スクリプト内のこの部分に関係しています👇
Vector2 worldPoint = Camera.main.ScreenToWorldPoint(Input.mousePosition);

🔍 ここで何をしているかというと…

Input.mousePosition は「画面上(スクリーン座標)」のマウス(またはタップ)位置です。

Unityでは、ゲーム内の物理判定(Colliderなど)は「ワールド座標」で扱うので、
クリック位置を「画面 → ゲーム内の座標」に変換する必要があります。

その変換を行うのが
👉 Camera.main.ScreenToWorldPoint()
なんです。

🎥 Camera.main の正体

Camera.main は「タグが “MainCamera" に設定されたカメラ」を自動で探してくる特殊なプロパティです。

つまり、

  • Unity内で使いたいカメラに MainCameraタグが付いていないと
  • Camera.mainnull(何も見つからない) になってしまう
  • 結果として、スクリプトがエラーになります ⚠️

✅ 対処法

  1. Hierarchyで Main Camera を選択
  2. Inspector の上部にある「Tag」ドロップダウンを開く
  3. MainCamera」を選ぶ

これで Camera.main がそのカメラを認識してくれます🎥✨

💡補足

もし複数カメラを使っている場合(UIカメラなど)、
クリック判定用のメインカメラだけを「MainCamera」タグにしておくと安心です。

Left Caption
それって最初からついてないの「MainCamera」タグって?
Right Caption
はい、✨実は「最初から付いています」😊

🎥 Unityで新しいシーンを作ったとき

最初から入っている「Main Camera」オブジェクトには、
最初から “MainCamera” タグが設定されています。

だから、特に何も変更していなければ大丈夫です!👌

💡ただし注意点

  • もし Main Camera を削除して自分で新しくカメラを作った場合
    → 新しく作ったカメラには「タグなし」状態(Untagged)になります。
    → そのときは手動で「MainCamera」タグを付け直す必要があります。

✅確認方法

  1. Hierarchyでカメラを選ぶ
  2. Inspectorの上の方に「Tag」という欄があります
  3. そこに「MainCamera」と書かれていればOK!

つまり、

🔹 新規シーンで最初からあるカメラ → もう「MainCamera」タグ付き
🔹 新しく作ったカメラ → 自分で「MainCamera」タグを付ける必要あり

という感じです🎯

Left Caption
カゴをタップしてもたまごが消えないとかおかしな挙動をした時に確認すればいいのね
Right Caption
そうそう!まさにその通りです💯👏

🧩つまり…

普段は特に気にしなくてOKなんですが、
もしゲーム中に👇のようなトラブルが起きたら——

  • 🥚 カゴをタップしても反応しない
  • 🧺 「カゴをタップしました!」のログが出ない
  • 🚫 スクリプトで NullReferenceException(カメラ関連のエラー)が出る

そのときはまず「Main Cameraのタグ設定」を確認してみるのが一番です☑️

🔍確認チェックリスト

  1. Hierarchyでカメラをクリック
  2. Inspectorで「Tag」欄をチェック
  3. 「MainCamera」になっていなければ、選択して変更

💬補足

もしそれでも反応しない場合は、

  • BoxCollider2D(タップ判定用)の**「Is Trigger」**がONになっているか
  • カメラが**2Dモード(Orthographic)**かどうか
  • タップ位置を拾うスクリプトが正しいカメラ座標で判定しているか

を見ていけば原因を特定できます🔎

Left Caption
カゴとたまごの設定が出来たら、再生ボタンを押して確認してみましょう
Left Caption
カゴのどこをタップしてもたまごが消えてますね

Left Caption
次回はタップしたらコインに変わるアニメーションを作ってみたいと思います。
game_lob - にほんブログ村