[ad_1]
public class Piecespawn : MonoBehaviour
{
// Referensi ke objek skripable PieceList yang berisi daftar potongan puzzle
public PieceList pieceList
// Tingkat di mana potongan-potongan akan muncul (potongan per detik)
public float spawnRate = 1f;
// Array dari titik spawn di mana potongan-potongan akan diciptakan
public GameObject[] spawnPoints;
// Record untuk melacak potongan aktif dalam adegan
non-public Record<GameObject> activePieces = new Record<GameObject>();
// Begin dipanggil sebelum body pertama
void Begin()
{
// Mulai coroutine untuk terus-menerus menciptakan potongan
StartCoroutine(SpawnPiece());
}
// Coroutine untuk menciptakan potongan puzzle
IEnumerator SpawnPiece()
{
// Terus-menerus menciptakan potongan tanpa batas
whereas (true)
{
// Hentikan menciptakan jika semua titik spawn sudah terisi
if (activePieces.Depend >= spawnPoints.Size)
{
yield return null;
proceed;
}
// Pilih secara acak potongan puzzle dari daftar
int randomIndex = Random.Vary(0, pieceList.Piecepuzzle.Depend);
GameObject selectedPiece = pieceList.Piecepuzzle[randomIndex].shapeTriangle;
// Bangkitkan indeks titik spawn acak, pastikan tidak ada yang sudah terisi
int spawnPointIndex = Random.Vary(0, spawnPoints.Size);
whereas (activePieces.Exists(piece => piece.remodel.localPosition == spawnPoints[spawnPointIndex].remodel.localPosition))
{
spawnPointIndex = Random.Vary(0, spawnPoints.Size);
}
// Ciptakan potongan yang dipilih di titik spawn yang dipilih
GameObject spawnedPiece = Instantiate(selectedPiece, spawnPoints[spawnPointIndex].remodel.localPosition, Quaternion.id);
activePieces.Add(spawnedPiece);
// Tunggu sejumlah waktu tertentu sebelum mencoba menciptakan potongan lainnya
yield return new WaitForSeconds(spawnRate);
}
}
// OnDestroy dipanggil ketika occasion skrip dihancurkan
non-public void OnDestroy()
{
// Hancurkan semua potongan aktif saat skrip dihancurkan
foreach (GameObject piece in activePieces)
{
Destroy(piece);
}
}
}
[ad_2]