Spine nodes - kuimoani/defold GitHub Wiki

GUI Spine nodes

๊ฒŒ์ž„ ์˜ค๋ธŒ์ ํŠธ์—์„œ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ GUI ์• ๋‹ˆ๋ฉ”์ด์…˜์—์„œ๋„ ์ŠคํŒŒ์ธ ๋ณธ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋งค๋‰ด์–ผ์€ GUI ์”ฌ์—์„œ ์ŠคํŒŒ์ธ ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ž„ํฌํŠธํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

ํ˜„์žฌ, ์ŠคํŒŒ์ธ ๋…ธ๋“œ๋Š” ์ŠคํŒŒ์ธ ์ด๋ฒคํŠธ๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. SpineModel ๊ฒŒ์ž„ ์˜ค๋ธŒ์ ํŠธ๋Š” ์• ๋‹ˆ๋ฉ”์ด์…˜ ํƒ€์ž„๋ผ์ธ์˜ ์ด๋ฒคํŠธ๋ฅผ ํฌํ•จํ•˜๊ณ  ๊ฒŒ์ž„์˜ค๋ธŒ์ ํŠธ์— ๋ฉ”์„ธ์ง€๋ฅผ ์ „์†กํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ŠคํŒŒ์ธ ๋…ธ๋“œ์—์„œ๋Š” ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ž„ํฌํŠธ๋œ ์ŠคํŒŒ์ธ ๋ณธ ์• ๋‹ˆ๋ฉ”์ด์…˜(Spine bone animation)์€ ๊ฒŒ์ž„ ์˜ค๋ธŒ์ ํŠธ ๋ฟ ์•„๋‹ˆ๋ผ GUI ์”ฌ์—์„œ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(SpineModel ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ†ตํ•ด์„œ). Defold์—์„œ ์ŠคํŒŒ์ธ ๋ณธ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๋™์ž‘์‹œํ‚ค๊ธฐ ์œ„ํ•ด, ๋จผ์ € ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ž„ํฌํŠธํ•˜๊ณ  ์ŠคํŒŒ์ธ ์”ฌ(Spine Scene) ๋ฆฌ์†Œ์Šค๋ฅผ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•œ ์„ค๋ช…์€ [Spine animation](Spine animation) ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

GUI ์”ฌ์—์„œ ์ŠคํŒŒ์ธ ์”ฌ ๋ฆฌ์†Œ์Šค์˜ ์ปจํ…์ธ ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด, Outline ์ฐฝ์˜ Spine Scenes ํด๋”์— ๋งˆ์šฐ์Šค ์˜ค๋ฅธ์ชฝ ๋ฒ„ํŠผ์„ ๋ˆŒ๋ ค Add Spine Scene ๋ฉ”๋‰ด๋ฅผ ์„ ํƒํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋ ค๋Š” ์ŠคํŒŒ์ธ ์”ฌ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

Add Spine Scene

Added Spine Scene

์ด์ œ ์ŠคํŒŒ์ธ ๋…ธ๋“œ๋ฅผ ๋งŒ๋“ค๋ฉด(Outline ์ฐฝ์˜ Nodes ํด๋”์— ๋งˆ์šฐ์Šค ์˜ค๋ฅธ์ชฝ ๋ฒ„ํŠผ ๋ˆ„๋ฅด๊ณ  Add Spine Node ์„ ํƒ) ๊ทธ์— ๋”ฐ๋ฅธ ์ƒˆ ์ŠคํŒŒ์ธ ๋…ธ๋“œ์˜ ํ”„๋กœํผํ‹ฐ๋“ค์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Spine node

Spine Scene

์ด ๋…ธ๋“œ์˜ ๋ฐ์ดํ„ฐ ์†Œ์Šค๋กœ ์‚ฌ์šฉํ•  ์ŠคํŒŒ์ธ ์”ฌ

Spine Default Animation

์”ฌ์ด ์ดˆ๊ธฐํ™” ๋  ๋•Œ ์ž๋™์ ์œผ๋กœ ์žฌ์ƒํ•  ์• ๋‹ˆ๋ฉ”์ด์…˜

Skin

์”ฌ์ด ์ดˆ๊ธฐํ™” ๋  ๋•Œ ์• ๋‹ˆ๋ฉ”์ด์…˜์— ์‚ฌ์šฉํ•  ์Šคํ‚จ

Runtime animation control

์ŠคํŒŒ์ธ ๋…ธ๋“œ๋Š” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ†ตํ•ด ๋Ÿฐํƒ€์ž„์‹œ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋…ธ๋“œ์—์„œ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์‹œ์ž‘ํ•˜๋ ค๋ฉด gui.play_spine() ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

local catnode = gui.get_node("cat_note")
local blend_time = 0.3
gui.play_spine(catnode, hash("run"), gui.PLAYBACK_ONCE_FORWARD, blend_time, function(self, node)
    print("Animation done!")
end)

The bone hierarchy

์ŠคํŒŒ์ธ ์Šค์ผˆ๋ ˆํ†ค์—์„œ ๋ผˆ ๊ฐ๊ฐ์€ GUI ๋…ธ๋“œ๋กœ ์กด์žฌํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด ๋…ธ๋“œ๋“ค์€ ์ŠคํŒŒ์ธ ์„ค์ •์—์„œ ์ง€์ •๋œ ์ด๋ฆ„์— ๋”ฐ๋ผ ์ง€์–ด์ง‘๋‹ˆ๋‹ค.

Spine bone names

์˜ˆ๋ฅผ ๋“ค์–ด, ์–ด๋–ค ๋…ธ๋“œ๋ฅผ ๋‹ค๋ฅธ ๋ณธ ๋…ธ๋“œ์— ์—ฐ๊ฒฐํ•˜๋ ค๋ฉด, gui.get_spine_bone() ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•˜์œ„์˜ ๋ณธ ๋…ธ๋“œ๋ฅผ ์ด๋ฆ„์œผ๋กœ ์กฐํšŒํ•ด์„œ ์ž์‹ ๋…ธ๋“œ๋กœ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

-- text ๋…ธ๋“œ๋ฅผ cat์˜ tail์— ์—ฐ๊ฒฐํ•จ
local cat = gui.get_node("cat_node")
local textnode = gui.new_text_node(vmath.vector3(400, 0, 0), "Hello tail!")
local tail = gui.get_spine_bone(cat, "tail")
gui.set_parent(textnode, tail)

๋˜ํ•œ ๋ชจ๋“  ๋ณธ์€ ์ŠคํŒŒ์ธ ๋…ธ๋“œ์˜ ์ด๋ฆ„๊ณผ "/"๋ฅผ ์ ‘๋‘์–ด๋กœ ์‚ฌ์šฉํ•˜์—ฌ go.get_node() ๋กœ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

-- text ๋…ธ๋“œ๋ฅผ cat์˜ tail์— ์—ฐ๊ฒฐํ•จ
local textnode = gui.new_text_node(vmath.vector3(400, 0, 0), "Hello tail!")
local tail = gui.get_node("cat_node/tail")
gui.set_parent(textnode, tail)
โš ๏ธ **GitHub.com Fallback** โš ๏ธ