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 ์”ฌ์— ๊ธฐ๋ณธ ๋ฒ„ํŠผ ํ•˜๋‚˜๋ฅผ ๋งŒ๋“ค์–ด ํŒŒ์ผ๋กœ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Button template

์ด์ œ ๋‹ค๋ฅธ GUI ์”ฌ์— ์ด ๋ฒ„ํŠผ์˜ ์ธ์Šคํ„ด์Šค ์—ฌ๋Ÿฌ ๊ฐœ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒˆ ์”ฌ์„ ์—ด๊ฑฐ๋‚˜ ์ƒ์„ฑํ•ด์„œ Gui โ–ธ Add Template Node๋ฅผ ์„ ํƒํ•˜๊ณ , ์•„๋‹ˆ๋ฉด Outline ์ฐฝ์—์„œ Nodes ํด๋”์— ๋งˆ์šฐ์Šค ์˜ค๋ฅธ์ชฝ ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ ๋“œ๋กญ ๋‹ค์šด ๋ฉ”๋‰ด์—์„œ Add Template๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

Add template

ํ…œํ”Œ๋ฆฟ์œผ๋กœ ์‚ฌ์šฉํ•  GUI ์”ฌ ํŒŒ์ผ(์ด ์˜ˆ์ œ์—์„œ๋Š” "button.gui")์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ๋™์ผํ•œ ํ…œํ”Œ๋ฆฟ์œผ๋กœ ๊ธฐ๋ฐ˜ํ•œ ์ธ์Šคํ„ด์Šค๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ ํ…œํ”Œ๋ฆฟ์„ ์ˆ˜์ •ํ•˜๋ฉด, ๊ฐ ์ธ์Šคํ„ด์Šค๋„ ์—๋””ํ„ฐ์ƒ์—์„œ ์ฆ‰์‹œ ์—…๋ฐ์ดํŠธ ๋˜์–ด ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ๋ฐ˜์˜๋ฉ๋‹ˆ๋‹ค. ํ…œํ”Œ๋ฆฟ ๋…ธ๋“œ์— ํ‘œ์‹œ๋˜๋Š” ๋ชจ๋“  ๋…ธ๋“œ๋“ค์€ Outline ์ฐฝ์—์„œ ์•ก์„ธ์Šค ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ…œํ”Œ๋ฆฟ ๋ฐ‘์— ์žˆ๋Š” ๋…ธ๋“œ๋“ค์€ "[ํ…œํ”Œ๋ฆฟ ๋…ธ๋“œ id]/"๋ฅผ ์ ‘๋‘์–ด๋กœ ์‚ฌ์šฉํ•ด ์ž๋™์œผ๋กœ ์ด๋ฆ„์ด ์ •ํ•ด์ง‘๋‹ˆ๋‹ค.

Node instances

Overloading properties

๊ฐ ์ธ์Šคํ„ด์Šค ๋…ธ๋“œ๋Š” ํ…œํ”Œ๋ฆฟ์— ์„ค์ •๋œ ๋ชจ๋“  ํ”„๋กœํผํ‹ฐ๋ฅผ ์˜ค๋ฒ„๋กœ๋“œ(overload) ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ƒฅ ํŽธ์ง‘ํ•˜๋ ค๋Š” ๋…ธ๋“œ๋ฅผ ์„ ํƒํ•˜๊ณ  ๋ณ€๊ฒฝํ•˜๋ ค๋Š” ํ”„๋กœํผํ‹ฐ๋ฅผ ์ˆ˜์ •ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์˜ค๋ฒ„๋กœ๋“œ๋œ ํ”„๋กœํผํ‹ฐ๋ฅผ ๊ฐ€์ง„ ๋…ธ๋“œ๋“ค์€ Outline ์ฐฝ์—์„œ ๋…น์ƒ‰์œผ๋กœ ํ‘œ์‹œ๋˜๋ฉฐ ์˜ค๋ฒ„๋กœ๋“œ๋œ ํ”„๋กœํผํ‹ฐ๋Š” ํŒŒ๋ž€์ƒ‰์œผ๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ํŒŒ๋ž€์ƒ‰ ํ”„๋กœํผํ‹ฐ ์ด๋ฆ„์„ ํด๋ฆญํ•ด์„œ ํ”„๋กœํผํ‹ฐ์˜ ๊ฐ’์„ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ๋ฆฌ์…‹ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Overloaded properties

Layers

๋ ˆ์ด์–ด๋Š” ๊ทธ๋ƒฅ ์šฐ๋ฆฌ๊ฐ€ ์˜ˆ์ƒํ•œ๋Œ€๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. ํ…œํ”Œ๋ฆฟ ํŒŒ์ผ์˜ ํŠน์ • ๋ ˆ์ด์•„์›ƒ์œผ๋กœ ์…‹ํŒ…๋œ ํ”„๋กœํผํ‹ฐ๋Š” ํ•ด๋‹น ๋ ˆ์ด์–ด๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ์— ์ธ์Šคํ„ด์Šค ๋…ธ๋“œ์˜ ๋ ˆ์ด์•„์›ƒ์— ๋ฐ˜์˜๋ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋Œ€๋กœ, ํ…œํ”Œ๋ฆฟ ๋…ธ๋“œ ์ธ์Šคํ„ด์Šค์— ์˜ค๋ฒ„๋กœ๋“œ(overloads)ํ•˜๋ฉด ํ˜„์žฌ ์„ ํƒ๋œ ๋ ˆ์ด์•„์›ƒ์— ์˜ํ–ฅ์„ ์ค๋‹ˆ๋‹ค.

Overloading in layers

Scripting

ํ…œํ”Œ๋ฆฟ ๋…ธ๋“œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ํ†ตํ•ด Lua ์Šคํฌ๋ฆฝํŠธ๋กœ ์ถ”๊ฐ€๋œ ๋…ธ๋“œ๋“ค์„ ๋‹ค๋ฃจ๊ฑฐ๋‚˜ ์ฟผ๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋…ธ๋“œ๋“ค์€ ์ ‘๋‘์–ด ๊ธฐ๋ฐ˜ ํ…œํ”Œ๋ฆฟ ๋…ธ๋“œ๋ฅผ ํฌํ•จํ•œ ์ „์ฒด ์ด๋ฆ„์œผ๋กœ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

if gui.pick_node(gui.get_node("button_ok/frame"), x, y) then
    -- Do something...
end

๋Ÿฐํƒ€์ž„์‹œ์—๋Š” ํ…œํ”Œ๋ฆฟ ๋…ธ๋“œ๋ฅผ ํ‘œํ˜„ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ํ…œํ”Œ๋ฆฟ ๋…ธ๋“œ์˜ ๋ชจ๋“  ๋…ธ๋“œ๋“ค์€ ๊ฒŒ์ž„์— ์ถ”๊ฐ€๋˜์ง€๋งŒ ํ…œํ”Œ๋ฆฟ ๋…ธ๋“œ๋Š” ์—๋””ํ„ฐ์ƒ์—์„œ๋งŒ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ…œํ”Œ๋ฆฟ GUI ์”ฌ์— ์ถ”๊ฐ€ํ•˜๋ฉด, ์ด ์Šคํฌ๋ฆฝํŠธ๋Š” ๋ฌด์‹œ๋ฉ๋‹ˆ๋‹ค. ์˜ค์ง ํ•œ ๊ฐœ์˜ ์Šคํฌ๋ฆฝํŠธ๋งŒ ๊ฐ GUI์”ฌ๊ณผ ์—ฎ์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ผ๋ฐ˜์ ์œผ๋กœ Outline ์ฐฝ์˜ ์”ฌ ๋ฃจํŠธ ๋…ธ๋“œ(scene root node)๋งŒ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.