【Unity】オブジェクトの生成&クリックで破壊

オブジェクトの生成

using UnityEngine;

public class ObjectSpawner : MonoBehaviour
{
    public GameObject musiPrefab; // 生成するオブジェクトのプレハブ
    public float spawnIntervalMin = 1f; // 生成間隔の最小値
    public float spawnIntervalMax = 3f; // 生成間隔の最大値
    public int maxObjects = 10; // 最大生成数
    public int currentObjectCount = 0; // 現在の生成数

    void Start()
    {
        // プレハブを非表示にする(必要であれば)
        musiPrefab.SetActive(false);

        // 次の生成を予約する
        InvokeRepeating("SpawnObject", Random.Range(spawnIntervalMin, spawnIntervalMax), Random.Range(spawnIntervalMin, spawnIntervalMax));
    }

    public void SpawnObject()
    {
        // 最大生成数に達していない場合、オブジェクトを生成する
        if (currentObjectCount < maxObjects)
        {
            currentObjectCount++; // currentObjectCount を増加させる

            // オブジェクトを生成して表示する
            GameObject clone = Instantiate(musiPrefab, Vector3.zero, Quaternion.identity);
            clone.SetActive(true);

            // ObjectDestroyer スクリプトを追加して、spawner 参照を設定する
            ObjectDestroyer destroyer = clone.AddComponent<ObjectDestroyer>();
            destroyer.spawner = this;

            // currentObjectCount の値をログ出力する
            Debug.Log("Current Object Count: " + currentObjectCount);
        }
        else
        {
            // 最大生成数に達している場合、生成を停止する
            Debug.Log("Maximum object count reached. Stopping object spawning.");
            CancelInvoke("SpawnObject");
        }
    }
}
  • musiPrefabを1~3秒の間でランダムに最大10個生成
  • ゲーム開始時にmusiPrefabは非表示にする
  • 生成されたものをクローンとする
  • クローンにクリックで破壊されるスクリプトを追加
  • 10個生成されたら生成を停止

クリックで破壊

using UnityEngine;

public class ObjectDestroyer : MonoBehaviour
{
    public ObjectSpawner spawner; // ObjectSpawner スクリプトへの参照
    private bool isDestroyed = false; // オブジェクトが破壊されたかどうかを追跡するフラグ

    void OnMouseDown()
    {
        if (!isDestroyed && spawner != null)
        {
            isDestroyed = true; // オブジェクトが破壊されたことをマークする

            // ObjectSpawner の currentObjectCount を減らす
            spawner.currentObjectCount--;
            Debug.Log("Current Object Count after destroy: " + spawner.currentObjectCount);

            // オブジェクトを破壊する
            Destroy(gameObject);
        }
        else
        {
            Debug.LogWarning("Spawner is not assigned or already destroyed!");
        }
    }
}
  • オブジェクトを左クリックしたときに、破壊前にオブジェクトのカウントを-1する
  • 先に破壊フラグを立てる
  • 破壊する
タイトルとURLをコピーしました