์ฝ 1๋ ์ ์ GDScript์ ์ฃผ์์ ์ถ๊ฐํ๋ PR์ด ์์์ต๋๋ค(#9469). ์ง์ ์ฌ์ฉํ์ง ์์๊ธฐ ๋๋ฌธ์ ์ฃผ๋ก ๊ฑฐ๋ถ๋์์ต๋๋ค(๊ตฌ๋ฌธ ๋ถ์ ํธ๋ฆฌ์ ๋ฐ์ดํฐ๊ฐ ์๊ณ ํ์ฌ ๋๊ตฌ๋ง ์ฌ์ฉํ ์ ์์).
์ด ์ ์์ ๋ ๋ง์ ํค์๋๋ฅผ ํดํนํ์ง ์๊ณ ๋ GDScript๋ฅผ ๋ ํ์ฅํ ์ ์๋๋ก ํ๋ ๋ฐฉ์์ผ๋ก ์ฃผ์์ ๋ํ ์ฌ์ฉ์ ์ถ๊ฐํ๋ ๊ฒ์ ๋๋ค.
์ด๋ค ์ฃผ์์ ์ฌ์ฉํ ์ ์์ต๋๊น?
export
ํํธ. ์ง๊ธ์ ๊ฐ ์ ํ์ ๋ํ ์ฌ์ฉ์ ์ ์ ๊ตฌ๋ฌธ์ ์ฌ์ฉํฉ๋๋ค. ์ฃผ์์ ์ฌ์ฉํ๋ฉด PropertyInfo์ ๋ํ ์ฌ์ฉ๋ฒ๊ณผ ํํธ๋ฅผ ์ง์ ์ค์ ํ ์ ์์ผ๋ฏ๋ก GDScript ํ์์์ ์ ๊ตฌ๋ฌธ์ ํดํนํ์ง ์๊ณ ๋ Inspector์ ์๋ก ์ถ๊ฐ๋ ํญ๋ชฉ์ ๋ ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.export
ํค์๋๋ ๊ทธ๋๋ก ๋๊ณ ํํธ๋ง ์ฃผ์์ผ๋ก ์ด๋ํฉ๋๋ค. ์ ํ์ ์ ํ ํํธ๋ก ์ ์ํ ์ ์์ต๋๋ค.export
์นดํ
๊ณ ๋ฆฌ๋ ํฌํจ๋ฉ๋๋ค(#4378, #10303).onready
ํค์๋๋ฅผ ์ฃผ์์ผ๋ก ๋ฐ๊ฟ๋๋ค.setget
(๊ฒํฐ๋ง ์ํ ๋ ์ด์ํ ๊ตฌ๋ฌธ์
๋๋ค).master
, slave
, sync
, remote
).tool
) ๋๋ ๋๋ฒ๊ทธ ๋ชจ๋์์๋ง( #12837 ๊ด๋ จ) ํจ์๋ฅผ ์ปดํ์ผํ๋ ๊ฒ๊ณผ ๊ฐ์ ์๋ก์ด ์ ์ฒ๋ฆฌ๊ธฐ ๋ช
๋ น.์ฅ์
์ ํค์๋๊ฐ ์ถ๊ฐ๋ ๋๋ง๋ค ์ด๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด GDScript ํ ํฌ๋์ด์ ๋ฐ ํ์๋ฅผ ๋ณ๊ฒฝํด์ผ ํฉ๋๋ค. ํนํ export
๊ตฌ๋ฌธ ๋ถ์์ ์๋นํ ๋ณต์กํ๊ณ ๋ค๋ฅธ ํด๋์ค ๊ด๋ จ ๊ตฌ๋ฌธ ๋ถ์๊ณผ ํผํฉ๋์ด ์์ต๋๋ค.
์ฃผ์์ ์ฌ์ฉํ๋ฉด ํน์ ์์ฑ(์: export, setget, onready)์ ์ถ๊ฐํ๋ ์์ ์ด ์ค์ด๋ค๊ณ ๋์ ์ด๋ค ์ฃผ์์ด ์๋์ง ํ์ธํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.
๋จ์
์ฃผ์ ์ง์์ ์ถ๊ฐํ๋ ค๋ฉด ํค์๋๋ง ์ฌ์ฉํ๋ ๊ฒ๋ณด๋ค ํ์์ ๋ ๋ง์ ๋ณ๊ฒฝ ์ฌํญ์ด ํ์ํฉ๋๋ค. ๋ํ ์ฌ๋๋ค์ด "๋จ์ง ์ฃผ์"์ผ๋ก ์๋ก์ด ๊ธฐ๋ฅ์ ์ ์ํ๋ ๋ฐ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค.
ํต์ฌ๋ก
๊ตฌ๋ฌธ์ ๋ํ ํน๋ณํ ์ ํธ๋๋ ์์ง๋ง Python ๋ฐ์ฝ๋ ์ดํฐ์ ๊ฐ์ ๊ฒ์ ์์ํฉ๋๋ค. ์ฃผ์์ด ๋ฐ์ฝ๋ ์ดํฐ์ ๊ฐ์ง ์๊ธฐ ๋๋ฌธ์ ํ์ด์ฌ ์ฌ์ฉ์์๊ฒ๋ ํผ๋์ค๋ฌ์ธ ์ ์์ต๋๋ค.
<strong i="41">@onready</strong>
var my_sprite = $Sprite
์ธ์ ์ ๋ฌ์ ๊ฒฝ์ฐ ํจ์์ฒ๋ผ ์๋ํ ์ ์์ต๋๋ค.
@export_hint(ENUM)
@export_hint_string("Attack,Defense")
export var my_enum : int = 0
์๋ง๋ ๊ดํธ ์์ด:
<strong i="48">@export_hint</strong> ENUM
<strong i="49">@export_hint_string</strong> "Attack,Defense"
export var my_enum : int = 0
๋๋ ๋ช ๋ช ๋ ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ ์๋ ์์ต๋๋ค(ํค์๋๋ฅผ ํผํ์ญ์์ค):
<strong i="53">@export</strong> type=String hint=MULTILINE
var my_text = ""
๋๋ ๋ค๋ฅธ ๊ฒ.
๋ง์ถค ์ฃผ์
์ ์ ์๋ ์ฃผ์์ ๋จ์ํ ๋ฌด์๋ฉ๋๋ค(๊ฒฝ๊ณ ์ ํจ๊ป). ๋ฐ๋ผ์ ํ์ฌ ๋๊ตฌ๋ ์ฃผ์์ ๊ตฌ๋ฌธ ๋ถ์ํ์ฌ ๋ฌธ์ ์์ฑ๊ณผ ๊ฐ์ ๋ค๋ฅธ ๊ธฐ๋ฅ์ ์ ๊ณตํ ์ ์์ต๋๋ค.
์์ฒด ๊ฒ์ฌ API๋ฅผ ์ถ๊ฐํ๋ ๊ฒ๋ ๊ฐ๋ฅํฉ๋๋ค. get_method_annotations()
, get_property_annotations()
๋๋ ์ด์ ์ ์ฌํ ๊ฒ์
๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์คํฌ๋ฆฝํธ๊ฐ ์์๋๋ ํ๋ฌ๊ทธ์ธ์ด ์ฃผ์์ ์ฌ์ฉํ์ฌ ํ๋ ์ฝ๋ฉ๋ ์ด๋ฆ์ ์ฌ์ฉํ๋ ๋์ ํธ์ถํ ๋ฉ์๋๋ฅผ ๊ฒฐ์ ํ ์ ์์ต๋๋ค.
์ฌ์ฉ์ ์ ์ ์ฃผ์์ ์ฌ๋ฐ๋ฅด๊ฒ ์ดํดํ๊ณ ์์ผ๋ฏ๋ก ๋ค์๊ณผ ๊ฐ์ด ํ ์ ์์ต๋๋ค.
<strong i="6">@description</strong> "Adds two numbers and returns the result."
<strong i="7">@parameter</strong> name=num1 type=float description="The first number"
<strong i="8">@parameter</strong> name=num2 type=float description="The second number"
<strong i="9">@returns</strong> type=float description="num1 and num2 added together"
func add(num1, num2):
return num1 + num2
๊ทธ๋ฆฌ๊ณ get_annotations("add")
์ ๊ฐ์ ํจ์๋ฅผ ํธ์ถํ ์ ์์ต๋๋ค. ์ด ์ฃผ์์ ์ด๋ฌํ ์ฃผ์์ ๋ฐํํฉ๋๊น? ์ด๋ฌํ ์ฃผ์์ด Godot์์ ์ผ๋ถ ๋ด์ฅ ํค์๋/์ฃผ์์ผ๋ก ์ธ์๋์ง ์๋๋ผ๋?
@LikeLakers2 ๋ค, ๊ทธ๊ฒ ์์ง์ ๋๋ค.
๋๋ ๊ทธ๊ฒ์ ์ข์ํฉ๋๋ค. ๋ค์ ์๋ ๊ตฌํ์ ๋ํด์๋ ๋ชจ๋ฅด์ง๋ง GDscript ์ฝ๋์์๋ ์ง๊ธ ๋ณด์ด๋ ๊ฒ๋ณด๋ค ํจ์ฌ ๊นจ๋ํด ๋ณด์ผ ๊ฒ์ ๋๋ค. ํนํ setget ์์ ์ ๊ฒฝ์ฐ.
์ด๊ฒ์ ๋งค์ฐ ์ ์ฉํ์ง๋ง ๊ฐ๋
์ฑ์ ์ํด ํ ์ค์ง๋ฆฌ ๋ฌธ์ฅ์ ํ์ฉํด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด,
<strong i="6">@onready</strong> var a = $A
๋ ํ์ฉ๋์ด์ผ ํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ๋ง์ ์ค ๋ฐ๊ฟ์ด ์ถ๊ฐ๋๊ณ ์ด ๊ฒฝ์ฐ onready์ ์ ์ฉ์ฑ์ด ๋ญ๋น๋ฉ๋๋ค.
๊ฐ์ ๊ฒ
<strong i="10">@onready</strong>
var a = $A
var b = $B
var c = $C
์ฌ๋ฌ ๋ช ๋ น๋ฌธ์ ๋์ผํ ์ฃผ์์ ์ ์ฉํ๋ ๋ฐ ์ ์ฉํฉ๋๋ค.
๋ํ ์ฝ๋ก ์ ์ฌ์ฉํ์ฌ ์ฃผ์์ด ๋๋๋ ์์น์ ์ํฅ์ ๋ฐ๋ ๋ช ๋ น๋ฌธ์ด ์์๋๋ ์์น๋ฅผ ํ์ํ์ฌ GDScript์ ๋๋จธ์ง ๋ถ๋ถ๊ณผ ์ผ๊ด์ฑ์ ์ ์งํ ์ ์์ต๋๋ค.
์ฃผ์์ด ๋ช ํํ ์์๊ณผ ๋์ผ๋ก ๊ตฌ๋ฌธ ๋ถ์๋ ์ ์์ผ๋ฉด ์ธ๋ฏธ์ฝ๋ก ์ด ํ์ํ์ง ์์ผ๋ฉฐ ํ์ํ ๊ฒฝ์ฐ ๊ฐ์ ์ค์ ๋ฃ์ ์ ์์ต๋๋ค(์: '()'๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ์ธ์๊ฐ ์๋ ๊ฒฝ์ฐ).
vnen์ด ์ค๋๋ ๋ฐ๋ก ๊ฐ๊ธฐ ํค์๋๋ฅผ ์ ๊ฑฐํ๋ ค๋ ์๋๊ฐ ์๋๋ผ๊ณ ์๊ฐํฉ๋๊น?
๋ํ ํ๊ดํ์ ์ฌ์ฉํ๋ฉด ๋์์ด ๋ ์ ์์ต๋๋ค.
ํํฐ์ ๋ฆ์์ง๋ง ์ด๊ฒ์ด ๋ด๋ณด๋ด๊ธฐ ๋ณ์์ ๋ํ ๋ฒ์ฃผ๋ฅผ ์ ๊ณตํ๊ณ ๋๊ตฌ/๋๋ฒ๊ทธ ์คํฌ๋ฆฝํธ ๋ถํ ์ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ๋งค์ฐ ๊ด์ฌ์ด ์์ผ์ญ๋๊น?
์ ์ ์ ์ผ๋ก 3.2 ๋ก๋๋งต์ ์์ฑํ๋ ์ค์ธ๋ฐ, ์๋ํฐ์ ์ฌ์ฉ์ฑ ํฅ์์ ์ ๊ณตํ๊ธฐ ์ํด ์ด ๊ธฐ๋ฅ์ด ํ๋ฃจ ๋นจ๋ฆฌ ๊ตฌํ๋๊ธฐ๋ฅผ ์ง์ฌ์ผ๋ก ๋ฐ๋๋๋ค.
#### ์ธ๊ธฐ ์๋ ์๊ฒฌ ์์ :
gdscript์ ๊ตฌ๋ฌธ์ด ์ ๊ทธ๋ ๊ฒ ๋ง์ด ์์ ๋๊ณ ์์ต๋๊น? ์๋ ๊ฐ๋จํ๊ณ ๋ฐฐ์ฐ๊ธฐ ์ฝ๊ณ ์ง๊ด์ ์ผ๋ก ์ค๊ณ๋์์ต๋๋ค. ๋๋ ์ด๋ฌํ ๋ชจ๋ ์๋ก์ด ์ถ๊ฐ ์ฌํญ(์ ๋ ฅ๋ gds, ์ฃผ์)์ผ๋ก ์ธํด ์๋ก์ด ๊ฐ๋ฐ์์๊ฒ ๋งค์ฐ ํผ๋์ค๋ฌ์์ง๊น ๋๋ ต์ต๋๋ค. ์๋ฅผ ๋ค์ด, Godot์ ์๋ก์ด ์ฌ๋์ด ํํ ๋ฆฌ์ผ์ ๋ณด๊ณ LikeLakers2์ ๊ฒ์๋ฌผ์ ์๋ ์ฝ๋๋ฅผ ๋ณธ๋ค๋ฉด ๋จธ๋ฆฌ๊ฐ ํฐ์ง ๊ฒ ๊ฐ์ต๋๋ค. ๋ฌด์์ด๋ ๊ทธ๋ค์ ๊ทธ๊ฒ์ ๋ํด / ๊ทธ๊ฒ์ด ์ด๋ป๊ฒ ์๋ํ๋์ง ๋ฑ์ ๋ํด ๋ง์ ์ง๋ฌธ์ ํด์ผ ํ ๊ฒ์ ๋๋ค.
๋๋ gds์ ๋ํ ๋ชจ๋ ์ฌ๋์ ์ฌ๋๊ณผ ๊ธฐ์ฌ์๋ค์ด ์ด๋ป๊ฒ ๋ ๋์ ๊ฒ์์ ๋ง๋ค๊ณ ์ถ์ดํ๋์ง ๋ฑ์ ์์ ํ ์ดํดํฉ๋๋ค. ์ ๋ ์ค์ ๊ฒ์ ๊ฐ๋ฐ์์ ๊ธฐ์ฌ์ ์ฌ์ด์ ๊ฐ๋ฅํ ๋จ์ ์ด ์์ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค(๊ธฐ์ฌ์๊ฐ ๊ฒ์ ๊ฐ๋ฐ์๊ฐ ์๋๋ผ๊ณ ๋งํ๋ ๊ฒ์ด ์๋๋ผ ๋จ์ง ์ผ๋ถ ๊ธฐ๋ฅ์ ์ค์ ๋ก ํ์ํ์ง ์์ต๋๋ค). ๋ชจ๋ ์ฌ๋์ด ์ด๋ฌํ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ํ์๋ ์์ต๋๋ค. ๋๋ ๋จ์ง gds๊ฐ ๊ทธ ๋จ์ํจ์์ ์ ์ ๋ ๋ฉ์ด์ง๊น ๋๋ ต์ต๋๋ค. ๊ทธ๊ฒ ์ ๋ถ์ ๋๋ค. ๊ทธ๊ฒ์ ์ถฉ๋ถํ๋ณด๋ค ์ด๋ฏธ ๋ ...
๋ํ export ํค์๋์ ๋ํด 3์ค์ ์ง์ ํ๋ ๊ฒ์ ํ ์ค์ ๋ชจ๋ ๊ฒ์ ์ง์ ํ๋ ๊ฒ์ ๋นํด ๋งค์ฐ ๋ฒ๊ฑฐ๋กญ์ต๋๋ค. ์: onready var my_sprite = $Sprite
๋ ํจ์ฌ ๋ ๊นจ๋ํฉ๋๋ค(์ด์จ๋ ๋์๊ฒ)
ํฌ์ธํธ #4์ ๊ด๋ จํ์ฌ AFAIK ํธ์ง๊ธฐ์์ ์ด ์์ ์ ์ํํ ์ ์์ต๋๋ค. ๋ํ 'ํน์ ๊ฒฝ๊ณ ๋ฅผ ๋นํ์ฑํ'ํ๋ ์ฃผ์์ด ์ฝ๋ ๊ณณ๊ณณ์ ์์ผ๋ฉด ์ฝ๋๊ฐ ๋งค์ฐ ์ง์ ๋ถํด์ง ์ ์์ต๋๋ค.
gdscript์ ๊ตฌ๋ฌธ์ด ์ ๊ทธ๋ ๊ฒ ๋ง์ด ์์ ๋๊ณ ์์ต๋๊น? ์๋ ๊ฐ๋จํ๊ณ ๋ฐฐ์ฐ๊ธฐ ์ฝ๊ณ ์ง๊ด์ ์ผ๋ก ์ค๊ณ๋์์ต๋๋ค. ๋๋ ์ด๋ฌํ ๋ชจ๋ ์๋ก์ด ์ถ๊ฐ ์ฌํญ(์ ๋ ฅ๋ gds, ์ฃผ์)์ผ๋ก ์ธํด ์๋ก์ด ๊ฐ๋ฐ์์๊ฒ ๋งค์ฐ ํผ๋์ค๋ฌ์์ง๊น ๋๋ ต์ต๋๋ค.
์ ๋ถ๋ ์๋์ง๋ง ๋๋ถ๋ถ์ GDScript ๊ตฌ๋ฌธ ๋ณ๊ฒฝ์ ์ด์ ์ฝ๋์ ํธํ๋ฉ๋๋ค. ์ฃผ์ ๋ชฉํ๋ GDScript๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ๋ฐ์์ ์์ฐ์ฑ์ ๋์ด๋ ๊ฒ์ ๋๋ค. ์:
match
๋ฌธ์ switch-case ๋ฌธ(๋ง์ ์์ฒญ์ด ์์์)์ ํ์ฉํ๊ณ ์ฌ๋๋ค์ด ๋ฐฐ์ด๊ณผ ์ฌ์ ์ ์ฝ๊ฒ ์ผ์น์ํฌ ์ ์๋๋ก ํ์ฌ ์ด๋ฅผ ๊ฐ์ ํฉ๋๋ค.onready
๋ณ์(2.x์ ์๋ก์ด ๊ธฐ๋ฅ)๋ ์์ฃผ ์ฌ์ฉ๋๋ ํจํด, ์ฆ _ready
์์ ๋ณ์๋ฅผ ์ด๊ธฐํํ๋ ํจํด์ ๊ตฌ์ฒดํํฉ๋๋ค.์ค์ ๊ฒ์ ๊ฐ๋ฐ์์ ๊ธฐ์ฌ์ ์ฌ์ด์ ๋จ์ ์ด ์์ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
์คํ ์ปค๋ฎค๋ํฐ์ ๋๋ค. ๊ฒ์ ๊ฐ๋ฐ์๋ ์ฌ๋ฌ๋ถ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์์ ์์ ์ ์๊ฒฌ์ ํํํ ์ ์์ต๋๋ค. ์ด์จ๋ ์ฃผ์์ด ํ์คํ๋๊ธฐ๊น์ง๋ ์๋นํ ์๊ฐ์ด ๊ฑธ๋ฆด ๊ฒ์ ๋๋ค.
[...] ๋๋ gds๊ฐ ๊ทธ ๋จ์ํจ์์ ์ ์ ๋ ๋ฉ์ด์ง๊น ๋๋ ต์ต๋๋ค. ๊ทธ๊ฒ ์ ๋ถ์ ๋๋ค. ์ด๋ฏธ ์ถฉ๋ถํ๋ค...
์ด๋ฏธ ์ถฉ๋ถํ๋ค๋ฉด ๊ธฐ๋ฅ ์์ฒญ์ ๋ฐ์ง ์์์ ๊ฒ์ ๋๋ค.
๋ํ export ํค์๋์ ๋ํด 3์ค์ ์ง์ ํ๋ ๊ฒ์ ํ ์ค์ ๋ชจ๋ ๊ฒ์ ์ง์ ํ๋ ๊ฒ์ ๋นํด ๋งค์ฐ ๋ฒ๊ฑฐ๋กญ์ต๋๋ค. ์: onready var my_sprite = $Sprite๊ฐ ํจ์ฌ ๋ ๊น๋ํฉ๋๋ค.
๊ตฌ๋ฌธ์ ์์ง ์๋ฃ๋์ง ์์์ต๋๋ค. onready
๋ฐ export
ํค์๋๋ฅผ ์ฆ์ ๋์ฒดํ์ง ์์ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค.
์ ๋ C#์ ์์ฑ๊ณผ ๊ฐ์ ์์ด๋์ด๋ฅผ ์ ๋ง ์ข์ํฉ๋๋ค.
ํด๋์ค ๋ฐ ์ ํธ ์ฃผ์๋ ํฅ๋ฏธ๋ก์ธ ์ ์์ต๋๋ค.
์์ฑ, ๋ฉ์๋ ๋๋ ํด๋์ค์ ํน์ ์ฌ์ฉ์ ์ง์ ์ฃผ์์ด ์๋์ง ์ฌ๋ถ์ ๊ด๊ณ์์ด ์๋์ผ๋ก ์๋ํ๋ Inspector ํ๋ฌ๊ทธ์ธ์ ๊ฐ๋จํฉ๋๋ค.
๊ตฌ๋ฌธ์ ๊ดํด์๋ ์ ํ์ ์ผ๋ก ํ ์ค์ ์์ฑํ ์ ์๋ ๊ฒ์ ์ ํธํ์ง๋ง ๊ทธ๋ ๊ฒ ์ค์ํ์ง๋ ์์ต๋๋ค.
์ฌ์ฉ์ ์ ์ ์ฃผ์์ ์ ์ํ๋ ํ๋ก์ธ์ค๋ ์ด๋ป์ต๋๊น? ๋๋ ๊ทธ๊ฒ๋ค์ด ์ฝ๋์์ ๋งค๋ฒ ์์ ๋กญ๊ฒ ์ ์๋์ง ์๊ณ ํด๋์ค์ ๊ฐ์ด ๋จ์ผ ์ ์๋ก ์ฌ์ฉ์์ ์ํด ์์ฑ๋๋ ๊ฒ์ ์ ํธํฉ๋๋ค.
๋๋ ์ด๊ฒ์ด ๋ ๋ง์ ์กฐ์ฌ๊ฐ ํ์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ธ์ด์ (์ ํ์ ๊ตฌ๋ฌธ ๋ฑ์ผ๋ก) ์ถ๊ฐํ์ฌ ์์ ํ ์ด๋ณด์๊ฐ ๋ฐ์ด๋ค๋ ค๊ณ ํ๋ ๊ฒ์ ํผ๋ํ์ง ์๋๋ก ํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
๋ค์ ๊ตฌ๋ฌธ์ ๋ณด๋ฉด ๊ด์ฐฎ์ ๊ฒ ๊ฐ์ต๋๋ค.
<strong i="7">@export</strong> type=String, hint=MULTILINE
"๋งค๊ฐ๋ณ์" ์ฌ์ด์ ์ผํ๋ฅผ ์ถ๊ฐํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ํ์ฌ ๊ตฌ๋ฌธ๊ณผ ์ข ๋ ์ผ๊ด์ฑ์ด ์๊ฒ ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
export (String, MULTILINE) var my_var
์ฒซ ๋ฒ์งธ ๋ฒ์ ์ ์ข ๋ ์ฅํฉํ์ง๋ง ๋ ๋ช ํํ๊ฒ ๋ง๋ค๊ณ ์๋ ์์ฑ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด ๋๋ฌด ์ํ์ง ์์์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. :)
์์ผ๋ก ๋ ๋ง์ ๊ตฌ๋ฌธ ๋ ผ์๊ฐ ์ด๋ฃจ์ด์ ธ์ผ ํฉ๋๋ค. ์ ๋ฐ์ ์ผ๋ก ์์ด๋์ด๊ฐ ๋ง์์ ๋ญ๋๋ค.
์ฃผ์์ ๊ตฌ์ฑ ์ฃผ์ ์ ์ข์ ๋ฐฉ๋ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ๊ตฌ์ฑ๊ณผ ์ฝ๋๋ฅผ ๋ถ๋ฆฌํ๋ ๊ฒ์ด ๋ ๊นจ๋ํ ์ ๊ทผ ๋ฐฉ์์ผ ์ ์์ต๋๋ค. ํค๋ ํ์ผ๋ก ์ถ๊ฐํ๋ ๊ฒ์ด ๋ ๋์์ด ๋ ์ ์์ต๋๋ค.
@bojidar-bg์ ๋๊ธ์์...
์ด์จ๋ ์ฃผ์์ด ํ์คํ๋๊ธฐ๊น์ง๋ ์๋นํ ์๊ฐ์ด ๊ฑธ๋ฆด ๊ฒ์ ๋๋ค.
๋๊ตฐ๊ฐ ์ด ๊ตฌํ์ ์ง์ฐ์ํค๋ "์ฐจ๋จ" ๋ฌธ์ ๊ฐ ๋ฌด์์ธ์ง ์ค๋ช ํ ์ ์์ต๋๊น? GDScript/manpower์ ๋ํ ์น์ํจ์ ๋๊น, ์๋๋ฉด ์ฃผ์์ ์ง์ํ๊ธฐ ์ํด ๋ฏธ๋ฆฌ ๊ตฌํํด์ผ ํ๋ ํน์ ๊ธฐ๋ฅ์ด ์์ต๋๊น?
๊ธ์์, ์ ๋๊ธ ์ดํ๋ก ๊ฝค ์๊ฐ์ด ํ๋ ๋๋ฐ, ์ด๋ฏธ ์ฆ๋ช ๋ ๊ฒ ๊ฐ์๋ฐ์?
์ฃผ์ ์ง์์ ์ํ ์ฃผ์ ์ฐจ๋จ๊ธฐ๋ ํต์ฌ ๊ฐ๋ฐ์๊ฐ ๊ตฌ๋ฌธ ๋ฐ ์๋ฏธ ์ฒด๊ณ์ ๋์ํ๋๋ก ํ๋ ๊ฒ์ ๋๋ค. ๊ทธ ํ์๋ ๊ตฌํ์ด ๋น๊ต์ ์ฌ์์ผ ํฉ๋๋ค.
@reduz ๋ ์ฃผ์์ด ๋ฉํ๋ฐ์ดํฐ๋ง์ ์ํ ๊ฒ์ด๋ฉฐ ์คํฌ๋ฆฝํธ๋ ํธ์ง๊ธฐ ๋์์ ์ํฅ์ ๋ฏธ์น์ง ์์์ผ ํ๋ค๊ณ ์ ํธํ๊ธฐ ๋๋ฌธ์ ์ด์ ๋ํด ๋ ผ์ํด์ผ ํฉ๋๋ค. ์ด๊ฒ์ ๋์ ์๋ ์ ์์ ์์ฃผ ๋ฌด์๋ฏธํ๊ฒ ๋ง๋ค ๊ฒ์ ๋๋ค.
ํนํ ๋จ์ผ ํค์๋( onready
, master
, puppet
๋ฑ)๋ฅผ ๊ต์ฒดํ ๋ ์ฃผ์์ด ์ถฉ๋ถํ ๋ช
ํํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ฐ๋ฆฌ๋ ์ฌ์ ํ ํฉ์์ ๋๋ฌํด์ผ ํฉ๋๋ค.
์ค๋ช
๋ ๋๋ก ์ด๊ฒ์ด GDScript์ ํ์์ ์ธ ์ถ๊ฐ ๊ธฐ๋ฅ์ด ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋ฉํ๋ฐ์ดํฐ์ ๊ตญํ๋์ด์๋ ์ ๋๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ณ์์ ์ฌ์ฉ๋๋ ๋ง์ ํค์๋๋ฅผ ํ์คํ ์ถ์ํด์ผ ํฉ๋๋ค. ํนํ export
๋ ์ด๋ค ๊ฒฝ์ฐ์๋ ์ฝ๊ธฐ๊ฐ ์กฐ๊ธ ์ด๋ ค์ธ ์ ์์ต๋๋ค. ์ฌ๋ฌ ๋ฌธ์ฅ์ผ๋ก ๋๋๋ ๊ฒ์ด ์ดํด์ ๋์์ด ๋๋ค๊ณ ์๊ฐํฉ๋๋ค.
3๋ ๋ ๋ฌธ์ #6204๋ฅผ ์ฐ์ํ ๋ฐฉ์์ผ๋ก ํด๊ฒฐํ๋ ๋ฐ์๋ ์ฌ์ฉํ ์ ์์ต๋๋ค.
<strong i="8">@export</strong>
<strong i="9">@export_tooltip</strong> "The name used when displaying this item in the inventory and in shops."
var display_name := ""
๋ํ ๋ฉํ๋ฐ์ดํฐ ์ด์์ ์ง์ํด์ผ ํ๋ค๋ ๋ฐ ๋์ํฉ๋๋ค. ๊ทธ๊ฒ์ ๋ง์ ๋ ผ๋ฆฌ๋ฅผ ๋จ์ํํ๊ณ ๊ฐ๋ ์ฑ์ ํฅ์์ํต๋๋ค.
๋๋ @willnationsdev์ ๋์ํ๊ณ ์ฃผ์์ ์ฌ์ฉํ์ฌ ์ฝ๋๋ก ์ ํธ๋ฅผ ์ฐ๊ฒฐํ๊ณ ์ถ์ต๋๋ค. ๋ค์๊ณผ ๊ฐ์ด ์ฝ๋ ๊ฐ๋ ์ฑ์ ํฅ์์ํฌ ์ ์์ต๋๋ค.
@connect("timeout")
func _on_Timer_timeout():
...
@rluders ๋ ์คํฌ๋ฆฝํธ๊ฐ Timer
๋
ธ๋์ ์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค.
@Zylann ๋ฌผ๋ก ์
๋๋ค. ๊ฐ๋จํ ์์
๋๋ค. "๋์" ๋งค๊ฐ๋ณ์๋ฅผ ์ง์ํ๊ณ ์์ฒด ์ฐ๊ฒฐ์ ์ํด ์๋ตํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์คํฌ๋ฆฝํธ๊ฐ Timer
์ธ๋ถ์์ ์คํ ์ค์ธ ๊ฒฝ์ฐ:
@connect("timeout", $Timer)
func _on_Timer_timeout():
...
๋๋ ์ด๊ฒ์ด ์ด๋ป๊ฒ ๊ตฌํ๋ ์ ์๋์ง ์ ํ ๋ชจ๋ฅด์ง๋ง, ํนํ ํค์๋์ ๋ํ gds์ ์ฃผ์์ ๋ณด๊ณ ์ถ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ธฐ๋ก์ ์ํด ์ธ๋ฏธ์ฝ๋ก ์ด๋ ์ค ๋ฐ๊ฟ ๋์ '()'๋ฅผ ์ฌ์ฉํ์ฌ ์ฃผ์์ ๊ตฌ๋ถํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์์ฒด ์ฃผ์ + ์์ ํ ์ฃผ์ ํ๋ก์ธ์๋ฅผ ๋ง๋ค ์ ์๋ค๋ฉด ํจ์ฌ ๋ ์ข์ ๊ฒ์ ๋๋ค.
@Zylann ๋ฌผ๋ก ์ ๋๋ค. ๊ฐ๋จํ ์์ ๋๋ค. "๋์" ๋งค๊ฐ๋ณ์๋ฅผ ์ง์ํ๊ณ ์์ฒด ์ฐ๊ฒฐ์ ์ํด ์๋ตํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์คํฌ๋ฆฝํธ๊ฐ
Timer
์ธ๋ถ์์ ์คํ ์ค์ธ ๊ฒฝ์ฐ:@connect("timeout", $Timer) func _on_Timer_timeout(): ...
๊ทธ๊ฒ์ ์ด๋ค ์์ผ๋ก๋ ํ๋ฌ๊ทธ์ธ์ ์ํด ์ง์๋ ์ ์์ง๋ง, ๋๋ ๊ทธ๊ฒ์ ํต์ฌ ๊ธฐ๋ฅ์ผ๋ก ๋ง๋ค์ง ์์ ๊ฒ์
๋๋ค.
ํ๋ฌ๊ทธ์ธ์ ๋์ฑ ๊ฐ๋ ฅํด์ง ์ ์์ต๋๋ค.
๋ด๊ฐ ๋งํ ์ ์๋ ๊ฒ์ ์ด๋ฌํ ๊ฒ๋ค์ด ๊ตฌํ๋๊ธฐ ์ ์ gdscript๋ฅผ ๋ฐฐ์ด ๊ฒ์ด ๊ธฐ์๋ค๋ ๊ฒ๋ฟ์ ๋๋ค.
@export_hint(ENUM)
@export_hint_string("Attack,Defense")
export var my_enum : int = 0
์ด๋ณด์์ธ ๋๋ฅผ ์ํด ๊ตฌ๋ฌธ ๋ถ์ํ๋ ๊ฒ์ ๋งค์ฐ ๋ฒ ์ฐจ๊ณ ์ด๋ ค์ ์ ๊ฒ์ ๋๋ค.
@sleepcircle ๋ชจ๋ ๊ฒฝ์ฐ์ GDScript๋ฅผ ๋จ์ํ๊ฒ ์ ์งํ๋ ค๊ณ ๋ ธ๋ ฅํ ๊ฒ์ ๋๋ค. ๋ฐ๋ผ์ ์ฌ๊ธฐ์์ ๋น๊ผฌ๋ ๋ง์ ํ ํ์๊ฐ ์์ต๋๋ค. ์ธ์ฉํ ์ฝ๋๋ ๋จ์ง ์ ์์ผ ๋ฟ์ด๋ฉฐ _the_ ๋ฏธ๋ ๊ตฌ๋ฌธ์ด ์๋๋๋ค.
๋ฏธ์ํด์, ๋น๊ผฌ๋ ค๊ณ ํ ๊ฑด ์๋์์. ๋๋ ๋จ์ง ๋๋ค์๊ฐ ์ด๋ฌํ ์ถ๊ฐ๋ฅผ ์น์ธํ๋ ๊ฒ ๊ฐ์๊ธฐ ๋๋ฌธ์ ๊ทธ๊ฒ๋ค์ด ๋ถ๊ฐํผํ๋ค๊ณ ๊ฐ์ ํ์ ๋ฟ์ ๋๋ค.
๊ฒ์ ๊ฐ๋ฐ์ ๊ฐ์ฌ๋ก ๋ด $0.02๋ฅผ ๋์ง๊ณ ์ถ์์ต๋๋ค. ๊ฒฝ๊ณ : ๋ณ๋ก ๋์์ด ๋์ง ์๋ ๋ถํ์ํ๊ฒ ๊ธด ์ค๋ช ์ ์๋ก์ด ๊ฐ๋ฐ์๊ฐ ์ด๋ฅผ ์ด๋ป๊ฒ ์ธ์ํ ๊ฒ์ธ์ง์ ๋ํด 5๋ ๋์ ํ๋ก๊ทธ๋๋ฐ์ ๊ฐ๋ฅด์น ๊ฒฝํ์ผ ๋ฟ์ ๋๋ค.
์ฃผ์๊ณผ ๊ฐ์ ์๋ก์ด ์ธ์ด ๊ด์ฉ๊ตฌ๋ฅผ ๋ง๋ค ๋ ๊ฐ๋ฅํ ๋ชจ๋ ์ดํฌ๋์ค๋ฅผ ํผ๊ธฐ๋ฐฑํด์ผ ํ๋ ๊ฒ์ด ์ค์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์๋ฅผ ๋ค์ด connect
๋ฅผ ์ฌ์ฉํ๋ฉด ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ๊ณ ์ผ๋ถ ๋ถ์์ฉ์ด ์๋ ํจ์ ๋ฅผ
@
๊ฐ ๋ฉํ๋ฐ์ดํฐ์๋ง ์ฌ์ฉ๋ ๊ฒฝ์ฐ ์ ๊ฐ๋ฐ์๋ @
๋ณผ ๋๋ง๋ค ์ฝ๋ ๋
ผ๋ฆฌ์ ์ํฅ์ ์ฃผ์ง ์๋ ๋ฉํ๋ฐ์ดํฐ๋ก ์ธ์ํฉ๋๋ค. ๋
ผ๋ฆฌ์ ์ํฅ์ ๋ฏธ์น๋ ๊ฒฝ์ฐ x ๋ก ์ฌ์ฉ๋๊ธฐ๋ ํ๊ณ y ๋ก ์ฌ์ฉ๋๊ธฐ๋ ํ๋ ์๋ก์ด ๊ด์ฉ๊ตฌ๋ฅผ ์ถ๊ฐํ์ง ์๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
ํ์ฌ ๋ณ์๋ฅผ ์์ ํ๊ธฐ ์ํด var ์ ๋์ฌ, ์ ๋ฏธ์ฌ ๋ฐ ๋์์ด ์์ต๋๋ค. ๋ฐ๋์ "๋ณ์ ์์ ์"๊ฐ ์๋ ๋ช ๊ฐ์ง๋ฅผ ๋์ดํ ๊ฒ์ด์ง๋ง ์๋ก์ด ๊ฐ๋ฐ์๋ ์ด๋ฌํ ๋ฐฉ์์ผ๋ก ๋ณผ ์ ์์ต๋๋ค.
onready
, export(...)
onready
๋ ๋ฐํ์ ๋ณ์ ๋ก๋ฉ์ ์ํฅ์ ๋ฏธ์น๊ณ export
๋ ์ผ์ข
์ ํธ์ง๊ธฐ ํํธ/๋ฉํ๋ฐ์ดํฐ์
๋๋ค. ๊ทธ๊ฒ๋ค์ ๊ฐ์ ์ฅ์์์ ์ฌ์ฉํ๋ ๊ฒ์ ๊ทธ๋ค์ ํ๋์ด ์ค์ ๋ก๋ ๊ทธ๋ ์ง ์์ ๋ ์ด๋ป๊ฒ๋ ์ฐ๊ฒฐ๋์ด์ผ ํ๋ ๊ฒ์ฒ๋ผ ๋๊ปด์ง๋๋ค.class_name
, extends
, signal
, enum
, const
, func
setget
export
์ ์ ์ฌํฉ๋๋ค. ์ฌ๊ธฐ์๋ ์๊ฐ์ด ๋ค๋ฅธ ์ฌ๋๋ค์ ๋ณผ ์ ์์ง๋งvar x : int = 5
const
๋ ๊ฒ์ ๋ก์ง ์์ฒด๋ฅผ ์ํ ๋๊ตฌ๋ผ๊ธฐ๋ณด๋ค ๊ฐ๋ฐ์์ ๊ฒฝํ์ ์์ ํ๋ค๋ ์ ์์ setget๊ณผ ์ ์ฌํฉ๋๋ค.์ด์ ์ฃผ์ ์ถ๊ฐ์ ๋ํด ์ดํด๋ณด๊ฒ ์ต๋๋ค.
์ฃผ์์ ์๋ก์ด ๊ฐ๋ฐ์์๊ฒ ๊ฐ๋ฅด์ณ์ผ ํ๋ ์์ ํ ์๋ก์ด ๊ฐ๋ /๊ด์ฉ๊ตฌ ์ผ ๊ฒ์ ๋๋ค. ์ด์์ ์ผ๋ก, ์๋ก์ด ๊ฐ๋ฐ์๋ ์๋ก์ด ๊ด์ฉ๊ตฌ๊ฐ ์ ์ฉํด์ง๋ฉด ์ ๊ธฐ์ ์ผ๋ก ์ ํํ ์ ์๋๋ก ์๋๋ฅผ ๋์ด๊ณ ๊ฐ๋ฅํ ํ ์ ์ ๊ด์ฉ๊ตฌ๋ฅผ ์ ์ ์์ด์ผ ํฉ๋๋ค. ํ ํฌํธ๋ฆฌ๋ผ๊ณ ์๊ฐํ์๋ฉด ๋ฉ๋๋ค.
Tier 3-4๊ฐ ์ฃผ์์ ์ฃผ์ ๋์์ธ ๊ฒ ๊ฐ์ต๋๋ค. ๋ ๊ฐ์ง ๋ค๋ฅธ ๊ตฌํ์ ๋ํด ํ์๋ค์๊ฒ ๋ ๊ฐ์ง ์๋ฆฌ๋ฒ ์ดํฐ ํผ์น๊ฐ ์์ต๋๋ค.
๋๋ DEVS ๊ณ ๋ (Godot)์ ์ซ์๋ฅผ ๊ฐ๋ฅด์ณค๋ค, ๋๋ ์ฃผ์ ์ ์ด๋ ๋ฑ๊ธ 3 ์ต์
์ ์๊ฐํ๊ณ , ๋๋ถ๋ถ์ ์ฐจ๋ผ๋ฆฌ์ด์๋ ๊ฒ ํฐ์ด 4๋ ๊ทธ๋ค์๊ฒ ๋ณด์ฌ @
์ด๋ฏธ ๋๊น์ง ๊ธฐํธ ์ ์ฒด์ ์ผ๋ก ํฉ๋ฆฌ์ ์ผ๋ก ๋ณต์กํ ๊ฒ์์ ๊ตฌ์ถํ๊ณ ํ๋ก์ธ์ค ๋ฅผ ๊ฐ์ ํ๋ ค๊ณ
์ด๊ฒ์ ์ฌ๋๋ค์๊ฒ "๋ฌธ์๊ฐ ํ์ํ ๋ ํฐ ํ๋ก์ ํธ๋ฅผ ๋น๋ํ ๋ ์ฃผ์์ ๋ฐฐ์ฐ์ญ์์ค"๋ผ๊ณ ๋งํ๊ธฐ ์ฝ๊ธฐ ๋๋ฌธ์ ๊ฒ์ ๊ธฐ๋ฅ์ ์ค์ํ์ง ์๊ฑฐ๋ ๋์ฒด ๊ตฌํ์ด ์๊ฑฐ๋ ์์ ํ ๋ฌธ์ํ๋ฅผ ์ํ ๊ฐ๋ฐ์ ์๊ธฐ ์ ์ฉ ์ฃผ์์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ ์๊ฒฌ์์ ์๋ฏธํฉ๋๋ค.
์ค๋ ๋์ ํน์ ํฌ์ธํธ:
_ready
์์ ์์ํ์ฌ ์์ํ ์ ์๊ณ ์ฃผ์์ด ์ค์ฒฉ๋ ๊ฐ๋ฅ์ฑ์ onready
์ฐ๋ ํ์๊ฐ ํจ์ฌ ์ ๊ธฐ ๋๋ฌธ์ ํ์ํ์ง ์์ต๋๋ค.@type(const int)
@type(enum)
, ๋ชจ๋ ๊ฐ๋ฐ์ ์งํฅ ์คํ์ผ๋ก ํตํฉ๋ฉ๋๋ค.๋ค์ ๋งํ์ง๋ง, ํฐ ๊ธฐ์ฌ๋ ์๋์ง๋ง ์ฃผ์ ์๋์ ํฌํจ๋์ด์ผ ํ๋ ๊ธฐ๋ฅ์ ๋ํด ์๊ฐํ ๋ ๊ณ ๋ คํด์ผ ํ ์์์ ๋๋ค. ๋๋ ๊ทธ๊ฒ๋ค์ด ์ข์ ์์ด๋์ด๋ผ๊ณ ์๊ฐํ์ง๋ง ๊ทธ๊ฒ๋ค์ด ์ด๋์ ๋ง๋์ง ์ ํํ ๋ถ๋ถ๋ช ํฉ๋๋ค. ๊ธธ์ด์ ๋ํด ์ฃ์กํฉ๋๋ค. ์ ๋ ํญ์ ์ฝ๊ฐ ์ฅํฉํฉ๋๋ค.
๋๋ ์ด๊ฒ์ ์ซ์ดํ๋ค.
๋ชจ๋ ํ๋, ์์ฑ ๋ฐ ๋ฉ์๋์ ๋ํด ๋ง์ ์ฃผ์์ ๊ฐ๊ณ ์ถ์ง ์์ต๋๋ค.
๋๋ ๋ ๋ง์ ํค์๋๋ฅผ ๊ฐ์ง๊ณ ์ถ๋ค
์ฌ๋๋ค์ด ์๋ง์ ํค์๋๋ฅผ ์ข์ํ์ง ์๋๋ค๋ฉด ๊ทธ ์ค ์ผ๋ถ๋ฅผ ์ ๊ฑฐํ ์ ์์ต๋๋ค.
export MyClass : Node2D # export replaces class_name, : replaces extends
signal mySignal #signal is kept
group(MyHeader, "res://icon.png" )
export var my_property : Array(int) setget _set_my_property, _get_my_property # : replaces export type
var test = 0 # no need for onready. variables declared outside of _ready automatically try to be onready vars
#others are kept
๋๋ ์๋ ์ ์์ ์ ์ ์ผ๋ก ๋์ํฉ๋๋ค.
๋๋ ์์ ์๊ฒฌ์ ๋์ํ์ง ์์ง๋ง ์ฅ์ ์ด ๋จ์ ๋ณด๋ค ํจ์ฌ ํฝ๋๋ค.
@Shadowblitz16 ๋ค์๊ณผ ๊ฐ์ ์ด์ ๋ก ์ฌ๊ธฐ ์ฌ๋๋ค์๊ฒ ์ด๋ฌํ ์ ์ ์ค ๋ง์ ๋ถ๋ถ์ด ํผ๋์ค๋ฝ์ต๋๋ค...
export MyClass : Node2D # export replaces class_name, : replaces extends
export
, class_name
, :
๋ฐ extends
๊ฐ๊ฐ์ 4๊ฐ์ ์์ ํ ๋ณ๊ฐ์ ๋ฐ์ดํฐ ํฌ์ธํธ์ ์์คํ
์ ๊ตฌ์ฑํฉ๋๋ค. ๋ณต๊ตฌ ๋ถ๊ฐ๋ฅํ๊ฒ ๋ค๋ฅธ ๊ฒ์ ์ํฅ์ ๋ฏธ์น์ง ์๊ณ ๋จ์ํ ์ ํํ ์๋ ์์ต๋๋ค.
export
๋ ํธ์ง๊ธฐ GUI๋ฅผ ๋น๋ํ๊ธฐ ์ํด Inspector๋ก ์ ์ก๋๋ ์์ฑ๋ PropertyInfo ๊ฐ์ฒด๋ฅผ ๊ตฌ์ฑํฉ๋๋ค.class_name
๋ ์คํฌ๋ฆฝํธ๋ฅผ ScriptServer์ ์ ์ญ ํด๋์ค๋ก ๋ฑ๋กํฉ๋๋ค. ๊ธฐ์ ์ ์ผ๋ก ์ ํ ์์คํ
๊ณผ ๊ด๋ จ์ด ์์ต๋๋ค. ๋ฐํ์์ด ์๋ ๊ตฌ๋ฌธ ๋ถ์ ์๊ฐ์ ์คํฌ๋ฆฝํธ์ ์ ์ญ ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ ๊ฒฝ์ฐ์๋ง GDScript์ "์ ์ ์ ํ ์ง์ "์ ์ผ๋ถ์
๋๋ค.:
๋ ์ ํ์ ์ ํ ํํธ์ ์ฌ์ฉ๋ฉ๋๋ค. ์ฌ๋๋ค์ด GDScript๋ฅผ ํญ์ ์ ์ ์ผ๋ก ์
๋ ฅํ๋๋ก ํ๊ฑฐ๋ ๋์ฒด ์ ํ ํํธ ๊ตฌ๋ฌธ์ ์ ์ํ์ง ์๋ ํ ์ฝ๋ก ํ ํฐ์ ์ฉ๋๋ฅผ ๋ณ๊ฒฝํ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.extends
๋ ์์๋ ํด๋์ค์ ์ฌ์ฉ๋ฉ๋๋ค(์๋ค์ํผ). ์ด๊ฒ์ ๋ค๋ฅธ ์ธ์ด์์ ๋งค์ฐ ์ผ๋ฐ์ ์ธ ๊ตฌ๋ฌธ์ด๋ฉฐ ๋ชจ๋ ๋ฌธ์์ ์์ต์๋ ์ด๋ฏธ ์ด ๋ฐฉ๋ฒ์ ๋ฐ๋ฆ
๋๋ค. ์ด๊ฒ์์ ๋ฒ์ด๋ ์์ ํ ๋ฏธ์ฉ์์ ์ด์ ๋ก ๋ ๋ง์ ์์
์ ๋ง๋ค๋ ค๋ ๊ฐ๋ ฅํ ๋๊ธฐ๋ ์์ ๊ฒ์
๋๋ค.group(MyHeader, "res://icon.png")
์ด๊ฒ์ด ๋ฌด์์ ํ ๊ฒ์ธ์ง ๋์๊ฒ๋ ๋ถ๋ช ํ์ง ์์ต๋๋ค. ๋ด ๋ง์, ๋ ธ๋๊ฐ "MyHeader" ๊ทธ๋ฃน์ ์ถ๊ฐ๋ ๊ฒ ๊ฐ์ต๋๋ค(์ด๋ ์๋ฏธ๊ฐ ์์ ์ ์์). ๊ทธ๋ฌ๋ ์์ด์ฝ์ ๋ฌด์์ ์ํ ๊ฒ์ ๋๊น? ๊ทธ๋ฃน์๋ ์ฐ๊ฒฐ๋ ์์ด์ฝ์ด ์์ต๋๋ค.
export var my_property : Array(int) setget _set_my_property, _get_my_property # : replaces export type
์์ ์ธ๊ธํ๋ฏ์ด ์ด๋ฌํ ๊ฒ๋ค์ ๋ชจ๋ ๋์ผํ ์์คํ ์ด ์๋๋ผ ๋ค๋ฅธ ์์คํ ์ ์ํฅ์ ๋ฏธ์นฉ๋๋ค. ๋ํ ๊ฐ์ ์ ํ์ด๋ ์ด๊ธฐํ๊ฐ ์ ์ฐํ๊ธฐ๋ฅผ ์ํ๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๋์ GDScript์์ ๋ค์๊ณผ ๊ฐ์ด ํ ์ ์์ต๋๋ค.
onready export(NodePath) var the_node = get_node(the_node)
var test = 0 # no need for onready. variables declared outside of _ready automatically try to be onready vars
์ค๋น ์๋ฆผ ์ ์ ๋ฐ์ดํฐ๋ฅผ ์ด๊ธฐํํ๋ ๊ฒ์ ์๋ฏธ๊ฐ ์์ต๋๋ค. ์คํฌ๋ฆฝํธ๋ Node ํด๋์ค๊ฐ ์๋๋ผ Object ํด๋์ค์ ์ฐ๊ฒฐ๋ฉ๋๋ค. ์คํฌ๋ฆฝํธ ์์ฑ์ ๊ตฌ์ฑ ์ค์ ์ด๊ธฐํ๋ฉ๋๋ค. Node ํด๋์ค์ ์์ฑ์์ ๋๋ฌํ๋๋ผ๋ ๋ณ๊ฒฝ๋์ง ์์ต๋๋ค. _ready()
์๋ฆผ์ ์ธ์คํด์คํ ํ ํจ์ฌ ๋์ค์ ๋ฐ์ํฉ๋๋ค. ๋ณ์ ์ด๊ธฐํ์ ๊ธฐ๋ณธ ํ์ด๋ฐ์ด ๊ฐ์ฒด์ ๋
ธ๋ ์ฌ์ด์ ๋ค๋ฅด๋ค๋ ๊ฒ์ ๊ทน๋๋ก ํผ๋์ค๋ฝ๊ณ Godot๋ฅผ ๋ฐฐ์ฐ๊ณ ์ฌ์ฉํ๋ ์ฌ๋๋ค์๊ฒ ์์ธกํ ์ ์๋ ๋ง์ ํ๋์ผ๋ก ์ด์ด์ง ๊ฒ์
๋๋ค.
๋๋ ๋น์ ์ ์ ์์ ๋ฌด์ํ๋ ค๋ ๊ฒ์ด ์๋๋ผ ์ฌ๋๋ค์ด ์ ์๋ ๋ณ๊ฒฝ ์ฌํญ์ ๋ํ ์ ๋น์ฑ์ ๋ณด์ง ๋ชปํ๋ ์ด์ ๋ฅผ ์ค๋ช ํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.
@willnationsdev ์๊ฒ ์ต๋๋ค.
์ฃผ์๊ณผ ์ถ๊ฐ ํค์๋๋ฅผ ๋ชจ๋ ์ํํ๋ ๊ฒ์ ์ด๋ป์ต๋๊น?
์ด ๋ฐฉ๋ฒ์ผ๋ก ์ฌ์ฉ์๋ ์ํ๋ ๊ฒฝ์ฐ ์ฃผ์์ ์ฌ์ฉํ๊ณ ํ๋๋น ์์ญ ๊ฐ์ ์ฃผ์์ ์ํ์ง ์๋ ๊ฒฝ์ฐ ํค์๋๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
ํธ์ง: C#์ ์ด๋ ๊ฒ ๊ฒฐํฉํ ์ ์๋ ์์ฑ์ผ๋ก ๊ธฐ๋กํด ๋์ญ์์ค.
[Attribute1(), Attribute2()]
๊ทธ๋ฌ๋ ์ด๊ฒ์ด ์ค ์๋ฅผ ์ค์ด๋ ๋ฐ ๋์์ด ๋ ์ ์์ง๋ง ์ฌ์ ํ ์ฝ๊ฐ ์ถ์
ํฉ๋๋ค.
@Shadowblitz16 ์ฐ๋ฆฌ๋ ๊ฐ๋ฅํ๋ฉด ์ผ์ ํ๋ ๋จ ํ๋์ ๋ถ๋ช ํ ๋ฐฉ๋ฒ์ ์ ํธํฉ๋๋ค. ๋ ๊ฐ์ ๋ค๋ฅธ ๊ตฌ๋ฌธ์ ๊ฐ๋ ๊ฒ์ ๊ทธ ๋ชฉํ์ ๋ฐ๋๋ ๊ฒ์ ๋๋ค.
@Calinou ์ฌ๋๋ค์ด ํํํ ์ ์๋ค๋ฉด gdscript๋ ๊ทธ๋๋ก ๋์ด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
1 - ๋ถํ์ํ๊ฒ ํ์ ํธํ์ฑ์ ๊นจ๋จ๋ฆฝ๋๋ค.
2 - ๋ ํฐ ํ์ผ๊ณผ ๋ ์ฝ๊ธฐ ์ฌ์ด ์ฝ๋๋ฅผ ์์ฑํฉ๋๋ค.
3 - ์ฌ๋๋ค์ด ์ต์ํ์ง ์์ ์๋ก์ด ์์คํ
์ผ๋ก ๊ฐ์ ๋ณ๊ฒฝํฉ๋๋ค.
4 - ์ฌ๋๋ค์ด ์ํ์ง ์๋ ์์คํ
์ ์ฌ์ฉํ๋๋ก ๊ฐ์ํฉ๋๋ค.
1 - ๋ถํ์ํ๊ฒ ํ์ ํธํ์ฑ์ ๊นจ๋จ๋ฆฝ๋๋ค.
2 - ๋ ํฐ ํ์ผ๊ณผ ๋ ์ฝ๊ธฐ ์ฌ์ด ์ฝ๋๋ฅผ ์์ฑํฉ๋๋ค.
3 - ์ฌ๋๋ค์ด ์ต์ํ์ง ์์ ์๋ก์ด ์์คํ ์ผ๋ก ๊ฐ์ ๋ณ๊ฒฝํฉ๋๋ค.
4 - ์ฌ๋๋ค์ด ์ํ์ง ์๋ ์์คํ ์ ์ฌ์ฉํ๋๋ก ๊ฐ์ํฉ๋๋ค.
์์งํ ๋งํด์ ์์ฃผ ๋์ ์ฃผ์ฅ๋ค์ด๋ค. ์ด 4๊ฐ ์ค 3๊ฐ๋ API์ ํฐ ๋ณ๊ฒฝ ์ฌํญ์ ๋ด์ฌ๋์ด ์์ผ๋ฉฐ, ๊ทธ ์ค ์ฒซ ๋ฒ์งธ ํญ๋ชฉ์ ํ๋์ ์ด์ ํค์๋ ๊ธฐ๋ฐ ์์คํ ๊ณผ์ ํธํ์ฑ์ ์ ์งํจ์ผ๋ก์จ ํด๊ฒฐํ ์ ์์ต๋๋ค(์ฌ์ฉ ์ค๋จ ๊ฒฝ๊ณ ํฌํจ).
_ํธ์ง: ์๋ ๋ณํ ๋๊ตฌ๋ฅผ ์ ๊ณตํ ์๋ ์์ต๋๋ค._
2๋ฒ ํญ๋ชฉ์ ๊ฒฝ์ฐ ์ฃผ์์ด ํ์ผ์ ๋ ๋ง์ ํ์ ํฌํจํ ์ ์๋ค๋ ์ฌ์ค์ ๋ชจ๋๊ฐ ๋์ํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ง๋ง, ์ฌ๊ธฐ์์ ๋๋ถ๋ถ์ ์ฌ๋๋ค์ ์ฃผ์์ด ๊ฐ๋ ์ฑ์ด ๋จ์ด์ง๋ ์ฝ๋๋ฅผ ์์ฑํ๋ค๋ ์ฌ์ค์ ๋์ํ์ง ์์ต๋๋ค.
@groud ์ด๊ฒ์ ๋ถํ์ํ ๊ฒ์ ์ฃผ์์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
1 - ์ ์๋ํ๋ ๊ฒ์ ๋น์ถ์ฒํด์ผ ํฉ๋๊น?
2 - ํ๋๋ฅผ ๋ณด๊ธฐ ์ํด 5์ค ์๋๋ก ์คํฌ๋กคํด์ผ ํ๋ ๊ฒฝ์ฐ ๊ฐ๋
์ฑ์ด ๋จ์ด์ง๋๋ค.
๋ ๋ค ์ฃผ์์ผ๋ก ์ ํฉํ์ง ์์ต๋๋ค.
๋ฉค๋ฒ ์ ์๋ ๋ด๊ฐ ์ค์ ๋ก ์ด๊ฒ์ด ์ข์ ๊ฒ์ ๋ณผ ์ ์๋ ์ ์ผํ ๊ฒ์ด๋ฉฐ ์ด ๊ฒฝ์ฐ ์ ์ ์ ์์ด์ผ ํฉ๋๋ค. ๊ทธ๋ ์ง ์์ต๋๋ค.
@groud ์ด๊ฒ์ ๋ถํ์ํ ๊ฒ์ ์ฃผ์์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
์ด ์ค๋ ๋์์ ๋ง์ ์ฌ์ฉ ์ฌ๋ก๊ฐ ์ ์๋์์ต๋๋ค. ๋ฌธ์ํ, ๋ด์ฑ, ๋ ๋ณต์กํ ํ๋ฌ๊ทธ์ธ ๋ฑ... ํค์๋๋ก ๋ค๋ฃฐ ์ ์๋ ์ฃผ์์ ๋ํ ์ฌ์ฉ ์ฌ๋ก๊ฐ ๋ง์ด ์์ต๋๋ค.
1 - ์ ์๋ํ๋ ๊ฒ์ ๋น์ถ์ฒํด์ผ ํฉ๋๊น?
๊ทธ๋ฐ ์ผ์ ํ๋ ๋ฐ์๋ ์ถฉ๋ถํ ์ด์ ๊ฐ ์์ต๋๋ค. ๋ ๊นจ๋ํ API, ๋ ๋ง์ ์ ์ฐ์ฑ ๋ฑ์ ํ์ฉํ๊ธฐ ์ํด ๋ชจ๋ ๊ธฐ๋ฅ์ด ๋ฐ์ ํด์ผ ํ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ ๋ฒ์ ์ด ๋๋ฆฌ ์ฌ์ฉ๋๋ฉด ๊ฐ๋ฅํ ํ ์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ์ ์ ๊ฑฐํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ด๋ ํ์คํ ์ ์ง ๊ด๋ฆฌ ๋น์ฉ์ด ๋ค๊ธฐ ๋๋ฌธ์ ๋๋ค.
2 - ํ๋๋ฅผ ๋ณด๊ธฐ ์ํด 5์ค ์๋๋ก ์คํฌ๋กคํด์ผ ํ๋ ๊ฒฝ์ฐ ๊ฐ๋ ์ฑ์ด ๋จ์ด์ง๋๋ค.
๊ณผ์ฅํ ํ์๊ฐ ์์ต๋๋ค. ๊ทธ๋ฌํ ์ ์์ ๋ ผ์ํ๋ ๋ชฉ์ ์ ๊ทธ๋ฌํ ๋ฌธ์ ๋ฅผ ํผํ ์ ์์ ๋งํผ ์ถฉ๋ถํ ๋๋ํ ๊ตฌ๋ฌธ์ ํ์ฉํ๋ ๊ฒ์ ๋๋ค. IMHO, ๋ด๋ณด๋ด๊ธฐ ํํธ๋ ๋ด๋ณด๋ด๊ธฐ ์ฃผ์์ ๋ํ ์ธ์๋ก ํตํฉ๋ ์ ์์ต๋๋ค(๋ด ์๊ฐ์ ๋ช ๋ช ๋ ์ธ์ ์์คํ ์ด ์์ ์ ์๋ค๋ฉด). ์ด๋ฌํ ์ํฉ์์ ์์คํ ์ ์ด์ ๋ณด๋ค ํจ์ฌ ์ ์ ๊ณต๊ฐ์ ์ฐจ์งํ ์ ์์ต๋๋ค.
๋ํ ํ๋์ ๋์ผํ ์ค์ ์ฃผ์์ด ์๋ ๊ฒ์ ์์ํ ์๋ ์์ต๋๋ค. ๋๋ ์ด๊ฒ์ด ๋ฌธ์ ๋ฅผ ์ผ์ผํฌ ์ ์๋ค๊ณ ์๊ฐํ์ง ์๋๋ค.
๋ด๋ณด๋ด๊ธฐ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ํธ์ง๊ธฐ์ ๋ํ ๊ณต๊ฐ ํค์๋์ ๋๋ค.
onready๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์คํฌ๋ฆฝํธ๊ฐ ์คํ๋๊ธฐ ์ ์ var ์ ์ธ์ ๋๋ค.
๋ ๋ค ์ฃผ์์ผ๋ก ์ ํฉํ์ง ์์ต๋๋ค.
์ฃผ์์ ์ฉ๋์ ๋ํด ์ ์ ๊ฒฌ์ด ์์ ์ ์์ต๋๋ค. ๋๋ ์ด๋ฌํ ์ฌ์ฉ ์ฌ๋ก๊ฐ ์ฃผ์ ์์คํ ์ ์๋ฒฝํ๊ฒ ๋ค์ด๋ง๋๋ค๊ณ ์๊ฐํฉ๋๋ค(๋ง์ ์ฌ๋๋ค์ด ๊ทธ๋ ๊ฒ ํ๋ ๊ฒ์ฒ๋ผ ๋ณด์ ๋๋ค). ๊ทธ๋ฌ๋ ์ค์ ๋ก ๊ฐ ์ํฉ์ ์ผ์ด์ค ๋ฐ์ด ์ผ์ด์ค๋ก ๋ ผ์๋์ด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋๋ "lines" ์ธ์๊ฐ ํนํ ์ข๋ค๊ณ ๋ณด์ง ์์ต๋๋ค. ์ฃผ์์ด ํ ์ค์ ์ฌ๋ฌ ๋ช
๋ น๋ฌธ(๋๋ "์ ๋์ฌ" ํ์)์ ์ง์ ํ์ฉํ์ง ์๋๋ผ๋ ;
๋ฅผ ๊ตฌ๋ถ ๊ธฐํธ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
<strong i="7">@onready</strong> var my_sprite = $Sprite
@onready; var my_sprite = $Sprite
@export_hint_string("Attack,Defense")
@export_hint(ENUM) export var my_enum : int = 0
@export_hint_string("Attack,Defense")
@export_hint(ENUM); export var my_enum : int = 0
<strong i="8">@export_hint_string</strong> "Attack,Defense";
<strong i="9">@export_hint</strong> ENUM export var my_enum : int = 0
<strong i="10">@export_hint_string</strong> "Attack,Defense"
<strong i="11">@export_hint</strong> ENUM; export var my_enum : int = 0
<strong i="12">@export</strong> type=String hint=MULTILINE; var my_text = ""
# more options
@export(type = String, hint = MULTILINE) var my_text = ""
@export(type = String, hint = MULTILINE); var my_text = ""
@export(String, hint = MULTILINE) var my_text = ""
# I personally prefer this one (positional and named args supported, default/optional args too)
@export(String, MULTILINE) var my_text = ""
@export(String, hint = MULTILINE) var my_text = ""
@export(type = String, hint = MULTILINE) var my_text = ""
@export(int, ENUM, "Attack,Defense") var my_enum:= 0
ํธ์ง: ์, ๋๋ฌด ๋๋ ธ์ต๋๋ค. @groud๋ ์ด๋ฏธ lines ์ธ์๋ฅผ ์ฒ๋ฆฌํ์ต๋๋ค. ๊ธ์, ์ ์ด๋ ๊ทธ ๋ช ๊ฐ์ง ์ฝ๋ ์์ ๋ ์ด ์ค๋ ๋์ ๋ฌด์ธ๊ฐ๋ฅผ ์ถ๊ฐํ์ต๋๋ค.
๊ทธ๊ฒ์ ๋น์ ์ ์ฌ๋๋ค์ ์๊ฒฌ์
๋๋ค.
๋๋ ๊ฐ์ธ์ ์ผ๋ก @๊ฐ ๋ชป์๊ฒผ๋ค๊ณ ์๊ฐํ๋ค.
ํธ์งํ๋ค:
๊ทธ๋ ๋ค๋ฉด ๋ฉค๋ฒ ์ ์ธ์ ์ด๋ป๊ฒ ์๋ํ ๊น์?
๊ทธ๋ ๊ฒํ๋ ๊ฒ์ ๋์ฐํ ๊ฒ์
๋๋ค
<strong i="10">@description</strong> "Adds two numbers and returns the result."
<strong i="11">@parameter</strong> name=num1 type=float description="The first number"
<strong i="12">@parameter</strong> name=num2 type=float description="The second number"
<strong i="13">@returns</strong> type=float description="num1 and num2 added together"
func add(num1, num2):
return num1 + num2
@description
์ ์์ ๋ถ๋ถ์์ func
์ ์์ ๋ถ๋ถ๊น์ง ์ถ์๋ ์ ์๋ ๊ฒฝ์ฐ
๋๋ ์ฃผ์์ด ์ ํ์ ๋์ฒดํ๊ธฐ ์ํ ๊ฒ์ด ์๋๋ผ๊ณ ์๊ฐํฉ๋๋ค(๊ทํ์ ์์์ ๋ณผ ์ ์๋ฏ์ด). ๋ฌธ์ ์ฃผ์์ ์ํ์ง ์์ผ๋ฉด ๊ฐ์ ๋ก ์ฌ์ฉํ์ง ์์ต๋๋ค.
func add(num1: float, num2: float) -> float: return num1 + num2
์ด ํผ๋์ ๋ด๊ฐ ์๋ ํ ์ค์ ์ ํ์ ์ฌ์ฉํ ์ ์๋ ๋ด๋ณด๋ด๊ธฐ ํํธ๊ฐ ์๋ ์ด์์ ์ด์ง ์์ ์ํฉ์์ ๋น๋กฏ๋ ๊ฒ ๊ฐ์ต๋๋ค(๊ทธ๋ฆฌ๊ณ ๋๋๊ฒ๋ ๋ด๋ณด๋ด๊ธฐ ํํธ๊ฐ ๋ฐฐ์ด๊ณผ ๊ฐ์ ์ผ๋ถ ์ ํ์ ์ง์ํ๋ ์ ๋ค๋ฆญ ์ ํ์ด ์๋ค๋ ๋ฌธ์ ).
๋๋ ๊ฐ์ธ์ ์ผ๋ก @๊ฐ ๋ชป์๊ฒผ๋ค๊ณ ์๊ฐํ๋ค.
๊ทธ๋ ๋ค๋ฉด ๋ฉค๋ฒ ์ ์ธ์ ์ด๋ป๊ฒ ์๋ํ ๊น์?
๊ทธ๋ ๊ฒํ๋ ๊ฒ์ ๋์ฐํ ๊ฒ์ ๋๋ค
๋ค๋ฅธ ์ธ์ด์์ ์ด ๋ชฉ์ ์ ์ผ๋ฐ์ ์ผ๋ก ์ฃผ์์ด ์๋ ์ฃผ์์ ์ ๊ณตํ๋ฉฐ ์ผ๋ฐ์ ์ผ๋ก ์ ์๋ ๊ฒ๊ณผ ๋๋ฑํ๊ฑฐ๋ ๋ ์ฅํฉํฉ๋๋ค. C ์ธ์ด ๊ณ์ด(๊ฐ์ฅ ์ธ๊ธฐ ์๋ ์ธ์ด)์์ @
๋ ์ฃผ์์ ๋ํด ๋งค์ฐ ์ผ๋ฐ์ ์
๋๋ค(์: Java, JavaScript, TypeScript, Scala ๋ฐ ๋ด๊ฐ ์ฝ์ Python์์๋ ์ฐธ์กฐ).
TypeScript(๋ฌธ์์ ์ ํ์ ํ์ํ์ง ์์ผ๋ฉฐ ๋๊ตฌ๋ ์ค์ ์ ํ์ ์ฌ์ฉํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค):
/** Adds two numbers and returns the result.
* <strong i="16">@param</strong> num1 {float} The first number
* <strong i="17">@param</strong> num2 {float} The second number
* <strong i="18">@return</strong> {float} num1 and num2 added together
**/
const add = (num1: number, num2: number): number => num1 + num2;
๊ธฐ๋ฅ์ ์ธ ํ๋ฏธ:
@description("Adds two numbers and returns the result.")
@parameter(num1, "The first number", type=float)
@parameter(num2, "The second number", type=float)
@returns("num1 and num2 added together", type=float)
func add(num1: float, num2: float) -> float:
return num1 + num2
์ค๋ณต ์ ํ ์์ด:
@description("Adds two numbers and returns the result.")
@parameter(num1, "The first number")
@parameter(num2, "The second number")
@returns("num1 and num2 added together")
func add(num1: float, num2: float) -> float:
return num1 + num2
๋ถ๋ชจ ์๋ ๋ง:
<strong i="28">@description</strong> "Adds two numbers and returns the result."
<strong i="29">@parameter</strong> num1 "The first number"
<strong i="30">@parameter</strong> num2 "The second number"
<strong i="31">@returns</strong> "num1 and num2 added together"
func add(num1: float, num2: float) -> float:
return num1 + num2
๋๋ ์ด ๊ตฌ๋ฌธ์ด ๋ฌธ์ ์ฃผ์์ ๊ฐ์ฅ ์ ํฉํฉ๋๋ค. ๋ฌธ์๊ฐ ์๋ ์ฃผ์์ ๊ฒฝ์ฐ func์ ๊ฐ์ ๊ตฌ๋ฌธ์ ์ ํธํ๊ธฐ ๋๋ฌธ์ ๋ฌธ์ํ ๋ชฉ์ ์ผ๋ก ์ฃผ์์ ์ฌ์ฉํ๋ ๊ฒ์ ๋ํด ํ์ ํ์ง ๋ชปํฉ๋๋ค.
์ด์ ์์ ์์ ์ฃผ์ ์ด๋ฆ์ ์ฌ์ฉํ์ต๋๋ค. @parameter
๋ ๋ค๋ฅธ ์ธ์ด์์์ ๊ฐ์ด ๋จ์ํ @param
์ ์๊ณ @description
๋ @desc
, @descr
๋๋ @func
.
GodoDoc ์์ TypeScript(JSDoc ๋ฐ Javadoc์ ๊ธฐ๋ฐํ TypeDoc) ๊ธฐ๋ฐ ๊ตฌ๋ฌธ์ ์ฌ์ฉํ๊ณ ์์ผ๋ฉฐ ์ ์๊ฐ์๋ ๊ฝค ์ ์๋ํ๋ ๊ฒ ๊ฐ์ต๋๋ค.
## Same as [[bool_]], but `on_false`/`on_true` are functions.
## Only selected function will be called and its return value will be returned from `bool_lazy`.
## <strong i="44">@typeparam</strong> T {any} Return type
## <strong i="45">@param</strong> cond {bool} Condition
## <strong i="46">@param</strong> on_false {FuncLike<T>} Function to call and return its result when `cond` is `false`
## <strong i="47">@param</strong> on_true {FuncLike<T>} Function to call and return its result when `cond` is `true`
## <strong i="48">@return</strong> {T}
func bool_lazy_(cond: bool, on_false, on_true): return GGI.bool_lazy_(cond, on_false, on_true)
var bool_lazy = funcref(self, "bool_lazy_")
@description ์ ์์ ๋ถ๋ถ๋ถํฐ func์ ์์ ๋ถ๋ถ๊น์ง ์ถ์๋ ์ ์๋ค๋ฉด
์, ์ผ๋ฐ์ ์ผ๋ก ์ ๊ธฐ ๋ฐ ๊ธฐ๋ณธ ์ ๊ธฐ์ ๋ํ ์ต์ ์ ํธ์ง๊ธฐ์ ์ข์ ์ถ๊ฐ ๊ธฐ๋ฅ์ด ๋ ๊ฒ์ ๋๋ค(๋ธ๋ก ์ ํ์ ๋ฐ๋ผ ์ ๊ธฐ, ์๋ฅผ ๋ค์ด ๋ด๋ถ ํด๋์ค๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ํ๋ ์ค์ ์์ ํ์ฑํํ ์ ์์).
๋๋ ์ฃผ์์ ์์ด๋ ์์ ๋๋ ๊ธฐ๋ฅ์ ์ข์ํฉ๋๋ค. @annotation(a, b)
๊ฐ ์ข๊ธฐ ๋๋ฌธ์ ๋งค๊ฐ๋ณ์๊ฐ ์ง์ ๋์ง ์์ ๊ฒฝ์ฐ ๋๊ดํธ๋ ์ ํ ์ฌํญ์
๋๋ค. export
์ onready
๊ฐ ์์ฑ์์ ๋งค์ฐ ์ผ๋ฐ์ ์ด๊ธฐ ๋๋ฌธ์ ์์ ๋ฃ์ ์ ์์ผ๋ฉด ์ค๋์ ํค์๋์ ๊ฐ์ ์ฐ๊ธฐ ์๋๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
๊ทธ๋ฌ๋ ์ฌ์ฉ๋ฒ ๋ฉด์์ ๋๋ ๋ฌธ์ํ๋ ์ซ์ดํ๋ค. ๋๋ ํ๋ก๊ทธ๋จ์ ์ํฅ์ ๋ฏธ์น๋ ์ฃผ์(๊ฐ์ ์ ์ผ์ง๋ผ๋)์ ์ต์ํ์ง๋ง ๋ฌธ์๋ ์ฃผ์๊ณผ ๊ฐ์ ์ฌ์ฉ์ ์ํด ์์ ์ธ ๋ฐฐ๋ก ๋๋ฆฌ๊ณ ๋ชจ๋ ๊ณณ์ ํ์๋๊ณ ๊ธฐ๋ฅ์ ์ฃผ์๊ณผ ๋์ผํ๊ฒ ๊ฐ์กฐ ํ์๋ฉ๋๋ค... ๋ญ๊ฐ ์ ํฉํ์ง ์์ต๋๋ค. ๊ทธ ์ ๋น์ฟผํฐ์ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๋ C#์์ ๋ณผ ์ ์๋ ๊ฒ๊ณผ ๋์ผํ ์ฃผ์ ์ฌ์ฉ๋ฒ์ ์ข์ํฉ๋๋ค. ๋ฐ๋ผ์ ๋ฉค๋ฒ ์์ ์์ฑํด์ผ ํ๋ ์ฃผ์์ด ํจ์ฌ ์ ์ต๋๋ค(์ผ๋ฐ์ ์ผ๋ก ๋งค์ฐ ๋๋ญ
๋๋ค. ์ผ๋ถ ์์์ ๋ณผ ์ ์๋ฏ์ด ๋ชจ๋ ์ฌ๋์ด 5์ค์ ์์ฑํด์ผ ํ๋ ๊ฒ์ ์๋๋๋ค) . ๋
ผ์์ด ์คํฌ๋ฆฝํธ ๋ฌธ์๋ฅผ ์ง์ ํ๋ API๊ฐ ์๋ Godot์ ๊ดํ ๊ฒ์ด๋ผ๋ฉด, ๊ทธ๊ฒ์ ๋ฌธ์ ์ด๋ฉฐ ์ฃผ์ IMO๋ง์ผ๋ก ํด๊ฒฐ๋ ์ ์์ต๋๋ค. ์ ์ด๋ ์ ํ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค๊ณ ์๊ฐํ์ง๋ง ์ด๋ฌํ ๋ฐฉ์์ผ๋ก ๊ฐ์ ๋ก ์ํํ๊ณ ์ถ์ง๋ ์์ต๋๋ค. ์ด๋ ์ ์ฒด ๊ท๋ชจ์ ๋ฌธ์ํ์๋ ๋ถํธํฉ๋๋ค. (๊ฒ๋ค๊ฐ ์คํฌ๋ฆฝํธ๋ GDScript์ผ ๋ฟ๋ง ์๋๋ผ _get_property_list
์ฌ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ๋ ์ด์ํฉ๋๋ค.)
๋๋ Zylann์ ๋ง์ ์ ์ ์ผ๋ก ๋์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋๋ ๊ฐ์ธ์ ์ผ๋ก ํค์๋์ ๊ฐ์ ๋ด๋ณด๋ด๊ธฐ(๋๋ ์ค๋น ์๋ฃ)์ ๋ํด ์ด๋ฌํ ๊ตฌ๋ฌธ์ ํ์ฉํฉ๋๋ค.
# No parenthesis when there are no parameters
<strong i="6">@export</strong> var myvar
# With parenthesis for parameters
@export(ENUM, "Up,Down,Left,Right") var myvar2
# Being able to write the annoation on the line before
@export(ENUM, "Up,Down,Left,Right")
var myvar2
๋ฌธ์ ๋ถ๋ถ๊ณผ ๊ด๋ จํ์ฌ ๊ตฌ๋ฌธ์ ํจ์ฌ ๋ ๋จ์ํํฉ๋๋ค( @mnn ์ ์๋ฅผ
<strong i="11">@description</strong> "Adds two numbers and returns the result."
<strong i="12">@parameter</strong> "The first number" # No need to name the args if they are ordered
<strong i="13">@parameter</strong> "The second number"
<strong i="14">@returns</strong> "num1 and num2 added together"
func add(num1: float, num2: float) -> float:
return num1 + num2
๊ทธ๋ฌ๋ ๋ฌธ์๋ฅผ ๋ค๋ฅธ ๊ณณ์์ ์์ฑํ ์ ์๋๋ก ๋ค๋ฅธ ์์คํ ์ ๊ฐ๋ฐํ๋ ๊ฒ์ด ํ์ ๋ผ๋ ๋ฐ ๋์ํฉ๋๋ค. json, XML ๋๋ ์ฒซ ๋ฒ์งธ ํ์ผ์์ ๋ด๊ฐ ๋งํ ๊ฒ์ ๋๋ค. ์ฝ๋ ๋ด ๋ฌธ์๋ ๋ชจ๋ ํ๋ก์ ํธ์ ์ ํฉํ์ง ์์ผ๋ฉฐ ๋ฌธ์์ฉ์ผ๋ก ๋ง์ ์ฃผ์์ ์ถ๊ฐํ๋ ๊ฒ์ ์ฑ๊ฐ์๋ฉฐ ์ด๋ค ๊ฒฝ์ฐ์๋ ์ฝ๋๋ฅผ ์ฝ๊ธฐ ์ด๋ ต๊ฒ ๋ง๋ค ์ ์๋ค๋ ๋ฐ ๋์ํฉ๋๋ค.
๊ด๋ จ์ฑ ๋งํฌ: godotengine/godot-proposals#177
ํํฐ์ ๊ฝค ๋ฆ์์ง๋ง ํ๋ฌ๊ทธ์ธ์ ๊ฐ๋ฐํ๊ธฐ ์ํด ๋ฉํ๋ฐ์ดํฐ์ ๋ฆฌํ๋ ์ ์ ํฌ๊ฒ ์์กดํ๋ ๊ฐ๋ฐ์๋ก์ ์ ๋ ์ฃผ์์ด Godot์์ ์ผ์ด ๋๋ ๊ฒ์ ๋ณด๊ณ ์ถ์ต๋๋ค.
๋ด๋ณด๋ด๊ธฐ ๋ฐ ์ค๋น๋ ํญ๋ชฉ๊ณผ ๊ฐ์ ์ผ๋ถ ํญ๋ชฉ์ ๋ ์๋ฆ๋ต๊ฒ ๋ง๋ ๋ค๊ณ ์๊ฐํ์ง๋ง ๋ด ์ฃผ์ ์ฃผ์ฅ์ ์ฃผ์์ ์ต๋ํ ํ์ฉํ ์ ์๋ ์ฌ์ฉ์ ์ ์ ํ๋ฌ๊ทธ์ธ์ ๋ํ ๊ฒ์ ๋๋ค.
onready
ํค์๋ ๋ฐ ์ ํ ์ฌํญ์ ๋ํด.
๋๋ ๋๋ถ๋ถ์ ์ฌ๋๋ค์ด ์ด๊ธฐ์ ๋
ธ๋ ์ฐธ์กฐ๋ฅผ ์ด๊ธฐํํ๊ธฐ ์ํด onready
๋ฅผ ์ฌ์ฉํ๋ค๊ณ ๋งํ๋ ๊ฒ์ด ์์ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. _ready
์ข
์์ ์ธ ์ผ๋ถ ์ฅ๋ฉด์ ์ธ์คํด์คํํ ๋ null
๋ฅผ ์ฐธ์กฐํ๋ ๋ฌธ์ ์ ๊ฑธ๋ ค ๋์ด์ง ์ ์๊ธฐ ๋๋ฌธ์ ์ฅ๊ธฐ์ ์ผ๋ก ๋ฌธ์ ์์ด๋ ๊ฐ๋ฅํ์ง ์์ ์ ์๋ค๋ ์ ์ ์ ์ธํ๊ณ ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
func explode():
var bomb = preload("res://explosion.tscn").instance()
# Oops, forgot to `add_child(bomb)` earlier
bomb.fuse.wait_time = 5.0 # ERROR: fuse is `null`
add_child(bomb)
# ... because `fuse` is a $Timer node
# which is only initialized once added to the scene tree.
๋ฌผ๋ก fuse
์ค์ ์ ์๋ํ๊ธฐ ์ ์ ์ธ์คํด์คํ๋ ์ฅ๋ฉด์ add_child()
ํด์ผ ํ์ง๋ง ์ฅ๋ฉด์ด ์ฅ๋ฉด ํธ๋ฆฌ์ ์ถ๊ฐ ๋๊ธฐ ์ ์ ๋ค๋ฅธ ๋
ธ๋/์ค๋ธ์ ํธ๊ฐ ์ ํํ ํจ์ฆ ๋ฅผ ์์์ผ ํ๋ ๊ฒฝ์ฐ์๋ ์ด๋ป๊ฒ ๋ ๊น์? ?
์ผ๋ง ํ https://github.com/godotengine/godot/issues/33620#issuecomment -559999681์ ์ค๋ช
๋ ๋๋ก ์๋ฃจ์
์ ์ฐพ์์ต๋๋ค. ๊ฑฐ๊ธฐ์์ ์ ์ ์๋ฏ์ด onready
๋ ๋จ์ง NOTIFICATION_READY
์ธ ๋ฐ๋ฉด ์ค์ ๋ก ํ์ํ ๊ฒ์ NOTIFICATION_INSTANCED
์ด์๊ณ ๋ด ์ฐธ์กฐ๋ฅผ ๋ ์ผ์ฐ ์ด๊ธฐํํ์ต๋๋ค. ์ ์ผํ ๋ฌธ์ ๋ oninstanced
ํค์๋๊ฐ ์๋ค๋ ๊ฒ์
๋๋ค. ์ ๊ฐ ๋ฌด์จ ๋ง์ ํ๋์ง ์ ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค. ๐
๋ฐ๋ผ์ onready
ํค์๋๋ฅผ ์ฃผ์์ผ๋ก ๋ฆฌ๋ฉ์ดํฌํ๋ ๋์์ ์คํฌ๋ฆฝํ
์ธ์ด๋ฅผ ๋ถํ๋ฆฌ์ง ์๊ณ @oninstanced
๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ ๋ค๋ฅธ ์ผ๋ถ ์ฌ๋ก(์: ํญ์ ๊ทธ๋ ๋ฏ์ด!)๋ ์ง์ํ๋ ๊ฒ์ด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค. , ์ด๊ธฐํ์ ๊ด๋ จ๋ ๊ธฐํ ์๋ฆผ ์ง์ ์ถ๊ฐ( _init
, _enter_tree
๋ฑ).
๊ด๋ จ ์ ์: godotengine/godot-proposals#260.
๋ ๊ตฌ์ฒด์ ์ธ ์ธ๋ถ ์ ๋ณด๊ฐ ํฌํจ๋ ์ ์์๋ฅผ ์ด์์ต๋๋ค: https://github.com/godotengine/godot-proposals/issues/828
์์ ์ ์์ผ๋ก ๋์ฒด๋ฉ๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ ๋ถ๋ ์๋์ง๋ง ๋๋ถ๋ถ์ GDScript ๊ตฌ๋ฌธ ๋ณ๊ฒฝ์ ์ด์ ์ฝ๋์ ํธํ๋ฉ๋๋ค. ์ฃผ์ ๋ชฉํ๋ GDScript๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ๋ฐ์์ ์์ฐ์ฑ์ ๋์ด๋ ๊ฒ์ ๋๋ค. ์:
match
๋ฌธ์ switch-case ๋ฌธ(๋ง์ ์์ฒญ์ด ์์์)์ ํ์ฉํ๊ณ ์ฌ๋๋ค์ด ๋ฐฐ์ด๊ณผ ์ฌ์ ์ ์ฝ๊ฒ ์ผ์น์ํฌ ์ ์๋๋ก ํ์ฌ ์ด๋ฅผ ๊ฐ์ ํฉ๋๋ค.onready
๋ณ์(2.x์ ์๋ก์ด ๊ธฐ๋ฅ)๋ ์์ฃผ ์ฌ์ฉ๋๋ ํจํด, ์ฆ_ready
์์ ๋ณ์๋ฅผ ์ด๊ธฐํํ๋ ํจํด์ ๊ตฌ์ฒดํํฉ๋๋ค.์คํ ์ปค๋ฎค๋ํฐ์ ๋๋ค. ๊ฒ์ ๊ฐ๋ฐ์๋ ์ฌ๋ฌ๋ถ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์์ ์์ ์ ์๊ฒฌ์ ํํํ ์ ์์ต๋๋ค. ์ด์จ๋ ์ฃผ์์ด ํ์คํ๋๊ธฐ๊น์ง๋ ์๋นํ ์๊ฐ์ด ๊ฑธ๋ฆด ๊ฒ์ ๋๋ค.
์ด๋ฏธ ์ถฉ๋ถํ๋ค๋ฉด ๊ธฐ๋ฅ ์์ฒญ์ ๋ฐ์ง ์์์ ๊ฒ์ ๋๋ค.
๊ตฌ๋ฌธ์ ์์ง ์๋ฃ๋์ง ์์์ต๋๋ค.
onready
๋ฐexport
ํค์๋๋ฅผ ์ฆ์ ๋์ฒดํ์ง ์์ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค.