03 .NET in Unity

๊น€๋ฏผ์˜ยท2023๋…„ 3์›” 6์ผ

Unity ๊ธฐ์ดˆ

๋ชฉ๋ก ๋ณด๊ธฐ
2/2

๐Ÿš ์Šคํฌ๋ฆฝํŠธ ๋ฐฑ์—”๋“œ

1. Unity์—์„œ ์‚ฌ์šฉํ•˜๋Š” .NET

โ–ถ Mono

1) ์˜คํ”ˆ ์†Œ์Šค .NET
2) ํฌ๋กœ์Šค ํ”Œ๋žซํผ ์ง€์› (ํ•˜๋‚˜์˜ ์ฝ”๋“œ๋กœ ์—ฌ๋Ÿฌ ํ”Œ๋žซํผ์˜ ํ”„๋กœ๊ทธ๋žจ์„ ๋นŒ๋“œ)
3) JIT ์ปดํŒŒ์ผ ๋ฐฉ์‹

โ–ถ IL2CPP

1) ์œ ๋‹ˆํ‹ฐ๊ฐ€ ๋งŒ๋“  .NET
2) AOT ์ปดํŒŒ์ผ ๋ฐฉ์‹
3) ๋Œ€๋ถ€๋ถ„ IL2CPP๋ฅผ ์‚ฌ์šฉ

2. IL2CPP๋ฅผ ์ด์šฉํ•œ ๋นŒ๋“œ ๊ณผ์ •

1) Roslyn ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ C# ์ฝ”๋“œ๋ฅผ ์ปดํŒŒ์ผ

2) Unity๊ฐ€ IL ์ŠคํŠธ๋ฆฌํ•‘(stripping)์„ ์‹ค์‹œํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํฌ๊ธฐ๋ฅผ ์ค„์ž„

  • ์ฝ”๋“œ ์ŠคํŠธ๋ฆฌํ•‘: ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ์ฝ”๋“œ๋ฅผ ์‚ญ์ œํ•˜๋Š” ๊ฒƒ
  • ์ตœ์ข… ๋นŒ๋“œ๋˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํฌ๊ธฐ๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์ง€๋งŒ, ์ด ๊ณผ์ •์œผ๋กœ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ

3) IL2CPP๊ฐ€ IL ์ฝ”๋“œ๋ฅผ ํ‘œ์ค€ C++ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜

4) C++ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋ณ€ํ™˜๋œ C++ ์ฝ”๋“œ๋ฅผ ํƒ€๊ฒŸ ํ”Œ๋žซํผ์œผ๋กœ ์ปดํŒŒ์ผ

5) Unity๊ฐ€ ํƒ€๊ฒŸ ํ”Œ๋žซํผ์—๋”ฐ๋ผ ์‹คํ–‰ ํŒŒ์ผ ํ˜น์€ DLL ์ƒ์„ฑ

3. .NET ์‹œ์Šคํ…œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

1) Unity์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ .NET ๋ฒ„์ „

  • .NET Standard 2.0 (๊ถŒ์žฅ)
  • .NET 4.X

๐Ÿš ๋ฉ”๋ชจ๋ฆฌ

Unity๋Š” ๋„ค์ดํ‹ฐ๋ธŒ ๋ฉ”๋ชจ๋ฆฌ / ๊ด€๋ฆฌ๋˜์ง€ ์•Š๋Š” ๋ฉ”๋ชจ๋ฆฌ / ๊ด€๋ฆฌ๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์„ธ๊ฐ€์ง€ ๊ณ„์ธต์„ ํ†ตํ•ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค.

1. ๋„ค์ดํ‹ฐ๋ธŒ ๋ฉ”๋ชจ๋ฆฌ (Native Memory)

1) Unity ์—”์ง„์ด ๋‚ด๋ถ€์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ
2) ์œ ์ €๊ฐ€ ์ง์ ‘ ์ ‘๊ทผํ•˜๊ฑฐ๋‚˜ ์กฐ์ž‘ํ•  ์ˆ˜ ์—†์Œ
3) ์”ฌ, ์—์…‹, ๊ทธ๋ž˜ํ”ฝ API, ๊ทธ๋ž˜ํ”ฝ ๋“œ๋ผ์ด๋ฒ„, ์„œ๋ธŒ์‹œ์Šคํ…œ, ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ฒ„ํผ ๋“ฑ์ด ์ €์žฅ

2. ๊ด€๋ฆฌ๋˜์ง€ ์•Š๋Š” ๋ฉ”๋ชจ๋ฆฌ (Unmanaged Memory)

1) ๋„ค์ดํ‹ฐ๋ธŒ ๋ฉ”๋ชจ๋ฆฌ์— ์ ‘๊ทผํ•ด ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์„ ๋ฏธ์„ธ ์กฐ์ •ํ•˜๊ธฐ ์œ„ํ•œ ๊ณ„์ธต
2) ์žก ์‹œ์Šคํ…œ(Job System)์ด๋‚˜ ๋ฒ„์ŠคํŠธ(Burst) ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉ

3. ๊ด€๋ฆฌ๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ (Managed Memory)

1) ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ์— ์˜ํ•ด ์ž๋™์œผ๋กœ ๊ด€๋ฆฌ๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ

2) Unity์˜ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜

  • Boehm GC ์‚ฌ์šฉ
  • ์„ธ๋Œ€๋ณ„๋กœ ๊ด€๋ฆฌ๋˜์ง€ ์•Š๊ณ  ๋ฉ”๋ชจ๋ฆฌ์˜ ์••์ถ•์ด ์ผ์–ด๋‚˜์ง€ ์•Š์Œ
    โ†’ ๋ฉ”๋ชจ๋ฆฌ ๋‹จํŽธํ™” ๋ฐœ์ƒํ•˜์—ฌ ํ• ๋‹นํ•  ๊ณต๊ฐ„์ด ๋ถ€์กฑํ•ด์ง
  • ํ• ๋‹นํ•  ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ™•๋ณดํ•˜๊ธฐ ์œ„ํ•ด ํž™์„ ํ™•์žฅ

    โ†’ ํ”„๋กœ๊ทธ๋žจ์ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๊ณ , ๊ทธ๋กœ์ธํ•ด ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰ ์ค‘ ์ค‘๋‹จ๋˜๋Š” ์œ„ํ—˜ ์ฆ๊ฐ€

3) ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์— ๋„ˆ๋ฌด ๋งŽ์€ ์„ฑ๋Šฅ์ด ์†Œ๋ชจ๋˜๋Š” ๊ฒƒ์„ ๋ง‰๊ธฐ ์œ„ํ•ด ์ˆ˜ํ–‰ ์ œํ•œ ์‹œ๊ฐ„์„ ๋‘์–ด ์กฐ๊ธˆ์”ฉ ์กฐ๊ธˆ์”ฉ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์„ ํ•˜๋Š” ์ฆ๋ถ„ ๋ฐฉ์‹ ๋˜ํ•œ ์‚ฌ์šฉ

0๊ฐœ์˜ ๋Œ“๊ธ€