๐Ÿ›  Object Pooling์œผ๋กœ ๊ฒŒ์ž„ ์ตœ์ ํ™” – ํˆฌ์‚ฌ์ฒด์™€ ์  AI ์„ฑ๋Šฅ ์œ ์ง€ํ•˜๊ธฐ

 ๊ฒŒ์ž„์—์„œ ์ด์•Œ, ํญ๋ฐœ, ์  ์บ๋ฆญํ„ฐ ๊ฐ™์€ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๊ณ„์† ์ƒ์„ฑํ•˜๊ณ  ์ œ๊ฑฐํ•˜๋ฉด,

CPU์™€ ๋ฉ”๋ชจ๋ฆฌ์— ๋ถ€๋‹ด์ด ์ƒ๊ฒจ **ํ”„๋ ˆ์ž„ ๋“œ๋กญ(Frame Drop)**์ด๋‚˜ ๋Š๊น€ ํ˜„์ƒ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.
์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ํ•ต์‹ฌ ๊ธฐ์ˆ ์ด ๋ฐ”๋กœ Object Pooling์ด๋‹ค.


1. Object Pooling ๊ฐœ๋…

  • ๋ฏธ๋ฆฌ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•ด๋‘๊ณ  ์žฌ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹

  • ์ƒ์„ฑ(Create)๊ณผ ์‚ญ์ œ(Destroy)๋ฅผ ์ตœ์†Œํ™” → ์„ฑ๋Šฅ ํ–ฅ์ƒ

  • ์ผ๋ฐ˜์ ์œผ๋กœ ํˆฌ์‚ฌ์ฒด, ํŒŒํ‹ฐํด, ์  ์บ๋ฆญํ„ฐ ๋“ฑ ๋ฐ˜๋ณต ์‚ฌ์šฉ ์˜ค๋ธŒ์ ํŠธ์— ์ ์šฉ


2. Unity ์˜ˆ์ œ

public class BulletPool : MonoBehaviour { public GameObject bulletPrefab; public int poolSize = 20; private GameObject[] bullets; void Start() { bullets = new GameObject[poolSize]; for(int i=0; i<poolSize; i++) { bullets[i] = Instantiate(bulletPrefab); bullets[i].SetActive(false); } } public GameObject GetBullet() { foreach(var b in bullets) { if(!b.activeInHierarchy) { b.SetActive(true); return b; } } return null; // ํ•„์š” ์‹œ ๋™์  ํ™•์žฅ ๊ฐ€๋Šฅ } }
  • ํ™œ์šฉ: ๋ฐœ์‚ฌ ์‹œ GetBullet() ํ˜ธ์ถœ → ์‚ฌ์šฉ ํ›„ SetActive(false)

  • Destroy/Instantiate ๋ฐ˜๋ณต ๋ฐฉ์ง€ → ์„ฑ๋Šฅ ์•ˆ์ •ํ™”


3. Object Pooling ์žฅ์ 

  • ํ”„๋ ˆ์ž„ ์•ˆ์ •์„ฑ: Instantiate/Destroy๋กœ ์ธํ•œ GC(๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜) ๋ถ€๋‹ด ๊ฐ์†Œ

  • ์„ฑ๋Šฅ ์ตœ์ ํ™”: ๋‹ค์ˆ˜ ํˆฌ์‚ฌ์ฒด, ํŒŒํ‹ฐํด, ์  NPC ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ

  • ์œ ์ง€๋ณด์ˆ˜ ์šฉ์ด: ์ฝ”๋“œ ๊ตฌ์กฐ ๊น”๋”


4. ํ™œ์šฉ ํŒ

  • Pool ํฌ๊ธฐ ์กฐ์ •: ์˜ˆ์ƒ ์ตœ๋Œ€ ์˜ค๋ธŒ์ ํŠธ ์ˆ˜ ๊ธฐ์ค€

  • ๋™์  ํ™•์žฅ: ํ’€ ๋ถ€์กฑ ์‹œ Instantiate ๊ฐ€๋Šฅ

  • ์žฌ์‚ฌ์šฉ ์‹œ ์ดˆ๊ธฐํ™” ํ•„์ˆ˜: ์œ„์น˜, ์†๋„, ์ƒํƒœ ์ดˆ๊ธฐํ™”

bullet.transform.position = spawnPoint.position; bullet.GetComponent<Rigidbody2D>().velocity = Vector2.zero;

5. ๋งˆ๋ฌด๋ฆฌ

Object Pooling์€ ๊ฒŒ์ž„ ์„ฑ๋Šฅ ์ตœ์ ํ™”์˜ ๊ธฐ๋ณธ์ด์ž ํ•„์ˆ˜ ๊ธฐ์ˆ ์ด๋‹ค.

  • FPS ์œ ์ง€

  • ๋Š๊น€ ์—†๋Š” ํ”Œ๋ ˆ์ด ๊ฒฝํ—˜ ์ œ๊ณต

  • ๋‹ค์ˆ˜ ์˜ค๋ธŒ์ ํŠธ ๋™์‹œ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ

๐Ÿ‘‰ ๋‹ค์Œ ๊ธ€์—์„œ๋Š” ์”ฌ(Scene) ๊ด€๋ฆฌ์™€ ๋ฉ”๋ชจ๋ฆฌ ์ตœ์ ํ™”๋ฅผ ๋‹ค๋ค„, ์˜ค๋ธŒ์ ํŠธ ํ’€๋ง๊ณผ ํ•จ๊ป˜ ๊ฒŒ์ž„ ์ „์ฒด ์„ฑ๋Šฅ์„ ์•ˆ์ •์ ์œผ๋กœ ์œ ์ง€ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด๊ฒ ๋‹ค.

๋Œ“๊ธ€

์ด ๋ธ”๋กœ๊ทธ์˜ ์ธ๊ธฐ ๊ฒŒ์‹œ๋ฌผ

๐Ÿš€ ๋ฉ€ํ‹ฐํ”Œ๋ ˆ์ด์–ด ๊ฒŒ์ž„ ์ตœ์ ํ™”์™€ ์„ฑ๋Šฅ ํŠœ๋‹ – ๋ถ€๋“œ๋Ÿฌ์šด ๊ฒŒ์ž„ ํ”Œ๋ ˆ์ด ๊ตฌํ˜„

⚔️ ๋ฉ€ํ‹ฐํ”Œ๋ ˆ์ด์–ด ์Šคํ‚ฌ/์•„์ดํ…œ ๋™๊ธฐํ™” – ์‹ค์‹œ๊ฐ„ ์ „ํˆฌ ๊ตฌํ˜„

๐ŸŽฌ ๋ฉ€ํ‹ฐํ”Œ๋ ˆ์ด์–ด ๋ฆฌํ”Œ๋ ˆ์ด ์‹œ์Šคํ…œ ๊ตฌํ˜„ – ๊ฒŒ์ž„ ํ”Œ๋ ˆ์ด ๋…นํ™”์™€ ์žฌ์ƒ