Godot: Godot๊ฐ€ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ์•„๋ฌด๋„ ๋ชจ๋ฆ…๋‹ˆ๋‹ค. (Re-MultiScript, Re-Class ๊ธฐ๋ฐ˜ ๋…ธ๋“œ)

์— ๋งŒ๋“  2018๋…„ 10์›” 16์ผ  ยท  63์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: godotengine/godot

์ด๊ฒƒ์€ ๋น„๊ณต์‹์ ์ธ ์ฃผ์ œ์— ๊ฐ€๊น์ง€๋งŒ 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 ๊ฒŒ์ž„ ๊ฐœ๋ฐœ์ž๊ฐ€ ์—”์ง„ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ํ•„์š”ํ•œ ๊ฒƒ์€ ๋ณต์žกํ•œ ๊ฐœ์ฒด์™€ ์‹œ์Šคํ…œ์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ๊ณต์‹ ์›Œํฌํ”Œ๋กœ์˜ ๋ช…ํ™•ํ•œ ๊ฐ์†์ž…๋‹ˆ๋‹ค.
๊ทธ๋Ÿฐ ์‹์œผ๋กœ ๊ทธ๋“ค์€ ๋น—๋‚˜๊ฐ€์ง€๋งŒ ๊ทธ๊ฒƒ์ด ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉ๋˜๋„๋ก ์˜๋„๋˜์—ˆ๋Š”์ง€ ํ•ญ์ƒ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

archived discussion core

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์งˆ๋ฌธ์ด ๋‹จ์ˆœํžˆ "Godot์—์„œ ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?"๋ผ๋ฉด ๋Œ€๋‹ต์€ ์˜ˆ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฒŒ์ž„์˜ ์‹œ์Šคํ…œ๋งˆ๋‹ค ์š”๊ตฌ ์‚ฌํ•ญ์ด ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋‹จ์ผ ์›Œํฌํ”Œ๋กœ๋ฅผ ๊ฐ•์š”ํ•˜๋Š” ๊ฒƒ์€ ํ„ฐ๋ฌด๋‹ˆ์—†๋Š” ์ผ์ž…๋‹ˆ๋‹ค. ๋งŽ์€ ์„ฑ๋Šฅ์ด ํ•„์š”ํ•œ ์‹œ์Šคํ…œ๊ณผ ๊ฒŒ์ž„ ๋””์ž์ด๋„ˆ๊ฐ€ ์ž์ฃผ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•˜๋Š” ์‹œ์Šคํ…œ์„ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์ฝ”๋”ฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ์†”๋ฃจ์…˜์—๋Š” ์žฅ๋‹จ์ ์ด ์žˆ์œผ๋ฏ€๋กœ "๊ณต์‹" ์›Œํฌํ”Œ๋กœ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  63 ๋Œ“๊ธ€

์งˆ๋ฌธ์ด ๋‹จ์ˆœํžˆ "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์˜ ๊ณ ์œ ํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค.
๋ฌผ๊ฑด์„ ์›€์ง์ด์ง€ ์•Š์œผ๋ฉด ์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค("๋ฌธ์ œ ๊ฒŒ์‹œํŒ"์˜ ์ด๋ฏธ์ง€).
pawndefend
๊ทธ๋ž˜์„œ ์ด๊ฒƒ์„ ์ˆ˜์ •ํ•˜๊ธฐ ์œ„ํ•ด ์šฐ๋ฆฌ๋Š” ์ž์‹ ๋…ธ๋“œ๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์•ฝ 50,000๊ฐœ๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š” ๋…ธ๋“œ์ผ์ง€๋ผ๋„ ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ค๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.
pawnfollow

์šฐ๋ฆฌ๊ฐ€ ์•Œ๊ณ  ์‹ถ์€ ๊ฒƒ์€ ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•, 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์˜ ์ฐธ์กฐ๋œ ๋ฌธ์ œ์— ๋Œ€ํ•œ ์‘๋‹ต:

  • 19486 :

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

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

  • 7402 : ๋‹ค์‹œ ๋งํ•˜์ง€๋งŒ, ์Šคํฌ๋ฆฝํŠธ ํด๋ž˜์Šค๋Š” ์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ์†”๋ฃจ์…˜์ž…๋‹ˆ๋‹ค(์ด ๋ฌธ์ œ์˜ ์ตœ์ข… ์„ค๋ช…์„ ๋ณด๋ฉด reduz๊ฐ€ ์ƒ๊ฐํ•œ "๊ฐ„๋‹จํ•œ ์†”๋ฃจ์…˜").

  • 15996 : ์ด๊ฒƒ์€ ๋‚ด๊ฐ€ ์›ํ–ˆ๋˜ ๊ฒƒ์ด ํŠน์„ฑ ์‹œ์Šคํ…œ์ด๋ผ๋Š” ๊ฒƒ์„ ๊นจ๋‹ซ๊ณ  (ํŠน์„ฑ์ด ๋ฌด์—‡์ธ์ง€ ์ดํ•ดํ•˜๊ธฐ ์ „์—) ๊ฒฐ๊ณผ์ ์œผ๋กœ ์žฅ๋ฉด๊ณผ ๋…ธ๋“œ์˜ ๋Œ€์ƒ ๋””์ž์ธ์„ ์™„์ „ํžˆ ์™œ๊ณกํ•˜๊ณ  ์ „์ฒด๋ฅผ ๋ณ€ํ™˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ดˆ๊ธฐ ์ œ์•ˆ์ด ์–ผ๋งˆ๋‚˜ ์™„์ „ํžˆ ๋”์ฐํ–ˆ๋Š”์ง€ ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค. ์ปดํฌ์ง€์…˜ ๊ธฐ๋ฐ˜ ์ƒ์† ์‹œ์Šคํ…œ์— ๋Œ€ํ•œ ๊ฒƒ - Unity๊ฐ€ ์‹ค์ œ๋กœ ํ•˜๋Š” ๊ฒƒ๊ณผ ์œ ์‚ฌํ•œ ๊ฒƒ, ์—ญ๊ฒน์Šต๋‹ˆ๋‹ค(Unity์—์„œ๋Š” ๋ชจ๋“  COMPONENT์—์„œ getComponent๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์†Œ์œ ํ•˜๋Š” GameObject์˜ ํ˜•์ œ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. GameObject์˜ ํ™•์žฅ, ์ข…์†์„ฑ์„ ์„œ๋กœ ํ‘ธ์‹œํ•จ).

  • 8502 : MultiScript๋Š” UE4์˜ ๋ธ”๋ฃจํ”„๋ฆฐํŠธ๊ฐ€ C++ ์Šคํฌ๋ฆฝํŠธ์—์„œ ์ง์ ‘ ์ƒ์†ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ์‹๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ ์„œ๋กœ ๋‹ค๋ฅธ ์Šคํฌ๋ฆฝํŒ… ์–ธ์–ด๊ฐ€ ์„œ๋กœ ์ƒ์†๋˜๋„๋ก ํ•˜๊ธฐ ์œ„ํ•œ ๋„๊ตฌ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค. VisualScript๋Š” ์• ์ดˆ์— ์ƒ์†์„ ์ง€์›ํ•˜์ง€๋„ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ GDScript๊ฐ€ ์—ฌ๊ธฐ์—์„œ ๋” ์ ์ ˆํ•œ ๋น„๊ต์ž…๋‹ˆ๋‹ค).

    ์ด์ œ 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' ๊ฐ€๋Šฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ๊ตฌ์„ฑ ์š”์†Œ 'ํ…Œ์ด๋ธ”'์€ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์œ„ํ•œ ์ €์žฅ์†Œ์ž…๋‹ˆ๋‹ค. ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์œผ๋กœ ํฌ๊ธฐ๋ฅผ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฐ์—ด์ผ ์ˆ˜ ์žˆ์ง€๋งŒ ์ผ๋ฐ˜์ ์œผ๋กœ ๋ช‡ ๊ฐ€์ง€ ์œ ํ˜•์ด ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

    • ํฌ๊ธฐ ์กฐ์ • ๊ฐ€๋Šฅํ•œ ๋ฐฐ์—ด: ์œ„์น˜์™€ ๊ฐ™์ด ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ๋งค์šฐ ์ผ๋ฐ˜์ ์ผ ๋•Œ ์ž์ฃผ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
    • ํฌ์†Œ ๋ฐฐ์—ด: ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ํ•œ ๋ฒˆ์— ์—”ํ„ฐํ‹ฐ ๊ทธ๋ฃน์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์„ ๋•Œ ์ž์ฃผ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
    • ๋งคํ•‘: ์˜ˆ์ƒํ•˜๋Š” ์„ฑ๋Šฅ ํŠน์„ฑ์— ๋”ฐ๋ผ ํ•ด์‹œ ๋งต ๋˜๋Š” ํŠธ๋ฆฌ ๋งต ๋“ฑ์ผ ์ˆ˜ ์žˆ์ง€๋งŒ ์ผ๋ฐ˜์ ์œผ๋กœ ๋œ ์ผ๋ฐ˜์ ์ธ ๊ตฌ์„ฑ ์š”์†Œ์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
    • Bitsets: ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ์—”ํ‹ฐํ‹ฐ์— ์ „ํ˜€ ์กด์žฌํ•˜์ง€๋งŒ ์•„๋ฌด๊ฒƒ๋„ ์ €์žฅํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ์ •์˜๋กœ ์ˆœ์ˆ˜ํ•˜๊ฒŒ ์‚ฌ์šฉ๋˜๋ฉฐ ์ผ๋ฐ˜์ ์œผ๋กœ ํ”Œ๋ž˜๊ทธ ๊ตฌ์„ฑ ์š”์†Œ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
    • Octree ๋˜๋Š” ๋‹ค๋ฅธ SceneGraph(Godot์˜ ๋ Œ๋”๋Ÿฌ๊ฐ€ ์—ฌ๊ธฐ์— ์ ํ•ฉํ•  ์ˆ˜ ์žˆ์Œ): ๊ตฌ์„ฑ ์š”์†Œ์ธ ๊ฒƒ์ฒ˜๋Ÿผ ๊ฐ€์žฅํ•˜๋Š” ์žฅ๋ฉด ํŠธ๋ฆฌ ๋งคํ•‘.
    • Etc...: ๊ตฌ์„ฑ ์š”์†Œ์— ๋Œ€ํ•ด ์˜ˆ์ƒ๋˜๋Š” ์•ก์„ธ์Šค ๋ฐ ์„ฑ๋Šฅ ํŠน์„ฑ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ๋งŽ์€ ์œ ํ˜•์ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • ' ์‹œ์Šคํ…œ'์€ ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ๊ตฌ์„ฑ ์š”์†Œ ์ง‘ํ•ฉ์„ ์ทจํ•˜๋Š” ๊ธฐ๋Šฅ์ด์ง€๋งŒ ๋Œ€๋ถ€๋ถ„์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—๋Š” ๊ฐ€์ƒ์ด ์•„๋‹Œ ํด๋ž˜์Šค ๋˜๋Š” ๋ชจ๋“ˆ ์ •๋„๊ฐ€ ์žˆ์ง€๋งŒ ๊ฒฐํ•ฉ๋œ ๊ตฌ์„ฑ ์š”์†Œ ์ง‘ํ•ฉ์— ๋Œ€ํ•ด ์ž‘๋™ํ•˜์—ฌ ๋ฌด์–ธ๊ฐ€๋ฅผ '์ˆ˜ํ–‰'ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ๊ตฌ์„ฑ ์š”์†Œ์˜ ๊ฐ’ ๋ณ€๊ฒฝ, ๊ตฌ์„ฑ ์š”์†Œ ์ถ”๊ฐ€ ๋˜๋Š” ์ œ๊ฑฐ ๋“ฑ์ด ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ช‡ ๊ฐ€์ง€ ์˜ˆ:

    • ์œ„์น˜ ๋ฐ ๋ณ€ํ™˜ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ์žˆ๋Š” ๋ชจ๋“  ์—”ํ„ฐํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ํšจ์œจ์ ์ด๊ณ  ์บ์‹œ ์นœํ™”์ ์ธ ๋ฐฉ์‹์œผ๋กœ ์ฃผ์–ด์ง„ ํ‹ฑ/์‹œ๊ฐ„์— ํ•„์š”ํ•œ ๋ณ€ํ™˜์œผ๋กœ ๋ชจ๋“  ์œ„์น˜ ํ–‰๋ ฌ์„ ๋ณ€ํ™˜ํ•˜๋Š” ์‹œ์Šคํ…œ์ž…๋‹ˆ๋‹ค. ๋” ์ด์ƒ ์ˆ˜ํ–‰ํ•  ๋ณ€ํ™˜์ด ์—†์œผ๋ฉด(์—”ํ‹ฐํ‹ฐ๊ฐ€ ์ •์ ์ด ๋จ) ๋ณ€ํ™˜ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ์—”ํ„ฐํ‹ฐ์—์„œ ์ œ๊ฑฐ๋˜๊ณ  ๋” ์ด์ƒ ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
    • ์ž…๋ ฅ ์‹œ์Šคํ…œ์€ ์ž…๋ ฅ(๋งˆ์šฐ์Šค/ํ‚ค๋ณด๋“œ/๊ฒŒ์ž„ํŒจ๋“œ ๋“ฑ...)์˜ ์ด๋ฒคํŠธ๋ฅผ ์ˆ˜์‹ ํ•˜๊ณ  ๊ด€๋ จ ์—”ํ„ฐํ‹ฐ์— ์ถ”๊ฐ€๋˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ตฌ์„ฑ ์š”์†Œ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
    • Furnace ์‹œ์Šคํ…œ(Minecraft ์€์œ )์€ Inventory, Fuel, RecipeMapping, BlockPos, Cooking ๋ฐ ๊ธฐํƒ€ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ์žˆ๋Š” ์—”ํ„ฐํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๋‹น ์—”ํ„ฐํ‹ฐ๋ฅผ ๋ฐ˜๋ณตํ•˜๊ณ  ํ•„์š”์— ๋”ฐ๋ผ ๊ด€๋ จ ์ƒํƒœ๋ฅผ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค. ์–ด๋–ค ํ”Œ๋ž˜๊ทธ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•ด ์ธ๋ฒคํ† ๋ฆฌ๊ฐ€ ๋‹ค์‹œ ๋ณ€๊ฒฝ๋  ๋•Œ๊นŒ์ง€ Cooking Flag ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ๋” ์ด์ƒ ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‚ด๋ถ€์ ์œผ๋กœ๋Š” 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์„ ์ž์ฒด ํด๋ž˜์Šค๋กœ ์ •์˜ํ•˜๊ณ  ์ •์  ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ํฌํ•จ/์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(๋˜๋Š” ์ธ์Šคํ„ด์Šคํ™”ํ•œ ๋‹ค์Œ ์†์„ฑ/๋ฉ”์„œ๋“œ ์‚ฌ์šฉ)

  • C++

    • ํด๋ž˜์Šค ๊ตฝ๊ธฐ {};

    • "burning.h"๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

    • ๊ตฝ๊ธฐ::์ ์šฉ(๋‚˜๋ฌด, ๋ถˆ);

    • ๊ตฝ๊ธฐ *b = ๊ตฝ๊ธฐ::get_singleton(); b->์ ์šฉ(๋‚˜๋ฌด, ๋ถˆ);

  • C#(์Šคํƒ€์ผ ๋ณ€๊ฒฝ์„ ์œ„ํ•ด ํŽธ์ง‘๋จ)

    • ๊ณต๊ฐœ ํด๋ž˜์Šค ๊ตฝ๊ธฐ {}

    • Game.Burning ์‚ฌ์šฉ;

    • Burning.apply(๋‚˜๋ฌด, ๋ถˆ);

    • ๊ตฝ๊ธฐ b = Burning.Instance; b.apply(๋‚˜๋ฌด, ๋ถˆ);

  • GD์Šคํฌ๋ฆฝํŠธ(3.1)

    • ๋ฆฌ์†Œ์Šค #burning.gd๋ฅผ ํ™•์žฅํ•ฉ๋‹ˆ๋‹ค.

    • const ๊ตฝ๊ธฐ = ๋ฏธ๋ฆฌ ๋กœ๋“œ("res://burning.gd")



      • 3.0์—์„œ๋Š” ๊ณตํ†ต ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋ชจ๋“  ์ž๊ทน์— ๋Œ€ํ•œ ์ƒ์ˆ˜๋ฅผ ๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


        ์ฐธ์กฐ ํ™•์žฅ


        const ๊ตฝ๊ธฐ = ๋ฏธ๋ฆฌ ๋กœ๋“œ("res://burning.gd")


        const ์Šต์œค = preload("res://wetting.gd")


        ์ฐธ์กฐ ํ™•์žฅ


        const ์ž๊ทน = preload("res://stimuli.gd")


        # Stimuli.Burning ๋˜๋Š” Stimuli.Wetting ์‚ฌ์šฉ


      • 3.1์—์„œ๋Š” ์Šคํฌ๋ฆฝํŠธ ํด๋ž˜์Šค๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Burning ๋ฐ Wetting์€ ์ „์—ญ์ ์ด๋ฏ€๋กœ "ํฌํ•จ"์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.


        ๋˜ํ•œ ์ „์—ญ ์‚ฌ์šฉ์„ ๋ฐ˜๋Œ€ํ•˜๋Š” ๊ฒฝ์šฐ "Stimuli"๋ฅผ ๋™์ผํ•œ ์ƒ์ˆ˜ ์„ ์–ธ์„ ๊ฐ€์ง„ ์Šคํฌ๋ฆฝํŠธ ํด๋ž˜์Šค๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ํ•ญ์ƒ ์œ ์‚ฌ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.



    • Burning.app(๋‚˜๋ฌด, ๋ถˆ)

    • var b = Burning.new()

      b.apply(๋‚˜๋ฌด, ๋ถˆ)

Unity/ScriptableObject ์ ‘๊ทผ ๋ฐฉ์‹์˜ ๊ฒฝ์šฐ ๋™์ผํ•œ ๋ชฉ์ ์œผ๋กœ Godot์˜ ๋ฆฌ์†Œ์Šค ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์„ค์ •์€ Inspector์—์„œ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ธฐ๋Šฅ์˜ "๋นŒ๋“œ"๋ฅผ ํŒŒ์ผ์— ์ €์žฅํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋Ÿฐํƒ€์ž„ ์‹œ์—๋„ ํ•„์š”์— ๋”ฐ๋ผ ํŠน์ • ์„ค์ •์„ ์‰ฝ๊ฒŒ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํŽธ์ง‘๊ธฐ๋Š” ์žฅ๋ฉด ์„ ์–ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋…ธ๋“œ์— ๋ฆฌ์†Œ์Šค ์ธ์Šคํ„ด์Šค๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜๋ฏ€๋กœ ์ˆ˜๋™ ์—…๋ฐ์ดํŠธ๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฆฌ์†Œ์Šค์˜ ๋ฐฐ์—ด์€ ํ•ฉ๋ฆฌ์ ์œผ๋กœ ์ž˜ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ 3.1์—์„œ ์ค‘๋‹จ๋œ ๋ฐฐ์—ด ์œ ํ˜• ํžŒํŠธ ์‹œ์Šคํ…œ(3.2๊นŒ์ง€)์œผ๋กœ Inspector ์ฝ˜ํ…์ธ ๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ƒ์„ฑํ•˜๋ ค๋ฉด EditorInspectorPlugin์„ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‚ด godot-next ์ €์žฅ์†Œ์˜ FileSystemItemList (๊ฒฝ๊ณ , ์ดˆ๊ธฐ WIP)์—์„œ ํŒŒ์ผ/๋””๋ ‰ํ† ๋ฆฌ ๋ฐฐ์—ด์„ ์œ„ํ•œ Godot-Builder ์ €์žฅ์†Œ์—์„œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

๋ถˆ๊ณผ ์ˆฒ ์‚ฌ์ด์˜ ์ƒํ˜ธ ์ž‘์šฉ์„ ์ œ์–ดํ•˜๋Š” โ€‹โ€‹"์‹œ์Šคํ…œ" ์Šคํฌ๋ฆฝํŠธ. ํ•ด๋‹น ํ”„๋ ˆ์  ํ…Œ์ด์…˜์€ ๊ตฌ์„ฑ ์š”์†Œ์— ์ค‘์ ์„ ๋‘ก๋‹ˆ๋‹ค.

์˜ˆ, ๊ทธ๊ฒƒ์ด ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. 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์˜ ์žฅ๋ฉด/ํ”„๋ฆฌํŒน ๋Œ€์‹  ์žฅ๋ฉด ๋ชจ๋ธ, ๋‹ค์ค‘ ๊ตฌ์„ฑ ์š”์†Œ ๋Œ€์‹  "๋‹จ์ผ ์Šคํฌ๋ฆฝํŠธ" ๋ชจ๋ธ, ์†๋„ ์—”์ง„ ๋‹ค์šด๋กœ๋“œ/์‹œ์ž‘ ๋ฐ ๋‚ด๋ณด๋‚ด๊ธฐ ๋ฐ ์˜คํ”„๋ผ์ธ์—์„œ ์™„์ „ํžˆ ์ž‘๋™ํ•˜๋Š” ๊ธฐ๋Šฅ).

๋‘˜ ๋‹ค ๊ฐ€๋Šฅํ•œ ์›Œํฌํ”Œ๋กœ์™€ ๋ชจ๋ธ์ด ๋งŽ์ด ์žˆ์œผ๋ฉฐ ์–ด๋Š ๊ฒƒ์ด ๋” ๋‚˜์€์ง€ ์•Œ๊ธฐ๊ฐ€ ๊ฒฐ์ฝ” ์‰ฝ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰