๐ŸŽฎ Unity6 UI - Auto Layout

VIN'Spellsยท2025๋…„ 8์›” 12์ผ

์œ ๋‹ˆํ‹ฐ6

๋ชฉ๋ก ๋ณด๊ธฐ
8/12

๐Ÿ“Œ ๋ณธ ํฌ์ŠคํŒ…์€ Unity UI ๊ณต์‹ ๋งค๋‰ด์–ผ์˜ ๋‚ด์šฉ์„ ๋ฐ”ํƒ•์œผ๋กœ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์œ ๋‹ˆํ‹ฐ UI๋Š” ๊ฒŒ์ž„๊ณผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ฐœ๋ฐœํ•˜๊ธฐ ์œ„ํ•œ UI ํˆดํ‚ท์ž…๋‹ˆ๋‹ค. ์ด๋Š” ๊ฒŒ์ž„ ์˜ค๋ธŒ์ ํŠธ(GameObject) ๊ธฐ๋ฐ˜์˜ UI ์‹œ์Šคํ…œ์œผ๋กœ, ์ปดํฌ๋„ŒํŠธ(Components)์™€ ๊ฒŒ์ž„ ๋ทฐ(Game View)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋ฐฐ์น˜ํ•˜๊ณ , ์œ„์น˜๋ฅผ ์กฐ์ •ํ•˜๋ฉฐ, ์Šคํƒ€์ผ์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ”ฎ์ž๋™ ๋ ˆ์ด์•„์›ƒ(Auto Layout)

Rect Transform ๋ ˆ์ด์•„์›ƒ ์‹œ์Šคํ…œ์€ ์œ ์—ฐํ•˜์—ฌ ๋‹ค์–‘ํ•œ ๋ ˆ์ด์•„์›ƒ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ์ž์œ ๋กญ๊ฒŒ ์š”์†Œ๋ฅผ ๋ฐฐ์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž๋™ ๋ ˆ์ด์•„์›ƒ(Auto Layout) ์‹œ์Šคํ…œ์€ ์š”์†Œ๋“ค์„ ์ˆ˜ํ‰ ๊ทธ๋ฃน, ์ˆ˜์ง ๊ทธ๋ฃน, ๊ทธ๋ฆฌ๋“œ์™€ ๊ฐ™์€ ์ค‘์ฒฉ๋œ ๋ ˆ์ด์•„์›ƒ ๊ทธ๋ฃน์— ๋ฐฐ์น˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, ํฌํ•จ๋œ ์ฝ˜ํ…์ธ ์— ๋”ฐ๋ผ ์š”์†Œ์˜ ํฌ๊ธฐ๋ฅผ ์ž๋™์œผ๋กœ ์กฐ์ ˆํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ฒ„ํŠผ์˜ ํฌ๊ธฐ๋ฅผ ํ…์ŠคํŠธ ๋‚ด์šฉ๊ณผ ํŒจ๋”ฉ์— ์ •ํ™•ํžˆ ๋งž๊ฒŒ ๋™์ ์œผ๋กœ ์กฐ์ ˆํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž๋™ ๋ ˆ์ด์•„์›ƒ ์‹œ์Šคํ…œ์€ ๊ธฐ๋ณธ์ ์ธ Rect Transform ๋ ˆ์ด์•„์›ƒ ์‹œ์Šคํ…œ ์œ„์— ๊ตฌ์ถ•๋œ ์‹œ์Šคํ…œ์ด๋ฉฐ, ์ผ๋ถ€ ๋˜๋Š” ๋ชจ๋“  ์š”์†Œ์— ์„ ํƒ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ ˆ์ด์•„์›ƒ ์š”์†Œ(Layout Elements) ์ดํ•ดํ•˜๊ธฐ

์ž๋™ ๋ ˆ์ด์•„์›ƒ ์‹œ์Šคํ…œ์€ ๋ ˆ์ด์•„์›ƒ ์š”์†Œ(layout elements)์™€ ๋ ˆ์ด์•„์›ƒ ์ปจํŠธ๋กค๋Ÿฌ(layout controllers)๋ผ๋Š” ๊ฐœ๋…์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค.
๋ ˆ์ด์•„์›ƒ ์š”์†Œ๋Š” Rect Transform๊ณผ ์„ ํƒ์ ์œผ๋กœ ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ๋“ค์„ ๊ฐ€์ง„ ๊ฒŒ์ž„ ์˜ค๋ธŒ์ ํŠธ์ž…๋‹ˆ๋‹ค. ์ž์‹ ์ด ๊ฐ€์ ธ์•ผ ํ•  ํฌ๊ธฐ์— ๋Œ€ํ•œ ํŠน์ • ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
์ง์ ‘ ์ž์‹ ์˜ ํฌ๊ธฐ๋ฅผ ์„ค์ •ํ•˜์ง€ ์•Š์ง€๋งŒ, ๋ ˆ์ด์•„์›ƒ ์ปจํŠธ๋กค๋Ÿฌ ์—ญํ• ์„ ํ•˜๋Š” ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ๋“ค์ด ์ด ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์š”์†Œ์˜ ํฌ๊ธฐ๋ฅผ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.

๋ ˆ์ด์•„์›ƒ ์š”์†Œ์˜ ์†์„ฑ:

  • ์ตœ์†Œ ๋„ˆ๋น„(Minimum width)

  • ์ตœ์†Œ ๋†’์ด(Minimum height)

  • ์„ ํ˜ธ ๋„ˆ๋น„(Preferred width)

  • ์„ ํ˜ธ ๋†’์ด(Preferred height)

  • ์œ ์—ฐ ๋„ˆ๋น„(Flexible width)

  • ์œ ์—ฐ ๋†’์ด(Flexible height)

๋ ˆ์ด์•„์›ƒ ์š”์†Œ๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ ˆ์ด์•„์›ƒ ์ปจํŠธ๋กค๋Ÿฌ ์ปดํฌ๋„ŒํŠธ์˜ ์˜ˆ๋กœ๋Š” Content Size Fitter์™€ ๋‹ค์–‘ํ•œ Layout Group ์ปดํฌ๋„ŒํŠธ๋“ค์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋ ˆ์ด์•„์›ƒ ๊ทธ๋ฃน ๋‚ด์—์„œ ๋ ˆ์ด์•„์›ƒ ์š”์†Œ์˜ ํฌ๊ธฐ๊ฐ€ ๊ฒฐ์ •๋˜๋Š” ๊ธฐ๋ณธ์ ์ธ ์›์น™์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

  • ๋จผ์ € ์ตœ์†Œ ํฌ๊ธฐ๊ฐ€ ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค.

  • ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ณต๊ฐ„์ด ์ถฉ๋ถ„ํ•˜๋ฉด, ์„ ํ˜ธ ํฌ๊ธฐ๊ฐ€ ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค.

  • ์ถ”๊ฐ€์ ์ธ ์‚ฌ์šฉ ๊ฐ€๋Šฅ ๊ณต๊ฐ„์ด ์žˆ๋‹ค๋ฉด, ์œ ์—ฐ ํฌ๊ธฐ๊ฐ€ ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค.

Rect Transform์ด ์žˆ๋Š” ๋ชจ๋“  ๊ฒŒ์ž„ ์˜ค๋ธŒ์ ํŠธ๋Š” ๋ ˆ์ด์•„์›ƒ ์š”์†Œ๋กœ ๊ธฐ๋Šฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ์ตœ์†Œ, ์„ ํ˜ธ, ์œ ์—ฐ ํฌ๊ธฐ ๊ฐ’์ด 0์ž…๋‹ˆ๋‹ค. ํŠน์ • ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ฒŒ์ž„ ์˜ค๋ธŒ์ ํŠธ์— ์ถ”๊ฐ€ํ•˜๋ฉด ์ด๋Ÿฌํ•œ ๋ ˆ์ด์•„์›ƒ ์†์„ฑ๋“ค์ด ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค.

Image์™€ Text ์ปดํฌ๋„ŒํŠธ๋Š” ๋ ˆ์ด์•„์›ƒ ์š”์†Œ ์†์„ฑ์„ ์ œ๊ณตํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค. ์ด๋“ค์€ ์„ ํ˜ธ ๋„ˆ๋น„์™€ ๋†’์ด๋ฅผ ์Šคํ”„๋ผ์ดํŠธ ๋˜๋Š” ํ…์ŠคํŠธ ๋‚ด์šฉ์— ๋งž๊ฒŒ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

๋ ˆ์ด์•„์›ƒ ์š”์†Œ ์ปดํฌ๋„ŒํŠธ (Layout Element Component)

Minimum, Preferred, ๋˜๋Š” Flexible ํฌ๊ธฐ ๊ฐ’์„ ์žฌ์ •์˜ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, ๊ฒŒ์ž„ ์˜ค๋ธŒ์ ํŠธ์— Layout Element ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Layout Element ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ•˜๋‚˜ ์ด์ƒ์˜ ๋ ˆ์ด์•„์›ƒ ์†์„ฑ ๊ฐ’์„ ์žฌ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์žฌ์ •์˜ํ•˜๊ณ  ์‹ถ์€ ์†์„ฑ์˜ ์ฒดํฌ๋ฐ•์Šค๋ฅผ ํ™œ์„ฑํ™”ํ•˜๊ณ  ์›ํ•˜๋Š” ๊ฐ’์„ ์ง€์ •ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๋” ์ž์„ธํ•œ ์ •๋ณด๋Š” Layout Element ํŽ˜์ด์ง€๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

๋ ˆ์ด์•„์›ƒ ์ปจํŠธ๋กค๋Ÿฌ(Layout Controllers) ์ดํ•ดํ•˜๊ธฐ

๋ ˆ์ด์•„์›ƒ ์ปจํŠธ๋กค๋Ÿฌ๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ ๋ ˆ์ด์•„์›ƒ ์š”์†Œ(์ฆ‰, Rect Transform์ด ์žˆ๋Š” ๊ฒŒ์ž„ ์˜ค๋ธŒ์ ํŠธ)์˜ ํฌ๊ธฐ์™€ ์œ„์น˜๋ฅผ ์ œ์–ดํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ์ž…๋‹ˆ๋‹ค. ๋ ˆ์ด์•„์›ƒ ์ปจํŠธ๋กค๋Ÿฌ๋Š” ์ž์‹ ์˜ ๋ ˆ์ด์•„์›ƒ ์š”์†Œ๋ฅผ ์ œ์–ดํ•  ์ˆ˜๋„ ์žˆ๊ณ (์ž์‹ ์ด ๋ถ€์ฐฉ๋œ ๊ฒŒ์ž„ ์˜ค๋ธŒ์ ํŠธ), ์ž์‹ ๋ ˆ์ด์•„์›ƒ ์š”์†Œ๋ฅผ ์ œ์–ดํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ ˆ์ด์•„์›ƒ ์ปจํŠธ๋กค๋Ÿฌ ์—ญํ• ์„ ํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ๋Š” ๋™์‹œ์— ๋ ˆ์ด์•„์›ƒ ์š”์†Œ ์—ญํ• ๋„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฝ˜ํ…์ธ  ํฌ๊ธฐ ์กฐ์ ˆ (Content Size Fitter)

Content Size Fitter๋Š” ์ž์‹ ์˜ ๋ ˆ์ด์•„์›ƒ ์š”์†Œ์˜ ํฌ๊ธฐ๋ฅผ ์ œ์–ดํ•˜๋Š” ๋ ˆ์ด์•„์›ƒ ์ปจํŠธ๋กค๋Ÿฌ๋กœ ๊ธฐ๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์ž๋™ ๋ ˆ์ด์•„์›ƒ ์‹œ์Šคํ…œ์„ ๊ฐ€์žฅ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•์€ Text ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์žˆ๋Š” ๊ฒŒ์ž„ ์˜ค๋ธŒ์ ํŠธ์— Content Size Fitter ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Horizontal Fit ๋˜๋Š” Vertical Fit์„ Preferred๋กœ ์„ค์ •ํ•˜๋ฉด, Rect Transform์€ ํ…์ŠคํŠธ ๋‚ด์šฉ์— ๋งž์ถฐ ๋„ˆ๋น„ ๋ฐ/๋˜๋Š” ๋†’์ด๋ฅผ ์กฐ์ ˆํ•ฉ๋‹ˆ๋‹ค.

๋” ์ž์„ธํ•œ ์ •๋ณด๋Š” Content Size Fitter ํŽ˜์ด์ง€๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

์ข…ํšก๋น„ ์กฐ์ ˆ (Aspect Ratio Fitter)

Aspect Ratio Fitter๋Š” ์ž์‹ ์˜ ๋ ˆ์ด์•„์›ƒ ์š”์†Œ์˜ ํฌ๊ธฐ๋ฅผ ์ œ์–ดํ•˜๋Š” ๋ ˆ์ด์•„์›ƒ ์ปจํŠธ๋กค๋Ÿฌ๋กœ ๊ธฐ๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์ด ์ปดํฌ๋„ŒํŠธ๋Š” ๋„ˆ๋น„์— ๋งž์ถฐ ๋†’์ด๋ฅผ ์กฐ์ ˆํ•˜๊ฑฐ๋‚˜ ๊ทธ ๋ฐ˜๋Œ€๋กœ ์กฐ์ ˆํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์š”์†Œ๊ฐ€ ๋ถ€๋ชจ ์•ˆ์— ๋งž๊ฒŒ ๋“ค์–ด๊ฐ€๊ฑฐ๋‚˜ ๋ถ€๋ชจ๋ฅผ ๊ฐ์‹ธ๋„๋ก ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. Aspect Ratio Fitter๋Š” ์ตœ์†Œ ํฌ๊ธฐ๋‚˜ ์„ ํ˜ธ ํฌ๊ธฐ์™€ ๊ฐ™์€ ๋ ˆ์ด์•„์›ƒ ์ •๋ณด๋ฅผ ๊ณ ๋ คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋” ์ž์„ธํ•œ ์ •๋ณด๋Š” Aspect Ratio Fitter ํŽ˜์ด์ง€๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

๋ ˆ์ด์•„์›ƒ ๊ทธ๋ฃน (Layout Groups)

๋ ˆ์ด์•„์›ƒ ๊ทธ๋ฃน์€ ์ž์‹ ๋ ˆ์ด์•„์›ƒ ์š”์†Œ๋“ค์˜ ํฌ๊ธฐ์™€ ์œ„์น˜๋ฅผ ์ œ์–ดํ•˜๋Š” ๋ ˆ์ด์•„์›ƒ ์ปจํŠธ๋กค๋Ÿฌ๋กœ ๊ธฐ๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, Horizontal Layout Group์€ ์ž์‹๋“ค์„ ๋‚˜๋ž€ํžˆ ๋ฐฐ์น˜ํ•˜๊ณ , Grid Layout Group์€ ์ž์‹๋“ค์„ ๊ทธ๋ฆฌ๋“œ ํ˜•ํƒœ๋กœ ๋ฐฐ์น˜ํ•ฉ๋‹ˆ๋‹ค.

๋ ˆ์ด์•„์›ƒ ๊ทธ๋ฃน ์ž์ฒด๋Š” ์ž์‹ ์˜ ํฌ๊ธฐ๋ฅผ ์ œ์–ดํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋Œ€์‹ , ๋ ˆ์ด์•„์›ƒ ๊ทธ๋ฃน ์Šค์Šค๋กœ๊ฐ€ ๋ ˆ์ด์•„์›ƒ ์š”์†Œ๋กœ ๊ธฐ๋Šฅํ•˜๋ฉฐ, ๋‹ค๋ฅธ ๋ ˆ์ด์•„์›ƒ ์ปจํŠธ๋กค๋Ÿฌ์— ์˜ํ•ด ์ œ์–ด๋˜๊ฑฐ๋‚˜ ์ˆ˜๋™์œผ๋กœ ํฌ๊ธฐ๊ฐ€ ์„ค์ •๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ ˆ์ด์•„์›ƒ ๊ทธ๋ฃน์— ํ• ๋‹น๋œ ํฌ๊ธฐ๊ฐ€ ์–ผ๋งˆ๋“  ๊ฐ„์—, ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ์ž์‹ ๋ ˆ์ด์•„์›ƒ ์š”์†Œ๋“ค์ด ๋ณด๊ณ ํ•œ ์ตœ์†Œ, ์„ ํ˜ธ, ์œ ์—ฐ ํฌ๊ธฐ ์ •๋ณด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐ ์ž์‹์—๊ฒŒ ์ ์ ˆํ•œ ๊ณต๊ฐ„์„ ํ• ๋‹นํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์œผ๋กœ ๋ ˆ์ด์•„์›ƒ ๊ทธ๋ฃน์€ ์›ํ•˜๋Š” ๋งŒํผ ์ค‘์ฒฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋” ์ž์„ธํ•œ ์ •๋ณด๋Š” Horizontal Layout Group, Vertical Layout Group, Grid Layout Group ํŽ˜์ด์ง€๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

์ œ์–ด๋˜๋Š” Rect Transform ์†์„ฑ (Driven Rect Transform properties)

์ž๋™ ๋ ˆ์ด์•„์›ƒ ์‹œ์Šคํ…œ์˜ ๋ ˆ์ด์•„์›ƒ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ํŠน์ • UI ์š”์†Œ์˜ ํฌ๊ธฐ์™€ ๋ฐฐ์น˜๋ฅผ ์ž๋™์œผ๋กœ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.์ˆ˜๋™์œผ๋กœ ๋ณ€๊ฒฝ๋œ ๊ฐ’์€ ๋‹ค์Œ ๋ ˆ์ด์•„์›ƒ ๊ณ„์‚ฐ ์‹œ ๋ ˆ์ด์•„์›ƒ ์ปจํŠธ๋กค๋Ÿฌ์— ์˜ํ•ด ๋‹ค์‹œ ์›๋ž˜๋Œ€๋กœ ์ดˆ๊ธฐํ™”๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Ÿฌํ•œ ํฌ๊ธฐ ๋ฐ ์œ„์น˜ ๊ฐ’์€ ์ธ์ŠคํŽ™ํ„ฐ๋‚˜ ์”ฌ ๋ทฐ์—์„œ ๋™์‹œ์— ์ˆ˜๋™์œผ๋กœ ํŽธ์ง‘ํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค.

Rect Transform์—๋Š” ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ '์ œ์–ด๋˜๋Š” ์†์„ฑ(driven properties)'์ด๋ผ๋Š” ๊ฐœ๋…์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, Horizontal Fit ์†์„ฑ์ด Minimum ๋˜๋Š” Preferred๋กœ ์„ค์ •๋œ Content Size Fitter๋Š” ๋™์ผํ•œ ๊ฒŒ์ž„ ์˜ค๋ธŒ์ ํŠธ์˜ Rect Transform ๋„ˆ๋น„๋ฅผ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ ๋„ˆ๋น„๋Š” ์ฝ๊ธฐ ์ „์šฉ์œผ๋กœ ํ‘œ์‹œ๋˜๋ฉฐ, Rect Transform ์ƒ๋‹จ์˜ ์ž‘์€ ์ •๋ณด ์ƒ์ž๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ ์†์„ฑ์ด Content Size Fitter์— ์˜ํ•ด ์ œ์–ด๋˜๊ณ  ์žˆ์Œ์„ ์•Œ๋ ค์ค๋‹ˆ๋‹ค.

์ œ์–ด๋˜๋Š” Rect Transform ์†์„ฑ์€ ์ˆ˜๋™ ํŽธ์ง‘์„ ๋ง‰๋Š” ๊ฒƒ ์™ธ์— ๋‹ค๋ฅธ ์ด์œ ๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ฒŒ์ž„ ๋ทฐ์˜ ํ•ด์ƒ๋„๋‚˜ ํฌ๊ธฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋„ ๋ ˆ์ด์•„์›ƒ์ด ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด๋Š” ๋ ˆ์ด์•„์›ƒ ์š”์†Œ์˜ ํฌ๊ธฐ๋‚˜ ๋ฐฐ์น˜๋ฅผ ๋ณ€๊ฒฝ์‹œํ‚ค๊ณ , ๊ฒฐ๊ณผ์ ์œผ๋กœ ์ œ์–ด๋˜๋Š” ์†์„ฑ์˜ ๊ฐ’์„ ๋ฐ”๊พธ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ฒŒ์ž„ ๋ทฐ ํฌ๊ธฐ๊ฐ€ ์กฐ์ ˆ๋˜์—ˆ๋‹ค๋Š” ์ด์œ ๋งŒ์œผ๋กœ ์”ฌ์ด ์ €์žฅ๋˜์ง€ ์•Š์€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์žˆ๋‹ค๊ณ  ํ‘œ์‹œ๋˜๋Š” ๊ฒƒ์€ ๋ฐ”๋žŒ์งํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด, ์ œ์–ด๋˜๋Š” ์†์„ฑ์˜ ๊ฐ’์€ ์”ฌ์˜ ์ผ๋ถ€๋กœ ์ €์žฅ๋˜์ง€ ์•Š์œผ๋ฉฐ, ์ด ๊ฐ’์˜ ๋ณ€๊ฒฝ์€ ์”ฌ์ด ๋ณ€๊ฒฝ๋œ ๊ฒƒ์œผ๋กœ ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ธฐ์ˆ ์  ์„ธ๋ถ€ ์‚ฌํ•ญ (Technical Details)

์ž๋™ ๋ ˆ์ด์•„์›ƒ ์‹œ์Šคํ…œ์—๋Š” ๋‚ด์žฅ๋œ ์ปดํฌ๋„ŒํŠธ๋“ค์ด ์žˆ์ง€๋งŒ, ์ƒˆ๋กœ์šด ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค์–ด ์‚ฌ์šฉ์ž ์ •์˜ ๋ฐฉ์‹์œผ๋กœ ๋ ˆ์ด์•„์›ƒ์„ ์ œ์–ดํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ž๋™ ๋ ˆ์ด์•„์›ƒ ์‹œ์Šคํ…œ์ด ์ธ์‹ํ•˜๋Š” ํŠน์ • ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๊ตฌํ˜„ํ•˜๋„๋ก ํ•จ์œผ๋กœ์จ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.

๋ ˆ์ด์•„์›ƒ ์ธํ„ฐํŽ˜์ด์Šค (Layout Interfaces)

ILayoutElement ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ ํŠน์ง•:

  • ์ž๋™ ๋ ˆ์ด์•„์›ƒ ์‹œ์Šคํ…œ์— ์˜ํ•ด ๋ ˆ์ด์•„์›ƒ ์š”์†Œ๋กœ ์ทจ๊ธ‰๋ฉ๋‹ˆ๋‹ค.

  • ์ž์‹๋“ค์˜ Rect Transform์„ ์ œ์–ดํ•˜๋„๋ก ๊ธฐ๋Œ€๋ฉ๋‹ˆ๋‹ค.

  • ์ž์‹ ์˜ RectTransform์„ ์ œ์–ดํ•˜๋„๋ก ๊ธฐ๋Œ€๋ฉ๋‹ˆ๋‹ค.

๋ ˆ์ด์•„์›ƒ ๊ณ„์‚ฐ (Layout Calculations)

์ž๋™ ๋ ˆ์ด์•„์›ƒ ์‹œ์Šคํ…œ์€ ๋‹ค์Œ ์ˆœ์„œ๋กœ ๋ ˆ์ด์•„์›ƒ์„ ํ‰๊ฐ€ํ•˜๊ณ  ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค:

  1. ILayoutElement ์ปดํฌ๋„ŒํŠธ์˜ CalculateLayoutInputHorizontal์„ ํ˜ธ์ถœํ•˜์—ฌ ๋ ˆ์ด์•„์›ƒ ์š”์†Œ์˜ ์ตœ์†Œ, ์„ ํ˜ธ, ์œ ์—ฐ ๋„ˆ๋น„๊ฐ€ ๊ณ„์‚ฐ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ํ•˜์œ„-์ƒ์œ„(bottom-up) ์ˆœ์„œ๋กœ ์ˆ˜ํ–‰๋˜๋Š”๋ฐ, ๋ถ€๋ชจ๊ฐ€ ์ž์‹์˜ ์ •๋ณด๋ฅผ ๊ณ„์‚ฐ์— ๊ณ ๋ คํ•  ์ˆ˜ ์žˆ๋„๋ก ์ž์‹์ด ๋จผ์ € ๊ณ„์‚ฐ๋ฉ๋‹ˆ๋‹ค.

  2. ILayoutController ์ปดํฌ๋„ŒํŠธ์˜ SetLayoutHorizontal์„ ํ˜ธ์ถœํ•˜์—ฌ ๋ ˆ์ด์•„์›ƒ ์š”์†Œ์˜ ์œ ํšจ ๋„ˆ๋น„๊ฐ€ ๊ณ„์‚ฐ๋˜๊ณ  ์„ค์ •๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ƒ์œ„-ํ•˜์œ„(top-down) ์ˆœ์„œ๋กœ ์ˆ˜ํ–‰๋˜๋Š”๋ฐ, ์ž์‹ ๋„ˆ๋น„ ํ• ๋‹น์€ ๋ถ€๋ชจ์˜ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ „์ฒด ๋„ˆ๋น„๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๋ถ€๋ชจ๊ฐ€ ๋จผ์ € ๊ณ„์‚ฐ๋ฉ๋‹ˆ๋‹ค. ์ด ๋‹จ๊ณ„๊ฐ€ ๋๋‚˜๋ฉด ๋ ˆ์ด์•„์›ƒ ์š”์†Œ์˜ Rect Transform์€ ์ƒˆ๋กœ์šด ๋„ˆ๋น„๋ฅผ ๊ฐ–๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

  3. ILayoutElement ์ปดํฌ๋„ŒํŠธ์˜ CalculateLayoutInputVertical์„ ํ˜ธ์ถœํ•˜์—ฌ ๋ ˆ์ด์•„์›ƒ ์š”์†Œ์˜ ์ตœ์†Œ, ์„ ํ˜ธ, ์œ ์—ฐ ๋†’์ด๊ฐ€ ๊ณ„์‚ฐ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋‹ค์‹œ ํ•˜์œ„-์ƒ์œ„ ์ˆœ์„œ๋กœ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค.

  4. ILayoutController ์ปดํฌ๋„ŒํŠธ์˜ SetLayoutVertical์„ ํ˜ธ์ถœํ•˜์—ฌ ๋ ˆ์ด์•„์›ƒ ์š”์†Œ์˜ ์œ ํšจ ๋†’์ด๊ฐ€ ๊ณ„์‚ฐ๋˜๊ณ  ์„ค์ •๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋‹ค์‹œ ์ƒ์œ„-ํ•˜์œ„ ์ˆœ์„œ๋กœ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค.

์œ„ ๊ณผ์ •์„ ํ†ตํ•ด ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด, ์ž๋™ ๋ ˆ์ด์•„์›ƒ ์‹œ์Šคํ…œ์€ ๋„ˆ๋น„๋ฅผ ๋จผ์ € ํ‰๊ฐ€ํ•œ ๋‹ค์Œ ๋†’์ด๋ฅผ ํ‰๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ณ„์‚ฐ๋œ ๋†’์ด๋Š” ๋„ˆ๋น„์— ์˜์กดํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๊ณ„์‚ฐ๋œ ๋„ˆ๋น„๋Š” ์ ˆ๋Œ€ ๋†’์ด์— ์˜์กดํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋ ˆ์ด์•„์›ƒ ์žฌ๊ตฌ์ถ•(Layout Rebuild) ํŠธ๋ฆฌ๊ฑฐํ•˜๊ธฐ

์ปดํฌ๋„ŒํŠธ์˜ ์†์„ฑ์ด ๋ณ€๊ฒฝ๋˜์–ด ํ˜„์žฌ ๋ ˆ์ด์•„์›ƒ์ด ๋” ์ด์ƒ ์œ ํšจํ•˜์ง€ ์•Š๊ฒŒ ๋˜๋ฉด, ๋ ˆ์ด์•„์›ƒ์„ ๋‹ค์‹œ ๊ณ„์‚ฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋‹ค์Œ ํ˜ธ์ถœ์„ ์‚ฌ์šฉํ•˜์—ฌ ํŠธ๋ฆฌ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:


LayoutRebuilder.MarkLayoutForRebuild(transform as RectTransform);

์žฌ๊ตฌ์ถ•์€ ์ฆ‰์‹œ ๋ฐœ์ƒํ•˜์ง€ ์•Š๊ณ , ํ˜„์žฌ ํ”„๋ ˆ์ž„์ด ๋๋‚˜๋Š” ์‹œ์ , ์ฆ‰ ๋ Œ๋”๋ง ์ง์ „์— ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰์‹œ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ๊ฐ™์€ ํ”„๋ ˆ์ž„ ๋‚ด์—์„œ ๋ ˆ์ด์•„์›ƒ์ด ์—ฌ๋Ÿฌ ๋ฒˆ ์žฌ๊ตฌ์ถ•๋  ์ˆ˜ ์žˆ์–ด ์„ฑ๋Šฅ์— ์ข‹์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์žฌ๊ตฌ์ถ•์„ ํŠธ๋ฆฌ๊ฑฐํ•ด์•ผ ํ•˜๋Š” ์‹œ์ ์— ๋Œ€ํ•œ ๊ฐ€์ด๋“œ๋ผ์ธ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

๋ ˆ์ด์•„์›ƒ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ์†์„ฑ์˜ setter์—์„œ.

๋‹ค์Œ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋“ค์—์„œ:

  • OnEnable

  • OnDisable

  • OnRectTransformDimensionsChange

  • OnValidate (์—๋””ํ„ฐ์—์„œ๋งŒ ํ•„์š”, ๋Ÿฐํƒ€์ž„์—๋Š” ๋ถˆํ•„์š”)

  • OnDidApplyAnimationProperties

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