๊ฐœ์ธ์ ์œผ๋กœ ๊ฐœ๋ฐœ๊ด€๋ จํ•ด์„œ ๋ฉ”๋ชจ์šฉ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ํ‹ฐ์Šคํ† ๋ฆฌ ๋ธ”๋กœ๊ทธ์— ์ž‘์„ฑํ–ˆ๋‹ค๊ฐ€,

๊ฝค ๋งŽ์€ ๋ถ„๋“ค์—๊ฒŒ ๋„์›€์ด ๋  ๊ฒƒ ๊ฐ™์•„ ๋‚ด์šฉ๋งŒ ๋˜‘๊ฐ™์ด ๋ณต๋ถ™ํ•˜์—ฌ ์™”์Šต๋‹ˆ๋‹ค.

๋‹ค๋“ค ๊ณ ์ƒํ•˜์„ธ์š”.

-----


๊ฒŒ์ž„ ์ถœ์‹œ๋ฅผ ์•ž๋‘๊ณ , Androidํ”Œ๋žซํผ์˜ ์‹ฌ๊ฐํ•œ ๋ฐœ์—ด๊ณผ ๋‚ฎ์€ ํ”„๋ ˆ์ž„์— ๋Œ€ํ•œ ์ตœ์ ํ™”๋ฅผ ์ˆ˜ํ–‰ํ–ˆ๋‹ค.

์—ฌ๋Ÿฌ๊ฐœ์˜ ํ”„๋กœ์ ํŠธ๋ฅผ ๋Ÿฐ์นญํ•˜๋ฉด์„œ ์Œ“์ธ ๋…ธํ•˜์šฐ ๋ฐ ์ƒˆ๋กœ ๊ณต๋ถ€ํ•œ ์ง€์‹์œผ๋กœ ์œ ์˜๋ฏธํ•œ ์ตœ์ ํ™” ์„ฑ๊ณผ๋ฅผ ๊ฑฐ๋‘์—ˆ๊ธฐ์— ์ตœ์ ํ™” ๋ฐฉ๋ฒ•์„ ๊ณต์œ ํ•œ๋‹ค.


๋จผ์ €, ์ตœ์ ํ™” ๋ฐฉ๋ฒ• ๊ณต์œ ์— ์•ž์„œ ์ตœ์ ํ™” ๋Œ€์ƒ ํ”„๋กœ์ ํŠธ์˜ ์ŠคํŽ™์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค

-Unity 2021.3.8f๋กœ ๊ฐœ๋ฐœ

-URP ํ”„๋กœ์ ํŠธ

-NGUI์‚ฌ์šฉ


์ตœ์ ํ™” ์„ฑ๊ณผ (๊ฐค๋Ÿญ์‹œ s8๊ธฐ์ค€)

FPS :ย  20~30 -> 50~60

์šฉ๋Ÿ‰ : 400mb -> 300mb

๋ฐœ์—ด : S22์—์„œ ์‹ฌ๊ฐํ•œ ๋ฐœ์—ด๋กœ ์ธํ•ด 30~40fps๊ฐ€ ๋‚˜์˜ด -> S22์™€ ๊ฐ™์€ ์‹ฌ๊ฐํ•œ ๋ฐœ์—ด ๊ธฐ๊ธฐ์—์„œ ๊ฑฐ์˜ ๋ฐœ์—ด ์—†์ด ์ˆ˜์‹ญ๋ถ„ ์ด์ƒ ๊ตฌ๋™ ๊ฐ€๋Šฅ. ์•ˆ์ •์ ์ธ 60fps์œ ์ง€.


์ด์™€๊ฐ™์€ ์„ฑ๋Šฅ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด์„  ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ณตํ•ฉ์ ์ธ ์ด์œ ๋“ค์ด ์žˆ๊ฒ ์ง€๋งŒ,

untiy editor์˜ stats๊ธฐ์ค€์œผ๋กœ batch๋Š” ๋งŽ์•„๋„ 100~200์ˆ˜์ค€์„ ์žก์•„์ฃผ๋Š” ๊ฒƒ์ด ์ข‹๋‹ค

(์Šคํฌ๋ฆฝํŠธ ๋ณ‘๋ชฉ๊ณผ ๋†’์€ vertex๋กœ ์ธํ•œ ์„ฑ๋Šฅ ํ•˜๋ฝ์€ ๊ณ ๋ คํ•˜์ง€ ์•Š๋Š”๋‹ค)


๋จผ์ € ์ตœ์ ํ™”์— ์•ž์„œ ๋ณธ์ธ ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ ํ”„๋กœํŒŒ์ผ๋ง์„ ์šฐ์„  ์ง„ํ–‰ํ•˜๊ธธ ๋ฐ”๋ž€๋‹ค.

ํ•„์ž๋Š” ์ตœ์ ํ™”์— Unity Profiler์™€ Memory Profiler(์‹คํ—˜์ ) ์„ ์‚ฌ์šฉํ–ˆ๋‹ค


profiler๋ฅผ ํ†ตํ•ด ์Šคํฌ๋ฆฝํŠธ ๋ณ‘๋ชฉ์˜ ์›์ธ์„ ์ถ”์ ํ•˜๊ณ , ๋ฉ”๋ชจ๋ฆฌ ์Šค๋ƒ…์ƒท์„ ์‚ฌ์šฉํ•ด ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ์ตœ์ ํ™”ํ•˜๋ผ


๊ทธ๋ฆฌ๊ณ  ์ตœ์ ํ™”์˜ ๋Œ€์ƒ์ด CPU์ฒ˜๋ฆฌ์ธ์ง€ GPU์ฒ˜๋ฆฌ์ธ์ง€๋„ ํŒŒ์•…ํ•ด์•ผ ํ•œ๋‹ค.




NGUI๊ด€๋ จ ์ตœ์ ํ™”

1. UI Atlas์˜ depth์ตœ์ ํ™”, panel์„ ์ตœ์ ํ™”ํ•œ๋‹ค.ย 

ngui์—์„œ ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ๊ฒƒ์œผ๋กœ ๋™์ผํ•œ panel์„ ์‚ฌ์šฉํ•˜๋Š” widget๋“ค์˜ depth๋ฅผ ์ •๋ฆฌํ•˜์—ฌ ์ตœ์ ํ™” ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

๋ฌด๋ถ„๋ณ„ํ•œ panel์˜ ์‚ฌ์šฉ์œผ๋กœ ๋™์ผํ•œ atlas๋ฅผ ์‚ฌ์šฉํ•˜๋Š” widget์ด ์ชผ๊ฐœ์ ธ ์ค‘๋ณต์ ์ธ draw call์„ ์•ผ๊ธฐํ•˜์ง€ ์•Š๋„๋ก ํ•ด์•ผํ•œ๋‹ค.


ngui์—์„œ A์™€ B์•„ํ‹€๋ผ์Šค 2๊ฐœ๋ฅผ ํ†ตํ•ด UI๋ฅผ ๊ตฌ์„ฑํ•œ๋‹ค๋ฉด ํ”์ด 2์˜ draw call์„ ์˜ˆ์ƒํ•  ๊ฒƒ ์ด๋‹ค.

ํ•˜์ง€๋งŒ ๋งŒ์•ฝ depth๊ฐ€ A A B A BB์ด๋Ÿฐ ์‹์œผ๋กœ ui๋ฅผ ๋ฐฐ์น˜ํ•œ๋‹ค๋ฉด draw call์€ 4๊ฐ€ ๋œ๋‹ค

2์˜ draw call์„ ์–ป๊ธฐ ์œ„ํ•ด์„  A A A B B B B์™€ ๊ฐ™์ด atlas์— ๋”ฐ๋ฅธ ui depth๋ฅผ ์ •๋ฆฌํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.


ํ•˜๋‚˜์˜ atlas๋กœ draw๋˜๋‹ค๊ฐ€ ๋‹ค๋ฅธ atals๋ฅผ ๋งŒ๋‚˜๋ฉด ์ค‘๊ฐ„์— batching์ด ๋Š๊ธฐ๊ฒŒ ๋œ๋‹ค.


2. ๋™์ผํ•œ atlas๋ฅผ ์‚ฌ์šฉํ•˜๋Š” widget์€ ๋‹จ์ผ panel์—์„œ ์ตœ๋Œ€ํ•œ ์ˆœ์„œ๋ฅผ ์ •๋ ฌํ•˜์—ฌ ์ฒ˜๋ฆฌํ•ด์ค€๋‹ค.

ํ•„์ž์˜ ๊ฒฝ์šฐ ui atlas๋ฅผ back / icon / overay / font ์ด๋ ‡๊ฒŒ 4๊ฐ€์ง€๋กœ ๋‚˜๋ˆ„์–ด, ์ •๋ฆฌํ–ˆ์œผ๋ฉฐย 

ui๊ฐ€ ์•„๋ฌด๋ฆฌ ๋งŽ์•„๋„ batch๋Š” ์ตœ๋Œ€ 4๋งŒ ์œ ์ง€ํ•˜๋„๋ก ํ•ด์ฃผ์—ˆ๋‹ค.

draw call์˜ ๋ณ‘ํ•ฉ ๊ทœ์น™์€ ๋‘๊ฐ€์ง€๊ฐ€ ์žˆ๋Š”๋ฐ, ํ•˜๋‚˜๋Š” material, texture, shader๊ฐ€ ๋ชจ๋‘ ๊ฐ™๋‹ค๋Š” ๊ฒƒ์ด๊ณ  ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” widget์˜ ๋ ˆ์ด์–ด๊ฐ€ ๊ฐ™๊ฑฐ๋‚˜ ์ธ์ ‘ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.


3. NGUI์—์„œ Transform์˜ ๋ณ€ํ™”, ์ƒ์„ฑ, ์‚ญ์ œ๊ฐ€ ์ผ์–ด๋‚˜๋Š” ๊ฐ์ฒด๋ฅผ ์กฐ์‹ฌํ•ด๋ผ

NGUI์—์„œ๋Š” Panel์— ์†ํ•œ widget์˜ Transform์ด ๋ณ€ํ™”(์ƒ์„ฑ/์‚ญ์ œ ํฌํ•จ) ํ•˜๋ฉด ํ•ด๋‹น panel์— ์žˆ๋Š” ๋ชจ๋“  widget์„ ๋‹ค์‹œ renderingํ•œ๋‹ค.ย 

์ฆ‰, Panel์— ์—ฐ์ถœ์„ ์œ„ํ•œ widget์ด tween position, scale๋“ฑ์„ ํ•œ๋‹ค๋ฉด ๋งค lateUpdate์— Panel์€ drawcallfill์„ ๋‹ค์‹œ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

NGUI Widget์˜ Transform์ด ์ •์ ์ด์ง€ ์•Š๊ฑฐ๋‚˜, ์ƒ์„ฑ/์‚ญ์ œ๊ฐ€ ์ž์ฃผ ์ผ์–ด๋‚˜๋Š” ๊ฐ์ฒด๋ผ๋ฉด ์™„์ „ํžˆ ๋‹ค๋ฅธ panel์˜ ํ•˜์œ„ ๊ฐ์ฒด๋กœ ๋‘์–ด ๊ฒฉ๋ฆฌํ•ด๋‘์–ด์•ผ ํ•œ๋‹ค.

์ฆ‰, NGUI์—์„œ๋Š” ํ•œ panel์— ์†ํ•œ widget์˜ ์ƒํƒœ์— ๋ณ€ํ™”๊ฐ€ ์ƒ๊ธฐ๋ฉด ํ•ด๋‹น panel์˜ ๋ชจ๋“  atlas๋ฅผ ๋‹ค์‹œ ๋ Œ๋”๋งํ•ด์ฃผ๊ฒŒ๋” ๋˜์–ด์žˆ๋‹ค.


3-1. ํŠนํžˆ NGUI์˜ UI Label์„ ์กฐ์‹ฌํ•ด๋ผ

UI Label๋กœ ๋ฐ๋ฏธ์ง€ ๋“ฑ์„ ์ฒ˜๋ฆฌํ•  ๊ฒฝ์šฐ ๋ฐ๋ฏธ์ง€ ์—ฐ์ถœ์„ ์œ„ํ•ด UI Label์ด ๋งคํ”„๋ ˆ์ž„ tweeningํ•˜๊ฑฐ๋‚˜ animation์„ ์žฌ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ๊ฒฝ์šฐ UI Label์€ ์—„์ฒญ๋‚œ ์„ฑ๋Šฅ ๋ณ‘๋ชฉ์„ ์ผ์œผํ‚จ๋‹ค.

๋งค ํ”„๋ ˆ์ž„ ์›€์ง์ด๋Š” UILabel์ด ์†ํ•œ panel์˜ draw fill/fill shadow/draw call fill์„ ์•ผ๊ธฐ์‹œํ‚จ๋‹ค.

ํŠนํžˆ UI Label์— ์‰๋„์šฐ๋‚˜, ์•„์›ƒ๋ผ์ธ ๋“ฑ์ด ๋“ค์–ด๊ฐ€์žˆ๋‹ค๋ฉด ๋งคํ”„๋ ˆ์ž„ Transform์˜ ๋ณ€ํ™”์— ๋”ฐ๋ผ Label์„ ๋‹ค์‹œ ๋ Œ๋”๋ง ํ•ด์ฃผ๊ฒŒ ๋œ๋‹ค.

์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ๋ฏธ์ง€ ํฐํŠธ ๋“ฑ์€ ์ด๋ฏธ์ง€ ํฐํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์ถ”์ฒœํ•œ๋‹ค.


4. panel์˜ static์ƒํƒœ ํ™œ์„ฑํ™”

panel๋กœ ๊ตฌ์„ฑํ•œ ui์— ์žˆ๋Š” ๋ชจ๋“  ๊ฐ์ฒด๊ฐ€ ์ •์ ์ธ ๊ฒƒ์ด ๋ณด์žฅ๋œ๋‹ค๋ฉด, panel์˜ static์˜ต์…˜์„ ํ™œ์„ฑํ™”ํ•ด์ฃผ๋ฉด ์ข‹๋‹ค.

ngui๊ฐ์ฒด๋„ ๊ธฐ๋ณธ์ ์œผ๋กœ mono๊ฐ์ฒด์ด๋ฉฐ, static๊ฐ์ฒด๊ฐ€ ์•„๋‹ˆ๋ฉด ๋ชจ๋“  ui๊ฐ์ฒด์—์„œ update/lateUpdate๊ฐ€ ํ˜ธ์ถœ๋˜๊ธฐ์— ์„ฑ๋Šฅ ๋ณ‘๋ชฉ์ด ๋ฐœ์ƒํ•œ๋‹ค.

์ •์ ์ธ ๊ฐ์ฒด์˜ ๊ฒฝ์šฐ 3๋ฒˆ ๋ฐฉ๋ฒ•์„ ์ฐธ๊ณ ํ•˜์—ฌ ๋™์ ์ธ ๊ฐ์ฒด๋งŒ ๊ด€๋ฆฌํ•˜๋Š” panel๋“ฑ์œผ๋กœ ๊ฒฉ๋ฆฌํ•ด์ฃผ์ž



๊ทธ ์™ธ Unity๊ณตํ†ต ์ตœ์ ํ™”

1. GC๋ฅผ ์ค„์ด์ž

BinaryFormatter์˜ Serialize๋Š” ์—„์ฒญ๋‚œ ์–‘์˜ GC๋ฅผ ์•ผ๊ธฐํ•˜๋ฉฐ, ๋””๋ฐ”์ด์Šค๋ฅผ freeze์‹œํ‚จ๋‹ค. ์ด๋Ÿฌํ•œ ๋™์ž‘์€ ๋งคํ”„๋ ˆ์ž„ ํ•ด์ฃผ์ง€ ๋ง๊ณ , ์Šค์ผ€์ฅด๋Ÿฌ๋ฅผ ๋งŒ๋“ค์–ด ์ฒ˜๋ฆฌํ•ด์ฃผ์ž


BigInteger.Parse(string)๊ณผ ๊ฐ™์€ value copy๋ฅผ ์•ผ๊ธฐํ•˜๋Š” ์ฒ˜๋ฆฌ๋ฅผ ํ”ผํ•ด์ฃผ์ž


ํŠน์ • ํƒ€์ด๋ฐ์— GC.Collect๋ฅผ ์ˆ˜๋™์œผ๋กœ ํ˜ธ์ถœํ•ด์ฃผ์ž


2. URP Setting์˜ Post Processing์˜ fast sRGB/Linear Conversions๋กœ gamma๊ณต๊ฐ„์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๋ฉด gpu์˜ ๋ถ€๋‹ด์„ ๋œ์–ด์ฃผ์ž


3.ย ย SustainedPerformanceMode๋ฅผ ํ™œ์„ฑํ™”ํ•ด ์ง€์†๊ฐ€๋Šฅํ•œ ์„ฑ๋Šฅ ์˜ต์…˜์„ ์ผœ์ฃผ์–ด, ๋ฐœ์—ด์„ ๋ฐฉ์ง€ํ•˜์ž (์ด๋กœ ์ธํ•ด ๊ธฐ๋ณธ์ ์ธ fps์˜ ํ•˜๋ฝ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Œ)


4. GPU์˜ ๋ณ‘๋ชฉ/๋ถ€ํ•˜๊ฐ€ ์ƒ๊ธฐ๋Š” Project Setting์˜ ์˜ต์…˜์€ ๋น„ํ™œ์„ฑํ™” ํ•˜์ž (Compute Skinning, Graphics Jobs...๋“ฑ)


5. Static Batching๊ณผ Dynamic batcing์„ ์ ๊ทน ํ™œ์šฉํ•˜์ž


6. Texture compression format : ASTC, normal map encoding : DXT5nm-style


7. Screen.SetResoultion์„ ํ†ตํ•ด ํ™”๋ฉด ํ•ด์ƒ๋„๋ฅผ ์ง€์ •ํ•ด์ฃผ์ž (HD~FHD). ์ด๋ฅผ ํ•ด์ฃผ์ง€ ์•Š์„ ๊ฒฝ์šฐ ๊ธฐ๊ธฐ์˜ ํ•ด์ƒ๋„์— ๋”ฐ๋ผ ๋ Œ๋”๋ง๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐœ์—ด๊ณผ ๋ฐฐํ„ฐ๋ฆฌ์†Œ๋ชจ์˜ ์›์ธ์ด๋œ๋‹ค.


8. Target Framerate๋ฅผ ์„ค์ •ํ•ด์ฃผ์ž (60fps). ๋งŒ์•ฝ ํ”„๋ ˆ์ž„์ƒํ•œ์ด ์—†๋‹ค๋ฉด ์ƒ์œ„ ๊ธฐ๊ธฐ์—์„  ๋น„์ •์ƒ์ ์œผ๋กœ ๋†’์€ fps๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ด๋Š” ๋ฐœ์—ด/๋ฐฐํ„ฐ๋ฆฌ์†Œ๋ชจ์˜ ์›์ธ์ด ๋  ์ˆ˜ ์žˆ๋‹ค.


9. realtime shadow๋Š” ์ตœ๋Œ€ํ•œ ํ”ผํ•˜๊ณ , ๋ˆˆ์†์ž„์„ ํ†ตํ•ด ๊ทธ๋ฆผ์ž๋ฅผ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ์ž

quad๋ฅผ ํ†ตํ•ด ๊ทธ๋ฆผ์ž๋ฅผ ํ‘œํ˜„ํ•˜๊ณ , ์ด quad๋ฅผ dynamic batcingํ•˜๋Š” ๋“ฑ์ด ๋ฐฉ๋ฒ•์ด๋‹ค.


10. ๊ฐ€๋Šฅํ•œ ๋งŽ์€ object pooling์„ ํ•ด์ฃผ์ž.ย 

๋˜ํ•œ NGUI๊ฐ์ฒด์˜ ๊ฒฝ์šฐ ๊ฐ์ฒด๋ฅผ pool์—์„œ ํšŒ์ˆ˜/๋ฐ˜ํ™˜ํ•  ๋•Œ gameObject.SetActive๋ณด๋‹จ ํ™”๋ฉด์— rendering๋˜์ง€ ์•Š๋Š” ๋จผ ์˜์—ญ์œผ๋กœ ์ขŒํ‘œ๋ฅผ ์ด๋™์‹œ์ผœ ์ฃผ๋Š”๊ฒƒ์ด ์ข‹์€ ์„ ํƒ์ง€์ผ ์ˆ˜ ์žˆ๋‹ค.

NGUI๊ฐ์ฒด๋Š” ์˜ค๋ธŒ์ ํŠธ๊ฐ€ enable/disable๋  ๋•Œ ๋งŽ์€ ๋ณ‘๋ชฉ์„ ์ผ์œผํ‚ค๋Š” ์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค


11. ๊ฑฐ๋ฆฌ์— ๋”ฐ๋ฅธ ์ตœ์ ํ™” ๋ฐฉ๋ฒ•์„ ์ˆ™์ง€ํ•˜๋ผ

Generate mipmap์€ ๊ธฐ๋ณธ์ ์„ texture์˜ ์šฉ๋Ÿ‰์„ 1.3๋ฐฐ ์ •๋„ ๋ถ€ํ’€๋ฆฐ๋‹ค.

๋‹จ ํ•œ ํ™”๋ฉด์— render๋˜๋Š” ๊ฐ์ฒด๊ฐ€ ๋งŽ์„ ๊ฒฝ์šฐ ์ด๋Š” ํ•œ ํ™”๋ฉด์˜ ๋ฉ”๋ชจ๋ฆฌ ๋ถ€ํ•˜๋ฅผ ์ค„์—ฌ์ฃผ๋ฏ€๋กœ ์ ๊ทน ํ™œ์šฉํ•ด์•ผํ•œ๋‹ค.


๋˜ํ•œ ์˜ค๋ธŒ์ ํŠธ์— LOD level์„ ์„ธํŒ…ํ•˜๋ฉด ๊ฑฐ๋ฆฌ์— ๋”ฐ๋ผ 3D์˜ค๋ธŒ์ ํŠธ์˜ ๋ Œ๋”๋ง ๋ถ€ํ•˜๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์ง€๋งŒ ์šฉ๋Ÿ‰์ด ์ถ”๊ฐ€์ ์œผ๋กœ ๋“ค์–ด๊ฐ€๋Š” ๊ฒƒ์„ ์œ ์˜ํ•ด์•ผ ํ•œ๋‹ค.


Aniso Level์„ ์ฃผ์˜ํ•ด๋ผ. Aniso Level์€ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๊ทธ๋ฆด ๋•Œ ๋‹จ์ผ ํ…์Šค์ณ๋ผ๋„ ๋ฉ€์–ด์ง€๋ฉด ํ๋ฆฌ๊ฒŒ ํ•ด์ฃผ๋Š” ํšจ๊ณผ์ด๋‹ค.

Aniso Level์ด ๋†’์„์ˆ˜๋ก ์„ ๋ช…ํ•ด์ง€๊ฒ ์ง€๋งŒ ,์ฒ˜๋ฆฌ๋น„์šฉ์ด ๋งŽ์ด ๋“ ๋‹ค.

ํ”„๋กœ์ ํŠธ ์„ธํŒ…์—์„œ ํ™•์ธํ•˜๋ผ (๊ธฐ๋ณธ๊ฐ’์€ Forced On์ด๋‹ค)


12. Asset์˜ Read/Write์˜ต์…˜์„ ์ฃผ์˜ํ•˜๋ผ

์ด ์˜ต์…˜์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋น„ํ™œ์„ฑํ™”์ง€๋งŒ ํ™œ์„ฑํ™” ์‹œ GPU๋ฉ”๋ชจ๋ฆฌ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ์—๋„ ๋ณต์‚ฌ๋˜๋ฏ€๋กœ ์†Œ๋น„๋Ÿ‰์ด 2๋ฐฐ๋กœ ์ฆ๊ฐ€ํ•œ๋‹ค.

๊ผญ ํ•„์š”ํ•œ ์˜ค๋ธŒ์ ํŠธ์˜ ๊ฒฝ์šฐ๋งŒ ์‹๋ณ„ํ•˜์—ฌ ์‚ฌ์šฉํ•  ๊ฒƒ


13. ํŒŒํ‹ฐํด์˜ shader/material์— ๋”ฐ๋ผ render order๋ฅผ ์กฐ์ •ํ•ด์ฃผ์–ด๋ผ.

NGUI์™€ ๊ฐ™์€ ๊ฐœ๋…์œผ๋กœ, ํŒŒํ‹ฐํด์—์„œ ์‚ฌ์šฉ๋˜๋Š” shader/material๋„ render order๋ฅผ ์กฐ์ •ํ•ด์ฃผ์–ด batching๋˜๋„๋ก ํ•ด์ฃผ์ž


14. Resources.Load๋ฅผ ๋งค๋‹ˆ์ง•ํ•˜์ž

๋””๋ฐ”์ด์Šค๋กœ ๋ถ€ํ„ฐ ๋ถˆ๋Ÿฌ์˜จ ์ž์›์˜ ๊ฒฝ์šฐ ์‚ฌ์šฉ ๋นˆ๋„์— ๋”ฐ๋ผ GC๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก ์ƒ์‹œ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๋“ค๊ณ ์žˆ๋Š” ๋“ฑ์˜ ๋ฐฉ๋ฒ•์œผ๋กœ ์ตœ์ ํ™” ํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค.


15. Debug.Log๋ฅผ ์ฃผ์˜ํ•ด๋ผ

๋Ÿฐํƒ€์ž„ ๋นŒ๋“œ ์‹œ ํ”„๋กœ์ ํŠธ ์„ธํŒ…์—์„œ ๋กœ๊น… ์˜ต์…˜์„ ์™„์ „ํžˆ ๋น„ํ™œ์„ฑํ™” ํ•˜๊ฑฐ๋‚˜, ์Šคํฌ๋ฆฝํŠธ์—์„œ define์œผ๋กœ ์ฒ˜๋ฆฌ๋ฅผ ๊ฒฉ๋ฆฌํ•ด์ฃผ์–ด๋ผ.


Unity Crash๊ด€๋ จ ํŒ

์ด ํ•ญ๋ชฉ์€ ํ•„์ž๊ฐ€ ์„œ๋น„์Šค์ค‘์ธ ๊ฒŒ์ž„์˜ ํฌ๋ž˜์‹œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ ๊ฒฝํ—˜์œผ๋กœ ์ž‘์„ฑ๋˜์—ˆ๊ธฐ์—, ์ง€๊ทนํžˆ ์ฃผ๊ด€์ ์ž…๋‹ˆ๋‹ค.


1. Androidํ™˜๊ฒฝ์—์„œ Vulkan API๋Š” ์•„์ง ๋ถˆ์•ˆ์ •ํ•˜๋‹ค. Vulkan๋‚ด๋ถ€์—์„œ native crash๋ฅผ ์•ผ๊ธฐํ•  ์ˆ˜ ์žˆ๋‹ค. (ํ•„์ž๋Š” opengles 3์„ ๊ถŒ์žฅ)


2. Multithread rendering๊ณผ compute skinning๋„ native crash๋ฅผ ์•ผ๊ธฐํ•  ์ˆ˜ ์žˆ๋‹ค.ย 


3. ๋นˆ๋ฒˆํ•œ Scene Load๋Š” ์žฆ์€ ํฌ๋ž˜์‹œ๋ฅผ ์•ผ๊ธฐํ•  ์ˆ˜ ์žˆ๋‹ค.

๋งต์˜ ์ „ํ™˜ ๋“ฑ์œผ๋กœ Scene์ด load๋  ๋•Œ ์ „ scene์˜ unload์™€ ์ƒˆ๋กœ์šด scene์˜ load์ค‘ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ unload๋œ scene์˜ ๊ฐ์ฒด ํ˜น์€ ์•„์ง preload์ƒํƒœ์˜ scene์— ์ ‘๊ทผํ•  ๊ฒฝ์šฐ ํฌ๋ž˜์‹œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.


์ถ”๊ฐ€์ ์œผ๋กœ, unity์˜ scene ๋กœ๋“œ ๊ตฌ์กฐ๋Š” ์ˆœ๊ฐ„์ ์œผ๋กœ ํญ๋ฐœ์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

A์žฅ๋ฉด์—์„œ B์žฅ๋ฉด์œผ๋กœ ๋„˜์–ด๊ฐˆ ๋•Œ A์žฅ๋ฉด๊ณผ B์žฅ๋ฉด์ด ๋™์‹œ์— ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ๊ฐ€์žˆ๋Š” ์ˆœ๊ฐ„์ด ์กด์žฌํ•˜๋ฉฐ ์ด ๋•Œ ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ์œผ๋กœ ํฌ๋ž˜์‹œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.


A์žฅ๋ฉด์—์„œ B์žฅ๋ฉด์œผ๋กœ ๋„˜๊ธธ ๋•Œ ๋นˆ ์žฅ๋ฉด(C)์„ ๋„ฃ์–ด A์žฅ๋ฉด์˜ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ชจ๋‘ ํ•ด์ œ๋˜๊ณ , GC๊ฐ€ Collect๋˜๊ฒŒ ํ•œ ํ›„ B์žฅ๋ฉด์„ ๋กœ๋“œํ•ด์ฃผ๋Š” ๋ฐฉ์‹์€ ์•„์ฃผ ์œ ์šฉํ•˜๋‹ค


4. Strip Engine Code์˜ต์…˜์€ ๋ฌด์กฐ๊ฑด ๋„์ž

์••์ถ•๋œ ์Šคํฌ๋ฆฝํŠธ dll์„ ์ฐธ์กฐํ•˜๋Š” ์ˆœ๊ฐ„ native crash๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค