GUI overview - kuimoani/defold GitHub Wiki
Defold๋ ์ ์ ์ธํฐํ์ด์ค์ ๊ตฌ์ฑ๊ณผ ๊ตฌํ์ ์ํด ๋ง์ถคํ ์ปค์คํ GUI ์๋ํฐ์ ๊ฐ๋ ฅํ ์คํฌ๋ฆฝํ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ์ด ๋งค๋ด์ผ์ ์ด๋ฌํ ๊ธฐ๋ฅ์ ์ค๋ช ํฉ๋๋ค.
Defold์ ๊ทธ๋ํฝ ์ ์ ์ธํฐํ์ด์ค(graphical user interface)๋ ์ปฌ๋ ์ ์ ๋ฐฐ์น๋ ๊ฒ์ ์ค๋ธ์ ํธ์ ์ฒจ๋ถํ๋ ๊ฒ์ ์ค๋ธ์ ํธ ์ปดํฌ๋ํธ์ ๋๋ค. ์ด ์ปดํฌ๋ํธ๋ ์๋์ ํ๋กํผํฐ๋ค์ ๊ฐ์ง๋๋ค.
- ์ ์ ์ธํฐํ์ด์ค์ ํด์๋(resolution)์ ์ข ํก๋น(aspect ratio)๋ฅผ ๋ ๋ฆฝ์ ์ผ๋ก ๋ ๋๋งํ๋ ๊ฐ๋จํ์ง๋ง ๊ฐ๋ ฅํ ๋ ์ด์์ ๊ธฐ๋ฅ
- gui ์คํฌ๋ฆฝํธ๋ฅผ ํตํ์ฌ ๋ ผ๋ฆฌ ๋์(logic behavior)์ ์ฐ๊ฒฐํ ์ ์์
- ๊ฒ์์ ํ๋ ์ด ํ๋ฉด๊ณผ๋ ๋ณ๋๋ก ์ปจํ ์ธ ์์ชฝ(on top)์์ ๋ ๋๋ง๋จ
- ์นด๋ฉ๋ผ ๋ทฐ๊ฐ ๋ ๋ฆฝ์ ์ธ ํ๋ฉด ๊ณต๊ฐ์ ์ขํ ์์คํ (screen-space coordinate system)์ ๋ง์ถฐ ๋ ๋๋ง๋๋ฉฐ, ์นด๋ฉ๋ผ๋ฅผ ์์ง์ด๋๋ผ๋ GUI ์์๋ ํ๋ฉด์ ๊ทธ๋๋ก ์ ์ง๋จ
GUI๋ ์ปฌ๋ ์ ์ ์ขํ๊ณ์ ์ํ์ง ์๊ณ , ๊ฒ์ ๋ทฐ์๋ ๋ ๋ฆฝ์ ์ผ๋ก ๋ ๋๋ง ๋ฉ๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ GUI๋ฅผ ์ปฌ๋ ์ ์๋ํฐ์์ ํน์ ์์น์ ๋ฐฐ์นํ ์ ์์ผ๋ฉฐ ์๊ฐ์ ํํ(visual representation)์ ๊ฐ์ง์ง๋ ์์ต๋๋ค. ํ์ง๋ง GUI ์ปดํฌ๋ํธ๋ ์ปฌ๋ ์ ์ ์์นํ ๊ฒ์์ค๋ธ์ ํธ์ ์์ฃผํด์ผ ํฉ๋๋ค. ๊ฒ์ ์ค๋ธ์ ํธ์ ์์น๋ฅผ ๋ฐ๊ฟ๋ GUI์๋ ์ํฅ์ ๋ฏธ์น์ง ์์ต๋๋ค.
๋ ๋๋ง ๋์์ ๋ ๋ ์คํฌ๋ฆฝํธ์์ ๋ณ๊ฒฝํ ์ ์์ง๋ง ์ผ๋ฐ์ ์ผ๋ก ํ๋ฉด์ ํน์ ์ง์ ์ HUD ํญ๋ชฉ๊ณผ ๋ฉ๋ด๊ฐ ํ์ํ๊ธฐ ๋๋ฌธ์ ์ ์ ์ธํฐํ์ด์ค๋ ๊ฒ์ ๋ทฐ์ ์์(top)์ ๋ณ๋์ ์๊ฐ์ ํํ์ธ "๋ ์ด์ด(layer)"๋ฅผ ์ฌ์ฉํ์ฌ ์ ๋ ฌ(arrangement)ํ๋ ๊ฒ์ด ๋ฐ๋์ง ํฉ๋๋ค.
GUI ์ปดํฌ๋ํธ๋ ์ฌ๋ฌ ๊ฐ์ ๋ ธ๋๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ๋ ธ๋๋ ์๋ ํญ๋ชฉ์ ํด๋นํ๋ ์๊ฐ์ ์ค๋ธ์ ํธ์ ๋๋ค.
- Box node, ์ฌ๊ฐํ์ ์์์ด๋ ํ ์ค์ณ๋ก ์ฑ์์ง
- Text node, ์์ธํ ๊ฒ์ Text nodes ๋ฌธ์ ์ฐธ๊ณ
- Pie node, ์์ธํ ๊ฒ์ Pie nodes ๋ฌธ์ ์ฐธ๊ณ
- Template node, ์์ธํ ๊ฒ์ Template nodes ๋ฌธ์ ์ฐธ๊ณ
- Spine node, ์์ธํ ๊ฒ์ Spine nodes ๋ฌธ์ ์ฐธ๊ณ
๋ ธ๋๋ ๋จ์ํ๊ณ ์ด๋ ํ ๋ก์ง๋ ํฌํจํ๊ณ ์์ง ์์ต๋๋ค. ์๋ํฐ์์์๋ ๋ฐํ์์ ์คํฌ๋ฆฝํธ๋ฅผ ํตํ์ฌ ์ด๋(translate or move)ํ๊ฑฐ๋ ๋ถ-๋ชจ ๊ด๊ณ๋ฅผ ์ ๋ ฌ(order)์ํฌ ์๋ ์์ต๋๋ค. ์คํฌ๋ฆฝํธ ์ฝ๋๋ก GUI ์ปดํฌ๋ํธ์ ๋ชจ๋ ๋ ธ๋๋ค์๊ฒ ์ง์ ์ ์ผ๋ก ์ก์ธ์ค ํ ์ ์์ต๋๋ค. ๋ ธ๋๋ ์คํฌ๋ฆฝํธ๋ก ์ ๋๋ฉ์ด์ ์ํฌ ์ ์๊ณ (์๋ Property animation ์ฐธ๊ณ ) ์ ๋๋ฉ์ด์ ์ ๋ ธ๋์์ ์คํ๋ ์ ์์ต๋๋ค(Box node์ ํ๋ฆฝ๋ถ(flipbook) ์ ๋๋ฉ์ด์ ๊ทธ๋ฆฌ๊ณ Spine node์ ๋ณธ(bone) ์ ๋๋ฉ์ด์ ).
"Nodes" ํด๋์์ ๋ง์ฐ์ค ์ค๋ฅธ์ชฝ ๋ฒํผ์ ๋๋ฌ "Add Box", "Add Text", "Add Pie", "Add Template", "Add Spine Node" ์ค ํ๋๋ฅผ ์ ํํด ๋ ธ๋๋ฅผ ์ถ๊ฐํฉ๋๋ค.
์๋จ์ GUI ๋ฉ๋ด๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ํค๋ณด๋ ๋จ์ถํค "I" ์ "O"๋ฅผ ์ฌ์ฉํ์ฌ box๋ text ๋ ธ๋๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค. ๋ฐฐ์น๋ ๋ ธ๋๋ ๊ฒ์ ์ค๋ธ์ ํธ๋ฅผ ์์ง์ด๋ ๊ฒ๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ์ปฌ๋ ์ ์๋ํฐ์์์ ์ด๋ํ๊ณ ํ์ ์ํฌ ์ ์์ต๋๋ค.
๊ฐ ๋ ธ๋์๋ ์ด๋ค์ ์ธํ(appearance)์ ์ ์ดํ๋ ๋ง์ ํ๋กํผํฐ๊ฐ ์์ต๋๋ค.
- Position, Rotation, Scale, Size (์ ๋๋ฉ์ด์ ์ ์ฉ ๊ฐ๋ฅ)
- Color, Outline, Shadow (์ ๋๋ฉ์ด์ ์ ์ฉ ๊ฐ๋ฅ)
- Blend mode
- Adjust mode, Pivot, Xanchor, Yanchor
- Font, Text, Line-break (text node ์ ์ฉ)
- Index, Layer, Parent
- Clipping (box node์ pie node ์ ์ฉ) (์์ธํ ๊ฒ์ Clipping ์ฐธ๊ณ )
์ด๋ค ํ๋กํผํฐ๋ ์๋ํฐ์ ํ๋กํผํฐ ํญ์์ ์์ (์ธ๋ฑ์ค(index) ์ค์ ๊ณผ ๋ถ๋ชจ๊ด๊ณ(parenting) ์ค์ ์ ์๋จ)ํ๊ฑฐ๋ ์คํฌ๋ฆฝํธ๋ฅผ ํตํด ์์ (GUI API ์ฐธ๊ณ )ํ๋ ๊ฒ์ด ๊ฐ๋ฅํฉ๋๋ค.
์ด๋ค ๊ฐ ํ๋กํผํฐ๋ ์คํฌ๋ฆฝํธ๋ฅผ ํตํด ์ ๋๋ฉ์ด์ ์ ์ ์ฉํ ์๋ ์์ต๋๋ค. (์๋ Property animation ์ฐธ๊ณ )
GUI ์ธํฐํ์ด์ค ์ปดํฌ๋ํธ์ ์ผ๋ถ๋ถ์ผ๋ก ํ ์ค์ณ ์ํ๋ผ์ค๋ ํ์ผ ์์ค์ ์ด๋ฏธ์ง๋ ์ ๋๋ฉ์ด์ ์ ์ฌ์ฉ ํ ์ ์์ต๋๋ค. ๋จผ์ ์ด๋ฏธ์ง ๋ฆฌ์์ค(์ํ๋ผ์ค ํน์ ํ์ผ ์์ค)๊ฐ ์ถ๊ฐํ๋ฉด ์ด ๋ฆฌ์์ค์ ํฌํจ๋ ๋ชจ๋ ์ด๋ฏธ์ง์ ์ ๋๋ฉ์ด์ ์ GUI ๋ ธ๋์ ๋ฐ์ํ ์ ์์ต๋๋ค. ์๋จ์ "GUI" ๋ฉ๋ด๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ํค๋ณด๋ ๋จ์ถํค๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ "Textures" ํด๋์ ๋ง์ฐ์ค ์ค๋ฅธ์ชฝ ๋ฒํผ์ ๋๋ฌ์ ํ ์ค์ณ๋ฅผ ์ถ๊ฐํด ๋ณด์ธ์.
GUI์ ์ถ๊ฐ๋ ํ ์ค์ณ๋ box๋ pie ๋ ธ๋์ ๋ฐ์ํ ์ ์์ต๋๋ค.
์ ํ๋ ํ ์ค์ณ ์ ๋๋ฉ์ด์ (ํน์ ์ฑ๊ธ ํ๋ ์ ์ด๋ฏธ์ง)์ GUI ์ปดํฌ๋ํธ๊ฐ ํ๋ฉด์ ๊ทธ๋ ค์ง๋ฉด ์๋์ ์ผ๋ก ์ฌ์๋ฉ๋๋ค.
box ๋ ธ๋์ ์์ ์ ๋๋ฉ์ด์ ์ ์์กฐ๋ฅผ ์กฐ์ (tint)ํฉ๋๋ค. ์์กฐ(tint color)๋ ์ด๋ฏธ์ง ๋ฐ์ดํฐ์ ๊ณฑํด์ง๊ฒ ๋๋๋ฐ, ์ฆ ํฐ์(๊ธฐ๋ณธ๊ฐ)์ผ๋ก ์ค์ ํ๋ฉด ์์กฐ๊ฐ ์ ์ฉ๋์ง ์์ต๋๋ค.
Box ๋ ธ๋๋ ํ ์ค์ณ๊ฐ ํ ๋น๋์ง ์์๊ฑฐ๋ ์ํ๊ฐ์ด 0์ด๊ฑฐ๋ ์ฌ์ด์ฆ๊ฐ 0,0,0์ด์ด๋ ํญ์ ๋ ๋๋ง ๋ฉ๋๋ค. Box ๋ ธ๋๋ ํ ์ค์ณ๋ฅผ ํญ์ ํ ๋นํด ๋๋ ๊ฒ์ด ์ข์ต๋๋ค. ๋ง์ฝ ๋น(empty) ๋ ธ๋๊ฐ ํ์ํ๋ค๋ฉด ํ ์ค์ณ๋ฅผ ํ ๋นํด ๋ ์ฑ ์ฌ์ด์ฆ๋ฅผ 0,0,0 ์ผ๋ก ์ค์ ํ์ญ์์ค.
๋ง์ GUI์ HUD๋ ํฌ๊ธฐ์ ๊ด๋ จํ ๋ฏผ๊ฐํ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ํจ๋๊ณผ ๋ค์ด์ผ๋ก๊ทธ๋ ํฌํจ๋ ์ปจํ ์ธ ์ ํฌ๊ธฐ์ ๋ง๊ฒ ๋ฆฌ์ฌ์ด์ฆํ ํ์๊ฐ ์ข ์ข ์๋๋ฐ, ํ ์ค์ณ๋ฅผ ์ค์ผ์ผ๋ ๋ ธ๋์ ๋ฐ์ํ ๊ฒฝ์ฐ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๋ฒํผ์ ์์ฑํ ํ ์คํธ์ ๊ธธ์ด ๋งํผ ๋์ด๊ฐ ๊ณ ์ ๋ ํฐ ๋ฒํผ์ ์ฌ์ฉํ๋ ค ํ๋ค๊ณ ์นฉ์๋ค. Box ๋ ธ๋๋ฅผ ๋ง๋ค์ด ํ ์ค์ณ๋ฅผ ๋ฐ์ํ๊ณ ์ค์ผ์ผ์ ๋ณ๊ฒฝํ๋ฉด ์๋์ ๊ฐ์ด ๋ฉ๋๋ค.
Defold๋ ์ด ๊ฐ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด slice-9 texturing ์ด๋ผ๋ ๊ธฐ๋ฅ์ ํฌํจํ๊ณ ์์ต๋๋ค. ์ด ๊ธฐ๋ฅ์ ๋ ธ๋์ ์ค์ผ์ผ์ด ๋ณ๊ฒฝ๋ ๋ ๋ ธ๋ ํ ์ค์ณ ์ผ๋ถ๋ถ์ ์ฌ์ด์ฆ๋ฅผ ์ ์งํด ์ค๋๋ค. ์ด๋ฅผ ๋ ธ๋์ ๋ฐ์ํ๋ฉด ๋ฒํผ ํ ์ค์ณ๋ ์กฐ๊ฐ๋๊ฒ ๋๊ณ ๋ฒํผ ๋ ธ๋์ ๊ฐ๋ก ์ฌ์ด์ฆ๋ฅผ ๋ณ๊ฒฝํด๋ ์ ๋์ ๋ถ๋ถ์ ์ค์ผ์ผ ๋์ง ์์ต๋๋ค.
๋ฐ๋ผ์ ์ด ๊ฐ๋จํ ํ ํฌ๋์ ์ฌ์ฉํ๋ฉด ์ด๋ ํ ๋์ด์ ๋ฒํผ๋ ์์๊ฒ ๋ง๋ค ์ ์์ต๋๋ค. box ๋ ธ๋์ Slice9 ํ๋กํผํฐ๋ ํ ์ค์ณ๋ฅผ ์ด๋ป๊ฒ ์๋ผ๋ผ(slice) ๊ฒ์ธ์ง๋ฅผ ์ ์ดํฉ๋๋ค.
Slice9๋ ๋ ธ๋๊ฐ ๋ฆฌ์ฌ์ด์ง ๋ ๋ ๊ณ ์ ํ ๋ง์ง ๋์ด(margin width)๋ฅผ ์ง์ ํ๋ ํฝ์ ๋จ์์ 4๊ฐ ์ซ์๋ก ์ ์ดํฉ๋๋ค. ๋ชจ์๋ฆฌ ๋ถ๋ถ(corner segments)์ ์ค์ผ์ผ ๋์ง ์๊ณ ์ด๋๋ง ๋๋ฉฐ, ๊ฐ์ฅ์๋ฆฌ ๋ถ๋ถ(edge segments)์ ํ๋์ ์ถ(axis)์ ๋ฐ๋ผ ์ค์ผ์ผ ๋๊ณ , ์ค์ ๋ถ๋ถ(center segment)์ ๊ฐ๋ก์ธ๋ก ๋ ๋ค ์ค์ผ์ผ ๋ฉ๋๋ค. ์ด ๋ง์ง๊ฐ์ ์ผ์ชฝ ๋ถํฐ ์๊ณ ๋ฐฉํฅ์ผ๋ก ์ค์ ๋ฉ๋๋ค.
๋ ๋๋ฌ์์ ๋ฐ๋งต(mipmap)์ด ์๋ํ๋ ๋ฐฉ์ ๋๋ฌธ์, ํ ์ค์ณ ์ธ๊ทธ๋จผํธ(texture segments)์ ์ค์ผ์ผ๋ง์ ๋๋ก ์ด์ํ๊ฒ ๋ณด์ผ ์๋ ์์ต๋๋ค. ์ด๋ ์๋์ ํ ์ค์ณ ์ฌ์ด์ฆ๋ณด๋ค ์๊ฒ ์ธ๊ทธ๋จผํธ์ ์ค์ผ์ผ์ ์ค์ด๋ ๊ฒฝ์ฐ ๋ฐ์ํ๋ฏ๋ก ๋ ๋๋ฌ๋ ์ธ๊ทธ๋จผํธ๋ฅผ ์ํ ๋ฎ์ ํด์๋์ ๋ฐ๋งต์ ์ ํํ์ฌ ์ด์ํ์์ ํด๊ฒฐํฉ๋๋ค.
์ด ๋ฌธ์ ๋ฅผ ํผํ๋ ๊ฒ์ ์ฝ์ต๋๋ค. ์๋ณธ ํ ์ค์ณ(source texture)์์ ์ค์ผ์ผ ํ ์์ญ(segment)์ ๋ ์ด์ ์ค์ผ์ผ ๋ค์ด์ด ๋ถ๊ฐ๋ฅํ๊ณ ์ค๋ก์ง ์ค์ผ์ผ ์ ๋ง ๊ฐ๋ฅํ๊ฒ๋ ์ถฉ๋ถํ ์๊ฒ ๋ง๋ค๋ฉด ๋ฉ๋๋ค.
ํ ์ค์ณ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ์ฝํ๊ธฐ ์ํด์๋ ์๋จ์ด๋ ํ๋จ ๊ฐ์ฅ์๋ฆฌ ์์ญ(edge segment)์ 1ํฝ์ ๋ก ๋ง๋๋ ๊ฒ์ด ๋ฐ๋์งํฉ๋๋ค. ํ์ง๋ง ์ด๋ด ๊ฒฝ์ฐ ํ ์ค์ณ ํํฐ๋ง์ผ๋ก ์ธํด ์์น ์๋ ํ์์ด ๋ํ๋ ์๋ ์์ต๋๋ค. ๊ฐ์ฅ์๋ฆฌ(edge)๋ฅผ ์ข ๋ ๋๋ฆฌ๋ฉด ์ธ์ ํ ํฝ์ ๊ฐ(neighbor pixels)์ผ๋ก ์์ํ๊ณ ์ค๋จํ๊ฒ ๋๋ฏ๋ก ์ผ๋ฐ์ ์ผ๋ก ๋ ๋์ ๊ฒฐ๊ณผ๋ฅผ ์ป๊ฒ ๋ฉ๋๋ค.
๋ชจ๋ ๋ ธ๋๋ค์ "Nodes" ํด๋์ ๋์ด๋ ์์์ ๋ฐ๋ผ ๋ ๋๋ง๋ฉ๋๋ค. ๋ชฉ๋ก์ ๋งจ์์ ์๋ ๋ ธ๋๊ฐ ์ฒซ ๋ฒ์งธ๋ก ๊ทธ๋ ค์ง๋ฏ๋ก ๋ค๋ฅธ ๋ ธ๋์ ๋ท์ชฝ(behind)์ ๋ํ๋ฉ๋๋ค. ๋ชฉ๋ก์ ๋งจ ์๋์ ์๋ ๋ ธ๋๋ ๋งจ ๋ง์ง๋ง์ ๊ทธ๋ ค์ง๋ฏ๋ก ๋ชจ๋ ๋ ธ๋๋ค์ ๋งจ ์(front)์ ๋ํ๋ฉ๋๋ค. ๋ชฉ๋ก์ ์๋ ๋ ธ๋๋ฅผ ๋๋๊ทธํด์ ์ด๋ค์ ์ธ๋ฑ์ค ์์๋ฅผ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
๋ํ ๋ ์ด์ด๋ฅผ ์ฌ์ฉํด์ ๋ ธ๋ ์์๋ฅผ ๊ทธ๋ฃนํ ํ๊ณ ๋ณ๊ฒฝํ ์๋ ์์ต๋๋ค. (์๋ ์ฐธ๊ณ )
๋ง์ฝ node์ Z ๊ฐ์ ์ค์ ํด๋ ๊ทธ๋ฆฌ๊ธฐ ์์(draw order)๋ ๋ฐ๋์ง ์์ต๋๋ค. ๋ ธ๋์์ Z ๊ฐ์ ๋ฌด์๋ฉ๋๋ค.
๋ ธ๋๋ฅผ ๋ค๋ฅธ ๋ ธ๋๋ก ๋๋๊ทธํด์ ๋ถ๋ชจ-์์ ๊ด๊ณ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. ๋ถ๋ชจ๊ฐ ์๋ ๋ ธ๋๋ ๋ถ๋ชจ์ ๋ฐ์๋๊ณ ๋ถ๋ชจ ํผ๋ฒ(parent pivot: ์๋ ์ฐธ๊ณ )์ ์๋์ ์ธ ํธ๋์คํผ(transform: ์์น, ํ์ , ์ค์ผ์ผ ๋ณ๊ฒฝ)์ ์์ํฉ๋๋ค. ์์ ๋ ธ๋๋ค์ ๋ถ๋ชจ ์ดํ์ ๊ทธ๋ ค์ง๋ฏ๋ก ๋ถ๋ชจ ๋ ธ๋์ ์์ชฝ์ ๋ํ๋๊ฒ ๋ฉ๋๋ค. ๋ ์ด์ด๋ฅผ ์ฌ์ฉํ๋ฉด ๋ถ๋ชจ์ ์์๋ ธ๋์ ๊ทธ๋ฆฌ๊ธฐ ์์๋ฅผ ๋ณ๊ฒฝํ๊ณ ๋ ธ๋์ ๋ ๋๋ง์ ์ต์ ํ ํ ์ ์์ต๋๋ค. (์๋ "Batch Rendering" ์ฐธ๊ณ )
๋ ์ด์ด(layer)๋ฅผ ์ฌ์ฉํ๋ฉด ๋ ธ๋๋ฅผ ๊ทธ๋ฆฌ๋ ๋ฐฉ๋ฒ์ ์ข ๋ ์ธ๋ฐํ๊ฒ ์ ์ดํ ์ ์์ต๋๋ค. ๋ ์ด์ด๋ฅผ ๋ ธ๋์ ๋ฐ์ํ๋ฉด ๋ ์ด์ด์ ์ผ๋ถ๋ก์ ๊ทธ๋ ค์ง๊ฒ ๋ฉ๋๋ค. ๋ ์ด์ด ๊ทธ๋ฆฌ๊ธฐ ์์๋ ์ผ๋ฐ์ ์ธ ๋ ธ๋์ ์์๋ณด๋ค ์ฐ์ ํ๊ฒ ๋ฉ๋๋ค.
์ด ์์ ์์ "box2" ์ค๋ ์ง์ box ๋ ธ๋๋ "front" ๋ ์ด์ด์ ์ผ๋ถ์ด๋ฉฐ ๋ ์ด์ด ์์์ ๋ฐ๋ผ์ ๋งจ ๋ง์ง๋ง์ ๊ทธ๋ ค์ง๊ฒ ๋ฉ๋๋ค. ์ฆ "front" ๋ ์ด์ด์ ๋ชจ๋ ๋ ธ๋๋ ๋ ์ด์ด์ ์ํ์ง ์์ ๋ ธ๋๋ค๊ณผ "back" ๋ ์ด์ด์ ๋ ธ๋๋ค์ ๋ค๋ก ํ ์ฑ ์ต์์์ ๊ทธ๋ ค์ง๊ฒ ๋ฉ๋๋ค.
"box1"๊ณผ "box3" ๋ ๋ค "back" ๋ ์ด์ด๋ก ์ ํ ๋์ด ์์ ๊ฒฝ์ฐ, ์ด ๋ ์ด์ด ์์์์ ๊ทธ๋ฆฌ๊ธฐ ์์๋ ๋ ธ๋ ๋ฆฌ์คํธ์ ๋ฐฐ์น๋ ๋ ธ๋์ ์ธ๋ฑ์ค์ ์ํด์ ๊ฒฐ์ ๋ฉ๋๋ค. "box1"์ด "box3" ์์ ์์ผ๋ฏ๋ก "box3"์ ๋ท์ชฝ์ผ๋ก ๋จผ์ ๊ทธ๋ ค์ง๊ฒ ๋ฉ๋๋ค.
์ค์ ๋์ง ์์ ๋ ์ด์ด๋ฅผ ์ฌ์ฉํ ์์ ๋ ธ๋๋ ๋ถ๋ชจ ๋ ธ๋์ ๋ ์ด์ด ์ค์ ์ ์์์ ์ผ๋ก ์์ํฉ๋๋ค. ๋ ธ๋์ ๋ ์ด์ด๋ฅผ ์ค์ ํ์ง ์์ผ๋ฉด ์์์ ์ผ๋ก "null" ๋ ์ด์ด๋ฅผ ์ถ๊ฐํด์ ๋ค๋ฅธ ๋ ์ด์ด๋ค ๋ณด๋ค ๋จผ์ ๊ทธ๋ ค์ง๊ฒ ๋ฉ๋๋ค.
GUI๋ฅผ ๊ฐ๋ฅํ ํจ์จ์ ์ผ๋ก ๋ ๋๋ง ํ๊ธฐ ์ํด์, ์์ง์ด GUI ๋ ธ๋๋ค์ ์ผ๊ด์ ์ผ๋ก ๋ชจ์์ ๊ทธ๋ฆฌ๋, ์ฆ ์์ง์ด ๋ง๋๋ ๋๋ก์ฐ์ฝ(drawcalls)์ ์๋ฅผ ์ค์ด๋ ๋จ๊ณ๊ฐ ์์ต๋๋ค. ๋ง์ฝ ๋ ธ๋๋ค์ ๊ทธ๋ฃน์ด ์๋์ ์กฐ๊ฑด์ ์ถฉ์กฑํ๋ฉด ๋จ์ผ ๋ฐฐ์น(single batch) ๋ด์์ ์ฒ๋ฆฌ๋ ์ ์์ต๋๋ค.
- ๋ชจ๋ box ๋ ธ๋ ๋ฟ์ด๋ผ๋ฉด, ํ ์ค์ณ๋ฅผ ๊ฐ์ ์ํ๋ผ์ค์์ ์ฌ์ฉ ํด์ผํจ
- ๋ ธ๋๋ค์ ๊ฐ์ ๋ธ๋ ๋ ๋ชจ๋(blend mode)๋ก ๋ ๋๋ง ํด์ผ ํจ
- text ๋ ธ๋๊ฐ ์ฌ๋ฌ ๊ฐ ๋ผ๋ฉด, ๋์ผํ ํฐํธ๋ฅผ ์ฌ์ฉํด์ผํจ
- ์์๋๋ก ๋ ๋๋ง ๋์ด์ผ ํจ. ์ฆ ๋ ธ๋ ๋ฆฌ์คํธ์์ ํ์ ๊ณ์ธต์ ํจ๊ป ํฌํจ๋๊ฑฐ๋ ๊ฐ์ ๋ ์ด์ด์ ์ํด์ผ ํจ (์์ธํ๊ฒ์ ์๋ ์์ ์ฐธ๊ณ )
- ๊ฒ๋ค๊ฐ, clipping ๋ ธ๋๋ ํญ์ ์ผ๊ด์ฒ๋ฆฌ(batch)๋ฅผ ์ค๋จํ๊ณ ๊ฐ ์คํ ์ค ๋ฒ์(stencil scope) ๋ํ ์ผ๊ด์ฒ๋ฆฌ(batch)๋ฅผ ์ค๋จํจ.
๊ณ์ธต๊ตฌ์กฐ(hierarchies)์์ ๋ ธ๋๋ค์ ์ ๋ ฌ ํ๋ ๊ธฐ๋ฅ์ ๊ฐ๋ ฅํ๋ฉฐ, ๋ ธ๋์ ๋ณต์กํ ๊ณ์ธต์ ๊ด๋ฆฌ ๊ฐ๋ฅํ ๋จ์๋ก ๊ทธ๋ฃนํ ํ๊ธฐ ์ฝ์ต๋๋ค. ํ์ง๋ง ๊ณ์ธต๊ตฌ์กฐ(hierarchies)๋ ํจ๊ณผ์ ์ผ๋ก ๋ฐฐ์น ๋ ๋๋ง(batch rendering)์ ์ค๋จํ ์๋ ์์ต๋๋ค. ์๋ ๊ฐ๋จํ ์์ ๋ฅผ ๋ด ์๋ค.
์ฌ๊ธฐ์๋ ๋ ธ๋ 3๊ฐ์ฉ 2๊ฐ์ ๋ฒํผ์ด ์์ผ๋ฉฐ ๊ทธ๋ฆผ์์ฉ ํ ์ค์ณ๊ฐ ์๋ box ๋ ธ๋์ ์์(shaded) ๋ฒํผ ํ ์ค์ณ๋ฅผ ์ฌ์ฉํ box๋ ธ๋, ๋ฒํผ์ ํ ์คํธ๋ฅผ ์ฌ์ฉํ text ๋ ธ๋๋ก ๋์ด ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ด๋ค ๋ ธ๋๋ฅผ ๋ ผ๋ฆฌ์ ์ผ๋ก ๊ด๋ฆฌ ๊ฐ๋ฅํ ๊ณ์ธต์ ๋ฃ์์ต๋๋ค. ๋ฒํผ ๊ทธ๋ํฝ์ "alpha" ๋ธ๋ ๋ ๋ชจ๋๋ก ๊ทธ๋ ค์ง๊ณ , ๊ทธ๋ฆผ์๋ "mutliply" ๋ธ๋ ๋ ๋ชจ๋๋ก ๊ทธ๋ ค์ง๋๋ค.
๋ ๋๋ง ํ์ดํ๋ผ์ธ์ด ๋ ธ๋์ ๋ชฉ๋ก์ ํต๊ณผํ ๋, ๊ฐ ๊ฐ๋ณ ๋ ธ๋๋ฅผ ์ํด ๊ฐ๋ณ์ ์ธ ๋ฐฐ์น(batch)๋ฅผ ์ค์ ํด์ผํฉ๋๋ค. ์๋ํ๋ฉด ๋์ผํ ์ํ๋ผ์ค๋ฅผ ๊ณต์ ํ๋ ๋ ธ๋๋ค์ด ์ด ๋ชฉ๋ก์ ํต๊ณผํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ํ์ง๋ง ๊ทธ๋ฆผ์ ๋ ธ๋๋ ๋ฒํผ๊ณผ ๋ค๋ฅธ ํผํฉ ๋ชจ๋(blend mode)๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์, ๋ฐฐ์น(batch)๋ ๊ฐ ๋ ธ๋์์ ๋์ด์ง๊ฒ ๋ฉ๋๋ค. ๋ฐ๋ผ์ ์ด๋ค ๋ ๋ฒํผ์๊ฒ๋ ๋ชจ๋ 6๊ฐ์ ๊ฐ๋ณ ๋ฐฐ์น(batch)๊ฐ ํ์ํฉ๋๋ค.
ํ์ง๋ง ์ด๊ฑธ ๋ ๊ฐ์ ํ ์๋ ์์ต๋๋ค. ์ ์คํ๊ฒ ์ฐ๋ฆฌ์ ๋ ธ๋์ ๋ ์ด์ด๋ฅผ ํ ๋นํด์ ์ฐ๋ฆฌ์ ๋ฒํผ์ ๋์ฑ ํจ์จ์ ์ผ๋ก ๋ ๋๋ง ํ ์ ์์ต๋๋ค. ์ด ์์ ์์๋ 3๊ฐ์ ๋ ์ด์ด๋ฅผ ๋ง๋ค๋๋ก ํฉ๋๋ค.
- Shadow
- Button
- Text
๋ ธ๋๋ฅผ ํด๋น ๋ ์ด์ด์ ํ ๋นํ๊ณ Layers ๋ชฉ๋ก์์ ๋ ์ด์ด๊ฐ ์ฌ๋ฐ๋ฅธ ๋ ๋๋ง ์์๋ก ๋ฐฐ์น๋์ด ์๋์ง ํ์ธํฉ๋๋ค.
๋ ์ด์ด ๊ทธ๋ฆฌ๊ธฐ ์์๊ฐ ์ผ๋ฐ์ ์ธ ๋ ธ๋ ์์๋ณด๋ค ์ฐ์ ํ๋ฏ๋ก ๋ ธ๋๋ค์ ์๋ ์์๋๋ก ๊ทธ๋ ค์ง๊ฒ ๋ฉ๋๋ค.
- play_block_shadow
- quit_block_shadow
- play_block
- quit_block
- play
- quit
์ํ๋ผ์ค ๋ ธ๋, ๋ธ๋ ๋ ๋ชจ๋, ํฐํธ๋ฅผ ๊ณต์ ํ๋ ๋ ธ๋๋ ์๋ก ์ธ์ ํด ์์ผ๋ฉฐ ๋ ๋๋ง ํ์ดํ๋ผ์ธ์ ์ด๋ค ๋ ธ๋๋ฅผ 6๊ฐ ๋์ 3๊ฐ์ ๋ฐฐ์น(batch)๋ก ์ผ๊ด์ฒ๋ฆฌํ ์ ์์ต๋๋ค. ์ด๋ ์ฝ 50%์ ์ฑ๋ฅ ํฅ์์ด ์๊ฒ ๋ฉ๋๋ค.
์ด์ , ์์ ์ ์ค์ผ์ผ์ ๋ ๋ํ์ GUI๋ฅผ 10๊ฐ์ ๋ฒํผ์ผ๋ก ๋ง๋ ๋ค๊ณ ์์ํด ๋ด ์๋ค. ์ฐ๋ฆฌ๊ฐ ์ ์ ํ ๋ ์ด์ด๋ฅผ ๊ฐ ์๋ก์ด ๋ ธ๋์ ํ ๋นํ๋ค๋ฉด, ์์ง์ 30๊ฐ์ ๋๋ก์ฐ ์ฝ์ด ์๋๋ผ ์ฌ์ ํ 3๊ฐ์ ๋ฐฐ์น(batch) ์์์ ๋ ๋๋ง ํ ์ ์์ต๋๋ค.
Lua ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ๋ฉด GUI์ ๋ก์ง์ ์ ์ดํ๊ณ ๋ ธ๋์ ์ ๋๋ฉ์ด์ ์ ์ ์ฉํ ์ ์์ต๋๋ค. GUI ์คํฌ๋ฆฝํธ๋ ์ผ๋ฐ์ ์ธ ๊ฒ์ ์ค๋ธ์ ํธ ์คํฌ๋ฆฝํธ์ ๋์ผํ๊ฒ ๋์ํ์ง๋ง ๋ค๋ฅธ ์ข ๋ฅ์ ํ์ผ๋ก ์ ์ฅ๋๊ณ "gui" ๋ชจ๋์ ํจ์์ ์ก์ธ์ค ํ ์ ์์ต๋๋ค.
ํ๋ก์ ํธ์์ GUI ์คํฌ๋ฆฝํธ ํ์ผ์ ์์ฑํ๊ณ Outline ์ฐฝ์์ ์ต์์(root) GUI ์ปดํฌ๋ํธ๋ฅผ ์ ํํด์ Properties ์ฐฝ์์ Script ํญ๋ชฉ์ ์์ฑํ GUI ์คํฌ๋ฆฝํธ ํ์ผ์ ์ง์ ํฉ๋๋ค.
์ด ์คํฌ๋ฆฝํธ ํ์ผ์ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ฒ์ ์ค๋ธ์ ํธ ์คํฌ๋ฆฝํธ์ ๊ฐ์ ํจ์๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค.
function init(self)
end
function final(self)
end
function update(self, dt)
end
function on_message(self, message_id, message, sender)
end
function on_input(self, action_id, action)
end
function on_reload(self)
endGUI ์ปดํฌ๋ํธ๋ ๊ฒ์ ์ค๋ธ์ ํธ ์ฒ๋ผ ์ ๋ ฅ(input)๊ณผ ๋ฉ์ธ์ง(message)๋ฅผ ๋ฐ์ ์ ์์ต๋๋ค. URL์ fragment ๋ถ๋ถ์ ์ปดํฌ๋ํธ๋ฅผ ์ง์ ํ์ฌ GUI์ปดํฌ๋ํธ์ ๋ฉ์ธ์ง๋ฅผ ๋ณด๋ผ ์ ์์ต๋๋ค.
local msgdata = { score = 4711, stars = 3, health = 6 }
msg.post("hud#gui", "set_stats", msgdata)GUI ์ปดํฌ๋ํธ๋ ๊ฒ์ ์ปจํ ์ธ ์ ์(top)์์ ๋ณ๋๋ก ๋ ๋๋ง ๋๋ฉฐ, ๊ฒ์ ๊ฐ๋ฐ์๋ค์ด ํด์๋(resolutions)์ ์ข ํก๋น(aspect ratios)๊ฐ ๋ค๋ฅธ ํ๋ฉด์ ์ฅ์น๋ฅผ ์ฝ๊ฒ ๋ค๋ฃจ๊ธฐ ์ํ ๋ช ๊ฐ์ง ๋ฉ์ปค๋์ฆ์ด ์์ต๋๋ค.
Defold ๊ฒ์ ํ๋ก์ ํธ๋ "game project" ์ ํ ์์ ๋ชฉํ ํด์๋(target resolution)๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค. ํ์ง๋ง ์ฌ๋ฌ ์ฅ์น์ ํด์๋์ ์ข ํก๋น ํ๋ฉด์ ์ง์ํด์ผ ํ๋ค๋ฉด, ๋ชฉํ ํ๋ฉด์ ๋ง์ถ๊ธฐ ์ํด ์ ์ค์ผ์ผ(upscale)์ด๋ ๋ค์ด์ค์ผ์ผ(downscale)์ด ํ์ํ ์๋ ์์ต๋๋ค.
Defold๋ GUI ์ปดํฌ๋ํธ๋ฅผ ๊ฒ์ ์ปจํ ์ธ ์ ๋ค๋ฅด๊ฒ ์ค์ผ์ผ์ ์ฒ๋ฆฌํฉ๋๋ค. ๋ํ ํด์๋์ ์ข ํก๋น์ ๊ด๊ณ ์์ด ์ ์ ์ธํฐํ์ด์ค๋ฅผ ๋ฐฐ์นํ ์ ์๋ ๊ฐ๋จํ๊ณ ๊ฐ๋ ฅํ ๋ ์ด์์ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
GUI๋ฅผ ์ฌ์ฉํด ๊ฒ์ ์ฑ์ ๋ง๋ค์ด์ ๊ฐ๋จํ ์คํ์ ํด ๋ณด๋๋ก ํฉ์๋ค. ํ๋ฉด ์ฌ์ด์ฆ๋ฅผ 1024x1024 ํฌ๊ธฐ์ ์ ์ฌ๊ฐํ์ผ๋ก ์ค์ ํ๊ณ ๋ฐฐ๊ฒฝ ์ด๋ฏธ์ง ์์ ๋ ๋ฒจ ๋ฉ๋ด๋ฅผ GUI ์ปดํฌ๋ํธ๋ก ๋ฐฐ์นํฉ๋๋ค. ์ปดํจํฐ์์ ์ด๋ฅผ ์คํํ๋ฉด ์ด๋ป๊ฒ ๋ณด์ผ๊น์?
์ด์ ์ด ์ฑ์ iPad์์ ์คํํ๋ฉด(์ข ํก๋น๊ฐ 4:3์ด๊ณ ํ๋ฉด ํฌ๊ธฐ๊ฐ ๋ค๋ฆ) ์๋์ ๊ฐ์ด ๋ณด์ด๊ฒ ๋ฉ๋๋ค.
์ฐ๋ฆฌ๋ iPad์์ ๊ฒ์์ด ํ๋ฉด์ ์ฑ์์ง๋๋ก ๋์ด๋(stretche) ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค. ๋ฐฐ๊ฒฝ์ ๋ฌธ์ด ์ด๋ฏธ์ง๋ ๋ณํ๋์์ง๋ง GUI ์ปดํฌ๋ํธ๋ ๊ทธ๋ ์ง ์์์ต๋๋ค. text ๋ ธ๋๋ ์ฌ๋ฐ๋ฅธ ์ข ํก๋น๋ก ๋ ๋๋ง ๋์ด ํ๋ฉด ์ค์์ ์์น๋ฅผ ์ ์งํฉ๋๋ค.
์คํ์ค์ธ Defold ๊ฒ์์ ์ฐฝ ํฌ๊ธฐ๋ฅผ ๋ณ๊ฒฝํด์ ํด์๋์ ์ข ํก๋น๋ฅผ ๋ฐ๊พธ๋ ๊ฒ์ ์ฝ๊ฒ ์๋ฎฌ๋ ์ด์ ํ ์ ์์ต๋๋ค. ํด์๋์ ์ข ํก๋น๊ฐ ๋ค๋ฅธ ์ฅ์น์์ ๊ฒ์์ ์คํํ๋ ๊ฒ์ ์๋์ฐ ์ฐฝ์ ๋๋ฆฌ๊ณ ์ค์ด๋ ๊ฒ๊ณผ ๋์ผํฉ๋๋ค. ์๋์ฐ ์ฐฝ ํฌ๊ธฐ๋ฅผ ๋ณ๊ฒฝํ๋ฉด ์ ์ ์ธํฐํ์ด์ค ๋ ์ด์์์ ์ ์ดํ๋ ์กฐ์ (adjustment)๊ณผ ์ต์ปค(anchor) ๊ท์น์ ๋ฐ๋ผ GUI ์ปดํฌ๋ํธ๋ฅผ ๋ค์ ๊ทธ๋ฆฌ๊ฑฐ๋ ์ฌ๋ฐฐ์นํ๋ ๋์์ด ํธ๋ฆฌ๊ฑฐ๋ฉ๋๋ค.
์๋์ฐ ์ฌ์ด์ฆ๊ฐ ๋ณ๊ฒฝ๋์ด ํด์๋์ ์ข ํก๋น๋ ๋ณ๊ฒฝ๋๋ฉด, ๋ชจ๋ ๋ ธ๋๋ค์ Adjust Mode ํ๋กํผํฐ ์ค์ ์ ๋ฐ๋ผ ๋ชจ์์ด ๋ณ๊ฒฝ(resharped) ๋๊ณ ์กฐ์ (adjusted) ๋ฉ๋๋ค. ์ด ํ๋กํผํฐ๋ ์๋ 3๊ฐ์ ์ ํ ์ด ์์ต๋๋ค.
- Fit(๋ง์ถค). ๊ธฐ๋ณธ๊ฐ. ์ด ๋ ธ๋๋ ๋ฐ์ด๋ฉ ๋ฐ์ค์ ๋์ด๋ ๋์ด ์ค ์์ ํฌ๊ธฐ์ ๋น๋กํ์ฌ ๊ท ์ผํ ๋น์จ๋ก ๋ฆฌ์ฌ์ด์งํจ.
- Zoom(์ค). ์ด ๋ ธ๋๋ ๋ฐ์ด๋ฉ ๋ฐ์ค์ ๋์ด๋ ๋์ด ์ค ํฐ ํฌ๊ธฐ์ ๋น๋กํ์ฌ ๊ท ์ผํ ๋น์จ๋ก ๋ฆฌ์ฌ์ด์งํจ.
- Stretch(๋์ด๊ธฐ). ์ด ๋ ธ๋๋ ํ๋ฉด ํฌ๊ธฐ์ ๋น๋กํ์ฌ ๋ชจ์์ด ๋ฐ๋.
๋ช ๊ฐ์ ๋ ธ๋๋ฅผ ์ฌ์ฉํด GUI ์ปดํฌ๋ํธ๋ฅผ ํฌํจํ ์๋ ์์ ๋ฅผ ์ดํด๋ณด๋ฉด adjust mode์ ๋ํด ์ฝ๊ฒ ์ดํดํ ์ ์์ต๋๋ค.
- ์ฐธ๊ณ ์ฉ์ผ๋ก ๋ฐฐ๊ฒฝ์ ๋ชจ๋ ํ ์ค์ณ(grid texture)๋ฅผ ๊ฐ์ง box ๋ ธ๋๋ฅผ ๋ฐฐ์นํ๊ณ Adjust Mode๋ฅผ "Stretch"๋ก ์ ํ ํจ
- Defold ๋ก๊ณ ํ ์ค์ณ๋ฅผ ์ฌ์ฉํ 256x256 ํฝ์ box ๋ ธ๋ ์ธ ๊ฐ๋ฅผ ๋ฐฐ์นํ๊ณ Adjust Mode๋ฅผ ๊ฐ๊ฐ "Fit", "Zoom", "Stretch"๋ก ์ ํ ํจ
์ด์ ์๋์ฐ ์ฌ์ด์ฆ๊ฐ ๋ณ๊ฒฝ๋ ๋ box ๋ ธ๋๋ค์ด ์ด๋ป๊ฒ ๋ฐ๋๋์ง ๋ด ์๋ค.
"Stretch" ๋ ธ๋๋ ์๋ก์ด ๋ชจ์์ ๋ฐ๋ผ ๋ณ๊ฒฝ๋์ง๋ง "Fit"๊ณผ "Zoom" ๋ ธ๋๋ ์ข ํก๋น๋ฅผ ์ ์งํฉ๋๋ค. "Fit" ๋ ธ๋๋ ๋ชจ์์ด ๋ณํ๋ ๋ฐ์ด๋ฉ ๋ฐ์ค(๋ชจ๋ ์ฌ๊ฐํ ์์์)์ ์์ชฝ์์ ๋น์จ์ ์ ์งํ๊ณ "Zoom" ๋ ธ๋๋ ๋ชจ์์ด ๋ณ๊ฒฝ๋ ๋ฐ์ด๋ฉ ๋ฐ์ค๋ฅผ ๋ฎ์ด๋ฒ๋ฆฌ๋ฉฐ ๋น์จ์ ์ ์งํฉ๋๋ค.
Text ๋ ธ๋๋ ๋๊ฐ์ ๋ฐฉ์์ผ๋ก ๋์ํฉ๋๋ค. adjust mode๋ ํ ์คํธ์ ๋ชจ์์ ์ ์ดํ๋ ์จ๊ฒจ์ง ๋ฐ์ด๋ฉ ๋ฐ์ค์ ๋ฐ์๋ฉ๋๋ค.
์ต์ปค๋ ์ฐฝ ํฌ๊ธฐ๊ฐ ๋ณ๊ฒฝ๋ ๋ ๋ ธ๋์ ์์น๋ฅผ ๋ฐ์ด๋ฉ ๋ฐ์ค ๋ด์์ ์ ์ดํฉ๋๋ค. ์ ๋ ธ๋๋ ์ต์ปค๊ฐ ์๋ ์ํ๋ก ๋ง๋ค์ด์ง๋ฏ๋ก ํ๋ฉด์ ์ค์์ ๊ธฐ์ค์ผ๋ก ๋ฐฐ์น๋ฉ๋๋ค.
์์ฑ๋ ๋ ธ๋์ ๊ธฐ๋ณธ ๋์์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- GUI ์ปดํฌ๋ํธ์ ์ขํ๊ณ๋ ์ฐฝ ์ฌ์ด์ฆ์ ์ค์์ ๊ธฐ์ค์ผ๋ก ๊ท ๋ฑํ๊ฒ ์ค์ผ์ผ ๋จ.
- ๋ ธ๋๋ ์ค์ผ์ผ๋ ์ขํ๊ณ์์ ์์น๋ฅผ ์ ์งํจ
์ฆ ์ต์ปค๊ฐ ์๋ ๋ ธ๋๋ค์ ํ๋ฉด์ ์ค์์ ๊ธฐ์ค์ผ๋ก ์๋๊ฑฐ๋ฆฌ๋ฅผ ์ ์งํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์๋์ฐ๊ฐ ์ข์ฐ๋ก ๋์ด๋๋ค๋ฉด, ์ถ๊ฐ ๋์ด๋ GUI์ ์ ์ธก๋ฉด์ ๊ท ๋ฑํ๊ฒ ๋ถ๋ฐฐ๋ฉ๋๋ค.
๋ํ, ์๋์ฐ๊ฐ ์ถ์(shrunk)๋์ด ์๋์ ์ผ๋ก ์ข์์ง๋ค๋ฉด, ์ถ๊ฐ ๋์ด๋ GUI์ ์ ์๋๋ก ๊ท ๋ฑํ๊ฒ ๋ถ๋ฐฐ๋ฉ๋๋ค.
Xanchor์ Yanchor ํ๋กํผํฐ๋ฅผ ์ ํ ํ๋ฉด ๋ฐ์ด๋ฉ ๋ฐ์ค์ ๊ฐ์ฅ ์๋ฆฌ๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ ธ๋์ ์์น๋ฅผ ์ ๊ธ(lock) ํ ์ ์์ต๋๋ค.
- Xanchor๋ฅผ "Left"๋ก ์ค์ ํ๋ฉด ๋ ธ๋์ ์ํ ์์น๊ฐ box์ ์ผ์ชฝ ๊ฐ์ฅ์๋ฆฌ๋ก ๊ณ ์ ๋ฉ๋๋ค.
- Xanchor๋ฅผ "Right"๋ก ์ค์ ํ๋ฉด ๋ ธ๋์ ์ํ ์์น๊ฐ box์ ์ค๋ฅธ์ชฝ ๊ฐ์ฅ์๋ฆฌ๋ก ๊ณ ์ ๋ฉ๋๋ค.
- Yanchor๋ฅผ "Top"์ผ๋ก ์ค์ ํ๋ฉด ๋ ธ๋์ ์์ง ์์น๊ฐ box์ ์์ชฝ ๊ฐ์ฅ์๋ฆฌ๋ก ๊ณ ์ ๋ฉ๋๋ค.
- Yanchor๋ฅผ "Bottom"์ผ๋ก ์ค์ ํ๋ฉด ๋ ธ๋์ ์์ง ์์น๊ฐ box์ ์๋์ชฝ ๊ฐ์ฅ์๋ฆฌ๋ก ๊ณ ์ ๋ฉ๋๋ค.
์ค์ ๋ก Xanchor ํ๋กํผํฐ๋ฅผ "Right"๋ก ์ค์ ํ๊ณ Yanchor ํ๋กํผํฐ๋ฅผ "Top"์ผ๋ก ์ค์ ํ๋ฉด, ๋ ธ๋๋ box์ ์ค๋ฅธ์ชฝ ์ ๋ชจ์๋ฆฌ๋ฅผ ๊ธฐ์ค์ผ๋ก ์์น๋ฅผ ์ ์งํ๋ฉฐ ์ค๋ฅธ์ชฝ ๊ฐ์ฅ์๋ฆฌ์ ์๋จ ๊ฐ์ฅ์๋ฆฌ๊น์ง์์ ๊ฑฐ๋ฆฌ๋ ์ ์ง๋ฉ๋๋ค. "Pivot" ์ ๊ธฐ๋ณธ๊ฐ "Center"๋ก ์ค์ฌ์ ์ ์ ์งํ๋ฉฐ, ๋ชจ์๋ฆฌ๋ก ์ต์ปค๋ฅผ ์ง์ ํ๋ ค๋ฉด Pivot ๊ฐ์ ์ ์ ํ ์กฐ์ ํ๋ฉด ๋ฉ๋๋ค.
์ด ์์ ๋ "Top"๊ณผ "Right"๋ก ์ต์ปค๊ฐ ์ง์ ๋ ๋ ธ๋๋ฅผ ๋ณด์ฌ์ค๋๋ค. "Fit"์ด ์กฐ์ ๋๊ณ Pivot์ "North East"๋ก ์ค์ ํ๋ฉด ์๋์ฐ ์ฐฝ์ด ๋์ด๋ ๋ ๋ ธ๋๋ ๋ณํ๋ ๋ฐ์ค(ํ๋์ ์ ์ ์ฌ๊ฐํ) ๋ด์์ ์ต์ปค๊ฐ ์ง์ ๋์ด ๋ง์ถฐ์ง๊ฒ ๋ฉ๋๋ค.
๊ฐ ๋ ธ๋๋ GUI ์ขํ๊ณ ๋ด์์ ์์น(position), ์ค์ผ์ผ(scale), ํ์ (rotation) ์์ฑ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ๋ ธ๋๋ position ์์ฑ์ผ๋ก ๋ฐฐ์น๋๋ฉฐ pivot์ ์ค์ ๋ ์ขํ๋ฅผ ๊ธฐ์ค์ผ๋ก ํ์ ํฉ๋๋ค. text๋ ธ๋๋ pivot ์ค์ ์ ๋ฐ๋ผ ์ ๋ ฌ๋ฉ๋๋ค.
๋ ธ๋์ ๊ธฐ๋ณธ ์์น์ ํ์ ์ Pivot ํ๋กํผํฐ๊ฐ "Center"๋ก ์ค์ ๋์ด ๋ ธ๋์ ์ค์์ ๊ธฐ์ค์ผ๋ก ๋ฐ์ํฉ๋๋ค. ๋ ธ๋์ pivot์ ์๋ ์ค์ ์ค ํ๋๋ก ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
- Center
- North, South, East, West
- North West, North East, South West, South East
๋ค์ ๊ทธ๋ฆผ์ ๊ฐ pivot ์ค์ ์ ์์น๋ฅผ ๋ณด์ฌ์ค๋๋ค.
๋ ธ๋์ pivot์ ๋ณ๊ฒฝํ๋ฉด ๋ ธ๋๋ ์ pivot์ ์ฃผ์ด์ง ์์น๋ก ์ด๋ํ๊ฒ ๋ฉ๋๋ค. Text ๋ ธ๋๋ "Center"์ผ ๊ฒฝ์ฐ ์ค์ ์ ๋ ฌ๋๋ฉฐ "West"์ผ ๊ฒฝ์ฐ ์ผ์ชฝ ์ ๋ ฌ, "East"์ผ ๊ฒฝ์ฐ ์ค๋ฅธ์ชฝ์ผ๋ก ์ ๋ ฌ๋ฉ๋๋ค.
GUI๋ ธ๋์๋ ๋ก์ง ์์ฒด๋ ์์ง๋ง GUI ์ปดํฌ๋ํธ์ ์ฐ๊ฒฐ๋ GUI ์คํฌ๋ฆฝํธ์์ ๋ ธ๋๋ฅผ ์ง์ ์ ์ดํ ์ ์์ต๋๋ค. ์ด ์์ ์ ๋ ธ๋์ id๋ฅผ ์ฌ์ฉํด ์ฐธ์กฐํ๊ณ ์ด ์ฐธ์กฐ๋ ์ผ๋ฐ์ ์ผ๋ก ๋ณ์์ ์ ์ฅ๋์ด ๋ ธ๋๋ฅผ ๋ค๋ฃจ๋๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
-- "magic" text ๋
ธ๋๋ฅผ ์ฐธ์กฐํจ
local magicnode = gui.get_node("magic")
-- ๋
ธ๋๋ฅผ ์ค๋ ์ง์์ผ๋ก ๋ฐ๊ฟ
local orange = vmath.vector4(1.0, 0.3, 0.0, 1.0)
gui.set_color(magicnode, orange)gui.get_node() ํจ์๋ฅผ ์ฌ์ฉํด์ ๋ ธ๋์ ์ฐธ์กฐ๋ฅผ ํ๋ํ๊ณ GUI ๋ชจ๋์ ์์น, ํฌ๊ธฐ, ๋ชจ์, ๊ทธ๋ฆฌ๊ธฐ ์์, ๋ถ๋ชจ ๊ด๊ณ ๋ณ๊ฒฝ ๋ฑ์ ๋ค์ํ ํจ์๋ฅผ ๋ค๋ฃฐ ์ ์์ต๋๋ค. ๋ชจ๋ ๋ ธ๋์ ํ๋กํผํฐ๋ค์ ์คํฌ๋ฆฝํธ๋ฅผ ํตํด ์ ๊ทผ ๊ฐ๋ฅํฉ๋๋ค.
๊ฐ ๋ ธ๋๋ ์ ๋ํฌํ id๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค. box ๋ ธ๋๋ฅผ ์์ฑํ๋ฉด ๊ธฐ๋ณธ id๋ก "box"๊ฐ ์ค์ ๋๋ฉฐ, text ๋ ธ๋๋ "text"๋ฅผ ๊ธฐ๋ณธ id๋ก ์ค์ ๋์ง๋ง ์ ๋ํฌํ ์ด๋ฆ๊ณผ ๋ ๋ช ํํ ์ค๋ช ์ ์ํด ๋ ธ๋์ id๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๋ง์ฝ Defold์ GUI ์๋ํฐ์์ ์ค๋ณต id๋ฅผ ๊ฐ์งํ๋ฉด ์๋ฌ๊ฐ ๋ฐ์ํฉ๋๋ค.
๋ฐํ์์ ์คํฌ๋ฆฝํธ์์ ์ ๋ ธ๋๋ฅผ ์์ฑํ๋ ค๋ฉด ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
-- 300x300 ์์น์ 150x200 ์ฌ์ด์ฆ๋ก ํฐ์ box ๋
ธ๋ ์์ฑํ๊ธฐ
local new_position = vmath.vector3(300, 300, 0)
local new_size = vmath.vector3(150, 200, 0)
local new_boxnode = gui.new_box_node(new_position, new_size)
-- ๋์ผํ ์์น์ text ๋
ธ๋ ์ถ๊ฐํ๊ธฐ
local new_textnode = gui.new_text_node(new_position, "Hello!")์์ฑ๋ ๋ ธ๋๋ฅผ ์ฐธ์กฐํ๋ ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ ธ๋๋ฅผ ์์ ๋กญ๊ฒ ๋ค๋ฃฐ ์ ์์ต๋๋ค.
-- text๋
ธ๋๋ฅผ 10๋ ํ์ ํ๊ธฐ(z์ถ ๊ธฐ์ค)
gui.set_rotation(new_textnode, vmath.vector3(0, 0, 10))์ด ์ฝ๋๋ฅผ GUI ์คํฌ๋ฆฝํธ์ init() ํจ์์ ๋ฃ์ด ์คํํ๋ฉด ์๋์ ๊ฐ์ด ๋ฉ๋๋ค.
๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก๋ ์ด๋ฏธ ์กด์ฌํ๋ ๋ ธ๋๋ฅผ ๋ณต์ ํ์ฌ ์ ๋ ธ๋๋ฅผ ์์ฑํ ์๋ ์์ต๋๋ค.
-- magic text ๋
ธ๋ ๋ณต์ ํ๊ธฐ
local magicnode = gui.get_node("magic")
local magic2 = gui.clone(magicnode)
-- ์ ๋
ธ๋๋ฅผ ์๋ณธ ์์น์ ์ค๋ฅธ์ชฝ ์๋จ์ผ๋ก ์ฎ๊ธฐ๊ธฐ
gui.set_position(magic2, vmath.vector3(300, 300, 0))๋์ ์ผ๋ก ๋ ธ๋๋ฅผ ์์ฑํ๋ฉด id๊ฐ ํ ๋น๋์ง ์์ต๋๋ค. ์ด๊ฒ์ ์๋์ ์ผ๋ก ์ค๊ณ๋์์ต๋๋ค. gui.new_box_node(), gui.new_text_node(), gui.new_pie_node(), gui.clone() ํจ์๊ฐ ๋ฐํํ๋ ๋ ํผ๋ฐ์ค๋ ๋ ธ๋์ ์ก์ธ์ค ํ๊ธฐ์ํ ์ ์ผํ ๊ฐ์ด๋ฏ๋ก ์ฐธ์กฐ๋ฅผ ์ถ์ ํ๊ธฐ ์ํด์๋ ์ด ๊ฐ์ ๊ผญ ์ ์งํด์ผ ํฉ๋๋ค.
-- text ๋
ธ๋ ์ถ๊ฐ
local new_textnode = gui.new_text_node(vmath.vector3(100, 100, 0), "Hello!")
-- "new_textnode"๋ ๋
ธ๋์ ๋ ํผ๋ฐ์ค๋ฅผ ํฌํจํ๊ณ ์์
-- ์ด ๋
ธ๋๋ id๊ฐ ์์ง๋ง ์ด๋ฏธ ๋ ํผ๋ฐ์ค๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฏ๋ก gui.get_node()๋ก ํธ์ถํ ํ์๊ฐ ์์๋ ธ๋ ํ๋กํผํฐ์ ๋ช๋ช์ ๋น๋๊ธฐ์ ์ผ๋ก ์ ๋๋ฉ์ด์ ์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. ํ๋กํผํฐ๋ฅผ ์ ๋๋ฉ์ด์ ์ฒ๋ฆฌํ๋ ค๋ฉด gui.animate() ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์๋ ํ๋ผ๋ฏธํฐ๋ฅผ ๋ณด๋ด๋ฉด ๋ฉ๋๋ค.
gui.animate(node, property, to, easing, duration [,delay] [,complete_function] [,playback])์ด ํ๋ผ๋ฏธํฐ์ ๋ํ ์์ธํ ์ค๋ช ์ go.animate() ์ฐธ๊ณ
"property" ํ๋ผ๋ฏธํฐ๋ ์ผ๋ฐ์ ์ผ๋ก ์์๊ฐ(gui.PROP_POSITION ๋ฑ๋ฑ)์ด ์ฃผ์ด์ง์ง๋ง ํ๋กํผํฐ ๊ฐ์ด๋์ ์ค์ (Properties ์ฐธ๊ณ )๋ ์ง์ํฉ๋๋ค. ๋ณตํฉ์ ์ธ ํ๋กํผํฐ ๊ฐ์ ํน์ ํ ์ปดํฌ๋ํธ๋ฅผ ์ ๋๋ฉ์ด์ ํ๋ ค๋ฉด ์ด ๋ฐฉ๋ฒ์ด ํธ๋ฆฌํฉ๋๋ค.
์๋ฅผ ๋ค์ด, "color" ํ๋กํผํฐ๋ vector4 ๊ฐ์ผ๋ก red, green, blue, alpha์ RGBA ๊ฐ์ ๋ํ๋ด๋๋ฐ, ๋ฒกํฐ ์ปดํฌ๋ํธ๋ "x", "y", "z" ๊ทธ๋ฆฌ๊ณ "w"๋ก ์ด๋ฆ์ด ์ ํด์ ธ ์์ผ๋ฉฐ RGBA ์์๋๋ก "w"๋ alpha ๊ฐ์ ๋ฐ์๋ฉ๋๋ค.
๋ ธ๋์ ์ํ๊ฐ์ ํ์ด๋์ /๋ค์ด(fade up/down) ํ๋ ค๋ฉด ์๋ ์ฝ๋๋ฅผ ์ฌ์ฉํ์ฌ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
function fadeup(self, node)
gui.animate(node, "color.w", 1.0, gui.EASING_LINEAR,
0.3, 0, fadedown, gui.PLAYBACK_ONCE_FORWARD)
end
function fadedown(self, node)
gui.animate(node, "color.w", 0.0, gui.EASING_LINEAR,
0.3, 0, fadeup, gui.PLAYBACK_ONCE_FORWARD)
end์ด์ fadeup() ์ด๋ fadedown() ์ ํธ์ถํ์ฌ ๋ ธ๋์ ์ํ๊ฐ์ ์ ๋๋ฉ์ด์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. "complete_function" ํ๋กํผํฐ๋ฅผ ์ฌ์ฉํ๋ฉด ์ ๋๋ฉ์ด์ ์ ์๋ฃ๋ ๋ ํธ์ถ๋๊ฒ ํด์ ํ์ด๋ ์ ๊ณผ ํ์ด๋ ๋ค์ด์ ๋์์์ด ์ง์๋๊ฒ ํ ์ ์์ต๋๋ค.
๊ธฐ๋ณธ ๋ ๋ ์คํฌ๋ฆฝํธ๋ ๊ฒ์ ์ปจํ ์ธ ์ ๋ชจ๋ ๋ ๋๋ง์ ๋ค๋ฃจ๋ ๋ฃจ์ ์คํฌ๋ฆฝํธ๋ก ๋์ด ์์ผ๋ฉฐ(์์ธํ ๋ด์ฉ์ Rendering ๋ฌธ์ ์ฐธ๊ณ ), ๊ฒ์์ ์์์์ GUI ๋ ธ๋๋ค์ ๋ ๋๋ง ํ๋๋ก ๋ณ๋ ๋ฐฉ๋ฒ์ผ๋ก ์ค์ ๋ฉ๋๋ค.
...
render.set_view(vmath.matrix4())
render.set_projection(vmath.matrix4_orthographic(0,
render.get_window_width(), 0,
render.get_window_height(), -1, 1))
render.draw(self.gui_pred)
render.draw(self.text_pred)
...์ด ๋ทฐ๋ ์ผ๋ฐ ๋จ์ ํ๋ ฌ(normal identity matrix)์ด๋ฉฐ ์ง๊ต(orthographic)๋ก ํฌ์(projection)๋ฉ๋๋ค. "builtins/render" ํด๋์์ "default.render_script" ์ "default.render" ํ์ผ์ ๋ณต์ฌํ๊ณ project settings(Project settings ์ฐธ๊ณ )์์ "bootstrap" ์น์ ์ ๋ ๋๋ฌ๋ฅผ ์์ ํ์ฌ ๋ ๋ ์คํฌ๋ฆฝํธ๋ฅผ ์ปค์คํฐ๋ง์ด์ง ํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด, ๋ชจ๋ GUI ์ปดํฌ๋ํธ๋ฅผ 3D "camera" ๋ทฐ์ ์๊ทผ ํฌ์(perspective projection)์ ์ฌ์ฉํ์ฌ ๋ ๋๋ง ํ ์ ์์ต๋๋ค.
-- ๋ทฐ๋ฅผ 3D ํฌ์ง์
์นด๋ฉ๋ผ๋ก ์ค์ ํ๊ธฐ
local w = render.get_window_width() * 0.5
local h = render.get_window_height() * 0.5
local view = vmath.matrix4_look_at(vmath.vector3(w-25, h-10, 70),
vmath.vector3(w, h, -250),
vmath.vector3(0, 1.0, 0))
render.set_view(view)
-- ์๊ทผ ํฌ์์ํค๊ธฐ(Perspective projection)
render.set_projection(vmath.matrix4_perspective(2.5, 4/3, 0.1, 1000))
render.draw(self.gui_pred)
render.draw(self.text_pred)์ด๊ฒ์ ๋ ๋๋ง๋๋ ๋ชจ๋ GUI ์ปดํฌ๋ํธ๋ค์๊ฒ ์ํฅ์ ์ค๋๋ค. ์์์ ๋ง๋ ๋ ๋ฒจ ๋ฉ๋ด์ ์์ ๋ ๋ ๋ ์คํฌ๋ฆฝํธ๋ฅผ ์ ์ฉํ๋ฉด ์๋ ์ฒ๋ผ ๋ํ๋ฉ๋๋ค.





















