オブジェクトの生成
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する
- 先に破壊フラグを立てる
- 破壊する