Script properties - kuimoani/defold GitHub Wiki

Script properties

์Šคํฌ๋ฆฝํŠธ ํ”„๋กœํผํ‹ฐ๋Š” ํŠน์ • ๊ฒŒ์ž„ ์˜ค๋ธŒ์ ํŠธ ์ธ์Šคํ„ด์Šค์˜ ๋™์ž‘์ด๋‚˜ ์™ธํ˜•์„ ์ œ์–ดํ•˜๊ณ  ์—๋””ํ„ฐ ์ƒ์—์„œ ์ฝ”๋”ฉ ์—†์ด ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ”„๋กœํผํ‹ฐ๋ฅผ ๋…ธ์ถœํ•˜๋Š” ๊ฐ•๋ ฅํ•˜๊ณ  ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์Šคํฌ๋ฆฝํŠธ ํ”„๋กœํผํ‹ฐ๋Š” ์ธ์Šคํ„ด์Šค์— ๋”ฐ๋ผ ํŠน์ • ์Šคํฌ๋ฆฝํŠธ ํ”„๋กœํผํ‹ฐ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋“œ(overrides) ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ ์‚ฌ์šฉ ์‚ฌ๋ก€๋กœ๋Š” ํŠน์ • ์  AI์˜ ์ฒด๋ ฅ, ์†๋„๋ผ๋˜๊ฐ€ ์•„์ดํ…œ ์˜ค๋ธŒ์ ํŠธ์˜ ์ƒ‰์ƒ์ด๋‚˜ ๋ฒ„ํŠผ ํด๋ฆญ์‹œ ์–ด๋–ค ๋ฉ”์„ธ์ง€๋ฅผ ๋ณด๋‚ผ์ง€ ๋“ฑ๋“ฑ... ์•„๋ž˜์˜ ์‚ฌ๋ก€์ฒ˜๋Ÿผ ์Šคํฌ๋ฆฝํŠธ ํ”„๋กœํผํ‹ฐ๋ฅผ ์œ ์šฉํ•˜๊ฒŒ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋งŽ์€ ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์—๋””ํ„ฐ์ƒ์—์„œ ํŠน์ • ์ธ์Šคํ„ด์Šค์˜ ๊ฐ’๋“ค์„ ์˜ค๋ฒ„๋ผ์ด๋“œ ํ•˜๋ ค ํ•  ๋•Œ, ๊ทธ๋ฆฌ๊ณ  ์Šคํฌ๋ฆฝํŠธ ์žฌ ์‚ฌ์šฉ์„ฑ(re-usability)์„ ๋†’์ผ ํ•„์š”๊ฐ€ ์žˆ์„ ๋•Œ
  • ์ดˆ๊ธฐ๊ฐ’์œผ๋กœ ๊ฒŒ์ž„ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์Šคํฐํ•ด์•ผ ํ•  ๋•Œ
  • ํ”„๋กœํผํ‹ฐ์˜ ๊ฐ’์— ์—๋‹ˆ๋ฉ”์ด์…˜์„ ์ ์šฉํ•˜๋ ค ํ•  ๋•Œ
  • ๋‹ค๋ฅธ ์Šคํฌ๋ฆฝํŠธ์—์„œ ๋ฐ์ดํ„ฐ์— ์—‘์„ธ์Šค ํ•˜๋ ค ํ•  ๋•Œ

๋ฐ์ดํ„ฐ์— ์ž์ฃผ ์—‘์„ธ์Šคํ•˜๋Š” ๊ฒฝ์šฐ, ์„ฑ๋Šฅ์ƒ์˜ ์ด์œ ๋กœ ํ”„๋กœํผํ‹ฐ๋ณด๋‹ค๋Š” ํ…Œ์ด๋ธ”๋กœ๋ถ€ํ„ฐ ์•ก์„ธ์Šค ํ•˜๋Š” ๊ฒƒ์ด ๋” ๋‚ซ์Šต๋‹ˆ๋‹ค.

์Šคํฌ๋ฆฝํŠธ์˜ ๋™์ž‘์ด๋‚˜ ์ปดํฌ๋„ŒํŠธ ํ”„๋กœํผํ‹ฐ๋ฅผ ์ œ์–ดํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๋Œ€๋ถ€๋ถ„ ๊ฐ’์˜ ์œ ํ˜•์€ ์Šคํฌ๋ฆฝํŠธ ํ”„๋กœํผํ‹ฐ๋กœ ๋…ธ์ถœ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Booleans

True ๋˜๋Š” False

Numbers

์ˆซ์žํ˜•(numerical) ๊ฐ’

Hashes

ํ•ด์‰ฌ๋œ(hash) ๋ฌธ์ž์—ด ๊ฐ’

URLs

์˜คํ”„์ ํŠธ๋‚˜ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ฐธ์กฐ

Vector3

3 ์ฐจ์› ๋ฒกํ„ฐ ๊ฐ’

Vector4

4 ์ฐจ์› ๋ฒกํ„ฐ ๊ฐ’

Quaternion

์ฟผํ„ฐ๋‹ˆ์˜จ ๊ฐ’

์˜ˆ๋ฅผ ๋“ค์–ด, ๊ฒŒ์ž„ ์˜ค๋ธŒ์ ํŠธ์˜ ์ฒด๋ ฅ์„ ์ œ์–ดํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ด…์‹œ๋‹ค. ์ด ์Šคํฌ๋ฆฝํŠธ๋Š” take_damage ๋ผ๋Š” ๋ฉ”์„ธ์ง€๋ฅผ ํ†ตํ•ด ๋ฐ๋ฏธ์ง€๋ฅผ ์ž…ํž ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

function init(self)
    self.health = 100
end

function on_message(self, message_id, message, sender)
    if message_id == hash("take_damage") then
        self.health = self.health - message.damage
        if self.health <= 0 then
            go.delete()
        end
    end
end

์ฒด๋ ฅ์ด 0์ด ๋˜๋ฉด, ์ด ์Šคํฌ๋ฆฝํŠธ๋Š” ๊ฒŒ์ž„ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ํŒŒ๊ดด ์‹œํ‚ต๋‹ˆ๋‹ค. ์ด์ œ ๋‘ ๊ฐœ์˜ ๊ฒŒ์ž„ ์˜ค๋ธŒ์ ํŠธ์—์„œ ์ด ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค ํ•˜์ง€๋งŒ, ์„œ๋กœ ๋‹ค๋ฅธ ์ฒด๋ ฅ ๊ฐ’์„ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค๊ณ  ์นฉ์‹œ๋‹ค. go.property ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์Šคํฌ๋ฆฝํŠธ ํ”„๋กœํผํ‹ฐ๋ฅผ ์ •์˜ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ํŠน์ • ๊ฒŒ์ž„ ์˜ค๋ธŒ์ ํŠธ ์ธ์Šคํ„ด์Šค์˜ ๊ฐ’์„ ์…‹ํŒ…ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

-- self.health ๋Š” ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ 100์„ ์ž๋™ ์…‹ํŒ…ํ•จ
go.property("health", 100)

function on_message(self, message_id, message, sender)
    if message_id == hash("take_damage") then
        self.health = self.health - message.damage
        if self.health <= 0 then
            go.delete()
        end
    end
end

์ด ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํฌํ•จํ•˜๋Š” ๋ชจ๋“  ๊ฒŒ์ž„ ์˜ค๋ธŒ์ ํŠธ๋Š” ๊ฐ’์„ ๊ตฌ์ฒด์ ์œผ๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—๋””ํ„ฐ์˜ Outline ์ฐฝ์—์„œ ์Šคํฌ๋ฆฝํŠธ ๋…ธ๋“œ๋ฅผ ์„ ํƒํ•˜๋ฉด Properties ์ฐฝ์—์„œ ํ”„๋กœํผํ‹ฐ๊ฐ€ ๋…ธ์ถœ๋˜์–ด ๊ฐ’์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

Script Properties

ํ•˜์œ„ ์ปฌ๋ ‰์…˜ ๋‚ด์— ๊ฒŒ์ž„ ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ, ์ปฌ๋ ‰์…˜์˜ ๊ฒŒ์ž„ ์˜ค๋ธŒ์ ํŠธ ๋…ธ๋“œ๋ฅผ ํ™•์žฅํ•˜์—ฌ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์„ ํƒํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์ด ์—๋””ํ„ฐ ํ”„๋กœํผํ‹ฐ ์ธ์ŠคํŽ™ํ„ฐ(editor property inspector)๋Š” ์„ ์–ธ๋œ ํ”„๋กœํผํ‹ฐ์˜ ์œ ํ˜•์— ๋งž๊ฒŒ ์œ„์ ฏ์„ ์ž๋™์ ์œผ๋กœ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ์ˆซ์žํ˜•์€ ํ…์ŠคํŠธ ๋ฐ•์Šค๋กœ, ๋ฒกํ„ฐ๋‚˜ ์ฟผํ„ฐ๋‹ˆ์˜จ ํ˜•์€ ์—ฌ๋Ÿฌ๊ฐœ์˜ ํ…์ŠคํŠธ ๋ฐ•์Šค๋กœ, ํ•ด์‰ฌ๊ฐ’์€ ๋ฌธ์ž์—ด์„ ํ•ด์‰ฌ์‹œ์ผœ ์ฃผ๊ณ , URL์€ ๊ด€๋ จ๋œ ๋ชจ๋“  ๋กœ์ปฌ ์˜ค๋ธŒ์ ํŠธ๋‚˜ ์ปดํฌ๋„ŒํŠธ๋ฅผ(๋™์ผํ•œ ์ปฌ๋ ‰์…˜์— ์œ„์น˜ํ•œ ๊ฒƒ๋งŒ) ๋“œ๋กญ๋‹ค์šด ๋ฆฌ์ŠคํŠธ๋กœ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ๋˜ํ•œ URL์„ ์ˆ˜๋™์œผ๋กœ ์ž…๋ ฅํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

Factory created objects

ํŒฉํ† ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒŒ์ž„ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ, ์ƒ์„ฑ์‹œ์— ์Šคํฌ๋ฆฝํŠธ ํ”„๋กœํผํ‹ฐ๋ฅผ ์…‹ํŒ…ํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

function on_message(self, message_id, message, sender)
    if message_id == hash("create_my_object") then
        factory.create("#factory", go.get_position(), go.get_rotation(), { health = 50 })
    end
end

ํ”„๋กœํผํ‹ฐ ๊ฐ’์€ factory.create()๋ฅผ ํ†ตํ•˜๋ฉด ์Šคํฌ๋ฆฝํŠธ์˜ ๊ธฐ๋ณธ๊ฐ’ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๊ฒŒ์ž„์˜ค๋ธŒ์ ํŠธ ํŒŒ์ผ์˜ ๊ฐ’๋“ค์„ ์˜ค๋ฒ„๋ผ์ด๋“œ(override) ํ•ฉ๋‹ˆ๋‹ค.

๋งŒ์•ฝ ๊ฒŒ์ž„ ์˜ค๋ธŒ์ ํŠธ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์Šคํฌ๋ฆฝํŠธ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์—ฐ๊ฒฐํ–ˆ๋‹ค๋ฉด, ์ด ์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ๋“ค ์ „๋ถ€์—๊ฒŒ ์Šคํฌ๋ฆฝํŠธ ํ”„๋กœํผํ‹ฐ๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์œ„์˜ ๊ฒŒ์ž„ ์˜ค๋ธŒ์ ํŠธ ์˜ˆ์ œ์—์„œ ์ฒด๋ ฅ ํ”„๋กœํผํ‹ฐ๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๋Š” ๋‹ค๋ฅธ ์Šคํฌ๋ฆฝํŠธ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด, factory.create() ๊ฐ€ ํ˜ธ์ถœ ๋  ๋•Œ, ๋‘ ์Šคํฌ๋ฆฝํŠธ์˜ ์ฒด๋ ฅ ํ”„๋กœํผํ‹ฐ ๋ชจ๋‘ ์ œ๊ณต๋œ ๊ฐ’์œผ๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค.