๊ฒ์ ๊ฐ๋ฐ์ ๋ํ์ ์ธ ๊ธฐ์ ์ค ํ๋์ธ ์ค๋ธ์ ํธ ํ๋ง์ ๋ํด ์ ๋ฆฌํด ๋๊ณ ์ ํฉ๋๋ค.
์ค๋ธ์ ํธ ํ๋ง์ ์๋ ๋ํ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ๋ถ๋ด์ ์ค์ด๋ ๊ธฐ๋ฒ์ด์ด์ ๋ง์ด ์ ํ์๋๋ฐ ์ด์ฐธ์ ๋ณต์ต ๊ฒธ ๋ค์ ์ ๋ฆฌํด ๋๊ณ Queue๋ List๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ๋ฟ๋ง ์๋ ์ ๋ํฐ ์์ฒด์์ ์ง์ํ๋ ์ค๋ธ์ ํธ ํ๋ง์ด ๋ ์๋ค๊ณ ํ๋๊ตฐ์. ๊ทธ๊ฒ์ ๋ํด์๋ ๊ณต๋ถํด ๋ณด๊ณ ์ ํฉ๋๋ค.
์ค๋ธ์ ํธ ํ๋ง์ ์ฐ๋ ์ด์ ๋ ์ด๋ฏธ ์ธํฐ๋ท์ ์ฐจ๊ณ ๋์น๊ฒ ์์ง๋ง ๊ทธ๋๋ ๊ฐ๋จํ ์ ๋ฆฌํ์๋ฉด, ์ ๋ํฐ์์ ์ค๋ธ์ ํธ๋ฅผ ์์ฑํ๊ณ ํ๊ดดํ๋ ์์ ์ ๊ฝค ๋ฌด๊ฑฐ์ด ์์ ์ ๋๋ค. ์ค๋ธ์ ํธ๋ฅผ ์์ฑํ๋ฉด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋ก ํ ๋นํด์ผ ํ๊ณ ํ๊ดดํ ๋๋ ํ๊ดดํ๊ณ ๋์ ์๊ธฐ๋ ๊ฐ๋น์ง ์ปฌ๋ ํ ์ผ๋ก ์ธํ ํ๋ ์ ์ ํ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
๊ทธ๋์ ์ค๋ธ์ ํธ ํ๋ง์ด๋ผ๋ ๊ธฐ๋ฒ์ ์ด์ฉํ์ฌ ์ค๋ธ์ ํธ๋ฅผ ํ์ํ ๋ ๊บผ๋ด์ฐ๊ณ ํ๊ดดํ๋ ๊ฒ์ด ์๋ ๋ค์ ํ์ ๋ฃ์ด๋๋ ๋ฐฉ์์ผ๋ก ํ๋ ์ ์ ํ๋ฅผ ๋ฐฉ์งํฉ๋๋ค.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
public Queue<GameObject> objectPool = new Queue<GameObject>();
private void Awake() // ์ด๊ธฐ ์ค์
{
instance = this;
for(int i=0; i<2; i++) // ํ์ํ ๊ฐฏ์๋งํผ ๋ง๋ค์ด์ queue์ ๋ฃ์ด์ฃผ๊ธฐ
{
GameObject tmpObject = Instantiate(enemyPrefabs[0], Vector3.zero, Quaternion.identity);
objectPool.Enqueue(tmpObject);
tmpObject.SetActive(false);
}
}
private void CreateEnemy()
{
if (objectPool.Count == 0) // queue์ ์ค๋ธ์ ํธ๊ฐ ์์ผ๋ฉด ์ถ๊ฐ๋ก ๋ง๋ค์ด ์ค๋๋ค.
{
GameObject tmpObject = Instantiate(enemyPrefabs[0], Vector3.zero, Quaternion.identity);
objectPool.Enqueue(tmpObject);
}
// queue์์ ๋ฐ์์จ ์ค๋ธ์ ํธ๋ฅผ ๋๋คํ ์์น์ ๋ฐฐ์นํฉ๋๋ค.
GameObject getObject = GetQueue();
Transform spawnPoint = spawnPoints[Random.Range(0, spawnPoints.Length)];
getObject.transform.position = spawnPoint.position;
}
public void InsertQueue(GameObject gameObject) // queue์ ๋ค์ ๋ฃ์ ๋ ์ฌ์ฉ
{
objectPool.Enqueue(gameObject);
gameObject.SetActive(false);
}
public GameObject GetQueue() // queue์์ ๋ฐ์๊ฐ ๋ ์ฌ์ฉ
{
GameObject getObject = objectPool.Dequeue();
getObject.SetActive(true);
return getObject;
}
|
cs |
์ฐ์ Queue๋ฅผ ์ด์ฉํ ์ค๋ธ์ ํธ ํ๋ง์ ๋๋ค. ์ ๊ฐ ์ ์ผ ์ฒ์ ์ค๋ธ์ ํธ ํ๋ง์ ๊ณต๋ถํ ๋ ์ผ์ด๋๋์ ์ ํ๋ธ๋ฅผ ๋ณด๊ณ ๊ณต๋ถํด์ queue๋ฅผ ์ฌ์ฉํ๋๋ฐ stack์ด๋ list๋ฅผ ์ฌ์ฉํด๋ ์๊ด์ ์์ต๋๋ค. ๋ญ ์ฐ๋ ํฌ๊ฒ ์ฐจ์ด๋ ์๋ค๊ณ ํ๋๊ตฐ์.
์... ์ ๋ํฐ์์ ์ ๊ณตํ๋ ์ค๋ธ์ ํธ ํ์ ์จ๋ณด๋ ค๊ณ ํ๋๋ฐ ์ด๋ฐ ์ค๋ฅ๊ฐ ๊ณ์ ๋ฐ์ํ๋ค์. ์ด๊ฒ 21๋ฒ์ ์ดํ๋ก ๋์จ ๊ฑฐ์ฌ์ ์์ง ๊ด๋ จ ์๋ฃ๊ฐ ๋ง์ด ์๋๋ฐ ๊ณต์ ๋ํ๋จผํธ๋ฅผ ๋ค์ง๋ฉด์ ์ฐจ์ฐจ ๊ณต๋ถํด ๋ด์ผ๊ฒ ์ต๋๋ค.
๊ณต๋ถํด์ ์ ๋๋ก ์ดํดํ๊ฒ ๋๋ฉด ๋ค์ ๊ธ์ ์จ ๋ณด๊ฒ ์ต๋๋ค. ํ๋์์ ์ง์ ๋ง๋ค์ด์ ์ฐ๋๊ฑธ๋กใ ...
'๐งโ๐ป ์ฝ๋ฉ > Unity' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[TIL] RaycastAll, NameToLayer, Array.Exists (0) | 2023.01.28 |
---|---|
[Unity Tip] Navigation Bake ์๋๋ ๊ฒฝ์ฐ ํด๊ฒฐ๋ฒ (0) | 2023.01.06 |
[Unity Tip] ํ ๋ฒ์ ์ฌ๋ฌ๊ฐ์ ์ค๋ธ์ ํธ ํ ๋นํ๊ธฐ (0) | 2023.01.03 |
[Practice Unity] ์ธํฐํ์ด์ค ์ฌ์ฉ๋ฒ ์ ๋ฆฌ (0) | 2022.12.31 |
[Practice Unity] ํ๋กํผํฐ ์ฌ์ฉ๋ฒ ์ ๋ฆฌ (0) | 2022.12.29 |