๐Ÿ—‚ ์”ฌ ๊ด€๋ฆฌ์™€ ๋ฉ”๋ชจ๋ฆฌ ์ตœ์ ํ™” – ๊ฒŒ์ž„ ์„ฑ๋Šฅ ์•ˆ์ •ํ™” ์ „๋žต

 ๊ฒŒ์ž„์—์„œ ํ•œ ์”ฌ(Scene) ์•ˆ์— ๋„ˆ๋ฌด ๋งŽ์€ ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ์žˆ๊ฑฐ๋‚˜, ์—ฌ๋Ÿฌ ์”ฌ์„ ์ž์ฃผ ์ „ํ™˜ํ•˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ์ฆ๊ฐ€์™€ ํ”„๋ ˆ์ž„ ์ €ํ•˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ์”ฌ ๊ด€๋ฆฌ ๋ฐฉ๋ฒ•๊ณผ ๋ฉ”๋ชจ๋ฆฌ ์ตœ์ ํ™” ์ „๋žต์„ Unity ์ค‘์‹ฌ์œผ๋กœ ์‚ดํŽด๋ณด๊ฒ ๋‹ค.


1. ์”ฌ(Scene) ๊ด€๋ฆฌ๋ž€?

  • ์”ฌ(Scene): ๊ฒŒ์ž„์˜ ํ•œ ํ™”๋ฉด, ๋ ˆ๋ฒจ, ํ™˜๊ฒฝ ๋‹จ์œ„๋ฅผ ์˜๋ฏธ

  • ์”ฌ ์ „ํ™˜ ์‹œ ๊ธฐ์กด ์”ฌ์˜ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์ •๋ฆฌํ•˜๊ณ  ์ƒˆ๋กœ์šด ์”ฌ ๋กœ๋“œ

  • ์ž˜๋ชป๋œ ์”ฌ ๊ด€๋ฆฌ → ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜(Memory Leak) ๋ฐœ์ƒ ๊ฐ€๋Šฅ


2. ์”ฌ ์ „ํ™˜ ๋ฐฉ๋ฒ•

  1. ๋‹จ์ผ ์”ฌ ์ „ํ™˜

SceneManager.LoadScene("GameScene");
  • ๊ธฐ์กด ์”ฌ ์‚ญ์ œ ํ›„ ์ƒˆ ์”ฌ ๋กœ๋“œ

  • ์žฅ์ : ๋ฉ”๋ชจ๋ฆฌ ์ดˆ๊ธฐํ™”

  • ๋‹จ์ : ์ „ํ™˜ ์‹œ ๋กœ๋”ฉ ์‹œ๊ฐ„ ๋ฐœ์ƒ

  1. ๋ฉ€ํ‹ฐ ์”ฌ ๋กœ๋”ฉ(Additive)

SceneManager.LoadScene("UI", LoadSceneMode.Additive);
  • ์—ฌ๋Ÿฌ ์”ฌ์„ ๋™์‹œ์— ์œ ์ง€ ๊ฐ€๋Šฅ

  • ์žฅ์ : UI, ๋ฐฐ๊ฒฝ, ๋ ˆ๋ฒจ ์”ฌ ๋ถ„๋ฆฌ → ์œ ์—ฐํ•œ ๊ด€๋ฆฌ

  • ๋‹จ์ : ๋ถˆํ•„์š”ํ•œ ์˜ค๋ธŒ์ ํŠธ ์œ ์ง€ ์‹œ ๋ฉ”๋ชจ๋ฆฌ ์ฆ๊ฐ€


3. ๋ฉ”๋ชจ๋ฆฌ ์ตœ์ ํ™” ์ „๋žต

  • ๋ถˆํ•„์š”ํ•œ ์˜ค๋ธŒ์ ํŠธ ์ œ๊ฑฐ: ์”ฌ ์ „ํ™˜ ์‹œ ์‚ฌ์šฉ ์•ˆ ํ•˜๋Š” ์˜ค๋ธŒ์ ํŠธ Destroy

  • Resources.Load ์ตœ์†Œํ™”: ๋ฏธ๋ฆฌ ๋กœ๋“œ ๋˜๋Š” AssetBundle ์‚ฌ์šฉ

  • Object Pooling ํ™œ์šฉ: ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ์˜ค๋ธŒ์ ํŠธ ์žฌ์‚ฌ์šฉ → Instantiate/Destroy ๊ฐ์†Œ

foreach(var obj in objectsToDestroy) { Destroy(obj); }

4. ์‹ค์ „ ํŒ

  • ์”ฌ ๋กœ๋”ฉ ์ค‘ Async ๋ฐฉ์‹ ํ™œ์šฉ → ๋กœ๋”ฉ ํ™”๋ฉด + ๋Š๊น€ ๋ฐฉ์ง€

AsyncOperation asyncLoad = SceneManager.LoadSceneAsync("GameScene"); asyncLoad.allowSceneActivation = true;
  • ์”ฌ ๊ตฌ์กฐ ์„ค๊ณ„: UI, ๋ฐฐ๊ฒฝ, ๊ฒŒ์ž„ํ”Œ๋ ˆ์ด ์”ฌ ๋ถ„๋ฆฌ → ๊ด€๋ฆฌ ์šฉ์ด

  • ๋ฉ”๋ชจ๋ฆฌ ๋ชจ๋‹ˆํ„ฐ๋ง: Profiler ์‚ฌ์šฉ → ๋ˆ„์ˆ˜, ๊ณผ๋‹ค ์‚ฌ์šฉ ์ฒดํฌ


5. ๋งˆ๋ฌด๋ฆฌ

์”ฌ ๊ด€๋ฆฌ์™€ ๋ฉ”๋ชจ๋ฆฌ ์ตœ์ ํ™”๋Š” ๊ฒŒ์ž„ ์„ฑ๋Šฅ ์•ˆ์ •ํ™”์˜ ํ•„์ˆ˜ ๋‹จ๊ณ„์ด๋‹ค.

  • ์ ์ ˆํ•œ ์”ฌ ๋ถ„๋ฆฌ → ์ฝ”๋“œ ๊ฐ€๋…์„ฑ, ์œ ์ง€๋ณด์ˆ˜ ↑

  • ๋ถˆํ•„์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ ์ œ๊ฑฐ → FPS ์•ˆ์ •ํ™”

  • Object Pooling + Async ๋กœ๋”ฉ → ๋Œ€๊ทœ๋ชจ ์”ฌ๋„ ๋ถ€๋“œ๋Ÿฝ๊ฒŒ ์‹คํ–‰

๐Ÿ‘‰ ๋‹ค์Œ ๊ธ€์—์„œ๋Š” RPC(Remote Procedure Call)์™€ ๋„คํŠธ์›Œํฌ ๊ฒŒ์ž„ ๊ธฐ์ดˆ๋ฅผ ๋‹ค๋ค„, ๋ฉ€ํ‹ฐํ”Œ๋ ˆ์ด์–ด ํ™˜๊ฒฝ์—์„œ๋„ ์•ˆ์ •์ ์ธ ๊ฒŒ์ž„ ๋™์ž‘์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด๊ฒ ๋‹ค.

๋Œ“๊ธ€

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

๐Ÿ—„️ ๊ฒŒ์ž„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค๊ณ„ – ์ธ๋ฒคํ† ๋ฆฌ, ๋žญํ‚น, ์„ธ์ด๋ธŒ ์‹œ์Šคํ…œ

⚔️ ๊ฒŒ์ž„ ์ถฉ๋Œ ํŒ์ • ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์™„์ „ ์ •๋ฆฌ – AABB, Circle, Polygon