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

かごの作成
Assets/Images から basketをシーンにドラッグアンドロップしてbucketオブジェクトを作成し、
Polygon Collider 2Dを付けます。

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


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


🎯目的の動作
- たまごが落下して「カゴ」に入ると、カゴの中にたまごが貯まる(消えない)
- プレイヤーがかごをタップしたときに、カゴ内のたまごが消える
🧩必要なコンポーネント構成
🧺 カゴ(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("✨ カゴの中のたまごを全部消しました!");
}
}
⚙️設定手順
- Basketオブジェクトに上記スクリプトをアタッチ。
- Polygon Collider 2D(たまご用)と Box Collider 2D(タップ用)の両方を付ける。
- タップ用コライダーは “Is Trigger" をON にする。
- たまご(Egg)には
Tagを"Egg"に設定しておく。 - カメラには「MainCamera」タグを必ず付ける(クリック判定に必要)。


Vector2 worldPoint = Camera.main.ScreenToWorldPoint(Input.mousePosition);🔍 ここで何をしているかというと…
Input.mousePosition は「画面上(スクリーン座標)」のマウス(またはタップ)位置です。
Unityでは、ゲーム内の物理判定(Colliderなど)は「ワールド座標」で扱うので、
クリック位置を「画面 → ゲーム内の座標」に変換する必要があります。
その変換を行うのが
👉 Camera.main.ScreenToWorldPoint()
なんです。
🎥 Camera.main の正体
Camera.main は「タグが “MainCamera" に設定されたカメラ」を自動で探してくる特殊なプロパティです。
つまり、
- Unity内で使いたいカメラに MainCameraタグが付いていないと
Camera.mainが null(何も見つからない) になってしまう- 結果として、スクリプトがエラーになります ⚠️
✅ 対処法
- Hierarchyで Main Camera を選択
- Inspector の上部にある「Tag」ドロップダウンを開く
- 「MainCamera」を選ぶ
これで Camera.main がそのカメラを認識してくれます🎥✨
💡補足
もし複数カメラを使っている場合(UIカメラなど)、
クリック判定用のメインカメラだけを「MainCamera」タグにしておくと安心です。


🎥 Unityで新しいシーンを作ったとき
最初から入っている「Main Camera」オブジェクトには、
最初から “MainCamera” タグが設定されています。
だから、特に何も変更していなければ大丈夫です!👌
💡ただし注意点
- もし Main Camera を削除して自分で新しくカメラを作った場合
→ 新しく作ったカメラには「タグなし」状態(Untagged)になります。
→ そのときは手動で「MainCamera」タグを付け直す必要があります。
✅確認方法
- Hierarchyでカメラを選ぶ
- Inspectorの上の方に「Tag」という欄があります
- そこに「MainCamera」と書かれていればOK!
つまり、
🔹 新規シーンで最初からあるカメラ → もう「MainCamera」タグ付き
🔹 新しく作ったカメラ → 自分で「MainCamera」タグを付ける必要あり
という感じです🎯


🧩つまり…
普段は特に気にしなくてOKなんですが、
もしゲーム中に👇のようなトラブルが起きたら——
- 🥚 カゴをタップしても反応しない
- 🧺 「カゴをタップしました!」のログが出ない
- 🚫 スクリプトで
NullReferenceException(カメラ関連のエラー)が出る
そのときはまず「Main Cameraのタグ設定」を確認してみるのが一番です☑️
🔍確認チェックリスト
- Hierarchyでカメラをクリック
- Inspectorで「Tag」欄をチェック
- 「MainCamera」になっていなければ、選択して変更
💬補足
もしそれでも反応しない場合は、
- BoxCollider2D(タップ判定用)の**「Is Trigger」**がONになっているか
- カメラが**2Dモード(Orthographic)**かどうか
- タップ位置を拾うスクリプトが正しいカメラ座標で判定しているか
を見ていけば原因を特定できます🔎











