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 ์ฐฝ์์ ํ๋กํผํฐ๊ฐ ๋ ธ์ถ๋์ด ๊ฐ์ ์์ ํ ์ ์๊ฒ ๋ฉ๋๋ค.

ํ์ ์ปฌ๋ ์ ๋ด์ ๊ฒ์ ์ค๋ธ์ ํธ๊ฐ ์๋ ๊ฒฝ์ฐ, ์ปฌ๋ ์ ์ ๊ฒ์ ์ค๋ธ์ ํธ ๋ ธ๋๋ฅผ ํ์ฅํ์ฌ ์คํฌ๋ฆฝํธ๋ฅผ ์ ํํ๋ฉด ๋ฉ๋๋ค.
์ด ์๋ํฐ ํ๋กํผํฐ ์ธ์คํํฐ(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() ๊ฐ ํธ์ถ ๋ ๋, ๋ ์คํฌ๋ฆฝํธ์ ์ฒด๋ ฅ ํ๋กํผํฐ ๋ชจ๋ ์ ๊ณต๋ ๊ฐ์ผ๋ก ์ค์ ๋ฉ๋๋ค.