๋ฐค์ ๋ดค๋๋ฐ ์ ์ง์ ์์น์ ์ด๋ป๊ฒ ์ ์คํฐ์ด ์ํ๋๋๊ฑธ๊น
using System.Collections;
using UnityEngine;
public class Spawner : MonoBehaviour {
public Wave[] waves;
public Enemy enemy;
ย ย public Transform SpawnPoint;
Wave currentWave;
int currentWaveNumber;
ย ย public bool isSpawn = false;
ย ย public float spawnDelay = 1.5f;
ย ย float spawnTimer = 0f;
ย ย int enemiesRemainingToSpawn;
int enemiesRemainingAlive;
float nextSpawnTime;
void Start() {
ย ย ย ย NextWave();
ย ย }
ย ย Vector3[] positions = new Vector3[5];
ย ย void CreatePositions()
ย ย {
ย ย ย ย float viewPosY = 1.2f;
ย ย ย ย float viewPosX = 0f;
ย ย ย ย float gapX = 1f / 6f;
ย ย ย ย for (int i = 0; i
ย ย ย ย {
ย ย ย ย ย ย viewPosX = gapX + gapX * i;
ย ย ย ย ย ย Vector3 viewPos = new Vector3(viewPosX, viewPosY, 3);
ย ย ย ย ย ย Vector3 worldPos = Camera.main.ViewportToWorldPoint(viewPos);
ย ย ย ย ย ย worldPos.z = 0f;
ย ย ย ย ย ย positions[i] = worldPos;
ย ย ย ย }
ย ย }
ย ย void Update() {
ย ย ย ย float randomX = Random.Range(-0.5f, 0.5f);
ย ย ย ย if (enemiesRemainingToSpawn > 0 && Time.time > nextSpawnTime) {
enemiesRemainingToSpawn--;
nextSpawnTime = Time.time + currentWave.timeBetweenSpawns;
Enemy spawnedEnemy = Instantiate(enemy, SpawnPoint.localPosition, Quaternion.identity) as Enemy;
spawnedEnemy.OnDeath += OnEnemyDeath;
}
}
void OnEnemyDeath() {
enemiesRemainingAlive--;
if (enemiesRemainingAlive == 0) {
ย ย ย ย ย ย NextWave();
ย ย ย ย }
}
void NextWave() {
currentWaveNumber++;
if (currentWaveNumber - 1
currentWave = waves [currentWaveNumber - 1];
enemiesRemainingToSpawn = currentWave.enemyCount;
enemiesRemainingAlive = enemiesRemainingToSpawn;
}
}
[System.Serializable]
public class Wave {
public int enemyCount;
public float timeBetweenSpawns;
}
}
์ ๋ค ์์ฑ์ ์ ๋๊ณ ์์น๋ง ์ง๊ธ ๋ฌธ์ ๋ฉด Instantiate ํ ๋ ์ขํ๋ฅผ ๋ฃ์ด์ฃผ๋ฉด ๋๋๋ฐ
์ด๋ป๊ฒ ์ํ๋๋ค๋ ๊ฑด ๋ก์ง์ ์ค๋ช ์ด ํ์ํ๋ค๋ ๊ฑฐ์? ์๋๋ฉด ์ ๋ก์ง์ด ์ ๋๋ค๋ ๊ฑฐ์??
ํธ๋ฌ๋ธ ์ํ ์ ์ํ๋ ๊ฑด์ง ๋ก์ง์ ๋ํ ํด์ค์ ์ํ๋ ๊ฑด์ง ๋ชจ๋ฅด๊ฒ ๋ค
๊ทธ๋ฅ instantiate(enemy, spawnpoint) ํด๋ ๋ ๊ฒ ๊ฐ์๋ฐ
์๋ ๊ธ์ ๋๊ธ๋ณด๋ฉด spawnpoint.position์ ์ฐ๋ผ ํ๋๋ฐ ๋ spawnpoint.localposition์ ์ผ์ด. ์ค๋ธ์ ํธ๋ค ์ขํ๋ ๊ณ์ธต๊ตฌ์กฐ๊ฐ ์ด๋ค์ง ๋ชจ๋ฅด๊ฒ ๋๋ฐ, ์ด๊ฒ ๋ฌธ์ ์ผ ๊ฐ๋ฅ์ฑ์ด ์ปค๋ณด์ธ๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ๋ฅ ๊ตฌ๊ธ์ unity spawn ์ด๋ผ๊ณ ๊ฒ์๋งํด๋ ํด๊ฒฐ๋ฒ์ ๋ฐ๋ก ๋์ค๋ ์ด์ ์์ํ๋๊ฑฐ๋ฉด ํค์๋๋ฅผ ์์๋ด์ ๊ฒ์ํ๋ ์ต๊ด์ ๊ธฐ๋ฅด๊ณ , ๋ณด๊ณ ํ๋๋ฐ๋ ์ ์๋๋ฉด ์๋ ๊ทธ๋๋ก ํ๋์ง ๋ค์ํ๋ฒ ํ์ธํด๋ด
ใด ๊ทธ๋ ๊ฒ ๋๋ค ํด๋ดฃ๋๋ฐ ์ง์ ์คํฐ ํ์ดํ์์น์ ์ ์ด ์๋ธ ์ํ์๋๊ณ ์ง์ ์์น ์๋๋๊ฒ ๊ฐ์ฅํฐ ๋ฌธ์ ์
๊ทธ๋ผ ๋ด ๋ง์ ๋ท๋ฌธ์ฅ๋ ํ์ธ์ ํด๋ด. ๊ทธ๋ฌ๊ณ ๋ ์๋๋ฉด ์์ฑํ๋ ์ฝ๋ ๋ฐ๋ก ์๋์ ์ขํ๋ฅผ ๋ค์ ๋ฃ์ด ์ฃผ๋๊ฐ. enemy.transform.position = spawnposition.position. ์ด๊ฑด ๊ทธ๋ฅ ๋์ผํด. ๊ทธ๋๋ ์๋๋ฉด ๋ด ์๋๊ธ์ ๋ค์ ์ฝ์ด๋ณด๊ณ ๊ณ ๋ฏผํด๋ด.
๊ทธ๊ฒ ์๋๋๊ฑด ๋ถ๊ฐ๋ฅํจ ์ฆ ๋๋ ์ฌ ํ์ด์ด๋ผํค์์ ๋ฌธ์ ๊ฐ ์์๋ฏ ๋ด์ถ์ธก์ ๋๊ฐ ์คํฐํฌ์ธํธ๋ก ๋๋๊ทธํด์ ๋ฃ์ด์ค๊ฒ ์๋ง๋ ์คํฐํฌ์ธํธ์ ๋ถ๋ชจ์ค๋ธ์ ํธ๋ผ์ ๋ค๋ฅธ๊ณณ์ ์๊ธฐ๊ณ ์๋๊ฒ๊ฐ๋ค
์ ๊ฑฐ๋ง ๋ฌ๋ ๋์ ๋์ง๋ง๊ณ ํ์ด์ด๋ผํค๋ฅผ ๋ณด์ฌ์ค๋ด๋ผ ์ค๋ธ์ ํธ ์ธ์คํํฐ๋
ํน์ ์ฝ๋์์ผ๋ก ์๋์ค๊ณ ์๋๋ฐ ๋๊ฐ ์ํ๋๊ฒ ๋จ์ํ ์๋๊ฑฐ๊ฑฐ๋ ๋์ฝ๋ ๋ณด๋๊น ๋๋คํx์ถ์์ ๋์ค๊ฒํ๋ ค๋๊ฑฐ๊ฐ์๋ฐ ์ด๊ฑธ์ํ๊ฑฐ๋ฉด ์ข๋ฌ๋ผ์ง์ง ์ฌ์ค ์์ฒญ ์ฝ๊ธดํ๋ฐ ๋๋ ์์ ๊ฐ์ฒด์งํฅ ์ฝ๋ฉ์ ๋ชจ๋ฅด๋๊ฑฐ๊ฐ์ ์ฒซ์ฝ๋๋ ๋ฒกํฐ ์ ๋ก๋ฅผ ์ธ์คํด์์์์ ๋ฃ์ด๋จ์์ผ๋ ์ธ์คํด์์์์ ๋๋ฒ์งธ ์ธ์๋ ๋ฒกํฐ๊ฐ์ ์ขํ๋ก ๋ฐ๊ณ ๋ด๊ฐ ์ ์ํ spawn point๋ ํฌ์ง์ ์ด๋ ์ด๋ฆ์ ๋ฒกํฐ๋ฅผ
๊ฐ์ง๊ณ ์๋ ํธ๋์คํผ์ ์ง์ ์ํค๊ณ ์ง์ ์ฐธ์กฐ๋ก ๊ทธ ๋ฒกํฐ๊ฐ์ ๋ถ๋ฌ๋ค ์ธ์คํด ํจ์์ ์ขํ๊ฐ์ ์ฐ๋ผํ๊ฑฐ์ผ ์ด์ขํ์ x์ถ์ ๋๋ค์ผ๋ก ์ฃผ๊ณ ์ถ์ผ๋ฉด ์คํฐํฌ์ธํธ๋ฅผ ์๋ก์ด ๋ฒกํฐ3 ๋ณ์๊ฐ ๋ฐ์์ฃผ๊ณ ๊ทธ x๊ฐ์ ๋๋ค์ผ๋ก ๊ฐ๊ฒํ๋ค์ ์ขํ๊ฐ์ ๋ฃ์ด์ฃผ๋ฉด๋์ง
๊ทธ๋ฆฌ๊ณ ๋ง์ผ ์ ์ฅ์ ๋ฌผ๋ค๋ ๋๋ค์ผ๋ก ๋ฐฐ์น๋๋ ๊ฑฐ๋ผ๋ฉด ์คํฐํฌ์ธํธ๊ฐ ์ฅ์ ๋ฌผ์ ์๊ฒน์น๊ฒ ๋ฐฐ์น๋๋ ์ ์ฒด ์คํ ์ด์ง ์ขํ ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค๊ณ ๊ฑฐ๊ธฐ์ ์ฅ์ ๋ฌผ๋ค์ด ์์ฑ๋๋ฉด ๊ทธ ์ขํ๋ฅผ ๋นผ์ฃผ๊ณ ๋จ์ ๋ฆฌ์คํธ์์ ๋๋ค์ ๋๋ ค์ ์ขํ๋ฅผ ๋ฝ์์จ์ผ์ง