์ด๊ฒ์ ๋น๊ณต์์ ์ธ ์ฃผ์ ์ ๊ฐ๊น์ง๋ง Godot์ ์ฃผ์ ๋ฌธ์ ๊ฐ ์๋๋ผ๋ฉด ๊ณผ๊ฐํ ๋ฌธ์ ์
๋๋ค.
Godot ์์ง์ ๊ฐ๋ฐ์๋ค์ด ๊ทธ๊ฒ์ ์ฌ์ฉํ๋ ์ฌ์ฉ์๋ค์ ์ด๋ป๊ฒ ๊ณํํ๋์ง๋ ์๋ฌด๋ ๋ชจ๋ฆ
๋๋ค.
์ผ๋ถ ๊ด๋ จ ๋ฌธ์ : #19486 #7402 #15996 #8502
์ด๋ค์ ์์ 4๊ฐ์ด์ง๋ง ๋ชจ๋ ๋์ผํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ฒ์ ๋ชฉํ๋ก ํ๋ ์ ์ฌํ ๊ฒ๋ค์ด ๋ง์ด ์์ต๋๋ค. ๋ชจ๋๊ฐ ์ฌ์ฉ ๊ฐ๋ฅํ ์ํฌํ๋ก๋ฅผ ์ฐพ๊ณ ์์ต๋๋ค.
๋๋๊ฒ๋ Godot ์ฌ์ฉ์๋ ๋ค๋ฅธ ์น์ํ ์์ง์ ๋ณต์ฌํ๋ ๋นํจ์จ์ ์ธ ์์ ํ๋ฆ์ ๋ง๋ค์์ต๋๋ค. ์ด๊ฒ์ ๋ณด์ฌ์ฃผ๊ธฐ ์ํด ์ ๋ MeshInstance ์ ๋ชจ์ ํด๋์ค๋ฅผ ์ฌ์ฉํ ๊ฒ์ ๋๋ค.
์์ ๋
ธ๋๋ผ๊ณ ๋ ํ๋ ์์ฌ Unity๊ฐ ์์ต๋๋ค.
Godot ์ฌ์ฉ์๋ ์์ ๋
ธ๋๋ฅผ ์ฌ์ฉํ์ฌ MultiScript์ ๋๋ฑํ ๊ฒ์ ๋ง๋ญ๋๋ค.
MeshInstance(์คํํ
์ผ + ์คํฌ๋ฆฝํธ)
--- ๋ฉ์ฌ(๋ฉ์ฌ + ์คํฌ๋ฆฝํธ)
--- ์ฌ์ง(๋
ธ๋ +์คํฌ๋ฆฝํธ) - ์
ฐ์ด๋(๋
ธ๋ +์คํฌ๋ฆฝํธ) - ํ
์ค์ฒ(๋
ธ๋ +์คํฌ๋ฆฝํธ)
--- ๋ณํ(Position3D +์คํฌ๋ฆฝํธ)
๊ธฐ๋ณธ์ ์ผ๋ก ๊ทธ๋ค์ ๊ฐ์ฅ ์ ์ ํ ๋ ธ๋๋ฅผ ์ฌ์ฉํ๊ณ ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ์ฌ ์ํ๋ ํด๋์ค๋ฅผ ๋ง๋๋ ๋ฐ ํ์ํ ์ฝ๋๋ฅผ ์์ฑํฉ๋๋ค.
๋ฌธ์ :
1.) ๋๋ ๋๋น์ ์ฐฌ๋ฌผ์ ์ถ๊ฐํ๋ ๊ฒ๊ณผ ๊ฐ์ ๋์งํธ ๋ฐฉ์์
๋๋ค. ๋จ๊ธฐ์ ์ผ๋ก๋ ๋์์ด ๋์ง๋ง ๋๊ท๋ชจ ํ๋ก์ ํธ์์๋ ๋ ๋ง์ ํผ๋์ ์ผ๊ธฐํฉ๋๋ค.
2.) ๋๋ถ๋ถ์ ์ฌ์ฉ์๋ ์ด๋ฒคํธ์ ๊ฐ์ ์ ํธ๋ฅผ ์ฌ์ฉํ๊ณ , ์ ํธ๋ฅผ ๋ณด๋ด๋ ๋
ธ๋์๋ง ์ฐ๊ฒฐํ๊ณ ๋ด๋ณด๋ด๊ธฐ ๋ฅผ ์ฌ์ฉํ์ฌ ๋์์ ์ฐพ์ต๋๋ค.
3.) ํ์ ๋
ธ๋์ ๋๋ฌํ๊ธฐ ์ ์ ์ด๋ฒคํธ๋ฅผ ๊ฐ๋ก์ฑ ์ ์์ต๋๋ค.
4.) ์ฑ๋ฅ์ด ๋๋ฆฌ๊ณ ์ฝ 50,000๊ฐ ๊ฐ์ฒด์์ ๊ฒ์์ด ์ฅ๋ฉด์ ๋ก๋ํ๋ ค๊ณ ํ ๋ ๋ฉ์ถ ์ ์์ต๋๋ค.Pseudo Unreal, ์ผ๋ช
์ปจํธ๋กค๋ฌ ๋ฐ ์ค๊ฐ:
Godot ์ฌ์ฉ์๋ ๋ชจ๋ ์์์ ์กฐ์ํ๋ ์ปจํธ๋กค๋ฌ์ ์์ ์ ๋ ธ๋๋ฅผ ๋ง๋ญ๋๋ค. ์ด ์ํฌํ๋ก์ ์ํ๋ extends๋ก ํ์๋ ํด๋์ค์ ๋๋ค.
MeshWithTexturedMaterial.instanced() *ํธ๋ฆฌ์ ์ ์ผํ ๋
ธ๋
-> ํ์ฅ -> MaterialTextured -> ํ์ฅ -> ์ฌ์ง -> ํ์ฅ -> ์
ฐ์ด๋
์ด ์์คํ
์ ๋ฌด๊ฑฐ์ด ๊ณํ์ด ํ์ํ๊ฑฐ๋ ๋ง์ ํด๋์ค์์ ์ ์ฌํ ์ฝ๋๋ก ๋๋ฉ๋๋ค. ์นด๋ฉ๋ผ์ ๋ง์ฐฌ๊ฐ์ง๋ก ์บ๋ฆญํฐ ๋ฐ ์ฐจ๋ ํด๋์ค์๋ ๋ชจ๋ "๋ชฉํ๋ฌผ ์ถ์ " ์ฌ๋ณธ์ด ํฌํจ๋์ด ์์ต๋๋ค.
๋ฌธ์ :
1.) ๋๋ฒ๊ทธํ๊ธฐ ํ๋ ์ง์ ๋ถํ ๋ํ ์คํฌ๋ฆฝํธ.
2.) ๋ค๋ฅธ ํด๋์ค์ ์ค๋ณต ์ฝ๋.
3.) Godot๋ ๋
ธ๋๋ฅผ ํด๋์ค๋ก ์ทจ๊ธํ์ง ์์ต๋๋ค; ์ด๋ฌํ ๊ฐ๋ฐ์๋ค์ด ์์ฒด ์ฝ๋ฉ๋ ํด๋์ค์ ๋ง์ด ์์กดํ๋๋ก ๊ฐ์ํฉ๋๋ค.
4.) _์ ํฌ ์์คํ
_์ด _๋ฌด๊ธฐ ์์คํ
์ ํ์ฅํ๊ณ ๋ง์ง๋ง์ผ๋ก ํ๋ ์ด์ด๋ฅผ ํ์ฅํ๋ ๊ฒ์ฒ๋ผ ํ์ฅ์ ์ด์น์ ๋ง์ง ์์ต๋๋ค.Pseudo Panda3D, ์ผ๋ช
Preload(์คํฌ๋ฆฝํธ):
์ด๊ฒ์ ๋๋ถ๋ถ์ ์ฝ๋ ๊ธฐ๋ฐ ์์ง์ด ์๋ํ๋ ๋ฐฉ์์ ์ํฌํ๋ก๋ฅผ ๋ณต์ ํฉ๋๋ค. ๊ฐ๋ฐ์๋ ๋ ธ๋๋ณด๋ค ์คํฌ๋ฆฝํธ๊ฐ ๋ ๋ง์ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
๋ฉ์ ์ธ์คํด์ค(๋
ธ๋)
๋ฏธ๋ฆฌ ๋ก๋(๋ฉ์ ์คํฌ๋ฆฝํธ)
์ฌ์ ๋ก๋(์ฌ๋ฃ ์คํฌ๋ฆฝํธ)
๋ฏธ๋ฆฌ ๋ก๋(๋ณํ ์คํฌ๋ฆฝํธ)
์ด์ํ๊ฒ๋ C#์ด ์ด ์ ๊ทผ ๋ฐฉ์์ ๋ถ๋ช
ํ ๋ ๋์ ๊ฒฝ์ฐ์๋ GDscript๋ฅผ ํฌ๊ธฐํ๊ธฐ๋ฅผ ๊ฑฐ๋ถํ๋ ๊ฒ์ ์ด ๊ฐ๋ฐ์๋ค์
๋๋ค. ๊ทธ๋์ ๋๋ ๊ทธ๋ค์ด Python์ ์ต์ํ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค.
๋ฌธ์ :
1.) ์์๊ฐ onready๊ฐ ์๋ ๋ณ์์ผ ์ ์์ผ๋ฏ๋ก ๊ฐ์ ธ์ค๊ธฐ๋ฅผ ํธ์ถํ๋ ๋ฐฉ๋ฒ์ ๋ํ ํผ๋ ๋๊ฐ ์์.
2.) Godot ๋
ธ๋๋ฅผ ๊ฑฐ์ ์ฌ์ฉํ์ง ์์ผ๋ฉฐ ๊ฐ๋ฐ์๊ฐ UI ๋๊ตฌ๋ฅผ ์์ ํ ๋ฌด์ํ๋ ๊ฒ๋ ๋ณด์์ต๋๋ค.
3.) ์คํฌ๋ฆฝํธ๊ฐ ๋งํฌ๋ ์์น์ ๋ํ ํ์๊ฐ ์์ผ๋ฏ๋ก ๋๋ฒ๊ทธํ๊ธฐ๊ฐ ์ด๋ ต์ต๋๋ค.WTF ์คํฌ๋ฆฝํธ:
๋ง์ง๋ง์ ์ํด ์ต์ ์ ๋คํ์ต๋๋ค. ์ผ๋ถ Godot ๊ฒ์ ๊ฐ๋ฐ์๋ ์ ํธ ๋ฐ ๊ทธ๋ฃน์ ์ฌ์ฉํ์ฌ ์ข์ ๊ฒ์์ ๋ง๋ค์์ต๋๋ค.
์๋จ์ ๋น ๋
ธ๋๊ฐ ์๋ MeshInstance(๋
ธ๋)๋ฅผ ์ฌ์ฉํ๋ฉด ์์์ ์ฝ๊ฒ ์ด๋ํ๊ณ ๋ค์ ๋์์ธํ ์ ์์ต๋๋ค.
--- ๋ฉ์(๋ฉ์ฌ +์คํฌ๋ฆฝํธ || ์ ํธ)
--- ์ฌ์ง(Sprite +Script || ์ ํธ)
--- ๋ณํ(Position3D +Script || ์ ํธ)
๋๋ฌด๊ฐ 2 ์ฅ๋ฉด ์ด์ ๊น์ด๋ก ๊ฐ์ฒด๋ฅผ ์ฐ๊ฒฐํด์ผ ํ๋ ๊ฒฝ์ฐ ๋์ ๊ทธ๋ฃน์ด ์ฌ์ฉ๋ฉ๋๋ค. ์ด ์ํฌํ๋ก์์ ์ฃผ๋ชฉํ ๋งํ ๊ฒ์ ์์ ๋๋ฌด๊ฐ ์๋ ๋ฐฉ์์
๋๋ค.
๋ฌธ์ :
1.) ์ ํธ ๋ฐ ๊ทธ๋ฃน์ ๊ฒฝ๊ณ ์์ด ๊ฒ์์ ์ ์ฒด ๋ถ๋ถ์ด ์คํจํ๋๋ก ํ์ฉํฉ๋๋ค.
2.) ์์ ๋ฌด์๋ฏธํ ์คํฌ๋ฆฝํธ๊ฐ ์ฃผ์๋ฅผ ๋ฐฐํํฉ๋๋ค. ๊ทธ๋ค์ด ํ๋ ๋ชจ๋ ์ผ์ ์ ํธ๋ฅผ ๋ณด๋ด๊ณ ๋จ์ผ ๊ฐ์ ์ถ์ ํ๋ ๊ฒ์
๋๋ค.
3.) ๋๋ฌด ๋ง์ ์ ํธ๊ฐ ์ฒจ๋ถ๋ ๊ฐ์ฒด๋ฅผ ์ด๋ํ๋ ๊ฒ์ ์ต์ํ ์ค๋ง์ค๋ฝ์ต๋๋ค.
4.) ์ธ์คํด์ค ์์คํ
๊ณผ์ ์ถฉ๋. ์ ํธ๊ฐ ๊ฐ์ฅ ์์ชฝ์ผ๋ก ์ฐ๊ฒฐ๋๋ ๋์ ์ธ์คํด์ค๊ฐ ์๋๋ก ํ๋ฅด๊ธฐ ๋๋ฌธ์
๋๋ค.
์, Godot์ MeshInstance ํด๋์ค๊ฐ ์๋ค๋ ๊ฒ์ ์๋๋ค.
์ด๊ฒ์ด ๋ณด์ฌ์ฃผ๋ ์์ ์ ํ์ฌ ๊ฐ๋ฐ์๊ฐ ์ฌ์ฉํ๋ ๋๋ถ๋ถ์ ์ํฌํ๋ก๊ฐ ๋ค์ค ๊ตฌ์ฑ ์์๊ฐ ์๋ MeshInstance ๋งํผ ๋ณต์กํ ํด๋์ค๋ฅผ ๋ง๋ค ์ ์๋ค๋ ๊ฒ์
๋๋ค. ๊ฐ ์ํฌํ๋ก์ ์ฌ๊ฐํ ๊ฒฐํจ์ด ์๋ค๋ ์ ์ ์ ์ธํ๊ณ .
์ด๋ฌํ ๋ชจ๋ ์์
ํ๋ฆ์ ๋์ผํ ํต์ฌ ๋ฌธ์ ๋ฅผ ๊ณต์ ํฉ๋๋ค. ๊ฒ์ ๊ฐ๋ฐ์ ์ํ ๋จ๊ธฐ ์๋ฃจ์
์
๋๋ค.
๊ทธ๋ค ์ค ์ด๋ ๊ฒ๋ ์ ํ์ฅ๋์ง ์์ผ๋ฉฐ ๋๋ฒ๊ทธ์ ๊ฒฐํจ์ด ์์ต๋๋ค.
Godot ๊ฒ์ ๊ฐ๋ฐ์๊ฐ ์์ง ๊ฐ๋ฐ์์๊ฒ ํ์ํ ๊ฒ์ ๋ณต์กํ ๊ฐ์ฒด์ ์์คํ
์ ๋ง๋ค๊ธฐ ์ํ ๊ณต์ ์ํฌํ๋ก์ ๋ช
ํํ ๊ฐ์์
๋๋ค.
๊ทธ๋ฐ ์์ผ๋ก ๊ทธ๋ค์ ๋น๋๊ฐ์ง๋ง ๊ทธ๊ฒ์ด ์ด๋ป๊ฒ ์ฌ์ฉ๋๋๋ก ์๋๋์๋์ง ํญ์ ์๊ณ ์์ต๋๋ค.
์ง๋ฌธ์ด ๋จ์ํ "Godot์์ ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์๋ ์ฌ๋ฌ ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์์ต๋๊น?"๋ผ๋ฉด ๋๋ต์ ์์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฒ์์ ์์คํ ๋ง๋ค ์๊ตฌ ์ฌํญ์ด ๋ค๋ฅผ ์ ์์ผ๋ฏ๋ก ๋จ์ผ ์ํฌํ๋ก๋ฅผ ๊ฐ์ํ๋ ๊ฒ์ ํฐ๋ฌด๋์๋ ์ผ์ ๋๋ค. ๋ง์ ์ฑ๋ฅ์ด ํ์ํ ์์คํ ๊ณผ ๊ฒ์ ๋์์ด๋๊ฐ ์์ฃผ ์ ๋ฐ์ดํธํด์ผ ํ๋ ์์คํ ์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ฝ๋ฉํ์ง ์์ต๋๋ค. ๋ชจ๋ ์๋ฃจ์ ์๋ ์ฅ๋จ์ ์ด ์์ผ๋ฏ๋ก "๊ณต์" ์ํฌํ๋ก๋ฅผ ๋ง๋๋ ๊ฒ์ ์๋ฏธ๊ฐ ์์ต๋๋ค.
๋ค์ค ๊ตฌ์ฑ ์์๊ฐ ์๋ MeshInstance๋งํผ ๋ณต์กํ ํด๋์ค๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
์ ํํ ์ด๋ค ๊ตฌ์ฑ ์์๋ก?
ํธ์ง: ๊ทธ๋ฆฌ๊ณ ์์๋ค์ํผ, ๊ทํ๊ฐ ์ธ์ฉํ ๋ฌธ์ ์ค ํ๋๋ "์ด ์์ด๋์ด๋ ์ง์ ์ผ๋ก ์์ ํ ํํธ์๊ณ ์์ ํ ๋ฌด์๋ฏธํฉ๋๋ค"๋ผ๋ ์์ฑ์์ ํจ๊ป ์ข ๋ฃ๋์์ต๋๋ค.
์ด๊ฒ์ ๋ณด์ฌ์ฃผ๊ธฐ ์ํด ์ ๋ MeshInstance๊ฐ Godot์์ ๋ง๋ค์ด์ง๋ค๋ฉด ์ด๋ค ๋ชจ์ต์ผ์ง ๋ชจ์ ํด๋์ค๋ฅผ ์ฌ์ฉํ ๊ฒ์ ๋๋ค.
์์ ๋ ธ๋๋ผ๊ณ ๋ ํ๋ ์์ฌ Unity๊ฐ ์์ต๋๋ค.
Godot ์ฌ์ฉ์๋ ์์ ๋ ธ๋๋ฅผ ์ฌ์ฉํ์ฌ MultiScript์ ๋๋ฑํ ๊ฒ์ ๋ง๋ญ๋๋ค.
Pseudo Unreal, ์ผ๋ช ์ปจํธ๋กค๋ฌ ๋ฐ ์ค๊ฐ:
Pseudo Panda3D, ์ผ๋ช Preload(์คํฌ๋ฆฝํธ):
WTF ์คํฌ๋ฆฝํธ:
์, Godot์ MeshInstance ํด๋์ค๊ฐ ์๋ค๋ ๊ฒ์ ์๋๋ค.
์ด๊ฒ์ด ๋ณด์ฌ์ฃผ๋ ์์ ์ ํ์ฌ ๊ฐ๋ฐ์๊ฐ ์ฌ์ฉํ๋ ๋๋ถ๋ถ์ ์ํฌํ๋ก๊ฐ ๋ค์ค ๊ตฌ์ฑ ์์๊ฐ ์๋ MeshInstance๋งํผ ๋ณต์กํ ํด๋์ค๋ฅผ ๋ง๋ค ์ ์๋ค๋ ๊ฒ์ ๋๋ค. ๊ฐ ์ํฌํ๋ก์ ์ฌ๊ฐํ ๊ฒฐํจ์ด ์๋ค๋ ์ ์ ์ ์ธํ๊ณ .
๋๋ ๋น์ ์ด ์ฌ๊ธฐ์ ๋งํ๋ ค๋ ๊ฒ์ ์ ์ดํดํ์ง ๋ชปํฉ๋๋ค. MeshInstance ํด๋์ค๊ฐ ์ด๋ฏธ ์๋ ๊ฒฝ์ฐ ์ ๋๊ตฐ๊ฐ๊ฐ ์ด๋ฅผ ์์ฑํฉ๋๊น? ๊ทธ๋ฆฌ๊ณ Godot๊ฐ ๋ค๋ฅธ ์์ง๊ณผ ๋น์ทํ ๊ธฐ๋ฅ์ ๊ฐ์ง๊ณ ์๋ ๊ฒ์ด ์ ๋ฌธ์ ์ผ๊น์? ๋ํ, ํ๋์ ๋ ธ๋์ ์ฌ๋ฌ ์คํฌ๋ฆฝํธ๋ฅผ ์ฐ๊ฒฐํ๋ ค๋ ๊ฒฝ์ฐ OOP๋ฅผ ์ฌ์ฉํ์ง ์๊ฑฐ๋ ๋ ๊ฐ์ ๊ฐ๋ณ ๊ธฐ๋ฅ์ ํ๋์ ๋ ธ๋์ ๋ฃ์ต๋๋ค. ์ด๋ Godot์ ๋ ธ๋ ์์คํ ์ ์ฌ์ฉํ์ฌ ์ฝ๊ฒ ์์ ๋ฉ๋๋ค.
์ง๋ฌธ์ด ๋จ์ํ "Godot์์ ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์๋ ์ฌ๋ฌ ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์์ต๋๊น?"๋ผ๋ฉด ๋๋ต์ ์์ ๋๋ค...
๋ง์น๋ฅผ ๋ง๋ค๋ฉด ๊ทธ ์ฉ๋๋ฅผ ์ ์ ์๊ณ , ์ธ ์ ์๋ ๋ชจ๋ ๊ฒ์ ๋ค ์์ง๋ ๋ชปํด๋ ์ด๋ค ์ฉ๋๋ก ์ฐ๋ฉด ์ ๋๋ ๊ฒ์ธ์ง ์ ์ ์์ต๋๋ค.
๋ง์น๊ฐ ๋ญ์ง๋ ๋ชจ๋ฅด๋ ์ฌ๋์๊ฒ ๋ง์น๋ฅผ ์ฃผ๊ณ ์ฌ์ฉ๋ฒ์ ์ค๋ช
ํ์ง ์์ ๊ฒฝ์ฐ ๊ทธ๋ค์ด ๊ฒฉ๋ ฌํ๊ฒ ์ค์ํ๊ธฐ ์์ํ๋ฉด ๋๋ผ์ง ์์ ์ ์์ต๋๋ค.
์ด๊ฒ์ด Godot๊ฐ ์๋ ๊ณณ์ ๋๋ค. ๊ฐ๋ฐ์๋ค์ ์ด๋ป๊ฒ๋ ์ด๊ฒ์ ํตํด ๋ฌด์ธ๊ฐ๋ฅผ ๋ง๋ค ์ ์๊ธฐ๋ฅผ ํฌ๋งํ๋ฉด์ ์ด๋ ์์์ ํ๋ค๋ฆฌ๊ณ ์์ต๋๋ค.
์ ํํ ์ด๋ค ๊ตฌ์ฑ ์์๋ก?
๋จธํฐ๋ฆฌ์ผ๊ณผ ํธ๋์คํผ ๊ฐ์ ๊ฒ๋ค์ ์๋ ์ธ์คํด์ค์ ์ผ๋ถ๋ก ๊ฐ์ฃผ๋ฉ๋๊น?
์ ์ฌํ ๊ตฌ์ฑ ์์๋ฅผ ์์ฑํ๋ฉด ๋
ธ๋์ ์ด๋ป๊ฒ ์ฐ๊ฒฐํฉ๋๊น?
"๋ชฉํ๋ฌผ ์ถ์ " ๋๋ "๋ชฉํ๋ฌผ ๋ฐ์ฌ"์ ๊ฐ์ ๋ค๋ฅธ ์์
์ ์ด๋ฌํ ์์
์ ํด๋์ค์ ์ถ๊ฐํ๊ฑฐ๋ ์ด๋ป๊ฒ๋ ์ฒจ๋ถํด์ผ ํฉ๋๊น?
Godot๋ ๊ฒฐ์ฝ Godot์ ๋ํ ์ ์ ํ Include ๋๋ Import ๊ธฐ๋ฅ์ ๋ง๋ค์ง ์์๊ธฐ ๋๋ฌธ์ ๊ทธ๊ฒ์ด ๊ฒฐ์ฝ ๊ทธ๋ฐ ์์ผ๋ก ์ฌ์ฉ๋๋๋ก ์๋๋์ง ์์์์ ์๋ฏธํฉ๋๊น?
์ฐ๋ฆฌ๋ ์ฐ๋ฆฌ๊ฐ ๋ชจ๋ ๊ฒ์ ๊ฐ์ง ์ ์๋ค๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค. ๊ทธ๋์ ์ง๋ฌธ์ ์ฐ๋ฆฌ๊ฐ ๋ฌด์์ ๊ฐ์ง๊ณ ์์ต๋๊น? ์๋ํ๋ ๋์์ธ์ ์ด๋ ๋์?
@MysteryGM ๋์จํ๊ณ ์ฐ๊ฒฐ์ด ๋๊ธด ๋น์ ๋ ๋์์ด ๋์ง ์์ต๋๋ค.
์ฌ๋ฃ ๋ฐ ๋ณํ๊ณผ ๊ฐ์ ๊ฒ
Transform์ Spatial ์์ฑ์ด๊ณ Materials๋ Mesh ์์ฑ์ ๋๋ค. MeshInstance๋ Spatial ์์ ๊ตฌ์ถ๋์ด Spatial์ ๋ชจ๋ ์์ฑ์ ์์ํฉ๋๋ค. ๊ทธ๊ฒ์ ๋์๊ฒ ์๋ฏธ๊ฐ ์๋ ๊ฐ๋จํ ๊ณ์ธต ๊ตฌ์กฐ์ ๋๋ค.
์ ์ฌํ ๊ตฌ์ฑ ์์๋ฅผ ์์ฑํ๋ฉด ๋ ธ๋์ ์ด๋ป๊ฒ ์ฐ๊ฒฐํฉ๋๊น?
Godot๊ฐ ์ด๋ฏธ ๋ฉ์ ์์คํ ์ ๊ฐ์ง๊ณ ์๋๋ฐ ์ ๋น์ ๋ง์ ๋ฉ์ ์์คํ ์ ๋ง๋์๊ฒ ์ต๋๊น?
"๋ชฉํ๋ฌผ ์ถ์ " ๋๋ "๋ชฉํ๋ฌผ ์ฌ๊ฒฉ"๊ณผ ๊ฐ์ ๋ค๋ฅธ ์์ ์ ์ด๋ป์ต๋๊น?
์ฝ๋๋ ์คํฌ๋ฆฝํธ์ ๋ค์ด๊ฐ๋๋ค. ๋ ธ๋์ ๊ธฐ๋ณธ ์คํฌ๋ฆฝํธ์ ๋ฃ๊ฑฐ๋ ๊ทธ๋ ๊ฒ ํ๋ ๊ฒ์ด ๋ ์ ์ฉํ๋ค๊ณ ์๊ฐ๋๋ฉด ์คํฌ๋ฆฝํธ์ ํจ๊ป ์์์ ์ค ์ ์์ต๋๋ค.
Godot๊ฐ ์ด๋ฏธ ๋ฉ์ ์์คํ ์ ๊ฐ์ง๊ณ ์๋๋ฐ ์ ๋น์ ๋ง์ ๋ฉ์ ์์คํ ์ ๋ง๋์๊ฒ ์ต๋๊น?
๊ฒ์ ๊ฐ์ฒด๋ ๋ฉ์๋งํผ ๋ณต์กํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ๊ฒ์์ ์ผ๋ถ๊ฐ ์๋์ ์์ง์ธ ์์ง์ ์ฌ์ฌ์ฉ๋ ๋ถ๋ถ์ผ ๋ฟ์ด๋ผ๋ ๊ฒ์ ๊ธฐ์ตํ์ญ์์ค.
Godot๊ฐ ์์ง ๋ด๋ถ์ Mesh ํด๋์ค๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์์ฑํ ์ ์๋ค๋ฉด, ๋ณต์กํ ๊ฒ์์ ๋ง๋๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ชจ๋ ๊ฒ์์ ์์ง๋ณด๋ค ๋ ๋ณต์กํด์ผ ํฉ๋๋ค.
์ด๊ฒ์ ์ฐจ๋ก๋ก ์ ๋ฌธ ๊ฐ๋ฐ์ ํ์๊ฒ ์๋ฌด ์์ฉ์ด ์์์ ์๋ฏธํฉ๋๋ค. ๊ทธ๋ฐ ํ์ด ์์ค ์ฝ๋์ ํจ๊ป C++๋ง ์ฌ์ฉํ์ง ์๋ ํ.
์ฝ๋๋ ์คํฌ๋ฆฝํธ์ ๋ค์ด๊ฐ๋๋ค.
ํ์ง๋ง ์ด๋ค ๋ฉด์์?
์ ๋ ์ด๋ฏธ ๋ชจ๋ ์คํฌ๋ฆฝํธ์ ๋ํด ์์์ ๋ง๋ค ์ ์๋ค๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค. ์๋ํ๋ฉด ์ ๋ ๋ฐฑ๋ง ๊ฐ ์ด์์ ํจ์๊ฐ ํ์ํ๊ณ ๋ฐฑ๋ง ๊ฐ์ ๋น ๋
ธ๋๋ผ๋ Godot์๊ฒ๋ ๋๋ฌด ๋ง๊ธฐ ๋๋ฌธ์
๋๋ค.
๊ทธ๊ฒ ๋ฌด์จ ๋ป์ธ๊ฐ์? ์ผ๋ง๋ ๋ง์ ๊ธฐ๋ฅ์ ํจ๊ป ๊ทธ๋ฃนํํด์ผ ํฉ๋๊น? ์๋๋ฉด ์ข
์ด์ ๊ฐ์ฒด ์์์ ๊ณํํ๋ ๋ฐ 2-4๊ฐ์์ ์๋นํด์ผ ํฉ๋๊น?
๋ด๊ฐ ์๊ณ ์ถ์ ๊ฒ์ Godot๊ฐ ๋ ์จ ํจ๊ณผ, ์ฒด์ ์๊ฐ ๋ฐ ๋์ ์งํ๊ณผ ๊ฐ์ ๋ณต์กํ ์์คํ ์ ๊ฐ์ง ๋๊ท๋ชจ ๊ฒ์์ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ๋์ง์ ๋๋ค.
๋ค์์ ์ , ์ ์๊ฒฌ ๋ฐ ๊ฒฝํ, _YMMV_์ ๊ดํ ๊ฒ์ ๋๋ค.
๋ชจ๋ ์์ง์๋ ๊ณ ์ ํ ํน์ฑ์ด ์์ผ๋ฉฐ Godot๋ ๋ค๋ฅด์ง ์์ต๋๋ค. ์์งํ ๋งํด์ ์ฒซ ๋ฒ์งธ ์์ ์ ์ธ ๋ฆด๋ฆฌ์ค ์ดํ๋ก ์ผ๋ง๋ ์ค๋๋์๋์ง ๊ฐ์ํ ๋ ์ผ๋ง๋ ์ข์์ง, ์ผ๋ง๋ ๋นจ๋ฆฌ ๋ฐ์ ํ๋์ง์ ๋ํด ํ์คํ ์๋๋ฉ๋๋ค. ๊ทธ๊ฒ์ด ์ฐ๋ฆฌ๊ฐ ๊ฐ์ง๊ณ ์๋ ๋ช ๊ฐ์ง ๋ฌธ์ ์ ๋ํ ์ด์ ์ผ ์ ์์ต๋๋ค. ์ฌ/๋ ธ๋ ์์คํ ์ ์ ๊ฐ ๊ฐ์ฅ ์ข์ํ๋ ๋ถ๋ถ์ด๊ณ , ์คํฌ๋ฆฝํ ๋ ๋ ธ๋์ ๋จ์ํจ์ด ์ ๋ฅผ ๋น๋๊ฒ ํ๋ ๋ถ๋ถ์ ๋๋ค. ๋์๊ฒ๋ ๋จ์ ์ด ์์ง๋ง ํ์ด์ฌ๊ณผ ๊ฐ์ ๊ตฌ๋ฌธ์ ์ซ์ดํ๊ณ ... ๋ฏธ๋ฆฌ ๋ก๋ํ๋ ์์คํ ์... C#์ ์๋์ํค๋ ๋ฐฉ๋ฒ์ ์์๋ผ ์ ์์์ต๋๋ค.
Unity 4/5๋ฅผ ์๋ก ๋ค๋ฉด(๋ช ๋ ๋์ ์ฐ๊ฒฐ๋์ด ์์) _๊ตฌ์ฑ ์์๊ฐ ๋๋ฌด ๋ถํ๋ ค์ ๋ด๊ฐ ์ฌ์ฉํ ๋ค๋ฅธ ECS์ ๋น๊ตํ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ค, ๋น์ ์ http ์์ฒญ์ ํ์๊ฒ ์ต๋๊น? ๋ฌผ๋ก , ์ฅ๋ฉด ๊ตฌ์กฐ์ ์ ๊ฐ์ฒด์ ์ ๊ตฌ์ฑ ์์๋ฅผ ์ถ๊ฐํฉ๋๋ค. ์ฅ๋ฉด ๋ด ๊ฐ์ฒด ๋ฐ ํด๋น ๊ตฌ์ฑ ์์์ http ์์ฒญ์ ์ฐ๊ฒฐํ๋ ๊ฒ์ด ๋งค์ฐ ํฉ๋ฆฌ์ ์ด๊ธฐ ๋๋ฌธ์ ๋๋ค. "๋ณ๊ฒฝ ์ฌํญ ์์ด ์ฅ๋ฉด์ ์ ์ฅํ๋ฉด ๋ชจ๋ UUID๊ฐ ์ค๋จ๋ฉ๋๋ค" ๊ธฐ๋ฅ์ ๋น๊ธฐ์ ์ ์ธ ๋์์ด๋๊ฐ ๋ฒ์ ์ ์ด๋ฅผ ์ฌ์ฉํ๊ธฐ ์ด๋ ต๊ฒ ๋ง๋ค๊ธฐ ์ํด ๋ง๋ค์ด์ก์ต๋๋ค. "Don't Destroy On Load"์ ์กฐ๋ฆฝ์์ ์์ํ๊ณ ์ถ์ง๋ ์์ต๋๋ค.
์ด์จ๋ ๊ทธ ๋๋ถ๋ถ์ ๊ฒ๋ค ์ฌ์ด์ ๊ทผ๊ฑฐ๊ฐ ๋ฌด์์ด์์ต๋๊น? ๋๋ ๊ทธ๊ฒ์ด ์๋ง๋ ์ ๊ธฐ์ ์ด๊ณ ๋ฐ๋ณต์ ์ธ ๊ฐ๋ฐ๊ณผ ์ฌ๊ธฐ์ ๊ธฐ์ ํดํน๋ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด๋ผ๊ณ ๋งํ๊ณ ์ถ์ต๋๋ค(Godot ๋ฐ ์๋ง๋ ๋ค๋ฅธ ๋ชจ๋ ๊ฒ์ ์์ง์์๋ ๋ฐ๊ฒฌ๋จ). ๋ด ๋ง์, "_With_"๋ฅผ ์ ๋ ฅํ ๋๋ง๋ค ๋ด Swift ํค๋ณด๋๊ฐ "_Unity crashing_"๋ผ๋ ๋จ์ด๋ฅผ ์์ธกํ๊ธฐ ์์ํ์ ์ ๋๋ก ์ถฉ๋์ด ์ฌํ์ต๋๋ค. ๊ทธ๊ฒ์ ๋ด ์์ ํ๋ฆ์ ์ฃผ์ ๋ถ๋ถ์ด์์ต๋๋ค. ์ถฉ๋ -> 1๋ถ ๋์ ๋ชจ๋ ์์ฐ์ ๋ค์ ๊ฐ์ ธ์ค๊ณ 30๋ถ ๋์ ์์ ์ ๋ฐ๋ณตํฉ๋๋ค.
์ ์ฑ๋ชจ๋ ์ ์ธ ํ๋์ ๋๋ฌด ๋ง์ด ๋ณด์์ง๋ง ๋๊ตฌ๋ฅผ ํํ ์ ์๊ฒ ์ต๋๊น? ์์ง์ ์ฌ๋๋ค์ด pointlight ๊ฐ์ฒด ์์ _GameState_ "_component_"๋ฅผ ๋ฃ์ ์ ์๋๋ก ํฉ๋๋ค. ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ ๊ธ์งํด์ผํฉ๋๊น? http ํต์ (๋๋ ๊ฑฐ์ ๋ชจ๋ ๋น๋๊ธฐ ์์ )์ด ํ์ํ ๋ ๊ฒ์ ์ํ ๋ฐ์ดํฐ๊ฐ ์ฅ๋ฉด ๊ฐ์ฒด์ ๊ตฌ์ฑ ์์ ๋ด๋ถ์ ์์ด์๋ ์ ๋๋ค๊ณ ์ด๋ป๊ฒ ์ฃผ์ฅํฉ๋๊น?
๋ค๋ฅธ ๊ฐ๋ฐ ๋จ๊ณ์์ ์์ง์ ๋น๊ตํ๋ ๊ฒ์ ์ด๋ ค์ด ์ผ์ด๋ฉฐ ์ค์ ๋ก Godot๋ ๋น ๋ฅด๊ฒ ๋ฐ์ ํ๊ณ ๊ธฐ๋ฅ์ ์ถ๊ฐ/์ ๊ฑฐํ๊ณ ์์ต๋๋ค. ์ฆ, ์ํฌํ๋ก๊ฐ ๊ทธ์ ๋ฐ๋ผ ๋ณ๊ฒฝ๋๊ณ ์ ์ํด์ผ ํฉ๋๋ค. ๋๋ Godot์ ํจ๊ป ๊ด์ฐฎ์ 2D ์ํฌํ๋ก๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค. Unity๋ก ํ๋ ๊ฒ๋ณด๋ค ํ์คํ ๋ซ์ต๋๋ค. ์, ๋ชจ๋ฒ ์ฌ๋ก๋ ํ๋ฆฝ๋๋ค. ์, ์ธ ๋ช ์ ๊ฐ๋ฐ์์๊ฒ ๋ฌผ์ด๋ณด๋ฉด ์ธ ๊ฐ์ง ๋ค๋ฅธ ์ํฌํ๋ก๊ฐ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ๊ฒ์ด ๋์๊ฒ ์๋ก์ด ๋ฌธ์ ๋ผ๊ณ ๋งํ ์๋ ์์ผ๋ฉฐ ์ต์ํ ๋น๊ต๋ ๋ ์์ง ๋ชจ๋์ ํ๋์ ๋ฌธ์ ๊ฐ ์๋ค๊ณ ๋งํ ์ ์์ต๋๋ค.
์ ๋ ํ๋กํ ํ์ ๋ฐ ํ ์คํธ ํ๋ก์ ํธ ์ด์์ผ๋ก Unreal(๋๋ ๊ธฐํ ๊ด๋ จ ๊ฒ์ ์์ง)์ ์ฌ์ฉํด ๋ณธ ์ ์ด ์์ผ๋ฏ๋ก ํฉ๋ฆฌ์ ์ธ ๊น์ด์ ๋น๊ตํ ์ ์์ต๋๋ค.
ํ์ง๋ง ์ด๋ค ๋ฉด์์?
์ ๋ ์ด๋ฏธ ๋ชจ๋ ์คํฌ๋ฆฝํธ์ ๋ํด ์์์ ๋ง๋ค ์ ์๋ค๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค. ์๋ํ๋ฉด ์ ๋ ๋ฐฑ๋ง ๊ฐ ์ด์์ ํจ์๊ฐ ํ์ํ๊ณ ๋ฐฑ๋ง ๊ฐ์ ๋น ๋ ธ๋๋ผ๋ Godot์๊ฒ๋ ๋๋ฌด ๋ง๊ธฐ ๋๋ฌธ์ ๋๋ค.
๊ทธ๊ฒ ๋ฌด์จ ๋ป์ธ๊ฐ์? ์ผ๋ง๋ ๋ง์ ๊ธฐ๋ฅ์ ํจ๊ป ๊ทธ๋ฃนํํด์ผ ํฉ๋๊น? ์๋๋ฉด ์ข ์ด์ ๊ฐ์ฒด ์์์ ๊ณํํ๋ ๋ฐ 2-4๊ฐ์์ ์๋นํด์ผ ํฉ๋๊น?
๋ชจ๋ ๊ธฐ๋ฅ์ ํ๋์ ์คํฌ๋ฆฝํธ์ ๋ฃ์ ์ ์์ต๋๊น? Godot๋ ๊ฐ์ฒด ์งํฅ์ ์ผ๋ก ๋งค์ฐ ์ ์ฌ์ฉ๋ ์ ์์ผ๋ฏ๋ก OOP๋ฅผ ์ฌ์ฉํ ์ ์ด ์๋ค๋ฉด ์คํฌ๋ฆฝํธ๋ ์ฅ๋ฉด ์์์ ์ฌ์ฉํ๊ณ ํด๋์ค๋ฅผ ๋ง๋๋ ๋ฑ์ ์์ ์ ํ ์ ์์ต๋๋ค.
๋ด๊ฐ ์๊ณ ์ถ์ ๊ฒ์ Godot๊ฐ ๋ ์จ ํจ๊ณผ, ์ฒด์ ์๊ฐ ๋ฐ ๋์ ์งํ๊ณผ ๊ฐ์ ๋ณต์กํ ์์คํ ์ ๊ฐ์ง ๋๊ท๋ชจ ๊ฒ์์ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ๋์ง์ ๋๋ค.
๋ ์จ ์ํฅ? ํํฐํด ๋ ธ๋, ํ์ ๋ฐ ์ธ๊ณ ํ๊ฒฝ์ ํฌํจํ๋ ์ฅ๋ฉด์ ๋ง๋ค๊ณ ์คํฌ๋ฆฝํธ๋ฅผ ๋ฃจํธ์ ์ฒจ๋ถํฉ๋๋ค. ์ด ์คํฌ๋ฆฝํธ๋ ๋ ์จ๋ฅผ ์ ์ดํ ์ ์์ต๋๋ค. ๋ํ ๋น ๋ ธ๋๋ฅผ ๋ง๋ค์ด ์ํ ๋จธ์ ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. ๊ฐ ์ํ(์: ๋น, ํ๋น ๋ฑ)์ ๋ํด ๋น ๋ ธ๋๋ฅผ ์ฐ๊ฒฐํฉ๋๋ค. ์ด์ ๋ ธ๋์ ๊ฐ ์ํ์ ๋ํ ์ฝ๋๋ฅผ ๋ฃ์ผ๋ฉด ๋ฉ๋๋ค. ์ด ์ํ ๋จธ์ ์ ๋ฃจํธ ์คํฌ๋ฆฝํธ๋ก ์ ์ดํ ์ ์์ต๋๋ค. ์ด๊ฒ์ ๋งค์ฐ ์ฝ๊ธฐ ์ฌ์ด ์ผ์ ํ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
์ฒด์ ์๊ฐ? ๋๋ ์ด๊ฒ์ ์๋ก์ด FPS ๋ฐ๋ชจ์์ ๋ณธ ๊ฒ ๊ฐ๋ค.
๋์ ์งํ? ํ ๋ฒ ์ ์ฐจ์ ์งํ ๋ฉ์ฌ๋ฅผ ์ฌ์ฉํ ํ๋ก์ ํธ๊ฐ ์์๊ณ ๋ช ๋ ๋ ๋ ธํธ๋ถ์์ ๊ฝค ์ํํ๊ฒ ์คํ๋๊ณ ์์์ต๋๋ค.
์ด๊ฒ๋ค์ OP์์ ๋งํ๋ 'ํฐ ๋ฌธ์ '๊ฐ ์๋ ์ผ๋ถ ๊ธฐ๋ฅ์ผ ๋ฟ์ ๋๋ค.
๋ ์จ ์ํฅ? ํํฐํด ๋ ธ๋๊ฐ ํฌํจ๋ ์ฅ๋ฉด ๋ง๋ค๊ธฐ...
๊ธ์, ์ฐ๋ฆฌ๋ ๊ทธ๋ณด๋ค ์กฐ๊ธ ๋ ์ผ์ฌ ์ฐฌ ๊ณํ์ ๊ฐ์ง๊ณ ์์ต๋๋ค :) AI์๊ฒ ์ด๋๋ก ๊ฑธ์ด์ผ ํ๋์ง ์๋ ค์ฃผ๋ ์ง์ญ ์ง๋๋ฅผ ์ฌ์ฉํ๊ณ ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ๋์ด ์์ผ ์ ์๋๋ก ๊น์ด์ ๋ํ ๋ง์ง๋ง ์ฑ๋์ ์ ์งํ๋ฉด์ ๋ค๋ฅธ ์ฑ๋์ ๋น ์ ์ธ ๊ตฌ์ญ์ผ๋ก ์ฌ์ฉํฉ๋๋ค.
๋์ ์งํ?
๊ณต๊ฐ์ด ํฝ๋๋ค. ๋๋ฌด ๋ง์ ๋ ธ๋๋ฅผ ์ ๊ฑฐํด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ ์ง ์์ด ์ฅ๋ฉด์ Vector3(0,0,0)์ผ๋ก ์ฌ์ค์ ํ๋ ๋ฐฉ๋ฒ์ด ํ์ํฉ๋๋ค. ๋ฌผ๋ฆฌํ๊ณผ ๋ชจ๋ ๊ฒ์ด ํฐ ์๋ ์ ํจ๊ป ํ๋ค๋ฆฝ๋๋ค.
๊ทธ๊ฒ์ ๋ด๊ฐ ์ฌ์ฉํ ๋ค๋ฅธ ECS์ ๋น๊ตํ ์ ์์ ์ ๋๋ก ๋ถํ๋ ค์ง ๊ตฌ์ฑ ์์๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค.
๋์ํฉ๋๋ค. ๊ตฌ์ฑ ์์๊ฐ ๋์ฐํ ์ ์์ผ๋ฏ๋ก Godot๊ฐ ๋ค๋ฅธ ์ ๋ต์ ์ผ๋์ ๋๊ณ ์๋ค๊ณ ํด๋ ๋๋ผ์ง ์์ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ Godot๊ฐ ์ด๋ค ์ ๋ต์ ์ธ์ ๋์ง, ์ค์ ๋ก ๊ทธ๋ ๊ฒ ํ๋์ง๋ ์ ์ ์์ต๋๋ค.
Godot๋ฅผ ๋ฐฐ์ด์ง 2๊ฐ์ ๋์ ์ฐ๋ฆฌ๋ ์์ ๊ฒ์์ ๋ง๋๋ ๋ฐฉ๋ฒ๋ง ์๊ฐํ์ต๋๋ค.
Godot๋ฅผ ์ฌ์ฉํ ์ง ๊ฒฐ์ ํ ๋ ์ด 14์ผ ๋จ์๋๋ฐ, ์์ง ๊ฐ๋ฐ์๊ฐ ๋๊ท๋ชจ ํ๋ก์ ํธ์์ ์ด๋ป๊ฒ ์๋ํ๋์ง ์ค๋ช
ํ ์ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
์ฐ๋ฆฌ๊ฐ ๋ง์ง๋ง์ผ๋ก ํ๊ณ ์ถ์ ๊ฒ์ ๊ฒ์์ ๊ฐ๋ฐํ๋ ๋์ ์์ง ๋์์ธ์ ๋ง์ ์ธ์ฐ๋ ๊ฒ์ ๋๋ค.
@MysteryGM ์ Godot๋ฅผ ํฐ ํ๋ก์ ํธ์ ์ฌ์ฉํ ์ ์๋ค๊ณ ์๊ฐํ์๋์ง ์ ๋ง ์ดํด๊ฐ ์๋ฉ๋๋ค. ์ด ๋์์ธ์ ๋ชจ๋ ๊ฒ์ ๋ณ๋์ ์ฅ๋ฉด์ผ๋ก ๋ถํ ํ๊ณ OOP๋ฅผ ์ฌ์ฉํ์ฌ ์์ ์ ์ฌ์ฌ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์ ํฐ ํ๋ก์ ํธ์ ์ ํฉํฉ๋๋ค. ํฐ ํ๋ก์ ํธ์ Godot๋ฅผ ์ฌ์ฉํ ๋ ๋ฌธ์ ๊ฐ ๋ชฉํ๋ฅผ ๋ฌ์ฑํ๋ ๋ฐฉ๋ฒ์ ๋ชจ๋ฅธ๋ค๋ ๊ฒ์ด๋ผ๋ฉด Godot Discord ๋์๋ง ์ฑ๋์ ์ง๋ฌธํ๋ฉด ๋งค์ฐ ์ฆ๊ฐ์ ์ธ ์๋ต์ ๋ฐ์ ์ ์์ต๋๋ค.
๋ฌผ๋ฆฌํ๊ณผ ๋ชจ๋ ๊ฒ์ด ํฐ ์๋ ์ ํจ๊ป ํ๋ค๋ฆฝ๋๋ค.
#288 ์ฐธ์กฐ
๊ทธ๋ฌ๋ Godot๊ฐ ์ด๋ค ์ ๋ต์ ์ธ์ ๋์ง, ์ค์ ๋ก ๊ทธ๋ ๊ฒ ํ๋์ง๋ ์ ์ ์์ต๋๋ค.
๋๋ ๊ทธ๊ฒ์ด ์ฒ์์๋ ์ผ์ข
์ ์ธ๊ณ์ธ์ด๋ผ๋ ๊ฒ์ ์ดํดํ์ง๋ง ๋์๊ฒ ๋
ธ๋ + ์คํฌ๋ฆฝํธ ์ฌ์ฉ๋ฒ์ ๋งค์ฐ ๊ฐ๋จํฉ๋๋ค. https://gumroad.com/gdquest ์์ ์ด ๊ณผ์ ์ ์ทจ๋ฏธ ๋ฒ์ ์ (์ ์ด๋) ์ดํด๋ณด๋ ๊ฒ์ด ์ข์ต๋๋ค.
๊ทธ๊ฒ์ ๋์ ๋งค์ฐ ์ ์ฌํ ๋
ธ๋ ์คํฌ๋ฆฝํธ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ฉฐ, ์ค์ ๋ก ์์ง๊ณผ ๊ด๋ จ๋ ์ฌ๋๋ค์ด ๊ทธ๊ฒ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๋ ๋์ ํต์ฐฐ๋ ฅ์ ํ์คํ ์ ๊ณตํ ์ ์์ต๋๋ค. ์ ์๋ Godot ๋ฌธ์์ ์ฃผ์ ๊ธฐ์ฌ์์
๋๋ค.
ํธ์ง: ์ค์ ๋ก https://github.com/GDquest/make-pro-2d-games-with-godot ๊ณผ์ ์ ์ํ์ง ์๋ ๊ฒฝ์ฐ ์ ์ฅ์์ ์์ค๋ฅผ ์ดํด๋ณผ ์ ์์ต๋๋ค.
Godot๋ฅผ ์ฌ์ฉํ ์ง ๊ฒฐ์ ํ ๋ ์ด 14์ผ ๋จ์๋๋ฐ, ์์ง ๊ฐ๋ฐ์๊ฐ ๋๊ท๋ชจ ํ๋ก์ ํธ์์ ์ด๋ป๊ฒ ์๋ํ๋์ง ์ค๋ช ํ ์ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
๋๋ ์ด๊ฒ์ด ์ ํํ ๋ฌด์์ ์๋ฏธํ๋์ง์ ๋ํด ์ฝ๊ฐ ํผ๋ ์ค๋ฝ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ด์ ์ ๋ง์น ๋น์ ๋ฅผ ์๋ก ์ฌ์ฉํ์ง๋ง ๋ง์น๋ ์ผ๋ฐ์ ์ผ๋ก ์ผํ์ฉ ๊ธฐ๋ณธ ์ค์ฉ ๋๊ตฌ์ด๊ณ ์ดํฌ๋์ค๋ก ์ธํด ๋๊ตฌ์ ์ฉ๋์ ๋ํ ๋ณธ์ง์ ์ธ ์ดํด๊ฐ ์๊ธฐ ๋๋ฌธ์ ๊ฒฐํจ์ด ์๋ ๋น์ ์ ๋๋ค.
๋ํ, ์์ ๋ชจ๋ ์์คํ ์ ๋ชจ๋ ๋ฌธ์ ๋ฅผ ๋์ดํ์ง๋ง, ํฐ ์ํํธ์จ์ด ํ๋ก์ ํธ์ ํ์ค์ ๊ฐ ์ํคํ ์ฒ '์ ํ'์ด ํฅํ ๋ช ๊ฐ์ง ๋จ์ ์ ์ด๋ํ๋ค๋ ๊ฒ์ ๋๋ค. ํจ๊ป ๋ ๋ง์ ์์ ์ ์ํํฉ๋๋ค. ์์ ์ด์ ์ ์์ ์ฐพ๊ณ ๊ณ์ญ๋๊น? ์์งํ ๋งํด์, ์ ๋ ๋๋ถ๋ถ์ Unity ๋๋ Unreal ํ๋ก์ ํธ๊ฐ ์ ํํ '๊ถ์ฅ' ๊ตฌ์กฐ๋ฅผ ๋ฐ๋ฅด๊ณ ์๋ค๊ณ ์๊ฐํ์ง ์์ผ๋ฉฐ ์ข ์ข ๊ฐ์ฅ ์ ํฉํ ์ํฌํ๋ก์ ๋ง๊ฒ ์์ง์ ํฌํฌํฉ๋๋ค. ๋ชจ๋ ๊ฒ์์๋ ๋ ธ๋ ์ํคํ ์ฒ์ ๋ํ ๊ณ ์ ํ ์์ด๋์ด๊ฐ ์์ด์ผ ํ๋ค๊ณ ์ฃผ์ฅํ๊ธฐ๊น์ง ํ์ต๋๋ค. (์๋ฅผ ๋ค์ด ์๋ฎฌ๋ ์ด์ ๊ฒ์์ 3์ธ์นญ ์ํ ๊ฒ์๊ณผ ๊ตฌ์กฐ๊ฐ ๋งค์ฐ ๋ค๋ฆ ๋๋ค.)
ํ๋ก์ ํธ ๊ตฌ์กฐ์ ์์ ๋ํ ๋ ๋ง์ ๋ฌธ์ํ์ ๋ํ ๋ ผ์์ด ์์ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ํ์ง๋ง ๊ทธ๊ฑด ๋ฌธ์ํ์ ๋ํ ๋ ๋ง์ ๊ธฐ์ฌ์ ๋ฌธ์ ์ผ ๋ฟ์ ๋๋ค.
์ฅ๋ฉด์ ๋ถ๋ฆฌํ๊ณ OOP๋ฅผ ์ฌ์ฉํ์ฌ ์์ ์ ์ฌ์ฌ์ฉํฉ๋๋ค.
์์ ์ธ๊ธํ๋ฏ์ด ์ ํธ๊ฐ ์ฐ๊ฒฐ๋ ํ ๋ฌผ์ฒด๋ฅผ ์์ง์ด๋ ๊ฒ์ ๊ณ ํต์ค๋ฝ์ต๋๋ค. ํนํ ์์ธ๋ ๊ฒฝ๊ณ ์์ด ์์
์ ์ค์งํ ๋.
๋ค๋ฅธ ๊ฐ๋ฐ์๊ฐ ์ธ๊ธํ ํ ํ์ฌ ๋ฆฌํฉํ ๋ง ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค. ํ์ง๋ง ๊ทธ๋ ๋ค๊ณ ํด๋ Godot์ ๊ณ ์ ํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์๋ ์์ต๋๋ค.
๋ฌผ๊ฑด์ ์์ง์ด์ง ์์ผ๋ฉด ์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค("๋ฌธ์ ๊ฒ์ํ"์ ์ด๋ฏธ์ง).
๊ทธ๋์ ์ด๊ฒ์ ์์ ํ๊ธฐ ์ํด ์ฐ๋ฆฌ๋ ์์ ๋
ธ๋๋ฅผ ๋ง๋ค์์ต๋๋ค. ์ฝ 50,000๊ฐ๋ฅผ ์ ์ธํ๊ณ ๋ ๋
ธ๋์ผ์ง๋ผ๋ ๋ฌธ์ ๋ฅผ ์ผ์ผํค๊ธฐ ์์ํฉ๋๋ค.
์ฐ๋ฆฌ๊ฐ ์๊ณ ์ถ์ ๊ฒ์ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ, Godot๋ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ ๊ณํ์ด์๋์ง์ ๋๋ค. ์์์ ์ธ๊ธํ ๋ชจ๋ ์ํฌํ๋ก๋ฅผ ํ ์คํธํ์ต๋๋ค.
#288 ์ฐธ์กฐ
๋๋ถ์ ์ฐ๋ฆฌ๋ ์ธ๊ณ ์ขํ๋ฅผ ์ฌ๋ ๋ฐ ๋๋ฌด ์ต์ํด์ ์ด๊ฒ์ ํ์ธํ์ง ์์์ต๋๋ค.
๋๋ ๊ทธ๊ฒ์ด ์ฒ์์๋ ์ผ์ข ์ ์ธ๊ณ์ธ์ด๋ผ๋ ๊ฒ์ ์ดํดํ์ง๋ง ๋์๊ฒ ๋ ธ๋ + ์คํฌ๋ฆฝํธ ์ฌ์ฉ๋ฒ์ ๋งค์ฐ ๊ฐ๋จํฉ๋๋ค.
๋ฌธ์ ๋ ๊ทธ๊ฒ์ด ์ธ๊ณ์ธ์ด๋ผ๋ ๊ฒ์ด ์๋๋ผ ๋ค๋ฅธ ๋ฌธ์ ๋ฅผ ์ผ์ผํจ๋ค๋ ๊ฒ์
๋๋ค. ์ฃผ๋ก ๋ ๋ง์ ์์์ ์ถ๊ฐํ๋ฉด ๊ฒฐ๊ตญ ๊ฒ์์ด ์ง์ฐ๋๊ฑฐ๋ ์ธ๋ก๋ํ๋ ค๊ณ ํ ๋ ๋ฉ์ถฅ๋๋ค.
๋
ธ๋์ผ ๋๋ ๋ง์ฐฌ๊ฐ์ง์
๋๋ค.
๊ฒ์์ 50,000๊ฐ์ ๊ฐ์ฒด๊ฐ ํ์ํ ์ด์ ๋ ๋ฌด์์ ๋๊น? ํ์คํ ์ด๊ฒ์ ๋ชจ๋ ์์ง์ ์ง์ฐ์ํฌ ๊ฒ์ ๋๋ค.
๊ฒ์์ 50,000๊ฐ์ ๊ฐ์ฒด๊ฐ ํ์ํ ์ด์ ๋ ๋ฌด์์ ๋๊น?
๋
ธ๋๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ฒด์ ์ถ๊ฐ ์คํฌ๋ฆฝํธ๋ฅผ ์ถ๊ฐํ๊ธฐ ๋๋ฌธ์
๋๋ค. Godot์ UI ๋๊ตฌ๋ ์ปจํ
์ด๋ ์์ ์ปจํ
์ด๋๋ฅผ ์ปจํ
์ด๋ ์์ ์ปจํ
์ด๋๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์... ์ค์๊ฐ์ผ๋ก ๊ท๋ชจ๋ฅผ ์กฐ์ ํฉ๋๋ค.
๊ฐ์ฅ ์์ UI๋ 800๊ฐ๊ฐ ๋๋ ๊ฐ์ฒด์
๋๋ค. ์ด ์ปจํ
์ด๋์ ๋๋ถ๋ถ.
๋จ์ผ ์ AI๋ ๋ชฉ์ ์ด ์๋ +/- 8๊ฐ ๋
ธ๋์ ๊ฑฐ๊ธฐ์๋ง ์๋ +/- 64๊ฐ ๋
ธ๋์ด๊ธฐ ๋๋ฌธ์ 50,000๊ฐ ๊ฐ์ฒด๊ฐ ์์ต๋๋ค.
๊ฐ ์์
์ ์์ฒด ์ฝ๋๋ก ๋ถํ ํ์ฌ ๋ฌธ์ ๊ฐ ์๋ ์์น๋ฅผ ๋ณผ ์ ์๊ธฐ ๋๋ฌธ์
๋๋ค. ๊ฒ์์ ํน์ ๋ถ๋ถ์ ๋น ๋ฅด๊ฒ ์ฐพ์ ์ ์๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ด ์๊ธฐ ๋๋ฌธ์
๋๋ค.
์ด ๊ฒฝ์ฐ ์ฌ์ฉ์ ์ง์ ๋ชจ๋์ด ์ข์ ์ต์
์ธ ์์ญ์ ์นจ์
ํ ๊ฒ ๊ฐ์ต๋๋ค.
http://docs.godotengine.org/en/3.0/development/cpp/custom_modules_in_cpp.html
๊ฑฐ๊ธฐ์์ ์ฌ์ฉ์ ์ ์ ๋
ธ๋๋ฅผ ๋ง๋ค๊ณ ๋ง์ ์ค์ฒฉ์ ํผํ ์ ์์ต๋๋ค.
ํธ์ง: ํ๋์ (๊ฐ์ฅ ์์?) UI์ ๋ํด 800๊ฐ์ ๊ฐ์ฒด๊ฐ ๋์ ๋์์ธ/์ํคํ ์ฒ๋ฅผ ๊ฐ๋ฆฌํจ๋ค๊ณ ์ฃผ์ฅํ๊ณ ์ถ์ต๋๋ค.
๋จ์ผ ๊ฐ์ฒด์ ๋ํด 64๊ฐ์ ๊ฐ๊น์ด ์คํฌ๋ฆฝํธ๋ฅผ ๊ฐ์ง ์ ์๋ ๋ฐฉ๋ฒ์ ์ฌ๊ฐํ๊ฒ ์ดํดํ์ง ๋ชปํฉ๋๋ค. ์ด๊ฒ์ Godot ๋ฌธ์ ๋ณด๋ค ํ๋ก์ ํธ์ ๋์์ธ ๋ฌธ์ ์ ๋ ๊ฐ๊น์ต๋๋ค. ์ฝ๋๋ฅผ ๋ ์ ์ ์์ ์คํฌ๋ฆฝํธ๋ก ํตํฉํฉ๋๋ค. ๊ธฐ๋ฅ์ ๊ฐ ๋ถ๋ถ์ ๋ํ ์คํฌ๋ฆฝํธ๋ฅผ ๋ง๋ค์ง ๋ง๊ณ ๋์ ๊ฐ ์ ํ์ ๊ฐ์ฒด์ ๋ํด ("์ " ๋ ธ๋๊ฐ XYZ๋ฅผ ์ํํ ์ ์๋ ๊ฒฝ์ฐ X ๋ฐ Y ๋ฐ Z ๊ธฐ๋ฅ์ ๋ํ ์์ ๋ ธ๋๋ฅผ ์ถ๊ฐํ๋ ๋์ ํด๋น ๋ถ๋ถ์ Enemy ์คํฌ๋ฆฝํธ์ ์ถ๊ฐํ์ญ์์ค) . ์ด๋ฅผ ์ํด ๋ ๋ง์ ๊ณ ๊ธ ๊ธฐ๋ฅ์ด ํ์ํ ๊ฒฝ์ฐ ์ฌ์ฉ์ ์ง์ ์์ ๋ฐ/๋๋ C# ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ด ๊ฒฝ์ฐ ์ฌ์ฉ์ ์ง์ ๋ชจ๋์ด ์ข์ ์ต์ ์ธ ์์ญ์ ์นจ์ ํ ๊ฒ ๊ฐ์ต๋๋ค.
์ด๊ฒ์ด ์ฐ๋ฆฌ๊ฐ ๊ถ๊ธํดํ๋ ๊ฒ ์ค ํ๋์์ต๋๋ค. ์๋ํ๋ฉด Custom Modulse๊ฐ ํ์ํ ๊ฒฝ์ฐ ์ฐ๋ฆฌ ๋ชจ๋๊ฐ C++๋ฅผ ์๊ณ ์๊ธฐ ๋๋ฌธ์ ๋์ Godot ์์ง์ ํธ์งํ ๊ฒ์
๋๋ค.
์ฐ๋ฆฌ๋ Godot preload()๊ฐ ์์ฌ๋๋ ๊ณณ์์ #include๋ฅผ ์์ ํ๊ฒ ์ฌ์ฉํ ์ ์๋ค๋ ๊ฒ์ ์๋๋ค. ๊ทธ๊ฒ์ด ์ผ๋ง๋ ์์ ์ ์ธ์ง ๋๋ ์ด๋ค ๋จ์ ์ด ์๋์ง ์๋ฌด๋ ์ฐ๋ฆฌ์๊ฒ ๋งํ ์ ์์ต๋๋ค.
๋จ์ผ ๊ฐ์ฒด์ ๋ํด 64๊ฐ์ ๊ฐ๊น์ด ์คํฌ๋ฆฝํธ๋ฅผ ๊ฐ์ง ์ ์๋ ๋ฐฉ๋ฒ์ ์ฌ๊ฐํ๊ฒ ์ดํดํ์ง ๋ชปํฉ๋๋ค.
๊ฐ๋จํฉ๋๋ค. ๋ชจ๋ AI๋ ์ฌ์ํ ์์
์ด ์๋๋ผ 64๊ฐ ์ ๋์ ์์
์ ์ํํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด ์คํฌ๋ฆฝํธ๋ SquadFlightPatters์ด๊ณ ์ฌ๊ธฐ์๋ 20๊ฐ์ ๋ชจ๋ ๋นํ ๋ํ์ด ์์ผ๋ฉฐ ๋นํ ํจํด๊ณผ ๊ด๋ จ๋ ์ ๋๋ฉ์ด์
, ์ฌ์ด๋ ๋ฐ ์
์๋ง ํด๊ฒฐํ๋ SquadFlightPattersCosmetic์ด ์์ต๋๋ค.
ํ์ฌ ์ฐ๋ฆฌ์ ๊ท์น์ ์ฌ์ฉ์ ํผ๋๋ฐฑ์ ์ ๋น์ฌ๋ก๋ถํฐ ๋๋๋ ๊ฒ์ ๋๋ค.
"Enemy" ๋ ธ๋๊ฐ XYZ๋ฅผ ์ํํ ์ ์๋ ๊ฒฝ์ฐ X ๋ฐ Y ๋ฐ Z ๊ธฐ๋ฅ์ ๋ํ ์์ ๋ ธ๋๋ฅผ ์ถ๊ฐํ๋ ๋์ ํด๋น ๋ถ๋ถ์ Enemy ์คํฌ๋ฆฝํธ์ ์ถ๊ฐํฉ๋๋ค.
์ด๋ฏธ์ง์ Pseudo Unreal, ์ผ๋ช ์ปจํธ๋กค๋ฌ ๋ฐ ์ค๊ฐ์๋ฅผ ๋ณด๋ฉด.
Custom Modulse๊ฐ ํ์ํ ๊ฒฝ์ฐ ์ฐ๋ฆฌ ๋ชจ๋๋ C++๋ฅผ ์๊ณ ์๊ธฐ ๋๋ฌธ์ ๋์ Godot ์์ง์ ํธ์งํ ๊ฒ์ ๋๋ค.
๋ชจ๋์ ๋ง๋๋ ๊ฒ์ด ์์ง ์์ฒด๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ๋ณด๋ค ํจ์ฌ ๊ฐ๋จํฉ๋๋ค. ์์ง ์์ฒด๊ฐ ์๋๋ผ ๊ทธ ์์ ๊ตฌ์ถ๋๊ธฐ ๋๋ฌธ์ ๋๋ค.
๊ทธ๋ฌ๋ ์์ ฏ๋น ์๋ฐฑ ๋๋ ์์ฒ ๊ฐ์ ๋ ธ๋๊ฐ ์๋ UI, ํนํ ์ด๋ฌํ ๋์ ์ซ์๋ก ํ์ฅํ๋ ๊ฒ์ ์ฌ์ ํ โโ์์ํ ์ ์์ต๋๋ค.
OP์ ์ฐธ์กฐ๋ ๋ฌธ์ ์ ๋ํ ์๋ต:
- ์์ฐ์ ์์คํ ์ ์ฒด ์ค์น๋ก ์ ์ ํ ์ข ์์ฑ ๊ด๋ฆฌ๋ฅผ ์ถ๊ฐํฉ๋๋ค. ์์ ์ ์ํด ๋ค์ ๊ฐ์ ธ์ฌ ์ ์๋ ๋ฐฉ๋ฒ์ผ๋ก ์ ๋์จ์ ํ๋ก์ ํธ ์์ฒด ๋ฐ์ผ๋ก ์ด๋
- ์ฌ์ฉ์ ์ ์ ๋ ธ๋๋ฅผ ๋ ์ฝ๊ฒ ํ์ฅํ๊ณ ์ธ์ด ๊ฐ ์คํฌ๋ฆฝํธ ์์์ ํ์ฉํฉ๋๋ค.
- ์์ฐ์ ๊ฒฝ์ฐ ๋งค์ฐ ๊ธด ๊ฒฝ๋ก๋ฅผ ํผํ๊ธฐ ์ํด ํด๋์ค ์ด๋ฆ๊ณผ ๋ค์์คํ์ด์ค๋ก ์คํฌ๋ฆฝํธ๋ฅผ ์ฐธ์กฐํ ์ ์์ต๋๋ค.
์คํฌ๋ฆฝํธ ํด๋์ค๋ ๋ง์ง๋ง ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค. ๋ค๋ฅธ ์คํฌ๋ฆฝํธ์ ๋ณ์นญ ์ญํ ์ ํ๋ ์์๋ฅผ ์ฌ์ฉํ์ฌ ์ต์์ ์คํฌ๋ฆฝํธ ํด๋์ค๋ฅผ ๋ง๋ค์ด ๋ค์์คํ์ด์ค๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. 3.1์์ ์๋ํฐ์ ์ฌ ๋ ์ ๋ํ ๋ณ๊ฒฝ ์ฌํญ์ผ๋ก ์ธํด ์ด์ ์ฌ์ฉ์ ์ ์ ์คํฌ๋ฆฝํธ๋ฅผ ํจ์ฌ ์ฝ๊ฒ ํ์ฅํ ์ ์์ต๋๋ค. ๊ต์ฐจ ์ธ์ด ์์์ ๊ดํด์๋ ๊ณต์์ ์ผ๋ก ๊ตฌํ๋์ง๋ ์๊ฒ ์ง๋ง MultiScript๊ฐ ๋ค์ ๋์ ๋๋ฉด ํฉ๋ฆฌ์ ์ผ๋ก ์ ์์ผ ์ ์์ต๋๋ค.
์ด์ MultiScript๋ ๊ธฐ๋ณธ ์์ง ์ ํ์ ํ์ฅํ๋ ๋ชจ๋ ์คํฌ๋ฆฝํธ๋ฅผ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์ํ๋ฏ๋ก(๋ฐ๋ผ์ ๋ชจ๋ ๋ค๋ฅธ ์์ ์ ์ํํ์ง๋ง ์๋ก ๊ด๋ จ์ด ์๋ ๋ค๋ฅธ ์ธ์ด์ ์ฌ๋ฌ ๋ ธ๋ ํ์ฅ ์คํฌ๋ฆฝํธ๋ฅผ ๊ฐ์ง ์ ์์) ์ค์ ๋ก ๊ฑฐ์ ๋ค์๊ณผ ๊ฐ์ด ์๋ํฉ๋๋ค. ๊ต์ฐจ ์ธ์ด ํน์ฑ ์์คํ ... ์ผ์ข ์. ๋๋ MultiScript๋ฅผ ๋ค์ ์ถ๊ฐํ๋ ๊ฒ์ด ๊ฝค ๋ฉ์ง๋ค๊ณ ์๊ฐํฉ๋๋ค.
OP์์ ์ ๊ธฐ๋ ๋ง์ ๋ฌธ์ ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ ์ฌ๋ฌ ๊ฐ์ง ์ ์ฌ์ ์ธ ๋ฐฉ๋ฒ์ด ์์ผ๋ฉฐ ๊ฐ ๋ฐฉ๋ฒ์๋ ๋ค์ํ ๋นํจ์จ์ฑ์ด ์์ ์ ์์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ๊ฐ์ฅ ์ต์ ์ ์์ ์ ์ํํ๋ ํน์ ๋ฐฉ๋ฒ์ด ์๋ ๊ฒฝ์ฐ ์์ง์ ๊ธฐ๋ณธ C++ ์์ง์์ ์์ฒด ๊ตฌํ์ ์ ๊ณตํ๋ฉฐ(์คํฌ๋ฆฝํธ๋ ํ๋ฌ๊ทธ์ธ์ด ํ์ ์์) ์ด๊ฒ์ด ์ ์๋ ์ฌ์ฉ๋ฒ์ ๋๋ค.
๊ทธ๋ฌํ ํด๋์ค๊ฐ ์กด์ฌํ๊ณ ์ฌ๋๋ค์ด ๊ทธ๊ฒ์ ์ฌ์ฉํ์ง ์๋๋ค๋ฉด, ๊ทธ๊ฒ์ 1) ๊ทธ๋ค์ด ๊ทธ๋ค์ ์๊ตฌ๊ฐ ์ด๋ฏธ ์์ง์ ์ํด ์ถฉ์กฑ๋์๋์ง ํ์ธํ๊ธฐ ์ํด ๋ฌธ์๋ฅผ ์ ์ ํ๊ฒ ํ์ธํ์ง ์๊ณ ์๋ค๋ ์ ํธ์ ๋๋ค/์์ง์ด ๊ทธ๊ฒ์ ์ฌ์ฉํ๋๋ก ์ ์ํ๋ ๋ฐฉ๋ฒ ๋๋ 2) ์์ง/์กฐ์ง์ ์ฌ์ฉ์๊ฐ ๋ฌธ์๋ฅผ ์ ๋ณผ ์ ์๋๋ก ํ๊ฑฐ๋ ์ฌ์ฉ์๊ฐ ์ก์ธ์คํ ์ ์๋๋ก ํ๋ ๋ฐ ์ถฉ๋ถํ ์์ ์ ์ํํ์ง ์์ต๋๋ค(์กด์ฌํ๋ ๋ฆฌ์์ค๋ฅผ ์ฐพ์ง ๋ชปํ๊ธฐ ๋๋ฌธ์).
๋ฌธ์ 1์ ํด๊ฒฐํ๊ธฐ ์ํด ํ ์ ์๋ ์ ์ผํ ์ผ์ ํด๋น ์ฌ๋๋ค์ด ์์ ์ ๋ฌธ์ ๋ฅผ ๋ชฉ์๋ฆฌ๋ก ํํํ๊ณ ๋ค๋ฅธ ์ฌ๋์ด ๋ฌธ์ ๋๋ Q&A ์ฌ์ดํธ๋ก ๋ฆฌ๋๋ ์ ํ์ฌ ์๋ฃจ์ ์ ์ฐพ๋ ๋ฐ ๋์์ ์ฃผ๋ ๊ฒ์ ๋๋ค. ๋๋ ์ฌ๋๋ค์ด ๋ฌธ์ 2์ ๋ง์ ๋์์ด ๋ ํธ์ง์์์ ์ง์ Q&A ์ฌ์ดํธ๋ฅผ ํ์ํ๊ณ ์ฌ์ฉํ ์ ์๋๋ก ์ ์ํ๋ ๋ฌธ์ (#23043)๋ฅผ ๋ง๋ค์์ต๋๋ค. ์ด์ ๋ ๋งํฌ์ ์ค๋ช ๋์ด ์์ต๋๋ค.
(ํธ์ง: ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ์ฌ๋ฌ ๊ฐ์ง๊ฐ ์๊ณ ๊ทธ ๋ฐฉ๋ฒ ์ค ํ๋๊ฐ ๋ค๋ฅธ ๋ฐฉ๋ฒ๋ณด๋ค ํจ์ฌ ๋ซ๊ณ Godot๊ฐ ์์ง ๊ณ ์ ํ ์๋ฃจ์ ์ ๊ตฌํํ์ง ์์ ๊ฒฝ์ฐ ์๋ก์ด ๊ธฐ๋ฅ์ผ๋ก ์ ์ ํ ์ ์์ต๋๋ค. ์ด๊ฒ์ ์ฌ๋๋ค์ด GDScript / ์ ฐ์ด๋ ์ฝ๋ ๋ฑ์์ ์์ ์ SimplexNoise ์๊ณ ๋ฆฌ์ฆ์ ์์ฑํ๊ธฐ ๋๋ฌธ์ SimplexNoise ํญ๋ชฉ์ ์ถ๊ฐํ ๋ฐฉ๋ฒ์ ๋๋ค.
๋น์ ์ด ๋ฌ์ฌํ "๋ฌธ์ ๊ฒ์ํ"์ ๋ฐ๋ฅด๋ฉด, ๋น์ ์ด ๊ฒช๊ณ ์๋ ๋ฌธ์ ๋ ๋ค์ค ์์์ด ์ง์๋์ง ์๋๋ค๋ ๊ฒ์ ๋๋ค(์ข์ ์๊ฐ๋ ์๋๋๋ค). ๊ทธ๋์ ๋น์ ์ ๋ถ๋ชจ์๊ฒ ๊ธฐ๋ฅ์ ๋ถ์ฌํ๋ ๊ตฌ์ฑ ์์ ๋ ธ๋๋ฅผ ์ฌ์ฉํ์ต๋๋ค. ๋จ์ํ ๋๋ฌด ๋ง์ ๋ ธ๋๋ฅผ ์์ฑํ๊ธฐ ๋๋ฌธ์ ๊ฒ์ ์ง์ฐ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ ์ผ๋ฐ์ ์ธ ์ ๊ทผ ๋ฐฉ์์ ๋ฌธ์ ๊ฐ ์์ ๊ฐ๋ฅ์ฑ์ด ๋ ๋์ ๊ฒ ๊ฐ์ต๋๋ค. ์ฌ๊ธฐ์์ ์๋ณํ๊ธฐ ์ํด).
OP์ ์ํฌํ๋ก ์๋ ...
Unity ์ ๊ทผ ๋ฐฉ์, ์์ ๋ ธ๋:
ํ์ด๋ง ๋
ผ๋ฆฌ๋ฅผ ์์ฑํ๋ค๊ณ ๊ฐ์ ํ๋ฉด ์์ ๋
ธ๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์
๋๋ค. ์ด๊ฒ์ ํน์ฑ ์์คํ
์ด ์ ์ฉํ ์ด์์ ์ผ๋ก๋ ์ง์ง๊ธฐ ๋ก์ง์ โโํ ๋ฒ ์์ฑํ๊ณ ํ์์ ๋ฐ๋ผ ์ด๋์์๋ ๋ณต์ ํ ์ ์๋๋ก ํ๋ ๊ฒ์
๋๋ค. ๋๋ ์ข
์ข
๋ถ๋ชจ๊ฐ ๋ถ๋ชจ/์๋ถ๋ชจ๊ฐ ์๋ ๋ ์๋์ผ๋ก ๋ถ๋ชจ์ ๋ํ "๋์"์ผ๋ก ์ค์ ๋๊ณ ๊ด๋ จ ์ ํธ๋ฅผ ์๋ ์ฐ๊ฒฐ/์ฐ๊ฒฐ ํด์ ํ๋ ๋ฐฉ์์ผ๋ก ๊ตฌ์ฑ ์์๋ฅผ ์์ฑํฉ๋๋ค. ์ด๋ฅผ ์ํด _notification(what)
์ NOTIFICATION_(UN)PARENTED ์๋ฆผ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ปจํธ๋กค๋ฌ๋ฅผ ์ฌ์ฉํ UE4 ์ ๊ทผ ๋ฐฉ์:
Godot 3.1์ ์ฌ์ฉํ๋ฉด ์คํฌ๋ฆฝํธ์ ์คํฌ๋ฆฝํธ ํด๋์ค๋ฅผ ํ ๋นํ ์ ์์ผ๋ฏ๋ก ๋ ์ด์ ๋ฏธ๋ฆฌ ๋ก๋ํ ํ์๊ฐ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ Godot๋ ๋ ธ๋์ ์ ํ ์ด๋ฆ์ ํ ๋นํ๋ ๊ฒ์ ํ์ฉํ์ง๋ง ์คํฌ๋ฆฝํธ์ ๋ฐ๋ผ ๋ค๋ฅด๋ฏ๋ก ์ฃผ์ํด์ผ ํฉ๋๋ค. ์ฅ๋ฉด์ ๋์ผํ ์ฒ๋ฆฌ๋ฅผ ๋ฐ์ง ์์ผ๋ฉฐ ์๋ง๋ ์์ง ์ฝ์ด์ ๋ง์ ํญ๋ชฉ์ ์ถ๊ฐํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๊ทธ๋ ์ง ์์ ๊ฒ์ ๋๋ค.
๋๋ ๋ํ ์ด๋ป๊ฒ ๊ทธ๋ ๊ฒ ๋ง์ ์ค๋ณต ์ฝ๋๋ฅผ ์ป๊ณ ์๋์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ์ฌ๋ฌ ํด๋์ค์ ๋์ผํ ๋ก์ง์ด ํ์ํ ๊ฒฝ์ฐ, ํด๋น ๋ก์ง์ ๋จ์ผ ๋ ธ๋๋ก ๋ฌถ์ ๋ค์, Unreal(๊ตฌ์ฑ ์์, ์์ ์กํฐ), Unity(MonoBehaviours ๋๋ ์์ GameObjects)์์์ ๋์ผํ ๋ฐฉ์์ผ๋ก ํด๋น ๋ก์ง์ ํ์๋ก ํ๋ ํด๋์ค ์๋์ ํด๋น ๋ ธ๋๋ฅผ ์ฌ์์ฐํฉ๋๋ค. , ๋๋ ์ฝ๋ ์ฌ์ฌ์ฉ์ ์ค์ด๊ธฐ ์ํด ์ข ์์ฑ์ ์์ ๊ฐ์ฒด๋ก ์ด๋ํ๋ ๊ฑฐ์ ๋ชจ๋ ๋ค๋ฅธ ์์ง.
์ฌ์ ๋ก๋๊ฐ ์๋ Panda3D ์ ๊ทผ ๋ฐฉ์:
NodeRef ๊ฐ ์์ง ์กด์ฌํ์ง ์๊ธฐ ๋๋ฌธ์ ์ด ์ ๊ทผ ๋ฐฉ์์ ๋ง์ ๋ฌธ์ ๊ฐ ์๋ค๋ ๊ฒ์ ์ดํดํ ์ ์์๊ณ ํ์ฌ 3.2์์ ์์ ํ๊ธฐ๋ฅผ ๋ฐ๋ผ๋ ๋ฆฌ์์ค ์คํฌ๋ฆฝํธ๋ฅผ ๋ด๋ณด๋ด๋ ๋ฐ ๋ฌธ์ ๊ฐ ์์์ ์ดํดํ ์ ์์ต๋๋ค(๋น๋ก ์ง์ ์์ ํ ์๋ ์์ง๋ง ์ถฉ๋ถํ ์ฝ๊ฒ, ๊ทธ๊ฒ์ ๊ฝค ์์ต๋๋ค).
WTF ์คํฌ๋ฆฝํธ ์ ๊ทผ ๋ฐฉ์:
๋๋ ๋น์ ์ด ์ฌ๊ธฐ์ ๊ฒช๊ณ ์๋ ๋ชจ๋ ๋ฌธ์ ๋ฅผ ์ ๋ง๋ก ์ดํดํ์ง ๋ชปํฉ๋๋ค. ์๋ง๋ ์ฐ๋ฆฌ์๊ฒ ๋ง์ ๋งฅ๋ฝ์ด ์๊ธฐ ๋๋ฌธ์ผ ๊ฒ์ ๋๋ค.
์ธ์คํด์ค ์์คํ ๊ณผ ์ถฉ๋ํฉ๋๋ค. ์ ํธ๊ฐ ๊ฐ์ฅ ์์ชฝ์ผ๋ก ์ฐ๊ฒฐ๋๋ ๋์ ์ธ์คํด์ค๊ฐ ์๋๋ก ํ๋ฅด๊ธฐ ๋๋ฌธ์ ๋๋ค.
์์์์ ๋ถ๋ชจ์ ์ ํธ ํธ๋ฆฌ๊ฑฐ ๋์์ ์ํ ๋๋ ์ธ์ ์ ๋๊น? ๋ถ๋ชจ๊ฐ ์ง์ ์์๊ณผ ๊ทธ ๋ฉ์๋๋ฅผ ๊ฐ์ ธ์ ํธ์ถํ๋๋ก ํ์ง ์๋ ์ด์ ๋ ๋ฌด์์ ๋๊น? ๋ถ๋ชจ๊ฐ ์์ด๋ฅผ ๋ณผ ์ํ์ด ์์ต๋๋ค. C++ ๊ฐ์ฒด๊ฐ ๊ตฌ์กฐ์ฒด ๋๋ ํด๋์ค ๋ฉค๋ฒ ๋ณ์(?)์ ์ก์ธ์คํ ์ ์์ด์ผ ํ๋ค๊ณ ๋งํ๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค.
์์ ๋ฌด์๋ฏธํ ์คํฌ๋ฆฝํธ๊ฐ ์ฃผ์๋ฅผ ๋ฐฐํํฉ๋๋ค. ๊ทธ๋ค์ด ํ๋ ๋ชจ๋ ์ผ์ ์ ํธ๋ฅผ ๋ณด๋ด๊ณ ๋จ์ผ ๊ฐ์ ์ถ์ ํ๋ ๊ฒ์ ๋๋ค.
์ด๊ฒ์ ์ด๋ฏธ ํ๋ก์ ํธ์ ๋์์ธ์ด ์ข์ง ์๋ค๋ ์ ํธ์ ๋๋ค. ๊ฒ์์ ๋ชจ๋ ๋จ์ผ ์ํธ ์์ฉ์ ๊ณ ์ ํ ๊ฐ์ธ ๊ฐ์ฒด๋ก ์ถ์ ํ๋ ๊ฒ์ด ๋ฌธ์ ์ ๋๋ค. ์ด๊ฒ์ ์ด๋ค ๊ด์ ์์ ๋ณด์๋ ์ด์์ ์ด์ง ์์ต๋๋ค.
๋๋ฌด ๋ง์ ์ ํธ๊ฐ ์ฒจ๋ถ๋ ๊ฐ์ฒด๋ฅผ ์ด๋ํ๋ ๊ฒ์ ์ต์ํ ์ค๋ง์ค๋ฝ์ต๋๋ค.
์ด๋ค ๋ฐฉ๋ฒ์ผ๋ก? ๋๋ ์ผ๋ฐ์ ์ผ๋ก ์ฅ๋ฉด ํ์ผ์ ์ฐ๊ฒฐ์ ํ๋์ฝ๋ฉํ๊ฑฐ๋ ๋ ธ๋๊ฐ ์ด๋ํ๋ ค๋ ๊ฒฝ์ฐ ์ ํธ๋ฅผ ์๊ณ ๋ฆฌ์ฆ ๋ฐฉ์์ผ๋ก ์ฐ๊ฒฐ ๋ฐ ์ฐ๊ฒฐ ํด์ ํ๋ค๋ ๊ฒ์ ๋ฐ๊ฒฌํ์ต๋๋ค. ๊ทธ๊ฒ์ผ๋ก ์ ๋ชฉ์ ์ ์ถฉ๋ถํ ๋ฌ์ฑํ์ง๋ง, ํน์ ํ ๋ฌธ์ ๊ฐ ์๋ ๊ฒฝ์ฐ ์ด๋ฅผ ๊ณต์ ํ๋ฉด ๋ค๋ฅธ ์ฌ๋๋ค์ด ๋์์ ๋ฐ์ ์ ์์ต๋๋ค.
์ ํธ ๋ฐ ๊ทธ๋ฃน์ ์ฌ์ฉํ๋ฉด ๊ฒฝ๊ณ ์์ด ๊ฒ์์ ์ ์ฒด ๋ถ๋ถ์ด ์คํจํ ์ ์์ต๋๋ค.
๋ฐ๋ผ์ ์กด์ฌ ์ค๊ณ๋ฅผ ํตํ ๋ชจ๋ ๋ถ์ธ์ ๋ฌธ์ ์ ๋๋ค. ๋์์ ALL ๊ฐ์ฒด๋ฅผ ๋ฐ๋ณตํ์ฌ ๊ธฐ์ค๊ณผ ์ผ์นํ๋์ง ํ์ธํ ๋ค์ ์ผ์นํ๋ ๊ฒฝ์ฐ ๋ ผ๋ฆฌ๋ฅผ ์ํํ๊ณ ์ผ์นํ์ง๋ง ์ ์ ํ์ง ์์ ๊ฒฝ์ฐ ์ค๋ฅ๋ฅผ throwํ๋ ๊ฒ์ ๋๋ค. ์ ํธ ๋ฐ ๊ทธ๋ฃน์ ๊ฒฝ์ฐ ์งํฉ ๋ด์ ๋ชจ๋ ํญ๋ชฉ์ ๋ํด ๋์์ด ์๋์ผ๋ก ํธ๋ฆฌ๊ฑฐ๋๋ฏ๋ก ์งํฉ์ ๋ฒ์ด๋๋ ๊ฒฝ์ฐ ์คํ ์๊ฐ ๋์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์์ ๊ฐ์งํ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ์ด๋ฌํ ์ข ๋ฅ์ ๋ฌธ์ ๋ฅผ ์ฐพ๋ ์ ์ผํ ๋ฐฉ๋ฒ์ ๊ทธ๋ฃน/์ ํธ๊ฐ ์ฒ์์ ๋ฐฐ์ด๋๋ ์ค์ ํ๋ก์ธ์ค ๋์์ ๋๋ค.
์ด์จ๋ , ๊ทธ๊ฒ์ ๋ฌผ๊ฑด์ ๋ํ ๋์ ๋ชจ๋ ๊ฒฝํ์ด์์ต๋๋ค. ํน์ ์ฌ์ฉ ์ฌ๋ก์ ๋ํ ์ ์์ ์ ๊ณตํ ์ ์๋๋ก ๊ทํ์ ํ๋ก์ ํธ์ ํ๋ก์ ํธ๊ฐ ์ค์ ๋ก ํ๋ ์ผ ์ ๋ํด ๋ ๋ง์ด ์๋ ๊ฒ์ด ํจ์ฌ ๋ ๋์์ด ๋ ๊ฒ์ ๋๋ค.
์ด๋ ์ชฝ์ด๋ , ์ฌ๊ธฐ์์ ์ ๊ธฐํ ๋ฌธ์ ๋ Godot ์์ง์ ์ค๊ณ ๋๋ ๊ตฌํ ์์ฒด์์ "์๋ก์ด" ๋ฌธ์ ๋ก ๋ณด์ด์ง ์์ต๋๋ค. Godot๋ ์ฌ๋๋ค์๊ฒ API๋ฅผ ์ ๊ณตํ๊ณ ์ฌ๋๋ค์ด ๊ทธ API๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๊ทธ๋ค์๊ฒ ๋ฌ๋ ค ์์ต๋๋ค. Godot์์ ํน์ ๊ธฐ๋ฅ์ ์ด๋ป๊ฒ ๋ ํตํฉ/์ฌ์ฉ ๊ฐ๋ฅํ๊ฒ ๋ง๋ค์ด์ผ ํ๋์ง์ ๋ํ ์์ด๋์ด๊ฐ ์๋ค๋ฉด(์: MultiScript ๋ค์ ํ์ฑํ), ๊ทธ๊ฒ์ ์ข์ ์ ์์ด ๋ ๊ฒ์ ๋๋ค.
๊ทธ๋ฌ๋ ์ฌ๊ธฐ์ ์ง๋ฌธ์ "X์ ๊ฐ์ ์์คํ ์ ์ค๊ณํ๋ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ ๋ฌด์์ ๋๊น?"์ ๋ ๊ฐ๊น์ต๋๋ค. ์ด๋ ์ค์ ๋ก GitHub ๋ฌธ์ ๊ฐ ์๋๋๋ค. "๋ชจ๋ฒ ์ฌ๋ก" ์ข ๋ฅ์ ์ง๋ฌธ์ ๋ํ Q&A ์ฌ์ดํธ์์ ๋ ์ ์ ํด ๋ณด์ ๋๋ค. ๋๋ ์ด๋ฌํ ์ข ๋ฅ์ ์ฌ์ฉ ์ฌ๋ก๋ณ ์ ๋ณด๋ฅผ ๋ณด๋ค ๋ช ํํ๊ณ ๊ณต๊ฐ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํด์ผ ํ๋ค๋ ์ ์์ ๋๋ค. ์ด๊ฒ์ด ๋ฐ๋ก ์ Q&A ๋ฌธ์ ์ ๊ดํ ๊ฒ์ ๋๋ค.
์คํฌ๋ฆฝํธ ํด๋์ค๋ ๋ง์ง๋ง ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค.
๋จผ์ ๊ธด ๋ต๋ณ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ๊ธ์ ์ฐ๋ ๋ฐ ์๊ฐ์ด ๋ง์ด ๊ฑธ๋ ธ์ต๋๋ค.
์คํฌ๋ฆฝํธ ํด๋์ค์ ๋ํด ๋ฃ๊ฒ ๋์ด ๊ธฐ์ฉ๋๋ค. ์ฐ๋ฆฌ๋ 3.1์ ์ฌ์ฉํ์ง ์์์ต๋๋ค. FPS ๋ฐ๋ชจ๋ฅผ ์คํํ๊ธฐ ์ํด์๋ง.
๊ทธ๋ฌ๋ MultiScript๊ฐ ๋ค์ ๋์ ๋๋ฉด ํฉ๋ฆฌ์ ์ผ๋ก ์ ์์ผ ์ ์์ต๋๋ค.
Godot๊ฐ ๋ฉํฐ์คํฌ๋ฆฝํธ๋ฅผ ๊ตฌํํ์ง ์๋๋ค๋ฉด ์์ ํ ์ดํดํ ์ ์์ต๋๋ค. ์ฌ์ค ๋๋ GitHub์ ๋ง์ ์ฌ์ฉ์๋ค์ด ์ฐ๋ฆฌ๊ฐ ์๋ํ ๊ฒ๊ณผ ์ ์ฌํ ์ํฌํ๋ก ์๋ฃจ์ ์ ์ฐพ๊ณ ์๋ค๋ ์ ์ ์ง์ ํ๊ณ ์์์ต๋๋ค.
์์์์ ๋ถ๋ชจ์ ์ ํธ ํธ๋ฆฌ๊ฑฐ ๋์์ ์ํ ๋๋ ์ธ์ ์ ๋๊น? ๋ถ๋ชจ๊ฐ ์ง์ ์์๊ณผ ๊ทธ ๋ฉ์๋๋ฅผ ๊ฐ์ ธ์ ํธ์ถํ๋๋ก ํ์ง ์๋ ์ด์ ๋ ๋ฌด์์ ๋๊น?
์ด๊ฒ์ ์ค๋ช
ํด์ผ ํ ๊ฒ ๊ฐ์ต๋๋ค. ๋น์ ์ฐ๋ฆฌ๋ ๊ฐ๊ฐ ๋๋ต +/- 30๊ฐ์ ๊ธฐ๋ฅ์ ๊ฐ์ง ๋งค์ฐ ํฐ ์คํฌ๋ฆฝํธ๋ฅผ ๊ฐ์ง๊ณ ์์์ต๋๋ค. ๊ทธ๋ฐ ์ด์ ๋ก ์ฐ๋ฆฌ๋ ์ด๋ฏธ ํฐ ์คํฌ๋ฆฝํธ์ ์ถ๊ฐ ์ ํธ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ ๊ฒ์ ํผํ๊ณ ์ถ์์ต๋๋ค.
๊ทธ ๊ฒฐ๊ณผ ํฐ ์คํฌ๋ฆฝํธ์์ ์์
์ ์คํ๋ก๋ํ๊ธฐ ์ํด ๋์จํ ์คํฌ๋ฆฝํธ๋ฅผ ๋ง๋ค์์ต๋๋ค.
์ด๊ฒ์ ์ด๋ฏธ ํ๋ก์ ํธ์ ๋์์ธ์ด ์ข์ง ์๋ค๋ ์ ํธ์ ๋๋ค.
๊ทธ๊ฒ์ด ๋ฐ๋ก ๋ฌธ์ ์ ๊ทผ์์
๋๋ค. ์ฃผ๋ก Godot ์ปค๋ฎค๋ํฐ์ ํํ ๋ฆฌ์ผ์์ ์ถ์ฒํ๋ ๋ง์ ๋์์ธ์ ์๋ํ์ต๋๋ค.
1.) ์ฒ์์ ์ฐ๋ฆฌ๋ ๋ฏธ์น ์ ์ฐ์ ๊ฐ์ง๊ณ ์์๋๋ฐ, Save Branch Scene ์ด๋ ๊ฐ์ฒด๋ฅผ ๋ค๋ฅธ Scene์ผ๋ก ์ด๋ํ๋ ๊ฒ์ด ์ ํธ๋ฅผ ๋์๋ค๋ ๊ฒ์ด ๋ถ๋ช
ํด์ก์ ๋ ๋นจ๋ฆฌ ํฌ๊ธฐํ์ต๋๋ค.
2.) ์ฐ๋ฆฌ๋ ์ด๊ฒ์ ํฐ ์คํฌ๋ฆฝํธ๋ก ๋ฐ๋์ต๋๋ค. ์ด๋ฌํ ์คํฌ๋ฆฝํธ์ ์ถ์์ ์ธ ์ด๋ฆ์ ์ ์ธํ๊ณ ๊ฐ๊ฐ์ด ์ํํ๋ ์์
์ ์ค๋ช
ํ๊ณ ๋ฌธ์ ๋ฅผ ์ฐพ๊ธฐ๊ฐ ์ด๋ ค์ ์ต๋๋ค.
์ฐ๋ฆฌ๋ ๋ฌธ์ ๋ฅผ ์ผ์ผํค๋ ํจ์์ ์ด๋ฆ์ด ์ด๋์ ์๋์ง ์๊ณ ์์์ง๋ง ์ ํํ ์ด๋์ ์๋์ง๋ ์์ง ๋ชปํ์ต๋๋ค.
3.) ๊ทธ๋ฐ ๋ค์ ๋งค๋ด์ผ์ ์ฝ๊ณ ์์ ๋
ธ๋ ์ ๊ทผ ๋ฐฉ์์ ์ฐพ์์ต๋๋ค. ์ง์ ๋
ธ๋๋ฅผ ํ์ฉํ๊ณ ํธ์ง๊ธฐ์์ ๊ตฌ์กฐ๋ฅผ ๋ณผ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ฌด ์ ํน์ ์ด์์ ์ ์์ต๋๋ค. ๋ํ ์ฐ๋ฆฌ๊ฐ ์ํ๋ ์ ํํ ์คํฌ๋ฆฝํธ๋ฅผ ์ฐพ๊ธฐ ์ํด ๊ทธ๊ฒ์ ํํฐ๋งํฉ๋๋ค.
์ฌ๊ธฐ์์ ๋์ ํจ๊ป ๋๋ด๊ณ ๋ง์ง๋ง ๋ต๋ณ์ ๋ด๊ฐ ๊ถ๊ธํ๋ ๋ง์ ๋ถ๋ถ์ ํด๊ฒฐํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ฌ๊ธฐ๊ฐ ์๋ฒฝ 2์์ด๋ฏ๋ก ๋ด์ผ ๋ค์ ํ์ธํด์ผ ํฉ๋๋ค.
"X์ ๊ฐ์ ์์คํ ์ ์ค๊ณํ๋ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ ๋ฌด์์ ๋๊น?"... ์ค์ ๋ก GitHub ๋ฌธ์ ๊ฐ ์๋๋๋ค.
๋๋ ์ฐ๋ฆฌ๊ฐ ์ฐ๋ฆฌ์ ๋ค๋ฅธ ์ ํ์ ๋๋ถ๋ถ์ ์์งํ๋ค๋ ๊ฒ์ ์ง์ ํ๊ณ ์ถ์ต๋๋ค. ์ฐ๋ฆฌ ๊ฐ์๋ Q&A ํฌ๋ผ์์ ์ง๋ฌธํ๊ณ ์ปค๋ฎค๋ํฐ์์ ์น๊ตฌ๋ฅผ ์ฌ๊ท๊ณ ๊ทธ๋ค๋ก๋ถํฐ ์ฌ๋ก๋ฅผ ์์งํ์ต๋๋ค. ์ค๋ช
์ ์ฐพ๊ธฐ ์ํด ๋ฌธ์๋ฅผ ์ค์บํ์ต๋๋ค.
๋ด๊ฐ ์ค๋ช
ํ ๋ชจ๋ ์ํฌํ๋ก๋ ์ด๋ฌํ ์ํฌํ๋ก๋ฅผ ์ฌ์ฉํ๋ Godot ์ฌ์ฉ์๊ฐ ์ค๋ช
ํ๋ ค๊ณ ์๋ํ ๊ฒ์
๋๋ค. ๊ฐ๊ฐ์ ์ธ๊ธ๋ ์์ง์์ ์๋ํ์ง๋ง Godot์์๋ ์ ์๋ํ์ง ์์์ต๋๋ค.
๋ฉ์ธ ํ๋ก๊ทธ๋๋จธ๊ฐ ํ ์ด๋ธ์ ๋จธ๋ฆฌ๋ฅผ ๋ถ๋ช์น๊ณ ํ๋ด๋ฅผ ๋ด์ ๋๊ตฐ๊ฐ๋ฅผ ๋ชฉ ์กธ๋ผ ์ฃฝ์ด๋ ๊ฒ์ ์ ์ธํ๊ณ ๋ ๋ง์ง๋ง ์ํฌํ๋ก ์ข ๋ฅ๋ง ์๋ํ์ต๋๋ค.
๋ฌธ์ ์ ๋ํ ํด๊ฒฐ์ฑ ์ ์ฐพ๋ ๋ฐ ๋ฌธ์ ๊ฐ ์๋ค๋ ์์์ ์ ํ๊ฒ ๋์ด ์ ๊ฐ์ ๋๋ค. Will์ ์ด๋ฏธ ๊ธด ๋ต๋ณ์ ์ ๊ณตํ์ผ๋ฏ๋ก ๋ํ๋ฅผ ๋๋ฌด ๋ณต์กํ๊ฒ ๋ง๋ค์ง ์์ผ๋ ค๊ณ ๋ ธ๋ ฅํ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ์ด ์์ ์์ ๊ทํ์ ์๊ตฌ์์ ๋ฐ์ํ ํน์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐ ๋์์ด ๋๋ ์ปจ์คํดํธ๊ฐ ๋ ํ์ํ ๊ฒ ๊ฐ์ต๋๋ค.
์ฃผ๋ก Godot ์ปค๋ฎค๋ํฐ์์ ์ถ์ฒํ๋ ๋ง์ ๋์์ธ๊ณผ ํํ ๋ฆฌ์ผ์์ ๋์จ ๋์์ธ์ ์๋ํ์ต๋๋ค.
์ง์ญ ์ฌํ์ ์ฐ๋ฆฌ ๋๋ถ๋ถ์ ๋น๊ต์ ์์ ๊ท๋ชจ์ ํ๋ก์ ํธ์์ ์ผํฉ๋๋ค. ํํ ๋ฆฌ์ผ์์ ์ฃผ์ด์ง ์์คํ ์ ์์ ๊ณผ ๊ตฌ์กฐ๋ฅผ ํ์ ํ๋ ๋ฐ ๋์์ด ๋๋๋ก ๋ง์ ๋ ธ๋๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ด๊ฒ์ ๋๋ถ๋ถ์ ์ฌ๋๋ค์๊ฒ ์ ํ์ฅ๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ์ค์ ๊ท๋ชจ ๊ฒ์์ ์ ์ฉ๋๋ ๊ฒ์ด ๋ ํฐ ๊ฒ์์๋ ์ ์ฉ๋์ง ์์ต๋๋ค.
@willnationsdev ๊ฐ ์์ ๋งํ ๋๋ก ์ฑ๋ฅ ๋ฉด์์์ ํธ์ง๊ธฐ ์์ฒด์์ ๊ด๋ฆฌํ ์ฝ๋๋ฅผ ์ค์ด๊ธฐ ์ํด ๊ฒ์ ํ์ฅ์ ๋์์ด ๋๋ ๋ฐฑ์๋ ์ฝ๋๋ฅผ ๊ณ ๋ คํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ฌ๊ธฐ ๋ง์ ์ฌ๋๋ค๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์ ๋ ๋ ํฐ ํ๋ก์ ํธ์ ๋ํ ๊ฒฝํ์ด ์๊ธฐ ๋๋ฌธ์ ๊ทธ ์ธ์ ๋ง์ ๋์์ ๋๋ฆด ์ ์์ต๋๋ค. ํ์ด์ ๋น๋๋ค!
์๋ ํ์ธ์, ์ง๋ฌธ์ด ํ๋ ๋ ์์ต๋๋ค.
๊ฑด๋ฌผ๊ณผ ๋ฌผ๊ณผ ๊ฐ์ ๋ ๊ฐ์ ๊ด๋ จ ์๋ ๊ฐ์ฒด๊ฐ ์์ง๋ง ์ด๋ฌํ ๊ฐ์ฒด์ ์คํฌ๋ฆฝํธ๊ฐ ์ํธ ์์ฉํ๊ธฐ๋ฅผ ์ํ๋ ๊ฒฝ์ฐ ๋
ธ๋๋ ์ฌ์ ๋ก๋ ์์ด ์ด๋ป๊ฒ ์ด๋ฅผ ์ํํฉ๋๊น?
๋ฌผ์ ์ง๊ฐ์ด๋ผ ๊ฑด๋ฌผ์๋ ๋ถ๋ชํ์ง ์๋๋ค.
@MysteryGM ๊ฑด๋ฌผ๊ณผ ๋ฌผ์ ๋ํ๋ด๋ ๋ ธ๋๋ฅผ ์ํ์ง ์๊ฑฐ๋ ์คํฌ๋ฆฝํธ๊ฐ ์ฒจ๋ถ๋๋ ๊ฒ์ ์ํ์ง ์๋๋ค๋ ๋ง์์ด์ ๊ฐ์? ๋ ธ๋๋ฅผ ํฌํจํ๋ ๋จ์ผ ๋ฐ์ดํฐ๋ฅผ ์ ์ธํ๊ณ ๋ ์ฅ๋ฉด ํธ๋ฆฌ ๋ด์ ์ด๋ค ์์ผ๋ก๋ ์กด์ฌํ์ง ์๋ ์ฒ๋ฆฌ์ฉ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๋ ๋ฐ์๋ ์๋ฌด๋ฐ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
ECS ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ๋ ค๋ ๊ฒฝ์ฐ ์ ํ์ ๋ชจ๋ ์ธ์คํด์ค์ ์คํฌ๋ฆฝํธ๋ฅผ ์ฒจ๋ถํ๊ณ ๊ฐ๋ณ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ ๋์ ์ ํ/์ ํ์ ๋ฐ๋ผ ๋ ธ๋๋ฅผ ๋ฐ๋ณตํ๊ณ ์ฒ๋ฆฌ๋ฅผ ์ํํ๋ ๋จ์ผ "์์คํ " ๋ ธ๋๋ฅผ ๊ฐ์ง ์ ์์ต๋๋ค. ํ ๋นํ ๊ทธ๋ฃน์ ๋๋ค. ๊ฐ๋ณ ์ธ๋ถ ์ ๋ณด๋ฅผ ์ํด ๋ ธ๋์ ์คํฌ๋ฆฝํธ๋ฅผ ์ฒจ๋ถํ์ง ์์ผ๋ ค๋ฉด ์๊ฐ์ ๋ฐ๋ผ ํด๋น ์ ๋ณด๋ฅผ ์์คํ ์ ์ ์ฅํ ์๋ ์์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๋ ธ๋์ ๋ฌด๊ฒ๊ฐ ๊ฐ๋ฒผ์์ง๊ณ ๋์ผํ ์ ํ์ ์์ฒ ๊ฐ์ ์ํฐํฐ์์ ์์ ํ ๋ ๋ ํจ์จ์ ์ผ ์ ์์ต๋๋ค.
50.000 ๊ฐ์ ํญ๋ชฉ์ ๊ฐ์ง๊ณ ์์ผ๋ฉด Godot์ SceneTree -and-nodes ๊ฐ์ฒด ๊ธฐ๋ฐ ์์ ๊ฐ ์ ์ฉํ ์ง์ ์ ์ค๋ซ๋์ ์ด๊ณผํ์ต๋๋ค.
์ด๋ ๋ค๋ฅธ ์์ง๊ณผ ํฌ๊ฒ ๋ค๋ฅด์ง ์์ต๋๋ค. Unity๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฒ์ ๊ฐ์ฒด, GC์์ ๋น์ทํ ํ๊ณ์ ๋๋ฌํ๊ฑฐ๋ UE4๋ฅผ ์ฌ์ฉํ์ฌ ๋ธ๋ฃจํ๋ฆฐํธ๋ฅผ ํ์ฅ ํ๋ ๋ฐ ๋ฌธ์ ๊ฐ ์์์ ๋ฐ๊ฒฌํ ์ ์์ต๋๋ค. ์๊ฐ์ ํธ์ง๊ธฐ๋ ๋ ์ด์ ์ ์ฉํ์ง ์์ผ๋ฉฐ ์ ๊ณต๋ ๋๊ตฌ๊ฐ ์ค๋จ๋๊ฑฐ๋ ์ต์ํ ์ฑ๋ฅ์ด ์ ํ๋๊ธฐ ์์ํฉ๋๋ค.
๋ชจ๋ ์์ง์์ ์๋ฃจ์ ์ ๊ฑฐ์ ๋์ผํฉ๋๋ค. ์์ ๋ง์ ์๋ฃจ์ ์ ๊ตฌ์ถํ๋ ๊ฒ์ ๋๋ค. ๊ทธ๊ฒ๋ค์ด ๋ฌด์์ธ์ง๋ ์์ง๋ณด๋ค ๊ฒ์, ์ํคํ ์ฒ ๋ฐ ์ธ๋ถ ์ฌํญ์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค.
๊ด๋ฆฌ์ ํด๋์ค, pub-sub ํต์ ๋ฒ์ค, ๋ฉ์์ง ๋ธ๋ก์ปค, ํํฐํด์ ๋ํด ์ํ๋๋ ๊ฒ๊ณผ ์ ์ฌํ ์ธ์คํด์ค ๊ด๋ฆฌ์, ๊ฐ์ฒด ํ, GPU๋ก ์์ ์ ์คํ๋ก๋ํ๊ธฐ ์ํ ์ฌ์ฉ์ ์ ์ ์ ฐ์ด๋, ์ ฐ์ด๋ ๊ณ์ฐ, ์ค๋ ๋ ๋๋ ๊ธฐํ ํ๋ก์ธ์ค/์๋ฒ๋ก ์ฒ๋ฆฌ ์ด๋ - ๋ค์์ด ์์ต๋๋ค. ๊ฐ๋ฅํ ์๋ฃจ์ ์ ์ํ ์๋ง์ ๋น๋ฉ ๋ธ๋ก๊ณผ ๊ฒฐํฉํด์ผ ํ๋ ๋น๋ฉ ๋ธ๋ก์ ํน์ ๋ฌธ์ ์ธํธ์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค.
Unity๋ ์๋ก์ด ECS ์ธํ๋ผ๋ฅผ ํตํด ์ด ์ค ์ผ๋ถ๋ฅผ ๋ ์ฝ๊ฒ ๋ง๋ญ๋๋ค. UE4๋ ํ์คํ์ง ์์ต๋๋ค. ๊ฒฐ๊ตญ, ์ด ๊ณ ๊ธ ์์ค์์๋ ๋๋ถ๋ถ์ ํ๋ ์ผ์ ์ค์ค๋ก ํด์ผ ํฉ๋๋ค(๋๋ ๊ฒฝํ์ด ํ๋ถํ ์ฌ๋์ ๊ณ ์ฉํ์ฌ ์ํํด์ผ ํจ).
UE4์ Unity๋ ๋ ์ค๋๋๊ณ ๋ ํ๋ฆฝ๋์ด ์๋ค๋ ์ ์์ ๋ ์ฝ์ต๋๋ค. ๋ฐ๋ผ์ ์ด๋ฌํ ํ์ฅ ๋ฌธ์ ์ ์ง๋ฉดํ๋ ์ฌ๋๋ค์ด ๋ ๋ง์ต๋๋ค. ์ด๋ ํด๊ฒฐ์ ๋ ๋ง์ ์ง์(๋ฐ ๊ณ ์ฉ ๊ฐ๋ฅํ ์ธ์ฌ)์ ์ฌ์ฉํ ์ ์์์ ์๋ฏธํฉ๋๋ค.
๊ทธ๋ฌ๋ ์ค์ ๋ก, ๊ฒฐ๊ตญ์๋ ์ด๋ค ์์ง๋ ๋น์ ์ ๊ทธ๋ ๊ฒ ๋ฉ๋ฆฌ ๋ฐ๋ ค๋ค์ฃผ์ง ๋ชปํ ๊ฒ์ ๋๋ค. ๋ชจ๋ ์ผ์ฌ ์ฐฌ ๊ฒ์์ ๋ชจ๋ ์์ง์์ ํ๊ณ์ ๋ถ๋ชํ ๊ฒ์ ๋๋ค. ๋น์ทํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐ ํ์ํ UE ๋๋ Unity์ ์ค๋ํ ๊ฒ์์ ๋ํ ์์ญ ๊ฐ์ ์์ ๋ฅผ ์๊ณ ์์ต๋๋ค. ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ฑฐ๋ ๋ฒ์๋ฅผ ์ถ์ํ์ญ์์ค.
Godot ๊ฒ์ ๊ฐ๋ฐ์๊ฐ ์์ง ๊ฐ๋ฐ์์๊ฒ ํ์ํ ๊ฒ์ ๋ณต์กํ ๊ฐ์ฒด์ ์์คํ ์ ๋ง๋ค๊ธฐ ์ํ ๊ณต์ ์ํฌํ๋ก์ ๋ช ํํ ๊ฐ์์ ๋๋ค.
์ด๋ ์ฃผ๋ก ๊ฒ์์ ๋ฐ๋ผ ๋ค๋ฆ
๋๋ค. ๋ํ ์์ง์๋ ์ด์ ๋ํ ์ ๋ต์ด ์์ต๋๋ค.
Unity์์ gameobjects-scene ๊ธฐ๋ฐ ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํด์ผ ํฉ๋๊น? ์๋๋ฉด ํ์ด๋ธ๋ฆฌ๋ ECS? ์์ ํ ์๋ก์ด ECS? ์ด๋ค ๋ ๋ ํ์ดํ๋ผ์ธ์ ์ฌ์ฉํฉ๋๊น?
UE4 ํ๋ก์ ํธ์์ Blueprint ๋๋ C++๋ฅผ ์ฌ์ฉํ์๊ฒ ์ต๋๊น?
๋ชจ๋ ์์ง์ ๋ง๋ ์๋ฃจ์ ์ด ์๊ธฐ ๋๋ฌธ์ ๋ชจ๋ ์์ง์ ์๋ง์ ์ ํ, ์๋ง์ ์ํฌํ๋ก ๋ฐ ๋ง์ ์์ ๋ฅผ ์ ๊ณตํฉ๋๋ค.
๋ฐ๋ผ์ Godot์์ ํน์ ๊ฒ์์ ์ ๊ทผํ๋ ๋ฐฉ๋ฒ , ๊ฒ์์ ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ, ์ฌ์ฉํ ์ํคํ ์ฒ์ ๋ํ ๊ตฌ์ฒด์ ์ธ ์กฐ์ธ ์ด ํ์ํ ๊ฒฝ์ฐ ๋ ๋ง์ ์ปจํ ์คํธ์ ์ ๋ณด๋ฅผ ์ ๊ณตํด์ผ ํฉ๋๋ค.
๋น์ ์ด ์ฑ์ทจํ๊ณ ์ถ์ ๊ฒ์ด ๋ฌด์์ธ์ง ์๋ ค์ฃผ์ญ์์ค. ๊ทธ๋ฌ๋ฉด ๋๊ตฐ๊ฐ๊ฐ ์กฐ์ธ์ ํด์ค ์ ์์ต๋๋ค. ๊ทธ๋ ์ง ์๋ค๋ฉด ์ ์ผํ ๋ฐฉ๋ฒ์ ๊ฒฝํ ๋ง์ Godot ๊ฐ๋ฐ์๋ฅผ ์ปจ์คํดํธ๋ก ๊ณ ์ฉํ๋ ๊ฒ์ ๋๋ค.
๋๋ Groud์๋ง ๋์ํ ์ ์์ต๋๋ค.
๋ชจ๋ ์๋ฃจ์ ์๋ ์ฅ๋จ์ ์ด ์์ผ๋ฏ๋ก "๊ณต์" ์ํฌํ๋ก๋ฅผ ๋ง๋๋ ๊ฒ์ ์๋ฏธ๊ฐ ์์ต๋๋ค.
@mhilbrunner ์ฌ๊ธฐ์์ ์ ๋ง์ ์นํธ์ ์ญํ ์ ํ๋ ๊ฒ๋ง์ผ๋ก๋ ์ฑ๋ฅ์ด ์ค์ํ ๋๋ถ๋ถ์ ํต์์ ์ ์ ํ ECS์ ๊ฐ์ ๋ ๋์ ์์ง ์ค๊ณ๋ก ์ธํด ๊ฑฐ์ ๋ชจ๋ ๊ฒ์์์ ์ค์ ๋ก ๊ฒฝํํ ์ ์๋ ๊ฒ๋ณด๋ค ๋ง์ ํ๊ณ๊ฐ ํจ์ฌ ๋ ๋์์ง๋๋ค(์ด๊ฒ์ด ์๋ก์ด Rust Amethyst ๋ฐฉ์์ ๋๋ค. ๊ฒ์ ์์ง์ ์๋ฅผ ๋ค์ด ์ง์คํ๊ธฐ ์ํด ๊ตฌ์ถ ์ค์ ๋๋ค.
ํ์ง๋ง ์, Godot(2)์์ ECS์ ๊ฐ์ ์์ ์ ์ํํ์ผ๋ฉฐ ํจ์จ์ฑ๊ณผ ๊ธฐ๋ฅ ๋ถ๋ฐฐ ์ธก๋ฉด์์ ์ฌํธ๋ฆฌ ์ธ์คํด์ฑ ์คํ์ผ๋ณด๋ค ํจ์ฌ ๋ ์ ์๋ํ์ต๋๋ค. Godot์๋ ์ ์ฉํ ํ๋ฆฌ๋ฏธํฐ๋ธ๊ฐ ์๊ธฐ ๋๋ฌธ์ ํ ์ ์์ต๋๋ค. ์ฝ๊ฐ ๊ณ ํต์ค๋ฝ์ต๋๋ค.
@OvermindDL1
๋๋ ๋ค๋ฅธ Godot ๊ฐ๋ฐ์๊ฐ ์๋๋ผ ๋ ์์ ์ ๋ํด์๋ง ๋งํ ์ ์๊ณ UE, Unity ๋ฐ Godot์ ๋ํ ๊ฒฝํ๋ง ์๊ธฐ ๋๋ฌธ์ Rust Amethyst์ ๋ํด์๋ ๋ชจ๋ฆ ๋๋ค.
Godot์๋ ์ ์ฉํ ํ๋ฆฌ๋ฏธํฐ๋ธ๊ฐ ์๊ธฐ ๋๋ฌธ์ ํ ์ ์์ต๋๋ค. ์ฝ๊ฐ ๊ณ ํต์ค๋ฝ์ต๋๋ค.
๊ทธ๋ฌํ ํ๋ฆฌ๋ฏธํฐ๋ธ๋ฅผ ์ด๋์ ์ถ๊ฐํ๋ ๊ฒ์ด ์๋ฏธ๊ฐ ์๋์ง / Godot๊ฐ ๊ทธ๋ฌํ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ๋ ์ ์์ฉํ ์ ์๋ ๋ฐฉ๋ฒ์ ๋ํด ํ ๋ก ํ๋ ๊ฒ์ ๋งค์ฐ ๊ฐ์น ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ด ๋ฌธ์ ์๋ ์์ ์๋ ์์ต๋๋ค :)
๊ทธ๋ฌ๋ ์ฐ๋ฆฌ๋ ์ด ํผ๋๋ฐฑ์ ์ด๋ค ์์ผ๋ก๋ ์์งํด์ผ ํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์์ง์ ๋ฐ๋ผ ํ๊ณ๊ฐ ๋ค๋ฅด๋ค๋ ์ ์๋ ๋์ํ์ง๋ง, Unity์ UE4์์๋ ๋น์ทํ ์ฅ๋ฒฝ์ ๋ถ๋ชํ๋ ์ฌ๋๋ค์ ๋ณด์์ต๋๋ค. ๋์ค์ ๋ ๋ ๋์ ์๋ ์์ง๋ง ๊ฒฐ๊ตญ์๋ ๋ชจ๋ ์์ง์์ ๋ฐ์ํ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ด์ผ ํฉ๋๋ค. :)
@MysteryGM ๊ฑด๋ฌผ๊ณผ ๋ฌผ์ ๋ํ๋ด๋ ๋ ธ๋๋ฅผ ์ํ์ง ์๊ฑฐ๋ ์คํฌ๋ฆฝํธ๊ฐ ์ฒจ๋ถ๋๋ ๊ฒ์ ์ํ์ง ์๋๋ค๋ ๋ง์์ด์ ๊ฐ์?
๋๋ ์ด๋ฏธ ๋ฌผ ์
ฐ์ด๋์ ๊ณต๊ธํ๋ ๋ฌผ ๊ฐ์ฒด์ ์ฐ๊ฒฐ๋ ์คํฌ๋ฆฝํธ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค. ๊ทธ๋์ ๋ ์ด์ ์ํฐ ๋
ธ๋์ ์คํฌ๋ฆฝํธ๋ฅผ ์ฒจ๋ถํ ์ ์์ต๋๋ค.
์์ ์์ฐ์ ์ ์ดํ๊ณ ๋ฌธ๊ณผ ๊ฐ์ ๊ฒ์ ๊ฑด๋ฌผ์ ์ฐ๊ฒฐํ๋ ์คํฌ๋ฆฝํธ๊ฐ ๊ฑด๋ฌผ์ ์ฒจ๋ถ๋์ด ์์ต๋๋ค. ๋ฐ๋ผ์ ๋ ์ด์ ์ฝ๋๋ฅผ ์ถ๊ฐํ๊ณ ์ถ์ง ์์ ์คํฌ๋ฆฝํธ๋ ์์ต๋๋ค.
๋ ๊ฐ์ฒด์ ์ด๋ฏธ ์ฝ๋๊ฐ ์๋ ๊ฒฝ์ฐ ์ด์ ์ด๋ป๊ฒ ํด์ผ ํฉ๋๊น? ๋ ธ๋๋ฅผ ๋ ์ถ๊ฐํ ์ ์์ผ๋ฉฐ ์ฌ์ ๋ก๋๊ฐ ๊ฐ๋ฅํ ์๋ฃจ์ ์ธ์ง ์ฌ๋ถ๋ ์ฌ์ ํ ๋ถ๋ถ๋ช ํฉ๋๋ค.
OOP ๋์์ธ์ผ๋ก ํํํ๋ฉด ๋ด ์ง๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ๋ ์คํฌ๋ฆฝํธ๊ฐ ์๋ก ์ธํฐํ์ด์ค์ ์ด๋ป๊ฒ ์ก์ธ์คํฉ๋๊น?
๋ฌธ์ ๋ GDscript๊ฐ ๋ค๋ฅธ ์คํฌ๋ฆฝํธ์ ์ง์ ์ก์ธ์คํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์๋ ๊ฒ์ฒ๋ผ ๋ณด์
๋๋ค.
๋ถ๋ก ๋๋ฌด๋ฅผ ํ์ฐ๋ ค๋ฉด ๋๋ฌด->ํ์ฅ->๋ถ ๋๋ ๋ถ->ํ์ฅ->๋๋ฌด๊ฐ ์์ด์ผ ํฉ๋๋ค.
@MysteryGM : ํ ๊ฐ์ง ํ: ์ ํธ. ํ์ฌ๋ ๋์์ด ๋๋ฌด์ธ ๊ฒฝ์ฐ ์ ํธ ํ์(๋์)์ ๊ฐ์ง ์ ์์ต๋๋ค.
๋ ์คํฌ๋ฆฝํธ๊ฐ ์๋ก์ ์ธํฐํ์ด์ค์ ์ด๋ป๊ฒ ์ก์ธ์คํฉ๋๊น?
$NodeWithScript.do_function()
?
_/์ ๋ ์ฌ์ ํ ์ ๋ง์ ์นํธ์ ์ญํ ์ ํ๊ณ ์์ต๋๋ค. ์ด๊ฒ์ Godot์์ 'ํด์ผ ํ ' ์ผ์ ์ฒ๋๋ก ์๊ฐํ์ง ๋ง์ธ์. ๊ธฐ๊ปํด์ผ ์์ ๊ฑฐ ํ์ทจ์ ๋๋ค_
๋๋ ๋ค๋ฅธ Godot ๊ฐ๋ฐ์๊ฐ ์๋๋ผ ๋ ์์ ์ ๋ํด์๋ง ๋งํ ์ ์๊ณ UE, Unity ๋ฐ Godot์ ๋ํ ๊ฒฝํ๋ง ์๊ธฐ ๋๋ฌธ์ Rust Amethyst์ ๋ํด์๋ ๋ชจ๋ฆ ๋๋ค.
UE๋ Actor SceneTree ๋ชจ๋ธ์ ์ฌ์ฉํฉ๋๋ค. Unity๋ EC ๋ชจ๋ธ์ ์ฌ์ฉํ์ต๋๋ค(์ต๊ทผ ECS๋ฅผ ๊ตฌ์ถํ๊ณ ์ด์ EC ๋ชจ๋ธ์ ๋ ์ด์ ์ฌ์ฉํ์ง ์์ง๋ง ์์ง ์์ ํ์ง๋ ์์ง๋ง ์ ๋งํด ๋ณด์ ๋๋ค). ๊ทธ๋ฆฌ๊ณ Godot๋ Component SceneTree ๋ชจ๋ธ์ ์ฌ์ฉํฉ๋๋ค. ECS๋ ๋ฐ์ดํฐ ํ๋ฆ ํจํด์ ํ์ ์งํฉ์ ๋๋ค(ํนํ ์ด๋ฅผ ์ผ๋ฐํํ ๊ฒ์).
ECS์ ๋ํ ๊ฐ๋ตํ ์์ฝ:
๋๋ถ๋ถ์ ์์ง์ ์์ฑ ๋ฐ ์ํฐํฐ ์ธ๋ฑ์ค๋ฅผ ๋จ์ผ int32(8๋นํธ ์์ฑ ๋ฐ 24๋นํธ ์ธ๋ฑ์ค) ๋๋ int64 (๊ฐ๊ฐ 32๋นํธ, int64๊ฐ ํจ์ฌ ๋ ์ผ๋ฐ์ ์ ๋๋ค. ECS๊ฐ ์ค์ ๋ก ํ์ฉํ๋ฏ๋ก '์ํฐํฐ'๋ ์ ์ ID์ ๋๋ค. ๊ทธ๋ฌํ ์๋นํ ์์ ์ํฐํฐ๋ก ํ์ฅ).
' C ๊ตฌ์ฑ ์์'๋ C/C++ ์ฉ์ด์ POD ๊ตฌ์กฐ์ด๋ฉฐ ๊ธฐ๋ฅ์ ํฌํจํด์๋ ์ ๋ ์๋ฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ๊ฐ๋จํ๊ฒ memcpy' ๊ฐ๋ฅํด์ผ ํฉ๋๋ค.
๊ตฌ์ฑ ์์ 'ํ ์ด๋ธ'์ ๊ตฌ์ฑ ์์๋ฅผ ์ํ ์ ์ฅ์์ ๋๋ค. ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ผ๋ก ํฌ๊ธฐ๋ฅผ ์กฐ์ ํ ์ ์๋ ๋ฐฐ์ด์ผ ์ ์์ง๋ง ์ผ๋ฐ์ ์ผ๋ก ๋ช ๊ฐ์ง ์ ํ์ด ์ฌ์ฉ๋๋ ๊ฒฝํฅ์ด ์์ต๋๋ค.
' ์์คํ '์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ๊ตฌ์ฑ ์์ ์งํฉ์ ์ทจํ๋ ๊ธฐ๋ฅ์ด์ง๋ง ๋๋ถ๋ถ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์๋ ๊ฐ์์ด ์๋ ํด๋์ค ๋๋ ๋ชจ๋ ์ ๋๊ฐ ์์ง๋ง ๊ฒฐํฉ๋ ๊ตฌ์ฑ ์์ ์งํฉ์ ๋ํด ์๋ํ์ฌ ๋ฌด์ธ๊ฐ๋ฅผ '์ํ'ํฉ๋๋ค. ์ฌ๊ธฐ์๋ ๊ตฌ์ฑ ์์์ ๊ฐ ๋ณ๊ฒฝ, ๊ตฌ์ฑ ์์ ์ถ๊ฐ ๋๋ ์ ๊ฑฐ ๋ฑ์ด ํฌํจ๋ ์ ์์ต๋๋ค. ๋ช ๊ฐ์ง ์:
๋ด๋ถ์ ์ผ๋ก๋ ECS๋ฅผ ๋ฐ์ดํฐ ๋งคํ ์ค์ ์ ๊ตฌ๋
ํ ์ ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ์๊ฐํ ์ ์์ง๋ง ์ ๋ง๋ค์ด์ง ๊ฒฝ์ฐ ๋งค์ฐ ์ต์ ํ๋์ด ์์ต๋๋ค. ์ด๋ค ์์คํ
์ด ๋ค๋ฅธ ์์คํ
๋ณด๋ค ๋จผ์ ์คํ๋์ด์ผ ํ๊ณ ์ด๋ค ์์คํ
์ด ๋น์ค์ฒฉ(์ฝ๊ธฐ ๋๋ ์ฝ๊ธฐ/์ฐ๊ธฐ์ ๋ฐ๋ผ ๋ค๋ฆ)์ ํตํด ์๋ํ๋์ง ์๊ณ ์์ผ๋ฉด ๊ฐ๋จํ๊ฒ ๋ค์ค ์ค๋ ๋ ํธ์ถ๋ ์ํํ ์ ์์ต๋๋ค. (์ ๋ Amethyst๋ฅผ ๊ณ์ ์ฌ์ฉํ๊ณ ์์ผ๋ฉฐ ์๋ฅผ ๋ค์ด specs
๋ผ๊ณ ํ๋ ECS ํน์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ถ๋ถ์
๋๋ค. ์ ์ค๋๋ C++ ECS ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ํ์ฌ ์์ฑํ๊ธฐ ๋๋ฌธ์
๋๋ค.) spec Book ์ 'Why' ECS, ' How', ํจ์จ์ฑ, ์ฉ๋ ๋ฑ... Amethyst๋ ํนํ ECS๊ฐ ์ผ๋ฐ ๊ฒ์ ์์คํ
, ๋ ๋๋ง ๋ฑ์ ์ด๋ป๊ฒ ์ฌ์ฉ๋์ด์ผ ํ๋์ง์ ๋ํด ๋ ์์ธํ ์ค๋ช
ํฉ๋๋ค.
์ ์์ฑ๋ C++ ECS ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ณด๊ณ ์ถ๋ค๋ฉด https://github.com/skypjack/entt ๋ฅผ ์ดํด๋ณด์ญ์์ค. ์ ๋ฐ์ ์ผ๋ก(๋น๊ตํ ๋ชจ๋ ํญ๋ชฉ์ ๋ํด ์ฌ์์ด ํจ์ฌ ๋ ์ฐ์ํ๋ค๋ ์ ์ ๊ณ ๋ คํ๋ฉด ์ธ์์ ์ ๋๋ค).
ECS์ ์ผ๋ฐ์ ์ธ '์ฌ์ฉ'์ '์ํฐํฐ'(๋ฐ์ดํฐ๊ฐ ์๋ ์ ์๋ง ์์)๊ฐ ์๊ณ ๊ตฌ์ฑ ์์๋ฅผ ์ํฐํฐ์ ๋งคํํ๋ ํ ์ด๋ธ ์งํฉ๊ณผ ์ค์ ๋ก ์์ ์ ์ํํ๋ ์์คํ ์ด ์๋ค๋ ๊ฒ์ ๋๋ค. GDScript ์์ฌ ์ฝ๋์์๋ ๊ฐ๋จํ API๋ผ๊ณ ์๊ฐํ์ง๋ง, Scenetree๊ฐ ์ผ๋์ ๋๊ณ ์ค๊ณ๋์ง ์์๊ธฐ ๋๋ฌธ์ Godot ์ฅ๋ฉด ํธ๋ฆฌ์ 'ํตํฉ'ํ๋ ์ฝ๊ฐ ์ด์ํ ๊ด๋ก๊ฐ ์์ต๋๋ค.
# All of this would generally be wrapped up in one or more function calls for easy
# building.
# Create a new entity
var e = createEntity()
# Map it to some Components, starting with a godot scenetree component
# I'm using long names to be descriptive, but eh...
var eNode = scenetreeComponentTable.set(e, SomeNodeType())
# Generally things like the transformation matrix and so forth would be their own
# components, but since the godot scenetree already bakes all that in then just
# deal with it all via the node type, you definitely lose a little efficiency doing
# it this way though since nodes involve multiple virtual calls to access and
# the usual ECS patterns entirely get rid of virtual calls with potentially only
# the occasional indirect calls inside a table (maps, etc...)
# 8x4 inventory slots
inventoryComponentTable.set(e, 8, 4)
# 1 fuel slot, accepts items that have the "burn" tag
fuelStorageComponentTable.set(e, 1, "burn")
# Give this entity the furnace component that uses the "basicFurnaceRecipes" recipes
furnaceComponentTable(e, "basicFurnaceRecipes")
# Add other components
# All of the above component mappings could also be in, say, a JSON file, and
# loaded something as such:
componentTables.map(e, "res://entity_types/basicFurnace.json")
# Or maybe via a preloaded JSON object or so
# Once at startup:
# And you could make a system something like, I'll use a GDScript class for this:
val furnaceCookSystemHandler = systems.register(FurnaceCookSystem.new())
furnaceCookSystemHandler.staticTickRate(0.05) # 20 times a second exactly
# Where the `FurnaceCookSystem` could be something like:
class FurnaceCookSystem:
def _entity_matchers():
furnaceBurnMatcher =
componentTables.matcher().
write(inventoryComponentTable).
write(fuelStorageComponentTable).
writeEither(inventoryChangedComponentTable, furnaceCookingComponentTable)
read(furnaceComponentTable)
return [furnaceBurnMatcher]
# Assume we have matching semantics here to destructure a list, I'm lazy...
def _entities_process([furnaceBurnEntities], delta):
# This function takes a list of entity sets in the same order as the matchers
# returned above.
while entity in furnaceBurnEntities:
val furnace = furnaceComponentTable[entity] # or .get(entity) or whatever API
val cooking = furnaceCookingComponentTable[entity]
if cooking == null or cooking.cookTimeRemaining <= 0:
if cooking != null:
if inventoryComponentTable.put(item) == False: # No space, try later
continue
# Get next item that has a "burnable" tag, if any
val item = inventoryComponentTable[entity].getAndRemoveFirstOf("burnable")
if item == null:
furnaceCookingComponentTable.remove(entity)
else:
cooking = furnaceCookingComponentTable.set(entity, item, furnace.cookTime * getCookTimeModifierOfItem(item))
else:
cooking.cookTimeRemaining -= delta
# ... whatever other functions are useful to the system
# Then of course just with the right components on any entity it will just work
# 'as' a furnace. You can have a whole variety of 'generic' systems that can be
# mixed and match with impunity. If you want a random rock that can be a furnace
# then just add the proper components, or if you want an Ent that can both be
# chopped down like a tree for wood but will also attack the player then just add
# the proper components, etc.... etc....
@MysteryGM : ํ ๊ฐ์ง ํ: ์ ํธ. ํ์ฌ๋ ๋์์ด ๋๋ฌด์ธ ๊ฒฝ์ฐ ์ ํธ ํ์(๋์)์ ๊ฐ์ง ์ ์์ต๋๋ค.
์ฃ์กํฉ๋๋ค. ์ธ์คํด์ค๊ฐ ์๋ ์คํฌ๋ฆฝํธ๋ฅผ ์๋ฏธํ์ต๋๋ค. ๋๋ Godot ํธ๋ฆฌ์ ๋ ธ๋๊ฐ ํ์ ์์ด ์คํฌ๋ฆฝํธ๊ฐ ์ํธ์์ฉํ๊ธฐ๋ฅผ ์ํฉ๋๋ค.
์ฃ์กํฉ๋๋ค. ์ธ์คํด์ค๊ฐ ์๋ ์คํฌ๋ฆฝํธ๋ฅผ ์๋ฏธํ์ต๋๋ค. ๋๋ Godot ํธ๋ฆฌ์ ๋ ธ๋๊ฐ ํ์ ์์ด ์คํฌ๋ฆฝํธ๊ฐ ์ํธ์์ฉํ๊ธฐ๋ฅผ ์ํฉ๋๋ค.
์ ๊ฐ ๊ทํ์ ๋ฌธ์ ๋ฅผ ์คํดํ๊ณ ์๋ ๊ฒ์ผ ์๋ ์์ง๋ง, GDScript์์ ํด๋์ค๋ฅผ ์์ฑํ์ฌ ์ด๋ฏธ ์ด ์์ ์ ์ํํ ์ ์๋ค๊ณ ํ์ ํฉ๋๋ค. ์ง์ ์ ์ญํ ์ ํ๋ ค๋ฉด ๋ ธ๋์ ์๋ ๋ก๋ ๋๋ ํ๋ ์ด์์ ์คํฌ๋ฆฝํธ๊ฐ ์ฌ์ ํ ํ์ํฉ๋๋ค.
๋ํ C#์ ์ฌ์ฉํด ๋ณด์ จ์ต๋๊น? ๋ ธ๋์ ์คํฌ๋ฆฝํธ๋ฅผ ์ฐ๊ฒฐํ๋ ๊ฒ ์ธ์ ๋ค๋ฅธ ๊ฒ์ ํตํด ๋ ธ๋์ ์ํธ ์์ฉํ๊ณ ์ ์ดํ๋ โโ์คํฌ๋ฆฝํธ๊ฐ ์๋ ๋ณต์กํ ์์คํ ์ ๋ง๋ค๋ ค๋ ๊ฒฝ์ฐ ์ด๋ฌํ ์์คํ ์ ๋ํด GDScript๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๋ณด๋ค C#์ ์ฌ์ฉํ๋ ๊ฒ์ด ํจ์ฌ ๋ ๋์ ๊ฒ์ ๋๋ค.
@MysteryGM ์ฅ๋ฉด์์ ๋
ธ๋๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ์คํฌ๋ฆฝํธ๊ฐ ์๋ก ์ํธ ์์ฉํ๋๋ก ํ๋ ค๋ฉด ์ต์ํ ๋ก๋๋ ๋ฒ์ ์ ์คํฌ๋ฆฝํธ ๋ฆฌ์์ค๋ฅผ ๊ฐ์ ธ์์ผ ํฉ๋๋ค. 3.0์์ ์ด ์์
์ ์ํํ๋ ์ ์ผํ ๋ฐฉ๋ฒ์ preload
/ load
์คํฌ๋ฆฝํธ๋ฅผ ํ์ผ ๊ฒฝ๋ก๋ก ์ง์ ํ๋ ๊ฒ์
๋๋ค. 3.1์ ์คํฌ๋ฆฝํธ์ ๋ถ์ฌ๋ ์ด๋ฆ์ด ์ ์ญ์ ์ผ๋ก ๋ฑ๋ก๋๋ GDScript ๋ฐ NativeScript์ ๋ํ "์คํฌ๋ฆฝํธ ํด๋์ค" ๊ธฐ๋ฅ์ ์ถ๊ฐํฉ๋๋ค. GDScript๋ ์์ง์ ์ ์ญ ๋ฑ๋ก์ ์ธ์ด์ ์ ์ญ ๋ณ์๋ก ์๋์ผ๋ก ๋ณํํฉ๋๋ค.
๊ทธ๋ฐ ๋ค์ Script
๋ฆฌ์์ค๊ฐ ์๋ ๊ฒฝ์ฐ ์คํฌ๋ฆฝํธ์์ ์ ์ ๋ฉ์๋๋ฅผ ํธ์ถํ๊ฑฐ๋ .new()
๋ฅผ ํธ์ถํ์ฌ ScriptInstance
$๋ฅผ ์ป์ ๋ค์ ๋ฉค๋ฒ ํจ์๋ฅผ ํธ์ถํ๊ฑฐ๋ ๋ฉค๋ฒ ๋ณ์์ ์ก์ธ์คํ ์ ์์ต๋๋ค. Script
๊ฐ Object, Reference, Resource ๋๋ ๋ค๋ฅธ ๋น๋
ธ๋ ์ ํ์ ํ์ํ๋ ๊ฒฝ์ฐ Script
/ ScriptInstance
์ ์ธ์คํด์ค๋ฅผ ์์ฑํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค. ์ ์ /๋น์ ์ ์ฝํ
์ธ . ๋
ธ๋์ธ ๊ฒฝ์ฐ SceneTree ์ก์ธ์ค๊ฐ ํ์ํ ํญ๋ชฉ(์ get_node
)์ ์ ์ธํ๊ณ ๋์ผํ๊ฒ ์ ์ฉ๋ฉ๋๋ค. ์ด ๊ฒฝ์ฐ add_child
๋ฅผ ์ฌ์ฉํ์ฌ ๋จผ์ SceneTree์ ์ถ๊ฐํด์ผ ํฉ๋๋ค.
์์ ๋ชจ๋ ๊ฒ์ Godot์ ํจ๊ป ์ฌ์ฉ๋๋ ๋ชจ๋ ์คํฌ๋ฆฝํ ์ธ์ด์ ์ ์ฉ๋ฉ๋๋ค(๋น๋ก ์ฌ์ ๋ก๋๋ ๋ด๊ฐ ๋ฏฟ๋ ํน์ ์ธ์ด์ ํน์ ํ ์์ ์ ๋๋ค...).
ํ์ผ ๊ฒฝ๋ก๋ณ ์คํฌ๋ฆฝํธ. 3.1์ GDScript๋ฅผ ์ํ "์คํฌ๋ฆฝํธ ํด๋์ค" ๊ธฐ๋ฅ์ ์ถ๊ฐํฉ๋๋ค.
3.1์ ์ธ์ ์ ์ ์ถ์๋๋์?
@MysteryGM ์ด์ ํ ์๋ฃ์จ์ด ์ถฉ๋ถํ ๋์ ๋ / ํต์ฌ ๊ฐ๋ฐ์๊ฐ ๋น๋๊ฐ "์์ ์ "์ด๋ผ๊ณ ์๊ฐํ ๋งํผ ์ถฉ๋ถํ ์งํ ์ํฉ์ ํ๋จํ์ ๋.
๋ง์ผ์คํค: https://github.com/godotengine/godot/milestone/7
๋น๊ต๋ฅผ ์ํด 2.1๊ณผ 3.0์ ํ์ฌ 99% ์๋ฃ ์ํ์ ์์ต๋๋ค. ๊ทธ๊ฒ์ด ๊ทธ๋ค์ด ๋ผ์ด๋ธํ์ ๋์ ์ํ์ธ์ง ํ์คํ์ง ์์ต๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ๋๋ต์ "์ค๋น๊ฐ ๋์์ ๋"์ ๋๋ค.
๋ต๋ณ์ ๊ฐ์ฌ๋๋ฆฌ๋ฉฐ ์๊ฐ์ ๋ด์ด ์ฃ์กํฉ๋๋ค.
Godot๋ ๋น์ ์ฐ๋ฆฌ์ ์๊ตฌ์ ๋ง์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ์๋ง๋ ๋ฏธ๋์ ์ฐ๋ฆฌ๋ ์์ง์ ๋ค์ ์ฌ์ฉํ ๊ธฐํ๊ฐ ์์ ๊ฒ์
๋๋ค.
๋ถ๋ก ๋๋ฌด๋ฅผ ํ์ฐ๋ ค๋ฉด ๋๋ฌด->ํ์ฅ->๋ถ ๋๋ ๋ถ->ํ์ฅ->๋๋ฌด๊ฐ ์์ด์ผ ํฉ๋๋ค.
@MysteryGM
์ฌ๊ธฐ๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
์์ง์ด๋ ์ธ์ด์ ๊ด๊ณ์์ด ํด๊ฒฐ์ฑ
์ ํ์ฌ์ ์ฒ ์ฌ์ด์ ์ํธ ์์ฉ์ ์ ์ดํ๋ โโ"์์คํ
" ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ผ ์ ์์ต๋๋ค. ๊ทธ ํ๋ ์ ํ
์ด์
์ ๊ตฌ์ฑ ์์์ ์ด์ ์ ๋ง์ถ๊ณ ์์ง๋ง ๊ฐ์ฒด์ ํจ๊ป ์๋ํ๋ ์์คํ
๋ ๋ง๋ค ์ ์์ต๋๋ค.
C#์์ Wood
๋ Fire
IBurnable
๋ฅผ ๊ตฌํํ๋ค๊ณ ๋งํ ์ ์์ต๋๋ค.
์๋ ํ์ธ์, ์ง์์ ์ธ ๊ด์ฌ์ ๊ฐ์ฌ๋๋ฆฌ๋ฉฐ @willnationsdev ์ง์์ ์ ๋ง ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ์ฐ๋ฆฌ๋ ์์ถ ์์ ์๋ฃจ์ ์ผ๋ก์์ ์คํฌ๋ฆฝํธ๊ฐ ๋ง์ ์ ์ฌ๋ ฅ์ ๊ฐ์ง๊ณ ์๋ค๊ณ ๋ฏฟ์ต๋๋ค. #22660์์ ์ธ๊ธํ๋ฏ์ด.
์ด๋ค ์์ง์ ์ฌ์ฉํ ์ง ์์ง 10์ผ ๋จ์๊ธฐ ๋๋ฌธ์ Godot์ ํจ๊ป ๋ ๋ง์ ์๋๋ฅผ ํ์ต๋๋ค.
์ฐ๋ฆฌ๋ ์ํฌํ๋ก ๋ฌธ์ ๋ฅผ ์ดํด๋ณด์๊ณ ์ฐ๋ฆฌ ํ๋ก๊ทธ๋๋จธ๊ฐ ๊ฐ์ฅ ์ ๋งํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
"Godot ๊ฐ๋ฐ์๋ Github์ ๋ชจ๋ ๋ฌธ์ ๋ฅผ ์์ฒด ๊ฒ์๋ฌผ์ ๋ณด๊ดํ๊ณ , ํญ์ ํ๋์ ๋ฒ๊ทธ์ ๋ํด ํ๋์ ๋ฌธ์ ๋ฅผ ์ฝ๋๋ค . ํ์ง๋ง ์์ง์ ๋ํด ๋์ผํ ์ํฌํ๋ก๋ฅผ ํ์ฉํ์ง ์์ต๋๋ค."
์คํฌ๋ฆฝํธ๋ฅผ ๋ง๋ค์ด์ผ ํ๊ณ ๊ณ์ธต์ ์ถ๊ฐํด์ผ ํ๋ค๋ ์ฌ์ค์
๋๋ค.
๋ถ๊ณผ ์ฒ ์ฌ์ด์ ์ํธ ์์ฉ์ ์ ์ดํ๋ โโ"์์คํ " ์คํฌ๋ฆฝํธ. ํด๋น ํ๋ ์ ํ ์ด์ ์ ๊ตฌ์ฑ ์์์ ์ค์ ์ ๋ก๋๋ค.
์, ๊ทธ๊ฒ์ด ์ฐ๋ฆฌ๊ฐ ์ํ๋ ๊ฒ์ ๋๋ค. GDscript์์ ์ด๋ป๊ฒ ํฉ๋๊น?
C#์์๋ Wood๊ฐ Fire๊ฐ ์ฌ์ฉํ๋ IBurnable์ ๊ตฌํํ๋ค๊ณ ๋งํ ์ ์์ต๋๋ค.
Godot๋ ์ธํฐํ์ด์ค์ ๊ฐ์ ์ผ์ ํ๋ Duck ํ์ดํ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์ฐ๋ฆฌ๊ฐ ์ํ๋ ๊ฒ์ Burning์ด ๋ณ๋์ ํด๋์ค๊ฐ ๋์ด ๊ณ์ธต์ ๋ ธ๋๋ฅผ ์ถ๊ฐํ์ง ์๊ณ ๋ ์ฌ์ฌ์ฉํ ์ ์๊ฒ ํ๋ ๊ฒ์ ๋๋ค.
์ฐ๋ฆฌ๊ฐ ์ํ๋ ๊ฒ์ Fire, Burning, Wood์
๋๋ค. ์ฐ๋ฆฌ๋ ๋ถ(๋๋ฌด+ํ๊ธฐ)์ ์ํ์ง ์์ต๋๋ค.
์ด ์ํฌํ๋ก์ ์ฅ์ ์ ๋ชจ๋ ๊ฐ์ฒด๋ฅผ ๊ตฌ์ธ ์ ์๋ ๋ฌธ์ ๋ฅผ ์์ ํ ํ์ ์์ด ์์ฒด์ ์ผ๋ก ๊ตฝ๊ธฐ๋ฅผ ๋๋ฒ๊ทธํ ์ ์๋ค๋ ๊ฒ์
๋๋ค.
C#์์๋ Burning์ ์์ฒด ํด๋์ค๋ก ์ ์ธํฉ๋๋ค. Public ํด๋์ค Burning๊ณผ ์ฐ๋ฆฌ์ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์์ต๋๋ค.
C++์์๋ ๊ตฝ๊ธฐ ๋ฐ ๋ฌธ์ ํด๊ฒฐ์ ํฌํจํฉ๋๋ค.
์, ๊ทธ๊ฒ์ด ์ฐ๋ฆฌ๊ฐ ์ํ๋ ๊ฒ์ ๋๋ค. GDscript์์ ์ด๋ป๊ฒ ํฉ๋๊น?
@MysteryGM
์ฑ๋ฅ ์ต์ ํ์ ๋ํด ์์ธํ ์์๋ณด์ง ์๊ณ ๋ด๊ฐ ์ ์ํ๋ ๊ฒ์ ์ํธ ์์ฉ ํด๊ฒฐ์ ๋ณ๋์ ์์คํ ์คํฌ๋ฆฝํธ(๋ถ์ด ์๋ ๋๋ฌด๊ฐ ์๋)๋ก ์ฎ๊ธฐ๋ ๊ฒ๋ฟ์ ๋๋ค. ๊ฐ์ฅ ๋จ์ํ ๊ฒฝ์ฐ ์์คํ ์ ์ธ๊ณ์ ๋ชจ๋ ๊ฐ์ฒด ๋ฐฐ์ด์ ๋ณด์ ํ๊ณ ์ํธ ์์ฉ์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ ๊ฐ์ฒด๋ ์ ํ์ ์ ๊ฒฝ ์ธ ํ์๊ฐ ์๊ณ ์์คํ ๋ง ์ ๊ฒฝ์ ์ธ ๊ฒ์ ๋๋ค.
์์
์ ๋ ๋น ๋ฅด๊ฒ ํ๊ธฐ ์ํด ์ค์ ๋ก ์ถฉ๋ํ ๊ฐ์ฒด์ ๋ํด์๋ง ๊ฒ์ฌ๋ฅผ ์ํํ ์ ์์ต๋๋ค(์: ์ถฉ๋์ด ๋ฐ์ํ ๋ ๊ฐ์ฒด์์ ์์คํ
์ผ๋ก signal
์ ์ก).
์คํฌ๋ฆฝํธ ์ํธ ์ฐธ์กฐ์ ๋ํ ๋ช ๊ฐ์ง GDScript ํน์ ์(๋ฒ์ 3.0์ฉ):
์ฌ๊ธฐ์ Enemy
๋ ์ ํ/์ธํฐํ์ด์ค๋ก ์๋ํ๋ฉฐ is
์ฐ์ฐ์๋ก ํ์ธํ ์ ์์ต๋๋ค.
# Cache the enemy class.
const Enemy = preload("enemy.gd")
# Use 'is' to check inheritance.
if (entity is Enemy):
entity.apply_damage()
์ฌ๊ธฐ์ runnerGame
๋ ๊ฒฝ๋ก๊ฐ /root/runner์ธ _autoload_ ์ฅ๋ฉด(์ผ๋ช
์ฑ๊ธํค)์ ๊ฐ๋ฆฌํต๋๋ค.
onready var runnerGame = get_node("/root/runner")
onready var runnerScript = preload("res://runner/runner.gd")
func _ready():
runnerGame.setMode(runnerScript.SPAWN_TITLE)
์ฌ๊ธฐ์์ ๋ฒํผ์ signal
"๋๋ฆผ"์ ํธ๋ค๋ฌ์ ์ฐ๊ฒฐํฉ๋๋ค(๋ค๋ฅธ ๊ฐ์ฒด ๋ฐ ์คํฌ๋ฆฝํธ์ ์์ ์ ์์ผ๋ฉฐ self
๋ฅผ ์ฌ์ฉํ์ฌ ๋์ผํ ๊ฒ์ ์ฐธ์กฐํจ).
func _button_pressed(which):
print("Button was pressed: ", which.get_name())
func _ready():
for b in get_node("buttons").get_children():
b.connect("pressed", self, "_button_pressed",[b])
์ฌ๊ธฐ์์ ๋ฌธ์๋ฅผ ์ฐธ์กฐํ์ญ์์ค. ์ฌ์ฉ ๊ฐ๋ฅํ ๋ช ๊ฐ์ง ๊ธฐ๋ฅ์ด ๋ ์์ต๋๋ค. http://docs.godotengine.org/en/3.0/getting_started/scripting/gdscript/gdscript_basics.html#inheritance
์ฌ๊ธฐ์์ ๋ฌธ์๋ฅผ ์ฐธ์กฐํ์ญ์์ค. ์ฌ์ฉ ๊ฐ๋ฅํ ๋ช ๊ฐ์ง ๊ธฐ๋ฅ์ด ๋ ์์ต๋๋ค.
์ฃผ์ ์ ๋ํ ์๊ฒฌ์ ๋ณด๋ด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ์์์ ๋ฌธ์ ๋ ํด๋์ค๋ฅผ ๊ตฌํํ ๋ ํด๋์ค์ ๋ชจ๋ ๊ด๊ณ๋ฅผ ์๊ณ ์๋ ๊ฒฝ์ฐ์๋ง ์๋ํ๋ค๋ ๊ฒ์ ๋๋ค.
๋ค์์ ์์ ๋๋ค.
๋จ๊ณ A.
MeshInstance+ HomingScript = HomingMissile .
ํ์ง๋ง ์ด์ ์ ๋ ์ง๋ขฐ๋ฅผ ์ํ๋ฉด ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
(MeshInstance+ ProximityScript) = Landmine .
(MeshInstance+ ProximityScript) + HomingScript = ํ๋ ์ด์์ ์คํฌ๋ฆฝํธ ์ค๋ฅ
(MeshInstance+ ProximityScript) + (childNode + HomingScript ) = ๋ณด์ด์ง ์๋ ๋
ธ๋๋ง ์ด๋ํ๋ฏ๋ก FAILED.
(MeshInstance+ ProximityScript) + (childNode + ExtendedHomingScript) = ์ด์ Homing ํด๋์ค๋ฅผ ํ์ฅํ๋ฏ๋ก ์ฑ๊ณตํ์ฌ ์์ ๋
ธ๋์์ ๋
ธ๋๋ฅผ ์์ ํ ์ ์์ต๋๋ค. HomingLandmine ์ ์ป์ต๋๋ค.
์ง๊ธ์ ์ ์ธํ๊ณ ๋ Homing Missile๊ณผ Landmine์ด ๋ชจ๋ HomingClass์์ ํ์ฅ๋์ด์ผ ํ๋ค๊ณ ์ฃผ์ฅํ ์ ์์ต๋๋ค.
B๋จ๊ณ.
ํธ๋ฐ ๋ฏธ์ฌ์ผ[ํธ๋ฐ์์]
HomingLandmine[from Homing] [+ ProximityScript] ์ด์ ์คํฌ๋ฆฝํธ๋ฅผ ๋ณต์ฌํ์ฌ ์ง๋ขฐ์ ๋ถ์ฌ๋ฃ์ต๋๋ค.
๋์ค์ ํ๋ก๋์
๋จ๊ณ์์ ์ฐ๋ฆฌ๊ฐ ๊ฐ์ง๊ณ ์๋ ๋ค๋ฅธ ์คํฌ๋ฆฝํธ์์๋ ๋์ผํ ์ผ์ด ๋ฐ์ํฉ๋๋ค.
๋จ๊ณC.
์ง๋ขฐ[๊ทผ์ ์์]
ProximityAlarm[Proximity์์] [+ AlarmScript]
// HomingLandmine[from Proximity] [+ HommingScript] // ์ด์ ์ฐ๋ฆฌ์ ์ง๋ขฐ๋ ์ฌ๊ธฐ์ ๋ง์ ์ ์์ต๋๋ค.
๋ฐ๋ผ์ ์ฐ๋ฆฌ๋ StepB์ ๋ํ ์ ์ ํ ์์์ ์ฐพ๊ธฐ ์ํด StepA๋ฅผ ๊ณ์ ๊ฑฐ์ณ์ผ ํฉ๋๋ค. StepF ๋ฑ์ ๋์ด ์ด ํจํด์ ๊ณ์ ๋ฐ๋ณตํฉ๋๋ค.
์ฐ๋ฆฌ๋ StepA๋ฅผ ์ฐ์ฅํ๋ ๋ฐฉ๋ฒ์ ์ฐพ์์ต๋๋ค. ์ต์์ ๋
ธ๋์ ์คํฌ๋ฆฝํธ๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ ํผํ๊ณ ํญ์ ๊ทธ๊ฒ์ Spatial ๋๋ ์ผ๋ถ ๊ธฐ๋ณธ ๋
ธ๋๋ก ๋ง๋ญ๋๋ค.
(Spatial + MeshInstance+ ProximityScript) + HomingScript = HomingLandmine
์ด๊ฒ์ ๋์ผํ ๋ฌธ์ ์ง๋ง ๋ ๋น์ผ ParentSpatial์ ์ฌ์ฉํ๋ค๋ ์ ์ ์ ์ธํ๊ณ ๋; childNode ๋์ .
์ด ๊ธฐ๊ฐ ๋์ ์ฃ์กํฉ๋๋ค.
@MysteryGM
"Godot ๊ฐ๋ฐ์๋ Github์ ๋ชจ๋ ๋ฌธ์ ๋ฅผ ์์ฒด ๊ฒ์๋ฌผ์ ๋ณด๊ดํ๊ณ , ํญ์ ํ๋์ ๋ฒ๊ทธ์ ๋ํด ํ๋์ ๋ฌธ์ ๋ฅผ ์ฝ๋๋ค . ํ์ง๋ง ์์ง์ ๋ํด ๋์ผํ ์ํฌํ๋ก๋ฅผ ํ์ฉํ์ง ์์ต๋๋ค."
์คํฌ๋ฆฝํธ๋ฅผ ๋ง๋ค์ด์ผ ํ๊ณ ๊ณ์ธต์ ์ถ๊ฐํด์ผ ํ๋ค๋ ์ฌ์ค์ ๋๋ค.
...
์ฐ๋ฆฌ๊ฐ ์ํ๋ ๊ฒ์ Fire, Burning, Wood์ ๋๋ค. ์ฐ๋ฆฌ๋ ๋ถ(๋๋ฌด+ํ๊ธฐ)์ ์ํ์ง ์์ต๋๋ค.
์ด ์ํฌํ๋ก์ ์ฅ์ ์ ๋ชจ๋ ๊ฐ์ฒด๋ฅผ ๊ตฌ์ธ ์ ์๋ ๋ฌธ์ ๋ฅผ ์์ ํ ํ์ ์์ด ์์ฒด์ ์ผ๋ก ๊ตฝ๊ธฐ๋ฅผ ๋๋ฒ๊ทธํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค.
...
C#์์๋ Burning์ ์์ฒด ํด๋์ค๋ก ์ ์ธํฉ๋๋ค. Public ํด๋์ค Burning๊ณผ ์ฐ๋ฆฌ์ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์์ต๋๋ค.
C++์์๋ ๊ตฝ๊ธฐ ๋ฐ ๋ฌธ์ ํด๊ฒฐ์ ํฌํจํฉ๋๋ค.
๋น์ ์ด ์ดํดํด์ผ ํ ๊ฒ์ Godot๊ฐ ์ด ๊ฒฝ์ฐ์ ๋ค๋ฅด๊ฒ ์๋ํ์ง ์๋๋ค๋ ๊ฒ์ ๋๋ค. ์ต๊ณ ์ ์๋ฃจ์ ์ ์์ฒด ์คํฌ๋ฆฝํธ(์ด ๊ฒฝ์ฐ "๊ตฝ๊ธฐ"์ฉ)๋ก ํ์ ๋ ธ๋๋ฅผ ๋ง๋๋ ๊ฒ์ด์ง๋ง Burning์ ์์ฒด ํด๋์ค๋ก ์ ์ํ๊ณ ์ ์ ํจ์๋ฅผ ํตํด ํฌํจ/์ฌ์ฉํ ์ ์์ต๋๋ค(๋๋ ์ธ์คํด์คํํ ๋ค์ ์์ฑ/๋ฉ์๋ ์ฌ์ฉ)
Unity/ScriptableObject ์ ๊ทผ ๋ฐฉ์์ ๊ฒฝ์ฐ ๋์ผํ ๋ชฉ์ ์ผ๋ก Godot์ ๋ฆฌ์์ค ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ถ๊ณผ ์ฒ ์ฌ์ด์ ์ํธ ์์ฉ์ ์ ์ดํ๋ โโ"์์คํ " ์คํฌ๋ฆฝํธ. ํด๋น ํ๋ ์ ํ ์ด์ ์ ๊ตฌ์ฑ ์์์ ์ค์ ์ ๋ก๋๋ค.
์, ๊ทธ๊ฒ์ด ์ฐ๋ฆฌ๊ฐ ์ํ๋ ๊ฒ์ ๋๋ค. GDscript์์ ์ด๋ป๊ฒ ํฉ๋๊น?
์ด๋ฅผ ์ํํ๋ ๊ฐ์ฅ ์ฌ์ด ๋ฐฉ๋ฒ์ ์ผ์ข ์ ์๋ ๋ก๋ ๋ ธ๋/์ฅ๋ฉด์ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค. ๊ทธ ์ด์ ๋ (์ฌ์ฉ ์ค์ธ ๋ ธ๋ ์๋ฅผ ์ต์ํํ๊ธฐ ์ํด) ๋ชจ๋ ๋ค๋ฅธ ์์คํ ์ ๋ํด ์๋ง์ ๋ฆฌ์์ค๊ฐ ์๋ ํ๋์ ๋ ธ๋๋ง ์ฌ์ฉ ํ๋๋ผ๋ ์ฌ์ ํ ํธ๋ฆฌ์ ์๋ ๋ ธ๋์ ์ก์ธ์คํ๊ธฐ๋ฅผ ์ํ ๊ฒ์ด๋ฏ๋ก ๋ธํ ์๊ฐ, ์ ๋ ฅ ๋ฐ์ดํฐ, ์๋ณด ์์ (ํนํ ์ ํธ ์ฌ์ฉ๊ณผ ๊ฒฐํฉ), ์ ๋๋ฉ์ด์ /ํธ์/ํ์ด๋จธ ๋ ธ๋์ ๋ํ ์ก์ธ์ค ๊ถํ์ ์ป์ผ๋ฉด ๋ชฉ๋ก์ด ๊ณ์๋ฉ๋๋ค. ๋ํ ์๋ ๋ก๋๋ก GDScript๋ ๋ ธ๋์ ๋ํ ์ ์ญ ๋ณ์๋ฅผ ๋ค์ ์์ฑํ์ฌ ์ฝ๋๋ฒ ์ด์ค์ ์ด๋์์๋ ์ด๋ฆ์ผ๋ก "์์คํ "์ ์ก์ธ์คํ ์ ์์ต๋๋ค(์ด ๊ฒฝ์ฐ ์คํฌ๋ฆฝํธ ํด๋์ค ์ฌ์ฉ์ ๋ํ ๋ ๋ค๋ฅธ ์ ์ ํ ๋์ฒด).
์ค์ ๋ก ์ด์ WIP ํ๋ฌ๊ทธ์ธ์ธ godot-skills ์ ๋ํ ๋๊ท๋ชจ ๋ฆฌํฉํ ๋ง์ด ์์ต๋๋ค. ์ด ํ๋ฌ๊ทธ์ธ์ ์ด๊ฒ๊ณผ ๊ทธ ์ด์์ ํฌํจํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ฃผ์ ์ ๋ํ (์ฃ์กํฉ๋๋ค, ๊ธด) reddit ์ค๋ ๋ ๋ฅผ ์ฝ์ผ์ญ์์ค. ์ด๊ฒ์ ์ ์ฌํ๊ฒ ์ผ๋ฐ์ ์ด๊ณ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ํธ์์ฉ ์์คํ ์ ๊ตฌํํ๊ธฐ ์ํด ์๋ฒ ์ํคํ ์ฒ(Godot์ ๊ธฐ๋ณธ ์ํคํ ์ฒ์ ์ ์ฌ)์์ ์กฐ์ ๋ ๋ฉํฐ์ค๋ ๋ฉ์ ์ฌ์ฉํ๋ ์คํ ๊ฐ๋ฅ์ฑ์ ๊ฒ์ฌํ๋ ๊ฒ์ ํฌํจํฉ๋๋ค.
btw, ์ด ์ฃผ์ ์ ๋ํด ์ค์๊ฐ์ผ๋ก ์ฑํ ํ๊ณ ์ถ์ผ์๋ค๋ฉด ์ธ์ ๋ ์ง ๊ฐ์ ์ฌ์ฉ์ ์ด๋ฆ์ ์ฌ์ฉํ๋ Reddit/Discord/Twitter์ ์ ๋ฅผ ๋ณด๋ด์ฃผ์ธ์.
@MysteryGM
MeshInstance+ HomingScript = _HomingMissile_.
ํ์ง๋ง ์ด์ ์ ๋ ์ง๋ขฐ๋ฅผ ์ํ๋ฉด ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
(MeshInstance+ ProximityScript) = _Landmine_.
(MeshInstance+ ProximityScript) + HomingScript = ํ๋ ์ด์์ ์คํฌ๋ฆฝํธ ์ค๋ฅ
(MeshInstance+ ProximityScript) + (childNode + HomingScript ) = ๋ณด์ด์ง ์๋ ๋ ธ๋๋ง ์ด๋ํ๋ฏ๋ก FAILED.
(MeshInstance+ ProximityScript) + (childNode + ExtendedHomingScript) = ์ด์ Homing ํด๋์ค๋ฅผ ํ์ฅํ๋ฏ๋ก ์ฑ๊ณตํ์ฌ ์์ ๋ ธ๋์์ ๋ ธ๋๋ฅผ ์์ ํ ์ ์์ต๋๋ค. _HomingLandmine_์ ์ป์ต๋๋ค.์ง๊ธ์ ์ ์ธํ๊ณ ๋ Homing Missile๊ณผ Landmine์ด ๋ชจ๋ HomingClass์์ ํ์ฅ๋์ด์ผ ํ๋ค๊ณ ์ฃผ์ฅํ ์ ์์ต๋๋ค.
๋๋ ์ฌ๊ธฐ์ ๋ญ๊ฐ๋ฅผ ๋์น๊ณ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. Afaik, "๊ตฌ์ฑ ์์ ๋์" ๋ ธ๋๋ฅผ ๋ง๋๋ ์ ์ ํ ๋ฐฉ๋ฒ์ ์์ฒด๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ ๊ธฐ๋ณธ ๋์์ด ๋ถ๋ชจ์ธ "๋์" ๋ ธ๋๋ฅผ ์ง์ ์์ ํ๋ ๊ฒ์ ๋๋ค. ์ด๊ฒ์ ๋ด๊ฐ ์ค์ํ์ง ์์ ๊ฒฝ์ฐ ๋ฐ์ํ๋ ๋ฌธ์ ๋ฅผ ์์ ํ ์ฐํํฉ๋๋ค.
extends Node
var src_target
export(NodePath) onready var dst_target = get_node(dst_target) if dst_target else null
func _notification(p_what):
match p_what:
NOTIFICATION_PARENTED:
src_target = get_parent()
NOTIFICATION_UNPARENTED:
src_target = null
func _physics_process():
# if necessary, can manually assign src_target elsewhere to be NOT a parent
if src_target and src_target is KinematicBody2D:
src_target.move_and_slide(...) # do logic to get parameters that move towards dst_target
์ด์ ๊ฐ์ ๊ฒ์ ์คํฌ๋ฆฝํธ๊ฐ ์๋ ๋ ธ๋๋ฅผ "ํธ๋ฐ" ๊ธฐ๋ฅ์ ๊ฐ๊ธฐ๋ฅผ ์ํ๋ ํญ๋ชฉ์ ์์์ผ๋ก ๋ง๋ค๊ธฐ๋ง ํ๋ฉด ์๋ฌด ๊ฒ๋ ๋ณ๊ฒฝํ ํ์๊ฐ ์๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ๋ด๋ณด๋ธ ์์ฑ ๊ฐ(์ฌ์์ ๋๋ ๋ฐํ์์)์ ํ ๋นํ์ฌ ์ง์ผ๋ก ๋ณด๋ผ ๋์์ ์ง์ ํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค. ๋ค๋ฅธ ๋ด๋ณด๋ธ ์์ฑ์ ์ฌ์ฉํ์ฌ ์ด๋ ์ ํ์ ์์ ํ ์ ์์ผ๋ฉฐ ๋ค๋ฅธ "๋น๋"๋ฅผ ์ํ ๊ฒฝ์ฐ ํด๋น ํญ๋ชฉ์ ๋ฆฌ์์ค์ ์์์์ฑํ ์๋ ์์ต๋๋ค. ๋ค์ ๋ง์๋๋ฆฌ์ง๋ง, Godot๋ ๊ฒ์ ํ๋ ์์ํฌ์ ๋์์ธ์ ๋งค์ฐ ์ ์ฐํ๊ฒ ๋ง๋ค ์ ์์ต๋๋ค.
์ผ๋ถ ์์ ์ฌํญ:
- C#
- - public class Burning {};
+ - public class Burning {}
- using Game.Burning;
- Burning.apply(wood, fire); // is it :: here? I forget...
- - Burning b = Burning::GetSingleton(); b.apply(wood, fire);
+ - Burning b = Burning.GetSingleton(); b.apply(wood, fire);
ํด๋์ค์ ๋ซ๋ ์ค๊ดํธ ๋ค์ ์ธ๋ฏธ์ฝ๋ก ์ด ํ์ํ์ง ์์ต๋๋ค. ::
๋์ ์ ์ ๋ฉค๋ฒ์ ์ ์ ์ฌ์ฉํฉ๋๋ค.
์ฐธ๊ณ ๋ก ์ฑ๊ธํค์ ์ก์ธ์คํ๋ ๊ท์น์ ๋ฉ์๋ ๋์ ์์ฑ(์ผ๋ฐ์ ์ผ๋ก Instance
์ด๋ผ๊ณ ํจ)์ ์ฌ์ฉํ๋ ๊ฒ์
๋๋ค.
@neikeq ๊ฐ์ฌํฉ๋๋ค. ๋๋ C# ์ผ๋ก ๋๋ฌด ์ฐ์ต์ด ๋ถ์กฑํฉ๋๋ค.
"Global Scripts" ์ ๊ทผ ๋ฐฉ์์ ๊ดํด์๋ ์ ๋ ์ด์ ๋ํด ๋งค์ฐ ๋ฐ๋ํฉ๋๋ค. ๊ทธ๊ฒ์ ๊ฐ๋ฐ์๋ค์ด ๊ทธ๋ค์ ๊ฒ์์ ๋์ ๋ฐฉ์์ผ๋ก ์ฝ๋ฉํ๋๋ก ๋ถ์ถ๊ธธ ๊ฒ์ ๋๋ค. Unity/Unreal/Godot/etc๋ฅผ ์๋ํ ๋ ์ด์ ์ ๋ฒ ์ด C++ ๋ฐ Java ๊ฒ์ ๊ฐ๋ฐ์์ ์ผ๋ฐ์ ์ธ ์ง๋ฌธ์ "๋ด ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋ ๋ฉ์ธ ๊ฒ์ ๋ฃจํ๋ ์ด๋์ ์์ต๋๊น?"์ ๋๋ค. ์ด๋ฌํ ์์คํ ์ ์ถ๊ฐํ๋ฉด ํด๋น ๊ฐ๋ฐ์๊ฐ ์ด ์์ ์ ์ํํ ์ ์์ผ๋ฏ๋ก ๊ฐ์ฒด์ ๋ํ ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ๋ ๋์ ์์ ํ๋ ค๋ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ ์ ์ญ ์คํฌ๋ฆฝํธ์ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
์๋ง๋ ๋์ ์์ํ๊ฒ ์คํฌ๋ฆฝํธ๋ฅผ ๋ณด์ ํ๋ ๊ฐ์ฒด "๊ตฌ์ฑ ์์"์ ๋ํ ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ์ง ์๋๋ก ๋ฒ ์ด๋ณธ Node
๋
ธ๋์ ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์์ต๋๋ค. ๋๋ ๋ณ๋์ ๊ฐ๋จํ "only-holds-scripts" ๋
ธ๋์ผ ์๋ ์์ต๋๋ค.
@aaronfranke
"Global Scripts" ์ ๊ทผ ๋ฐฉ์์ ๊ดํด์๋ ์ ๋ ์ด์ ๋ํด ๋งค์ฐ ๋ฐ๋ํฉ๋๋ค. ๊ทธ๊ฒ์ ๊ฐ๋ฐ์๋ค์ด ๊ทธ๋ค์ ๊ฒ์์ ๋์ ๋ฐฉ์์ผ๋ก ์ฝ๋ฉํ๋๋ก ๋ถ์ถ๊ธธ ๊ฒ์ ๋๋ค. Unity/Unreal/Godot/etc๋ฅผ ์๋ํ ๋ ์ด์ ์ ๋ฒ ์ด C++ ๋ฐ Java ๊ฒ์ ๊ฐ๋ฐ์์ ์ผ๋ฐ์ ์ธ ์ง๋ฌธ์ "๋ด ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋ ๋ฉ์ธ ๊ฒ์ ๋ฃจํ๋ ์ด๋์ ์์ต๋๊น?"์ ๋๋ค.
๋ด๊ฐ ์ธ๊ธํ๋ฏ์ด ๋๊ตฐ๊ฐ๊ฐ ์ด ์์ ์ ์ํํ๋ ๊ฒ์ ๋ฐ๋ํ๋ค๋ฉด(๋๊ท๋ชจ ํ๋ก์ ํธ์์ ํฉ๋ฆฌ์ ์ผ๋ก) API ๊ณ์ธต์ ๋ ์๋๋ก ์ด๋ํ๊ธฐ ์ํด ๋ค๋ฅธ ์คํฌ๋ฆฝํธ์ ์์๋ฅผ ์ ์งํ๋ "๋ค์์คํ์ด์ค" ์ ์ญ ์คํฌ๋ฆฝํธ ํด๋์ค๋ฅผ ๋ง๋๋ ๋ฐ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์ฌ๊ธฐ์ ๋งํ๋ ์คํฌ๋ฆฝํธ๋ ์ค์ ๋ ธ๋ ์ฐธ์กฐ๊ฐ ์๋๋๋ค.
์ด๋ฌํ ์์คํ ์ ์ถ๊ฐํ๋ฉด ํด๋น ๊ฐ๋ฐ์๊ฐ ์ด ์์ ์ ์ํํ ์ ์์ผ๋ฏ๋ก ๊ฐ์ฒด์ ๋ํ ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ๋ ๋์ ์์ ํ๋ ค๋ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ ์ ์ญ ์คํฌ๋ฆฝํธ์ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
์ด ์์คํ ์ ์ด๋ฏธ ์๋ ๋ก๋๋ฅผ ํตํด Godot์ ๋ชจ๋ ์ฌ๋์ด ๊ตฌํํ ์ ์์ต๋๋ค(์ ์๋๋ ๊ธฐ๋ฅ์ "์ถ๊ฐ"๊ฐ ์์ต๋๋ค). ๊ฒ๋ค๊ฐ, ๊ทธ๋ค์ด ์ฒ์์ ์ง๋ฉดํ ๋ฌธ์ ๋ ๊ทธ๋ค์ด ์์คํ ์์ฒด๋ฅผ ์ธ๊ณ์ ํ์ ๋ ธ๋๋ก ์ถ๊ฐํ๊ธฐ๋ฅผ ์ํ์ง ์๋๋ค๋ ๊ฒ์ ๋๋ค. ๊ฑฐ๊ธฐ์ ๋ ธ๋์ ํด๋น ๋ ธ๋์ ์คํฌ๋ฆฝํธ๋ฅผ ๋ชจ๋ ๊ฐ๊ณ ๋์ค์ ๋ชจ๋ ๊ฒ์ด ์์ง์ฌ์ผ ํ๋ค๋ ๊ฒ์ ๊นจ๋ฌ์ ๋ ๋ชจ๋ ๋ ธ๋์ ์คํฌ๋ฆฝํธ ์ฌ์ด์ ๊ด๊ณ๋ฅผ ์ ์ฌ์ ์ผ๋ก ๋ฆฌํฉํ ๋งํฉ๋๋ค.
์๋ง๋ ๋์ ์์ํ๊ฒ ์คํฌ๋ฆฝํธ๋ฅผ ๋ณด์ ํ๋ ๊ฐ์ฒด "๊ตฌ์ฑ ์์"์ ๋ํ ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ์ง ์๋๋ก ๋ฒ ์ด๋ณธ ๋ ธ๋ ๋ ธ๋์ ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์์ต๋๋ค.
์ด๋ค ๋ฐฉ๋ฒ์ผ๋ก? ์ด๋ฅผ ํฌ๋ช ํ๊ฒ ์ํํ ์ ์๋ ์ ์ผํ ๋ฐฉ๋ฒ์ MultiScript ์์คํ ์ ๊ตฌํํ๋ ๊ฒ์ด๋ฉฐ ๊ทธ ํจ๋ฌ๋ค์์๋ ์๋ง์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ๊ทธ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๊ณ ํ ๋ ๋ด๊ฐ ์๊ฐํด๋ผ ์ ์๋ ์ ์ผํ ๋ค๋ฅธ ๋์์ #23101์์ ์ ์ํ GDScript ํน์ฑ ์์คํ ์ด์์ต๋๋ค. ์ด ์์คํ ์ MultiScript ๋ฌธ์ ๋ฅผ ํ๋์ ์ธ์ด๋ก ์ ํํ์ง๋ง ์์ฒด ํธ์คํธ์๋ ํจ์ฌ ๋ ์ฌ๊ฐํ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
๋๋ ๋ณ๋์ ๊ฐ๋จํ "only-holds-scripts" ๋ ธ๋์ผ ์๋ ์์ต๋๋ค.
3.2์์ ๋ฐฐ์ด ์ ํ ํํธ ์์คํ ์ ์์ ํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ํ ์ ์์ต๋๋ค.
extends Node
export(Array, Script) behaviors = []
์ด์ ์ฌ์ (์ด๋ฆ์ผ๋ก ์คํฌ๋ฆฝํธ์ ์ก์ธ์คํ๊ธฐ ์ํด)๊ณผ 3.1์ EditorInspectorPlugin์ ์ฌ์ฉํ์ฌ ํด๋น ๋ ธ๋๊ฐ Inspector์์ ์ด๋ฆด ๋ ์ฌ์ฉ์ ์ ์ UI๋ฅผ ์ ์ํ๊ธฐ ์ํด ๊ธฐ๋ฅ์ ๊ตฌํํ ์๋ ์์ต๋๋ค(๋ด๋ณด๋ธ ์คํฌ๋ฆฝํธ UI ์์ฑ, ํ์ง๋ง ํ์ผ ์ด๋ฆ๊ณผ ์ผ์นํ๋ ํค๊ฐ ์๋ ์คํฌ๋ฆฝํธ๋ฅผ ์ถ๊ฐํฉ๋๋ค).
๋ฆฌ์์ค #burning.gd๋ฅผ ํ์ฅํฉ๋๋ค.
์, ์ฐ๋ฆฌ ๋ฌธ์ ๋ฅผ ์ฐพ์ ๊ฒ ๊ฐ์์. ์ฌ์ ๋ก๋ ์๋๊ฐ ๋ฆฌ์์ค์์ ํ์ฅ๋์ง ์์์ต๋๋ค. ๋๋ ์ฐ๋ฆฌ ์ค ๋๊ตฌ๋ ์ฐ๋ฆฌ๊ฐ ๋ง์ถคํ ๋ฆฌ์์ค๋ฅผ ๋ง๋ค ์ ์๋ค๋ ๊ฒ์ ์์ง ๋ชปํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋ํ ์ฐ๋ฆฌ์ ๊ฒ์์ ๊ณต์ ํ๊ฑฐ๋ ์ํฌํ๋ก๋ฅผ ์ค๋ช
ํ ์ฌ๋์ด ๋ฆฌ์์ค์์ ํ์ฅ๋์ง ์์๋ค๋ ์ ์ ์ง์ ํ๊ณ ์ถ์ต๋๋ค.
๊ฑฐ์ ๋ชจ๋ ์ฌ๋๋ค์ด Node.js๋ฅผ ํ์ฅํ๊ณ ์์์ต๋๋ค. ์ด๊ฒ์ด ์ผ๋ง๋ ํฐ ์ฐจ์ด๋ฅผ ๋ง๋๋์ง ์ ์ ์์ผ๋ฏ๋ก ํ
์คํธ๋ฅผ ์คํํด์ผ ํฉ๋๋ค.
FileSystemItemList(๊ฒฝ๊ณ , ์ด๊ธฐ WIP์)
ํ์คํ ์ด๊ฒ์ ์ดํด๋ณด์์ผ ํ ๊ฒ์ ๋๋ค.
@MysteryGM
๋๋ ์ฐ๋ฆฌ ์ค ๋๊ตฌ๋ ์ฐ๋ฆฌ๊ฐ ๋ง์ถคํ ๋ฆฌ์์ค๋ฅผ ๋ง๋ค ์ ์๋ค๋ ๊ฒ์ ์์ง ๋ชปํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋ค! ๋๋ ์ต๊ทผ ์ ๋ฌธ์์ ํ๋ก์ธ์ค๋ฅผ ์ค๋ช ํ๋ ์น์ ์ ์ถ๊ฐํ์ต๋๋ค . :-๋
Object, Reference, Resource, ๊ทธ๋ฆฌ๊ณ ๋ฌผ๋ก Node(๋๋ ์ด๋ฌํ ํด๋์ค์ ํ์๋ฌผ)๋ฅผ ํฌํจํ ๋ชจ๋ ์์ง ์ ํ์ ์คํฌ๋ฆฝํธ๋ก ํ์ฅํ ์ ์์ต๋๋ค. ํ์ฅํ ์ ์๋ ์ ์ผํ ๊ฒ์ ์์ง ๋ฐ ํธ์ง๊ธฐ ์ฑ๊ธํค(์: OS, Engine ๋๋ EditorFileSystem)์ ๋๋ค.
์ฃผ์ ์ ๋ํ ์๊ฒฌ์ ๋ณด๋ด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ์์์ ๋ฌธ์ ๋ ํด๋์ค๋ฅผ ๊ตฌํํ ๋ ํด๋์ค์ ๋ชจ๋ ๊ด๊ณ๋ฅผ ์๊ณ ์๋ ๊ฒฝ์ฐ์๋ง ์๋ํ๋ค๋ ๊ฒ์ ๋๋ค.
์ฒ๋ง์์. ์ฅ์ ์์คํ
์ ๊ตฌํํ๋ ๋ฐ ํ์ํ์ง ์๊ธฐ ๋๋ฌธ์ ์ฃผ์ ๋์ ์์์ ๋ฃ์์ต๋๋ค.
์ด๋ฏธ ์ต์ํ ํจ๋ฌ๋ค์์ ์ฌ์ฉํ์ฌ ์๋ฃจ์
์ ์ผ๋์ ๋๊ณ ์๋ ๊ฒ ๊ฐ๊ณ , ๋ฌธ์ ๋ ์ฅ์ ์์คํ
์ ๋ง๋๋ ๋ฐฉ๋ฒ์ด ์๋๋ผ ์ ํธํ๋ ํจ๋ฌ๋ค์์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์
๋๋ค.
๊ทธ๋ผ ์ฌ๊ณผ๋๋ฆฝ๋๋ค. ๋๋ GDScript ์์์ ์ต์ํ์ง ์์ง๋ง ๋ค๋ฅธ ์ฌ๋๋ค์ด ์ด๋ฏธ ๊ทํ์ ์ง๋ฌธ์ ๋ต๋ณํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ข์, ์ฐ๋ฆฌ๋ ์๋ก์ด ๋ฐฉ๋ฒ์ ํ ์คํธํ ์๊ฐ์ด ์์๊ณ ์๋ฒฝํ๊ฒ ์๋ํ๋ ๊ฒ์ ๋ฐ๊ฒฌํ์ต๋๋ค. ์๋ฐฑ ๊ฐ์ ๋ ธ๋๋ฅผ ์ด๋ฏธ ์คํฌ๋ฆฝํธ๋ก ๋์ฒดํ ์ ์์ต๋๋ค. ์ฑ๋ฅ์ ํฌ๊ฒ ํฅ์์ํต๋๋ค.
๋ฆฌ์์ค ์ฌ์ ๋ก๋๊ฐ ์คํฌ๋ฆฝํธ ํฌํจ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค๋ ์ ์ ๊ณ ๋ คํ์ญ์์ค. ๋ํ GDscript์์ ๋ฆฌ์์ค ๋ณ์๋ฅผ ๋ด๋ณด๋ด Unity์ MultiScript ๋ฐ ScriptableObject ์ ๋์์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ฆฌ์์ค๋ฅผ ๋ ์์ธํ ์ค๋ช
ํ๊ธฐ ์ํด ๋ฌธ์๊ฐ ์
๋ฐ์ดํธ๋์๋ค๋ ์ฌ์ค๊ณผ ๊ฒฐํฉ๋ฉ๋๋ค.
Godot 3.1์๋ ๋ ๋ง์ ์์
ํ๋ฆ์ ํ์ฉํด์ผ ํ๋ ์คํฌ๋ฆฝํธ ํด๋์ค๋ ์๋ค๋ ๊ฒ์ ๋งํ ๊ฒ๋ ์์ต๋๋ค.
์ด ๋ฌธ์ ์ ์๋ ๋ชฉํ๊ฐ ํด๊ฒฐ๋ ๊ฒ ๊ฐ์๋ฐ ์ด์ ์ด ๋ฌธ์ ๋ฅผ ๋ซ์ ์ ์์ต๋๊น?
๋ค์ ํ ๋ฒ ํ ๋ก ์ ์ฐธ์ฌํด ์ฃผ์ ๋ชจ๋ ๋ถ๋ค๊ป ๊ฐ์ฌ์ ๋ง์์ ์ ํ๊ณ ์ถ์ต๋๋ค. ํนํ Godot ์์ง์ ๋ํด ์์ฒญ๋ ์์ ํต์ฐฐ๋ ฅ์ ์ ๊ณตํ @willnationsdev ์๊ฒ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
@MysteryGM ์ด ์ค๋ ๋์ ์์ ๋ถ๋ถ๊ณผ ์ด ์ค๋ ๋์ ๋ ๋ถ๋ถ์ ๋ํ ์๊ฐ์ ๋ธ๋ก๊ทธ๋ Godot-docs ์ด์์ผ๋ก ์์ฑํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๋๋ ๋๋ถ๋ถ์ ์ด๊ธฐ ์ฌ์ฉ์๊ฐ ๋ณต์กํ ์คํฌ๋ฆฝํ ๊ตฌ์ฑ์ ๋ฌ์ฑํ๋ ค๊ณ ํ ๋ ์ข ์ข ์ฑ๋ฅ ์ค์๋ฅผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ฐ๋ฆฌ๋ ํ์ต ์ธก๋ฉด์์ "์ " ๋ "ํ"์ ๋ํ ์ข์ ๊ธฐ๋ก์ด ํ์ํฉ๋๋ค. ์ฐ๋ฆฌ๊ฐ ์ด๊ธฐ ํํ ๋ฆฌ์ผ์์ ๋ฐฐ์ด ๊ตํ๊ณผ ํจํด์ ๋๊ท๋ชจ ๊ฒ์์ผ๋ก ์ ๋ฒ์ญ๋์ง ์์ ๊ฒ์ ๋๋ค. ์ด๋ ๋์๊ฒ ๋๊ท๋ชจ ์์ ์ ๋ํ ๋ ๋ง์ ๋ธ๋ก๊ทธ/์กฐ์ธ์ด ํ์ํ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
@pgruenbacher , ์ข์ ์๊ฐ์ ๋๋ค. ์ฐ๋ฆฌ ํ์๋ ๋ ๊ฐ์ง ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ํ๋๋ ์ฐ๋ฆฌ ์ค ๋จ ๋ ๋ช ๋ง์ด ์์ด๋ฅผ ์ ์ฉํ ์์ค์ผ๋ก ์๊ณ ์๊ณ , ๋ ๋ฒ์งธ๋ ์๊ฐ์ด ๋ง์ด ๊ฑธ๋ฆฐ๋ค๋ ๊ฒ์ ๋๋ค.
๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ ๊ฐ๋ฐ ๋ธ๋ก๊ทธ๋ฅผ ๋ง๋ค๊ณ ๋ฐ๊ฒฌํ ๋ชจ๋ ๊ฒ์ ๊ธฐ๋กํด ๋๋ ์ข์ ๋ณํ๊ฐ ์์ต๋๋ค. "Godot์ผ๋ก์ ์ ํ" ๋ธ๋ก๊ทธ ํญ๋ชฉ์ ๋ง๋ค ๊ฐ๋ฅ์ฑ์ด ์์ต๋๋ค.
์ง๊ธ ์ ๋ "์์ ๊ฐ๋ฅผ ์ํ Godot ๋จ๊ธฐ ๊ณผ์ " PDF ํํ ๋ฆฌ์ผ์ ์์ฑํ๊ณ ์์ต๋๋ค. ์๋ํ๋ฉด ์ฐ๋ฆฌ๋ ํ์ ์ํด ํ๋ฆฌ๋์๋ฅผ ๊ณ ์ฉํ๊ณ ์ถ์ง๋ง Godot๋ ์์ง ์ ์๋ ค์ง์ง ์์๊ธฐ ๋๋ฌธ์
๋๋ค.
์ด ํํ ๋ฆฌ์ผ์ Godot๋ฅผ ์ ๋ฌธ ๊ฒ์ ์ํฐ์คํธ์๊ฒ ์๊ฐํ๊ธฐ ์ํ ๊ฒ์
๋๋ค.
์ด ์์
์ ์๋ฃํ๋ฉด ๋ค๋ฅธ Godot ์ฌ์ฉ์์ ๊ณต์ ํ ๊ฒ์ด๋ฉฐ, ๋ด๊ฐ ์์ง ๋ฐฐ์ฐ๋ ๋์ ์ค์๋ฅผ ์์ ํ๋ ๊ฒ์ด ๋ ์ฝ๊ธฐ ๋๋ฌธ์ ์์ํ๊ธฐ ์ํด PDF๋ก ๋ณด๊ดํ ๊ฒ์
๋๋ค.
@pgruenbacher @MysteryGM Godot์ ๋ํ ์ ํ ๊ฒฝํ๊ณผ ๊ฐ์ ๋งฅ๋ฝ์ ์๋์ง๋ง, ์ด ๋ฌธ์ ์ ๋ช ๊ฐ์ง ๊ด๋ จ ๋ํ์ด๋๋ ์ง๋ฌธ์ผ๋ก ์ธํด ์ ๋ Godot-docs์ ๋ํ ์ฅ๋ฉด/์คํฌ๋ฆฝํธ ๋์์ธ ๋ชจ๋ฒ ์ฌ๋ก ๋ฌธ์ ์์ ์ ์์ํ๊ฒ ๋์์ต๋๋ค. ๋ด ํฌํฌ์ ์ง์ ์ด ์์ง๋ง ๋งค์ฐ ์ด๊ธฐ WIP ATM์ ๋๋ค.
์ด์ ๊ฐ์ ์ฃผ์ ๋ฅผ ์ฝ๋ ๊ฒ์ ๋งค์ฐ ๋๋ดํฉ๋๋ค. ์ฐ๋ฆฌ ํ๋ก์ ํธ๋ 15,000 LoC๊ฐ ํจ์ฌ ๋๊ณ ์๋ฒฝํ๊ฒ ์กฐ์ง๋์์ผ๋ฉฐ ํ๋ฅญํ๊ฒ ์คํ๋ฉ๋๋ค. (์ฌ๊ธฐ์ ์๋ ๋ค๋ฅธ ์ฌ๋๋ค์ด ๋๋ณด๋ค ํจ์ฌ ๋๋ํ๊ธฐ ๋๋ฌธ์ ํน์ ์์ ์ ๋ํ ์ธ๋ถ ์ฌํญ์ ๋ค๋ฃจ์ง ์๊ฒ ์ต๋๋ค.)
๋น์ ์ด Godot์ ํจ๊ป ํ๊ฒ ๋์ด ๊ธฐ์ฉ๋๋ค, MysteryGM! Def๋ ๊ฐ๋ฐ์ ๋ธ๋ก๊ทธ๋ฅผ ์ฝ๊ธฐ๋ฅผ ๊ณ ๋ํ๊ณ ์์ต๋๋ค.
๋ด ์๊ฐ์ ์ค์ํ ๋
ผ๋ฆฌ๊ฐ ์๋ ๊ฒ์์ ์ฝ๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ์ข์ต๋๋ค.
์ด์จ๋ ๊ฒ์ ์์ง๊ณผ ๋ถ๋ฆฌ๋์ด ์์ผ๋ฏ๋ก
์์ง์ด ์๋ํฉ๋๋ค. ๋ด ๋
ธ๋ ์คํฌ๋ฆฝํ
์ ์ฃผ๋ก ์ธํฐํ์ด์ค ๋ ๋๋ง์ ์ฌ์ฉ๋ฉ๋๋ค.
๋ฌผ๋ฆฌํ ๋
ผ๋ฆฌ. ๊ฒ์ ๋ก์ง์ ๋ณ๋๋ก ์ปดํ์ผ๋ ๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์
๋๋ค.
2018๋
11์ 14์ผ ์์์ผ, Aaron-Fleisher [email protected]
์ผ๋ค:
์ด์ ๊ฐ์ ์ฃผ์ ๋ฅผ ์ฝ๋ ๊ฒ์ ๋งค์ฐ ๋๋ดํฉ๋๋ค(์ด๋ค ์๋ฏธ์์
์ฐ๋ฆฌ๊ฐ ์ฌ๋ฐ๋ฅธ ์์ง์ ์ ํํ๋์ง ๋ค์ ํ์ธํ๊ฒ ํจ). ์ฐ๋ฆฌ ํ๋ก์ ํธ๋ ์
15,000๊ฐ ์ด์์ LoC๋ฅผ ์๋ฒฝํ๊ฒ ๊ตฌ์ฑํ๊ณ ํ๋ฅญํ๊ฒ ์คํํฉ๋๋ค. (๋๋ ๊ฐ์ง ์์๊ฑฐ์ผ
์ฌ๊ธฐ ๋ค๋ฅธ ์ฌ๋๋ค์ด ํจ์ฌ ๋ ๋๋ํ๊ธฐ ๋๋ฌธ์ ํน์ ์์ ์ ์ธ๋ถ ์ฌํญ์ผ๋ก
๋๋ณด๋ค).
๋น์ ์ด Godot์ ํจ๊ป ํ๊ฒ ๋์ด ๊ธฐ์ฉ๋๋ค, MysteryGM! ๋ฐํ ์ฐพ๊ณ
๊ฐ๋ฐ์ ๋ธ๋ก๊ทธ๋ฅผ ์ฝ๊ธฐ ์ ์โ
๋น์ ์ด ์ธ๊ธ๋์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋ฐ๋ ๊ฒ์ ๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ณ GitHub์์ ํ์ธํ์ธ์.
https://github.com/godotengine/godot/issues/23052#issuecomment-438871197 ,
๋๋ ์ค๋ ๋ ์์๊ฑฐ
https://github.com/notifications/unsubscribe-auth/ADLZ9pw2-G0kE19meyi7iSkceAldfAMjks5uvLb4gaJpZM4XelSe
.
@Aaron-Fleisher
... ์ฐ๋ฆฌ๊ฐ ์ฌ๋ฐ๋ฅธ ์์ง์ ์ ํํ๋์ง ๋ค์ ์ถ์ธกํ๊ฒ ๋ง๋ญ๋๋ค.
์ง๊ธ ์ฌ์ฉํ๊ณ ์๋ ์์ง์ด ์ ์๋ํ๊ณ ์๋ค๋ฉด ์ฝ๊ฐ์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ํ์ํ๋๋ผ๋ ๊ฑฑ์ ํ ํ์๊ฐ ์์ต๋๋ค. ์ผ๋ถ ํ๋ ์ด์ด(๋๋ ๋ค๋ฅธ ๊ฐ๋ฐ์)๊ฐ ๊ทํ์ ๋ฅ๋ ฅ/์ ์ ์ ์ ์๋ฌธ์ ์ ๊ธฐํ ์ ์์ง๋ง ์ด๋ ๊ฒ์ ๊ฐ๋ฐ์ ํ์ค์ผ ๋ฟ์ ๋๋ค. ๋ง์ ์ด์ ์ ์ธ ์ฌ๋๋ค์ด ๋ช ๋ฐฑํ ๊ถ์๋ฅผ ๊ฐ์ง๊ณ ์ด์ผ๊ธฐํฉ๋๋ค(์ข ์ข ์ค์ ๊ธฐ์ ์์ค๋ณด๋ค ํจ์ฌ ๋์).
๋น์ ์ ๋น์ ์ ๋ฌธ์ ๋ฅผ ์๊ณ ์๋ ์ฌ๋์ด๋ฉฐ, ๋น์ ์ ๊ทธ ์ผ์ ํด์ผ ํ ์ฌ๋์ ๋๋ค. 10~20%์ ์์ฐ์ฑ์ ์ถ๊ฐ๋ก ์ป์ ์ ์์๋ ๊ฒ์ ์ํด ๋ง๋น๋๋ ๊ฒ์ ํผํ์ญ์์ค. ๋ค์ ๊ฒ์์ ์ํด ์ ์ฅํฉ๋๋ค. ์๋๋ฉด ์ด๋ฏธ ์๊ณ ์๋ ๋๊ตฌ๋ฅผ ๋ฐฐ์ฐ๋ ๋ฐ ์ด๋ฏธ ์์ฒญ๋ ํฌ์๋ฅผ ํ๊ธฐ ๋๋ฌธ์ ํ์ง ๋ง์ญ์์ค. ๋น์ ์ ์ ํ :)
์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. Godot ๊ฐ๋ฐ์๋ค์ด ์์ ๋ค์ด ํ๋ ์ผ์ ๋ชจ๋ฅธ๋ค๋ ๋๋์ด ๋ญ๋๋ค.
Godot 3.0.6 ์์ ํ์ ์ฒ์ ์ฌ์ฉํ์ ๋, ์ ๋ ๋ชป์๊ธฐ๊ณ ๊ธฐ๋ฅ ์ฅ์ ๊ฐ ์๋ "ํ๋ก์ ํธ ๊ด๋ฆฌ์"๊ฐ ๋ํ๋ฉ๋๋ค. ์ด๋ป๊ฒ ์๋ํ๋์ง ์ ์ ์์ ๋(๊ทธ๋ฆฌ๊ณ ์ ํ ์ง๊ด์ ์ด์ง ์์), ์ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์์ ํ๋ก๊ทธ๋จ์ ๋ค์ด๋ก๋ํ๋ ค๊ณ ํ ๋๋ง๋ค ์ฑ์ด ์ถฉ๋ํฉ๋๋ค. ๋๋๋ก ์ฑ์ด ์๋ต์ ๋ฉ์ถฅ๋๋ค. ๋๋๋ก ์ฑ์์ ์ ๋นํ "์ํ !์ฐ๊ฒฐ๋จ" ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค. ๋๋๋ก ๋ค์ด๋ก๋๊ฐ ์ค๋จ๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋งค๋ฒ 100MB ํ์ผ์ ๋๋ถ๋ถ ๋ค์ด๋ก๋ํ๋ ๋ฐ ์ฝ 10๋ถ์ด ๊ฑธ๋ฆฌ๋ ๋ฐ๋ฉด, ๊ฐ์ ์๊ฐ์ ๋ค๋ฅธ ๊ณณ์์๋ 10GB๋ฅผ ๋ค์ด๋ก๋ํ ์ ์์ต๋๋ค. "๋ค์ ์๋"๋ ์ ์ฒด ๋ค์ด๋ก๋๋ฅผ ์ฒ์๋ถํฐ ์์ํฉ๋๋ค.
์ฌ๊ธฐ์ "์์ ์ "์ด๋ผ๋ ๋ง์ "๋งค๋ฒ ์์ ์ ์ผ๋ก ๋งํ ๊ฒ"์ด๋ผ๋ ์๋ฏธ๋ผ๊ณ ์๊ฐํฉ๋๋ค.
์๋์ ์ธ ์ฒซ์ธ์์ ์ด์ผ๊ธฐํฉ๋๋ค.
@dejayc ์ด์ํ๋ค์. Windows 10 ๋๋ Linux Mint ์ฅ์น์์ ์ง์ ํ๋ก์ ํธ ๊ด๋ฆฌ์(3.0.6 ์์ ๋๋ ๋ง์คํฐ ๋ถ๊ธฐ ํฌํจ)์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์ด ์์ต๋๋ค. ์ฌ๊ธฐ์์ ๋ฌธ์ ์ ๋ํ ์ ๋ฌธ์ ๋ฅผ ๋ง๋๋ ๊ฒ์ด ์ข์ต๋๋ค(์ด๋ ๊ทธ๋ฌํ ์ฃผ์ ์ ๋ํ ์ฌ๋ฐ๋ฅธ ๋ฌธ์ ๊ฐ ์๋๋ฏ๋ก). ๋๊ตฐ๊ฐ๊ฐ ๋ ๋์ ์ง์์ ์ ๊ณตํ ์ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
@dejayc
์ฐ๋ฆฌ ๋ชจ๋๊ฐ Patreon์ ๊ธฐ๋ถํ๋ค๋ฉด Godot ํ๋ก์ ํธ๋ ์ ๊ท์ง ์ฌ์ฉ์ฑ ์ง์์ ๊ณ ์ฉํ ์ ์์ ๊ฒ์
๋๋ค.
์ฌ์ํ ์ ์ ๋์ํ์ง๋ง ์์
๋ฏธ๋์ด์ ๋ง์ผํ
๊ฒ์๋ฌผ์ ๊ธฐ๋ฐ์ผ๋ก ์์ง์ ์ ํํด์ผ ํ๋ฉฐ ํน์ ํ๋ก์ ํธ์์ ์์ง์ ๋จ์ ์ด ์ผ๋ง๋ ์ค์ํ์ง ํ์ธํด์ผ ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฌํ๊ฒ๋ ๊ทธ๋ค ๋ชจ๋๋ _๋ง์_ ๋จ์ ์ ๊ฐ์ง๊ณ ์๋๋ฐ, ์ด๋ UI์ ํ๋ฉด ์์ค๋ณด๋ค ๋ ๊น์ต๋๋ค...
์ฆ, ํ๋ก์ ํธ ๊ด๋ฆฌ์์ ๋ํ ์ ์ ๋ฌธ์ ๋ฅผ ์ด์์ต๋๋ค. ์์ ์๊ฐ์ด ์ฃผ์ด์ง๋ฉด ํด๋น ์์ญ์์ ๋ช ๊ฐ์ง ๊ฐ์ ์์ ์ ์ํํ ๊ฒ์ ๋๋ค.
์ ๋ Unity์ Godot๋ฅผ ๋ชจ๋ ์ฌ์ฉํด ๋ณด์๊ณ Godot์์ ์ผ๋ฐ ์ํฌํ๋ก์ ๊ตฌ์กฐ๊ฐ ํจ์ฌ ๋ ์ฐ์ํ๊ณ ์ง๊ด์ ์์ ์๊ฒ ๋์์ต๋๋ค(ํนํ Unity์ ์ฅ๋ฉด/ํ๋ฆฌํน ๋์ ์ฅ๋ฉด ๋ชจ๋ธ, ๋ค์ค ๊ตฌ์ฑ ์์ ๋์ "๋จ์ผ ์คํฌ๋ฆฝํธ" ๋ชจ๋ธ, ์๋ ์์ง ๋ค์ด๋ก๋/์์ ๋ฐ ๋ด๋ณด๋ด๊ธฐ ๋ฐ ์คํ๋ผ์ธ์์ ์์ ํ ์๋ํ๋ ๊ธฐ๋ฅ).
๋ ๋ค ๊ฐ๋ฅํ ์ํฌํ๋ก์ ๋ชจ๋ธ์ด ๋ง์ด ์์ผ๋ฉฐ ์ด๋ ๊ฒ์ด ๋ ๋์์ง ์๊ธฐ๊ฐ ๊ฒฐ์ฝ ์ฝ์ง ์์ต๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ง๋ฌธ์ด ๋จ์ํ "Godot์์ ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์๋ ์ฌ๋ฌ ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์์ต๋๊น?"๋ผ๋ฉด ๋๋ต์ ์์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฒ์์ ์์คํ ๋ง๋ค ์๊ตฌ ์ฌํญ์ด ๋ค๋ฅผ ์ ์์ผ๋ฏ๋ก ๋จ์ผ ์ํฌํ๋ก๋ฅผ ๊ฐ์ํ๋ ๊ฒ์ ํฐ๋ฌด๋์๋ ์ผ์ ๋๋ค. ๋ง์ ์ฑ๋ฅ์ด ํ์ํ ์์คํ ๊ณผ ๊ฒ์ ๋์์ด๋๊ฐ ์์ฃผ ์ ๋ฐ์ดํธํด์ผ ํ๋ ์์คํ ์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ฝ๋ฉํ์ง ์์ต๋๋ค. ๋ชจ๋ ์๋ฃจ์ ์๋ ์ฅ๋จ์ ์ด ์์ผ๋ฏ๋ก "๊ณต์" ์ํฌํ๋ก๋ฅผ ๋ง๋๋ ๊ฒ์ ์๋ฏธ๊ฐ ์์ต๋๋ค.