Template nodes - kuimoani/defold GitHub Wiki
Templates
GUI ํ ํ๋ฆฟ์ "prefabs" ํน์ ๊ณต์ ํ ํ๋ฆฟ์ ๊ธฐ๋ฐ์ผ๋ก ์๊ฐ์ GUI ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฌ์ฉํ๊ธฐ ์ํ ๊ฐ๋ ฅํ๊ณ ๊ฐ๋จํ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํฉ๋๋ค. ์ด ๋ฉ๋ด์ผ์ ํ ํ๋ฆฟ์ ์ด๋ป๊ฒ ์ฌ์ฉํ๋์ง ์ค๋ช ํฉ๋๋ค.
GUI ํ ํ๋ฆฟ์ ๋ค๋ฅธ ์ปฌ๋ ์ ๋ด์ ๋ฐฐ์นํ ์ ์๋ ์๋ธ ์ปฌ๋ ์ ์ฒ๋ผ ๋ค๋ฅธ GUI ์ฌ์ ์ถ๊ฐํ ์ ์๋ ๋ณตํฉ์ ์ธ ๋ ธ๋๋ก ๊ตฌ์ฑ๋ GUI ์ฌ์ ๋๋ค. ์๋ธ ์ปฌ๋ ์ ์ ์๋ธ ์ปฌ๋ ์ ๋ฃจํธ(root)์ ์์น์ ์คํฌ๋ฆฝํธ์ ์ ์๋ ํ๋กํผํฐ๋ง ์ค๋ฒ๋ผ์ด๋(override)ํ ์ ์์ง๋ง, GUI ํ ํ๋ฆฟ ๋ ธ๋๋ ๋ชจ๋ ํ๋กํผํฐ ๊ฐ๋ค์ ์ค๋ฒ๋ผ์ด๋(override)ํ ์ ์์ต๋๋ค. ๋ํ ์๋ธ ์ปฌ๋ ์ ์ฒ๋ผ, GUI ํ ํ๋ฆฟ ๋ ธ๋๋ ๋ฐํ์ ๊ฐ๋ ์ผ๋ก ์กด์ฌํ์ง ์์ผ๋ฉฐ ์๋ํฐ ๋๊ตฌ์์๋ง ์กด์ฌ ํฉ๋๋ค.
Creating and using a template
GUI ํ ํ๋ฆฟ์ ์ผ๋ฐ์ ์ธ GUI ์ฌ์ด๋ฏ๋ก, ํ ํ๋ฆฟ์ ๋ง๋๋ ๋ฐฉ๋ฒ์ ํน๋ณํ ์ฐจ์ด๊ฐ ์์ต๋๋ค. ์ฐ๋ฆฌ๊ฐ ๋ฒํผ ํ ํ๋ฆฟ ํ๋๋ฅผ ๋ง๋ค์ด ์ฌ์ฉํ๋ค๊ณ ๊ฐ์ ํด ๋ด ์๋ค. ์ฐ๋ฆฌ๋ GUI ์ฌ์ ๊ธฐ๋ณธ ๋ฒํผ ํ๋๋ฅผ ๋ง๋ค์ด ํ์ผ๋ก ์ ์ฅํ ์ ์์ต๋๋ค.

์ด์ ๋ค๋ฅธ GUI ์ฌ์ ์ด ๋ฒํผ์ ์ธ์คํด์ค ์ฌ๋ฌ ๊ฐ๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค. ์ ์ฌ์ ์ด๊ฑฐ๋ ์์ฑํด์ Gui โธ Add Template Node๋ฅผ ์ ํํ๊ณ , ์๋๋ฉด Outline ์ฐฝ์์ Nodes ํด๋์ ๋ง์ฐ์ค ์ค๋ฅธ์ชฝ ๋ฒํผ์ ๋๋ฌ ๋๋กญ ๋ค์ด ๋ฉ๋ด์์ Add Template๋ฅผ ์ ํํฉ๋๋ค.

ํ ํ๋ฆฟ์ผ๋ก ์ฌ์ฉํ GUI ์ฌ ํ์ผ(์ด ์์ ์์๋ "button.gui")์ ์ ํํฉ๋๋ค. ๋์ผํ ํ ํ๋ฆฟ์ผ๋ก ๊ธฐ๋ฐํ ์ธ์คํด์ค๋ฅผ ์ฌ๋ฌ ๊ฐ ์ถ๊ฐํ ์ ์์ต๋๋ค. ๋ง์ฝ ํ ํ๋ฆฟ์ ์์ ํ๋ฉด, ๊ฐ ์ธ์คํด์ค๋ ์๋ํฐ์์์ ์ฆ์ ์ ๋ฐ์ดํธ ๋์ด ๋ณ๊ฒฝ์ฌํญ์ด ๋ฐ์๋ฉ๋๋ค. ํ ํ๋ฆฟ ๋ ธ๋์ ํ์๋๋ ๋ชจ๋ ๋ ธ๋๋ค์ Outline ์ฐฝ์์ ์ก์ธ์ค ํ ์ ์์ต๋๋ค. ํ ํ๋ฆฟ ๋ฐ์ ์๋ ๋ ธ๋๋ค์ "[ํ ํ๋ฆฟ ๋ ธ๋ id]/"๋ฅผ ์ ๋์ด๋ก ์ฌ์ฉํด ์๋์ผ๋ก ์ด๋ฆ์ด ์ ํด์ง๋๋ค.

Overloading properties
๊ฐ ์ธ์คํด์ค ๋ ธ๋๋ ํ ํ๋ฆฟ์ ์ค์ ๋ ๋ชจ๋ ํ๋กํผํฐ๋ฅผ ์ค๋ฒ๋ก๋(overload) ํ ์ ์์ต๋๋ค. ๊ทธ๋ฅ ํธ์งํ๋ ค๋ ๋ ธ๋๋ฅผ ์ ํํ๊ณ ๋ณ๊ฒฝํ๋ ค๋ ํ๋กํผํฐ๋ฅผ ์์ ํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค. ์ค๋ฒ๋ก๋๋ ํ๋กํผํฐ๋ฅผ ๊ฐ์ง ๋ ธ๋๋ค์ Outline ์ฐฝ์์ ๋ น์์ผ๋ก ํ์๋๋ฉฐ ์ค๋ฒ๋ก๋๋ ํ๋กํผํฐ๋ ํ๋์์ผ๋ก ํ์๋ฉ๋๋ค. ํ๋์ ํ๋กํผํฐ ์ด๋ฆ์ ํด๋ฆญํด์ ํ๋กํผํฐ์ ๊ฐ์ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ๋ฆฌ์ ํ ์ ์์ต๋๋ค.

Layers
๋ ์ด์ด๋ ๊ทธ๋ฅ ์ฐ๋ฆฌ๊ฐ ์์ํ๋๋ก ๋์ํฉ๋๋ค. ํ ํ๋ฆฟ ํ์ผ์ ํน์ ๋ ์ด์์์ผ๋ก ์ ํ ๋ ํ๋กํผํฐ๋ ํด๋น ๋ ์ด์ด๊ฐ ์กด์ฌํ๋ ๊ฒฝ์ฐ์ ์ธ์คํด์ค ๋ ธ๋์ ๋ ์ด์์์ ๋ฐ์๋ฉ๋๋ค. ๋ฐ๋๋ก, ํ ํ๋ฆฟ ๋ ธ๋ ์ธ์คํด์ค์ ์ค๋ฒ๋ก๋(overloads)ํ๋ฉด ํ์ฌ ์ ํ๋ ๋ ์ด์์์ ์ํฅ์ ์ค๋๋ค.

Scripting
ํ ํ๋ฆฟ ๋ ธ๋ ๋ฉ์ปค๋์ฆ์ ํตํด Lua ์คํฌ๋ฆฝํธ๋ก ์ถ๊ฐ๋ ๋ ธ๋๋ค์ ๋ค๋ฃจ๊ฑฐ๋ ์ฟผ๋ฆฌํ ์ ์์ต๋๋ค. ๋ ธ๋๋ค์ ์ ๋์ด ๊ธฐ๋ฐ ํ ํ๋ฆฟ ๋ ธ๋๋ฅผ ํฌํจํ ์ ์ฒด ์ด๋ฆ์ผ๋ก ์ง์ ํด์ผ ํฉ๋๋ค.
if gui.pick_node(gui.get_node("button_ok/frame"), x, y) then
-- Do something...
end
๋ฐํ์์์๋ ํ ํ๋ฆฟ ๋ ธ๋๋ฅผ ํํํ ์ ์์ต๋๋ค. ํ ํ๋ฆฟ ๋ ธ๋์ ๋ชจ๋ ๋ ธ๋๋ค์ ๊ฒ์์ ์ถ๊ฐ๋์ง๋ง ํ ํ๋ฆฟ ๋ ธ๋๋ ์๋ํฐ์์์๋ง ์กด์ฌํฉ๋๋ค. ๋ํ ์คํฌ๋ฆฝํธ๋ฅผ ํ ํ๋ฆฟ GUI ์ฌ์ ์ถ๊ฐํ๋ฉด, ์ด ์คํฌ๋ฆฝํธ๋ ๋ฌด์๋ฉ๋๋ค. ์ค์ง ํ ๊ฐ์ ์คํฌ๋ฆฝํธ๋ง ๊ฐ GUI์ฌ๊ณผ ์ฎ์ ์ ์์ผ๋ฉฐ ์ผ๋ฐ์ ์ผ๋ก Outline ์ฐฝ์ ์ฌ ๋ฃจํธ ๋ ธ๋(scene root node)๋ง ์ค์ ํ ์ ์์ต๋๋ค.