Godot: ๋” ๋‚˜์€ ์‚ฌ์šฉ์ž ์ •์˜ EditorPlugin ๋…ธ๋“œ

์— ๋งŒ๋“  2016๋…„ 08์›” 07์ผ  ยท  121์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: godotengine/godot

EditorPlugin์˜ add_custom_type ํ•จ์ˆ˜๋กœ ์ƒ์„ฑ๋œ ๋…ธ๋“œ๋Š” ์ถ”๊ฐ€ ์‹œ ์„ ํƒํ•œ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋…ธ๋“œ์—์„œ๋Š” ํ•ด๋‹น ์Šคํฌ๋ฆฝํŠธ์— ์ •์˜๋œ ๊ธฐ๋Šฅ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๊ฑฐ์˜ ์“ธ๋ชจ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋‹ค๋ฅธ ๋…ธ๋“œ์™€ ์™„์ „ํžˆ ๋‹ค๋ฅด๋ฉฐ ๋…ธ๋“œ ์• ๋“œ์˜จ์„ ์‚ฌ์šฉํ•˜๊ธฐ๊ฐ€ ํ›จ์”ฌ ๋” ์“ธ๋ชจ์—†๊ณ  ์„ฑ๊ฐ€์‹œ๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

feature proposal plugin usability

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

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

  • ์‚ฌ์šฉ์ž ์ •์˜ ์•„์ด์ฝ˜, ์‚ฌ์šฉ์ž ์ •์˜ ์‹๋ณ„์ž
  • ๋…ธ๋“œ ์ถ”๊ฐ€ ์œ„์ ฏ์„ ํ†ตํ•ด ์ธ์Šคํ„ด์Šคํ™” ๊ฐ€๋Šฅ(์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ†ตํ•ด ์ถ”์ธกํ•˜๋ฏ€๋กœ ์ „์—ญ ๋ฒ”์œ„์— ๋…ธ์ถœ๋˜๋‚˜์š”?)
  • ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ†ตํ•ด ์ฝ”๋”ฉ๋œ ์‚ฌ์šฉ์ž ์ง€์ • API๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: RedNode2D ๋Š” Node2D ๋ฅผ ํ™•์žฅํ•˜๊ณ  ์‚ฌ์šฉ์ž ์ง€์ • ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ†ตํ•ด ์ •์˜๋œ ๋นจ๊ฐ„์ƒ‰ ๋ณ€์กฐ๊ฐ€ ์žˆ์Œ).
  • ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ด ์‚ฌ์šฉ์ž ์ •์˜ ๋…ธ๋“œ๋Š” ๋‚ด์žฅ ๋…ธ๋“œ์ฒ˜๋Ÿผ ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์‚ฌ์šฉ์ž๋Š” ์Šคํฌ๋ฆฝํŠธ ์—†์ด ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์‚ฌ์šฉ์ž ์ •์˜ API๋Š” ํ•˜๋“œ์ฝ”๋”ฉ๋œ ๋‚ด์žฅ ์Šคํฌ๋ฆฝํŠธ์˜ ๊ฒฝ์šฐ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ง์ ‘ ๋…ธ์ถœ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. C++์—์„œ) ์‚ฌ์šฉ์ž ์ •์˜ ๋…ธ๋“œ๋ฅผ ํ™•์žฅํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์—ฌ๊ธฐ์— ์ฒจ๋ถ€ํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: extends RedNode2D ).

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

๋ฌด์—‡์„ ํ•  ์ˆ˜ ์žˆ๋Š”์ง€/ํ•˜์ง€ ๋ง์•„์•ผ ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ํ•ฉ์˜๊ฐ€ ์žˆ์„ ๋•Œ๊นŒ์ง€ ์žฌ๊ฐœํ•ฉ๋‹ˆ๋‹ค.

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

๋ฌด์Šจ ๋ง์ธ์ง€ ์ดํ•ด๊ฐ€ ์•ˆ ๋ผ์š”

@reduz ํ”Œ๋Ÿฌ๊ทธ์ธ์— ์˜ํ•ด ์ƒ์„ฑ๋œ ์œ ํ˜•์˜ ๋…ธ๋“œ๋ฅผ ์žฅ๋ฉด์— ์ถ”๊ฐ€ํ•˜๋ฉด ์ด๋ฏธ ํ”Œ๋Ÿฌ๊ทธ์ธ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ฒจ๋ถ€๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์‚ฌ์šฉ์ž ์ •์˜ ๋™์ž‘์œผ๋กœ ๋‹ค๋ฅธ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๋ฌผ๋ก  ์ด๊ฒƒ์€ ํ•ต์‹ฌ ์„ค๊ณ„์— ์˜ํ•œ ๊ฒƒ์ด๋ฉฐ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

2016๋…„ 8์›” 7์ผ 18์‹œ 11๋ถ„์— "George Marques" [email protected]์ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

@reduz https://github.com/reduz ์žฅ๋ฉด์— ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด
ํ”Œ๋Ÿฌ๊ทธ์ธ์— ์˜ํ•ด ์ƒ์„ฑ๋œ ์œ ํ˜•์—๋Š” ์ด๋ฏธ ํ”Œ๋Ÿฌ๊ทธ์ธ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ฒจ๋ถ€๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ
์‚ฌ์šฉ์ž ์ •์˜ ๋™์ž‘์œผ๋กœ ๋‹ค๋ฅธ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

โ€”
๋‹น์‹ ์ด ์–ธ๊ธ‰๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/godotengine/godot/issues/6067#issuecomment -238108767,
๋˜๋Š” ์Šค๋ ˆ๋“œ ์Œ์†Œ๊ฑฐ
https://github.com/notifications/unsubscribe-auth/AF-Z29F5q8PaoBv4OrzAUayzrfNjfHyZks5qdkoUgaJpZM4JejbZ
.

์ด๊ฑฐ ์Šฌํ”„๋„ค. ๊ทธ๋Ÿฌ๋‚˜ ํ•ญ์ƒ ๋ถ€๋ชจ๋‚˜ ์ž์‹์—๊ฒŒ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

wontfix๋กœ ๋‹ซ์Šต๋‹ˆ๋‹ค.

์ œ๊ฐ€ ๋ญ”๊ฐ€ ์˜คํ•ด๋ฅผ ํ•˜๊ณ  ์žˆ์„์ง€๋„ ๋ชจ๋ฅด์ง€๋งŒ, ์ปค์Šคํ…€ ํƒ€์ž…์ด ์Šคํฌ๋ฆฝํŠธ๋ผ๋ฉด,
์ƒ์„ฑ๋œ ๋…ธ๋“œ์— ์–ด๋–ป๊ฒŒ ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ? ๊ทธ๊ฒƒ์€ ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค
๊ทธ๊ฒƒ์€ ๋‹ค๋ฅด๋‹ค

2016๋…„ 8์›” 7์ผ ์˜คํ›„ 9์‹œ 52๋ถ„์— "George Marques" [email protected] ์ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

์ด๊ฑฐ ์Šฌํ”„๋„ค. ๊ทธ๋Ÿฌ๋‚˜ ํ•ญ์ƒ ๋ถ€๋ชจ๋‚˜ ์ž์‹์—๊ฒŒ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

wontfix๋กœ ๋‹ซ์Šต๋‹ˆ๋‹ค.

โ€”
๋‹น์‹ ์ด ์–ธ๊ธ‰๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/godotengine/godot/issues/6067#issuecomment -238120392,
๋˜๋Š” ์Šค๋ ˆ๋“œ ์Œ์†Œ๊ฑฐ
https://github.com/notifications/unsubscribe-auth/AF-Z27Zo4Ixvo4APSC4Fxf5ZqCJRsAxXks5qdn3igaJpZM4JejbZ
.

๋…ธ๋“œ๋‹น ๋‘ ๊ฐœ(๋˜๋Š” ๊ทธ ์ด์ƒ)์˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” ๊ทธ๋‹ค์ง€ ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

Godot๋Š” ์›๋ž˜ ์ด๊ฒƒ์„ ์ง€์›ํ–ˆ์ง€๋งŒ ์ด์ ๋ณด๋‹ค ๋ฌธ์ œ๊ฐ€ ๋” ๋งŽ์•˜์Šต๋‹ˆ๋‹ค.

2016๋…„ 8์›” 7์ผ ์˜คํ›„ 10์‹œ 36๋ถ„์— "George Marques" [email protected] ์ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

๋‹น 2๊ฐœ(๋˜๋Š” ๊ทธ ์ด์ƒ)์˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ๋Šฅ๋ ฅ์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
์ด๊ฒƒ์€ ์‹ค์ œ๋กœ ๋งŽ์€ ์˜๋ฏธ๊ฐ€ ์—†์ง€๋งŒ.

โ€”
๋‹น์‹ ์ด ์–ธ๊ธ‰๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/godotengine/godot/issues/6067#issuecomment -238123729,
๋˜๋Š” ์Šค๋ ˆ๋“œ ์Œ์†Œ๊ฑฐ
https://github.com/notifications/unsubscribe-auth/AF-Z27jidVZl-hHWW3G_ESr8Cqj3eX7Eks5qdogRgaJpZM4JejbZ
.

๋ฌธ์ œ๋Š” ์ปค์Šคํ…€ ๋…ธ๋“œ๊ฐ€ ์‹ค์ œ๋กœ "์ปค์Šคํ…€ ๋…ธ๋“œ"๊ฐ€ ์•„๋‹ˆ๋ผ ์‚ฌ์ „ ์„ค์ •๋œ ์Šคํฌ๋ฆฝํŠธ์™€ ๋‹ค๋ฅธ ์•„์ด์ฝ˜์ด ์žˆ๋Š” ๊ธฐ๋ณธ ๋…ธ๋“œ์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ฑฐ์˜ ์“ธ๋ชจ๊ฐ€ ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
"์‚ฌ์šฉ์ž ์ •์˜ ๋…ธ๋“œ"์—์„œ ๊ธฐ๋Œ€ํ–ˆ๋˜ ๊ฒƒ์€ ์Šคํฌ๋ฆฝํŠธ์— ์ •์˜๋œ ๋ชจ๋“  ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๋„๋ก ๋…ธ๋“œ๋ฅผ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ์‹œ ์‹œ๋‚˜๋ฆฌ์˜ค:
Sprite์˜ ์ž์‹์ธ Test๋ผ๋Š” ์‚ฌ์šฉ์ž ์ง€์ • ๋…ธ๋“œ๊ฐ€ ์žˆ๊ณ  true ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” test() ํ•จ์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ƒˆ ํ…Œ์ŠคํŠธ ๋…ธ๋“œ๋ฅผ ๋งŒ๋“ค๊ณ  ์—ฌ๊ธฐ์— ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ• ๋‹นํ•˜๊ณ  test() ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.
์ด๊ฑด ๋ถˆ๊ฐ€๋Šฅ ํ•ด.

๊ทธ๋Ÿฐ ๋‹ค์Œ ์ฝค๋ณด๋ฅผ ํ™•์žฅํ•˜๋Š” + ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ƒ์†ํ•˜๋Š” ์žฅ๋ฉด์œผ๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค.

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

2016๋…„ 8์›” 8์ผ ์›”์š”์ผ ์˜ค์ „ 10์‹œ 40๋ถ„, Dominik Banaszak [email protected]
์ผ๋‹ค:

๋ฌธ์ œ๋Š” ์ปค์Šคํ…€ ๋…ธ๋“œ๊ฐ€ ์‹ค์ œ๋กœ ์“ธ๋ชจ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๊ฑฐ์˜ ์“ธ๋ชจ๊ฐ€ ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
"์ปค์Šคํ…€ ๋…ธ๋“œ"๋Š” ์‚ฌ์ „ ์„ค์ •๋œ ์Šคํฌ๋ฆฝํŠธ์™€ ๋‹ค๋ฅธ ๊ธฐ๋ณธ ๋…ธ๋“œ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค.
์ƒ. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ฝค๋ณด๋ฅผ ํ™•์žฅํ•˜๋Š” + ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ƒ์†ํ•˜๋Š” ์žฅ๋ฉด์œผ๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค.

โ€”
๋‹น์‹ ์ด ์–ธ๊ธ‰๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/godotengine/godot/issues/6067#issuecomment -238240130,
๋˜๋Š” ์Šค๋ ˆ๋“œ ์Œ์†Œ๊ฑฐ
https://github.com/notifications/unsubscribe-auth/AF-Z27eHoXwgr6buF6CCAHfxwx1dKkCiks5qdzHhgaJpZM4JejbZ
.

UI๋ฅผ ํ†ตํ•ด ์ž๋™ํ™”/์‰ฝ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์œผ๋ฉด ์ข‹๊ฒ ์Šต๋‹ˆ๋‹ค.

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

  • ์‚ฌ์šฉ์ž ์ •์˜ ์•„์ด์ฝ˜, ์‚ฌ์šฉ์ž ์ •์˜ ์‹๋ณ„์ž
  • ๋…ธ๋“œ ์ถ”๊ฐ€ ์œ„์ ฏ์„ ํ†ตํ•ด ์ธ์Šคํ„ด์Šคํ™” ๊ฐ€๋Šฅ(์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ†ตํ•ด ์ถ”์ธกํ•˜๋ฏ€๋กœ ์ „์—ญ ๋ฒ”์œ„์— ๋…ธ์ถœ๋˜๋‚˜์š”?)
  • ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ†ตํ•ด ์ฝ”๋”ฉ๋œ ์‚ฌ์šฉ์ž ์ง€์ • API๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: RedNode2D ๋Š” Node2D ๋ฅผ ํ™•์žฅํ•˜๊ณ  ์‚ฌ์šฉ์ž ์ง€์ • ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ†ตํ•ด ์ •์˜๋œ ๋นจ๊ฐ„์ƒ‰ ๋ณ€์กฐ๊ฐ€ ์žˆ์Œ).
  • ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ด ์‚ฌ์šฉ์ž ์ •์˜ ๋…ธ๋“œ๋Š” ๋‚ด์žฅ ๋…ธ๋“œ์ฒ˜๋Ÿผ ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์‚ฌ์šฉ์ž๋Š” ์Šคํฌ๋ฆฝํŠธ ์—†์ด ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์‚ฌ์šฉ์ž ์ •์˜ API๋Š” ํ•˜๋“œ์ฝ”๋”ฉ๋œ ๋‚ด์žฅ ์Šคํฌ๋ฆฝํŠธ์˜ ๊ฒฝ์šฐ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ง์ ‘ ๋…ธ์ถœ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. C++์—์„œ) ์‚ฌ์šฉ์ž ์ •์˜ ๋…ธ๋“œ๋ฅผ ํ™•์žฅํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์—ฌ๊ธฐ์— ์ฒจ๋ถ€ํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: extends RedNode2D ).

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

๋ฌด์—‡์„ ํ•  ์ˆ˜ ์žˆ๋Š”์ง€/ํ•˜์ง€ ๋ง์•„์•ผ ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ํ•ฉ์˜๊ฐ€ ์žˆ์„ ๋•Œ๊นŒ์ง€ ์žฌ๊ฐœํ•ฉ๋‹ˆ๋‹ค.

+1
์ด๊ฒƒ์€ "OtherEngine(tm)"์—์„œ Godot๋กœ ๊ธฐ์กด ํ”„๋กœ์ ํŠธ๋ฅผ ์ด์‹ํ•˜๋ ค๊ณ  ํ•  ๋•Œ ์ €์—๊ฒŒ ์ฒซ ๋ฒˆ์งธ ์ฃผ์š” ์žฅ์• ๋ฌผ ์ค‘ ํ•˜๋‚˜์˜€์Šต๋‹ˆ๋‹ค. ์œ„์—์„œ ์„ค๋ช…ํ•œ @akien-mga์™€ ๊ฐ™์€ ์‚ฌ์šฉ์ž ์ง€์ • ์œ ํ˜•์€ ๋“ฑ๋ก ํ›„ ๋‹ค๋ฅธ ๋‚ด์žฅ ์œ ํ˜•์ฒ˜๋Ÿผ ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋“ค์ด ์•„๋‹ˆ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋Š” ๋ฐฉ์‹์„ ์„ค๋ช…ํ•ด ์ฃผ์‹ญ์‹œ์˜ค.

2016๋…„ 8์›” 8์ผ ์˜ค์ „ 11์‹œ 50๋ถ„์— "Ralf Hรถlzemer" [email protected] ์ด ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

+1
์ด๊ฒƒ์€ ๋‚ด๊ฐ€ ํฌํŒ…์„ ์‹œ๋„ํ–ˆ์„ ๋•Œ ๋‚˜๋ฅผ ์œ„ํ•œ ์ฒซ ๋ฒˆ์งธ ์ฃผ์š” ์žฅ์• ๋ฌผ ์ค‘ ํ•˜๋‚˜์˜€์Šต๋‹ˆ๋‹ค.
"OtherEngine(tm)"์—์„œ Godot๊นŒ์ง€์˜ ๊ธฐ์กด ํ”„๋กœ์ ํŠธ. ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜•
@akien-mga https://github.com/akien-mga ์œ„์—์„œ ์„ค๋ช…ํ•œ ๋Œ€๋กœ
๋“ฑ๋ก ํ›„ ๋‹ค๋ฅธ ๋‚ด์žฅ ์œ ํ˜•์ฒ˜๋Ÿผ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

โ€”
๋‹น์‹ ์ด ์–ธ๊ธ‰๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/godotengine/godot/issues/6067#issuecomment -238261603,
๋˜๋Š” ์Šค๋ ˆ๋“œ ์Œ์†Œ๊ฑฐ
https://github.com/notifications/unsubscribe-auth/AF-Z25PJzv9w7iXO350tRF3FcEuYQYUKks5qd0IrgaJpZM4JejbZ
.

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

๊ทธ๋Ÿฌ๋‚˜ "์ƒˆ ๋…ธ๋“œ/๋ฆฌ์†Œ์Šค ๋งŒ๋“ค๊ธฐ" ๋Œ€ํ™” ์ƒ์ž์—์„œ ์‚ฌ์šฉ์ž ์ง€์ • ๋…ธ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์† ํŠธ๋ฆฌ๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒƒ๋„ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. add_custom_type์„ ํ†ตํ•ด ๊ธฐ๋ณธ ์ œ๊ณต ์œ ํ˜•์„ ๋ถ€๋ชจ๋กœ ๋“ฑ๋กํ•  ๋•Œ ์ด๋Ÿฌํ•œ ํŠธ๋ฆฌ์—๋งŒ ํ‘œ์‹œ๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ๋‹จ์ผ ๊ธฐ๋ณธ ์œ ํ˜•์—์„œ ๋‚ด ํ”„๋กœ์ ํŠธ์˜ ๋ชจ๋“  ์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜•์„ ์ƒ์†ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

base.gd

extends Node
export (Color) var color

type_a.gd

extends base.gd

type_b.gd

extends base.gd

์ง€๊ธˆ์ฒ˜๋Ÿผ ์ด๋Ÿฐ ์œ ํ˜•์„ ๋“ฑ๋กํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ add_custom_type์˜ ๋‘ ๋ฒˆ์งธ ์ธ์ˆ˜๋Š” "Node"์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋Œ€ํ™” ์ƒ์ž์— ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

func _enter_tree():
    add_custom_type("Base", "Node", preload("base.gd"), preload("base.png"))
    add_custom_type("TypeA", "Node", preload("type_a.gd"), preload("type_a.png"))
    add_custom_type("TypeB", "Node", preload("type_b.gd"), preload("type_b.png"))

... ๊ทธ๋ฆฌ๊ณ  ์ด๊ฒƒ์ด ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค.

add_node_flat

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

์ด์ œ ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ @akien-mga์™€ ๊ฐ™์ด ์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜•์„ ์ „์—ญ ๋ฒ”์œ„์— ์™„์ „ํžˆ ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ƒํ™ฉ์„ ํ›จ์”ฌ ๋” ์‰ฝ๊ฒŒ ์ดํ•ดํ•˜๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฒซ์งธ, ํŒŒ์ผ ๊ฒฝ๋กœ/์ด๋ฆ„ ๋Œ€์‹  ์œ ํ˜• ์ด๋ฆ„ ์œผ๋กœ ์ฐธ์กฐ๋˜๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜•์„ ์ƒ์†ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

base.gd

extends Node
export (Color) var color

type_a.gd

extends Base

type_b.gd

extends Base

... ๊ทธ๋Ÿฌ๋ฉด ์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜•์˜ ๋“ฑ๋ก์ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‹จ์ˆœํ™”๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. add_custom_type์˜ ๋ˆ„๋ฝ๋œ ๋‘ ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜์— ์œ ์˜ํ•˜์‹ญ์‹œ์˜ค.

func _enter_tree():
    add_custom_type("Base", preload("base.gd"), preload("base.png"))
    add_custom_type("TypeA", preload("type_a.gd"), preload("type_a.png"))
    add_custom_type("TypeB", preload("type_b.gd"), preload("type_b.png"))

... "์ƒˆ ๋…ธ๋“œ/๋ฆฌ์†Œ์Šค ๋งŒ๋“ค๊ธฐ" ๋Œ€ํ™” ์ƒ์ž์—์„œ ํ›จ์”ฌ ๋” ๋ฉ‹์ง„ ๊ฐœ์š”๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

add_node_tree

... ๊ทธ๋ฆฌ๊ณ  ๋ฌผ๋ก  ์‚ฌ์šฉ์ž ์ •์˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŽธ์ง‘๊ธฐ์—์„œ ํ•ด๋‹น ์œ ํ˜•์„ ํ™•์žฅํ•˜๋Š” ๊ธฐ๋Šฅ:

custom_type_no_script

... ์Šคํฌ๋ฆฝํŠธ ์ด๋ฆ„/๊ฒฝ๋กœ ๋Œ€์‹  ์œ ํ˜• ์ด๋ฆ„ ์œผ๋กœ๋„ ์ฐธ์กฐ๋ฉ๋‹ˆ๋‹ค.

extends Base

์—ฌ๊ธฐ์—์„œ ํ”Œ๋ ˆ์ดํ•  ์ˆ˜ ์žˆ๋Š” ์œ„์˜ ์˜ˆ์ œ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
addons.zip

์•„ ๊ทธ๋ ‡๊ตฐ์š”.. ์ด ๋‘ ๊ฐ€์ง€๋ฅผ ํ™•์‹คํžˆ ๊ณ ์น  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์Šคํฌ๋ฆฝํŠธ ์ƒ์„ฑ ๋Œ€ํ™” ์ƒ์ž์— ์ƒ์† ์ง€์› ์ถ”๊ฐ€

2016๋…„ 8์›” 8์ผ ์˜คํ›„ 1์‹œ 54๋ถ„์— "Ralf Hรถlzemer" [email protected] ์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

์ด์ „์— ์ด๋ฏธ ๋งํ–ˆ๋“ฏ์ด ํ˜„์žฌ _๊ฐ€์žฅ ํฐ ๋‹จ์ _์€
์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜•์€ ๊ธฐ๋ณธ ์œ ํ˜•์„ ์ธ์Šคํ„ด์Šคํ™”ํ•˜๋Š” ๋น ๋ฅธ ๋ฐฉ๋ฒ•์— ๋ถˆ๊ณผํ•ฉ๋‹ˆ๋‹ค.
ํ•ด๋‹น ์Šคํฌ๋ฆฝํŠธ์˜ ์ ์ ˆํ•œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ•ด๋‹น ์ธ์Šคํ„ด์Šค์— ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ
ํŽธ์ง‘๊ธฐ์—์„œ ํ•ด๋‹น ๋…ธ๋“œ๋ฅผ ๋‹ค๋ฅธ ์Šคํฌ๋ฆฝํŠธ๋กœ ํ™•์žฅํ•˜๋Š” ๊ฒƒ์„ ๋ถˆ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
๋‚ด์žฅ ์œ ํ˜•์œผ๋กœ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ.

๊ทธ๋Ÿฌ๋‚˜ ์‚ฌ์šฉ์ž ์ •์˜ ๋…ธ๋“œ๋กœ ์ƒ์† ํŠธ๋ฆฌ๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒƒ๋„ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
"Create new Node/Resource" ๋Œ€ํ™” ์ƒ์ž๋Š” ์ด๋Ÿฌํ•œ ๋Œ€ํ™” ์ƒ์ž์—๋งŒ ํ‘œ์‹œ๋˜๊ธฐ ๋•Œ๋ฌธ์—
๋‚ด์žฅ ์œ ํ˜•์„ ํ†ตํ•ด ๋ถ€๋ชจ๋กœ ๋“ฑ๋กํ•  ๋•Œ ํŠธ๋ฆฌ
add_custom_type.

์˜ˆ๋ฅผ ๋“ค์–ด ๋‚ด ๋ชจ๋“  ์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜•์„ ์ƒ์†ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
๋‹จ์ผ ๊ธฐ๋ณธ ์œ ํ˜•์˜ ํ”„๋กœ์ ํŠธ.

_base.gd http://base.gd_

๋…ธ๋“œ ํ™•์žฅ
๋‚ด๋ณด๋‚ด๊ธฐ(์ƒ‰์ƒ) var ์ƒ‰์ƒ

_type_a.gd http://type_a.gd_

base.gd ํ™•์žฅ

_type_b.gd http://type_b.gd_

base.gd ํ™•์žฅ

์ง€๊ธˆ์ฒ˜๋Ÿผ ์ด๋Ÿฐ ์œ ํ˜•์„ ๋“ฑ๋กํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด์—
์ด ๊ฒฝ์šฐ add_custom_type์˜ ๋‘ ๋ฒˆ์งธ ์ธ์ˆ˜๋Š” "Node"์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด
๋Œ€ํ™” ์ƒ์ž์— ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

func _enter_tree():
add_custom_type("๊ธฐ๋ณธ", "๋…ธ๋“œ", preload("base.gd"), preload("base.png"))
add_custom_type("TypeA", "Node", preload("type_a.gd"), preload("type_a.png"))
add_custom_type("TypeB", "๋…ธ๋“œ", preload("type_b.gd"), preload("type_b.png"))

... ๊ทธ๋ฆฌ๊ณ  ์ด๊ฒƒ์ด ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค.

[์ด๋ฏธ์ง€: add_node_flat]
https://cloud.githubusercontent.com/assets/8785013/17486294/9bcc029c-5d90-11e6-81e6-6fce6b0e7cf0.png

์ด์™€ ๊ฐ™์ด ์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜•์„ ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์€ ์ข‹์ง€๋งŒ,
๋Œ€ํ™” ์ƒ์ž๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์œ ํ˜•์˜ ์ƒ์† ํŠน์„ฑ์„ ๋ฐ˜์˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
๋‹ค๋ฅธ ๋‚ด์žฅ ์œ ํ˜•. ๋ชจ๋“  ๋‚ด์žฅ ์œ ํ˜•์˜ ๊ฒฝ์šฐ ํ•ด๋‹น ํŠธ๋ฆฌ๋ฅผ ๋ณด๊ณ 
๋‚ด๊ฐ€ ๋ฌด์—‡์„ ๋‹ค๋ฃจ๊ณ  ์žˆ๋Š”์ง€ ํ•œ ๋ˆˆ์—๋ณด์‹ญ์‹œ์˜ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‚˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ™•์‹ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
Sprite๋Š” Node2D์ด๋ฏ€๋กœ _์ œ๊ณต๋˜๋Š” ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ์ƒ์†ํ•ฉ๋‹ˆ๋‹ค.
by_ Node2D. ์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜•์˜ ๊ฒฝ์šฐ์—๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.

์ด์ œ ์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜•์ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ „์—ญ ๋ฒ”์œ„์— ์™„์ „ํžˆ ๋“ฑ๋ก๋  ์ˆ˜ ์žˆ๋‹ค๋ฉด
@akien-mga https://github.com/akien-mga ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ๋Œ€๋กœ
์ดํ•ดํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค.

๋จผ์ € _type name_์—์„œ ์ฐธ์กฐํ•˜๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜•์—์„œ ์ƒ์†ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ํŒŒ์ผ ๊ฒฝ๋กœ/์ด๋ฆ„ ๋Œ€์‹ .

_base.gd http://base.gd_

๋…ธ๋“œ ํ™•์žฅ
๋‚ด๋ณด๋‚ด๊ธฐ(์ƒ‰์ƒ) var ์ƒ‰์ƒ

_type_a.gd http://type_a.gd_

๋ฒ ์ด์Šค ํ™•์žฅ

_type_b.gd http://type_b.gd_

๋ฒ ์ด์Šค ํ™•์žฅ

... ๊ทธ๋Ÿฌ๋ฉด ์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜•์˜ ๋“ฑ๋ก์ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‹จ์ˆœํ™”๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด๊ฒƒ. add_custom_type์˜ ๋ˆ„๋ฝ๋œ ๋‘ ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜์— ์œ ์˜ํ•˜์‹ญ์‹œ์˜ค.

func _enter_tree():
add_custom_type("๊ธฐ๋ณธ", preload("base.gd"), preload("base.png"))
add_custom_type("TypeA", preload("type_a.gd"), preload("type_a.png"))
add_custom_type("TypeB", preload("type_b.gd"), preload("type_b.png"))

... "์ƒˆ๋กœ ๋งŒ๋“ค๊ธฐ
๋…ธ๋“œ/๋ฆฌ์†Œ์Šค" ๋Œ€ํ™” ์ƒ์ž:

[์ด๋ฏธ์ง€: add_node_tree]
https://cloud.githubusercontent.com/assets/8785013/17487264/619f4da0-5d94-11e6-880f-a00791e30125.png

... ๋ฌผ๋ก  ํŽธ์ง‘๊ธฐ์—์„œ ์ด๋Ÿฌํ•œ ์œ ํ˜•์„ ํ™•์žฅํ•˜๋Š” ๊ธฐ๋Šฅ์€
์‚ฌ์šฉ์ž ์ •์˜ ์Šคํฌ๋ฆฝํŠธ:

[์ด๋ฏธ์ง€: custom_type_no_script]
https://cloud.githubusercontent.com/assets/8785013/17487807/b54aced2-5d96-11e6-90e5-ee838b6a1335.png

... ์Šคํฌ๋ฆฝํŠธ ๋Œ€์‹  _type name_์œผ๋กœ๋„ ์ฐธ์กฐ๋ฉ๋‹ˆ๋‹ค.
์ด๋ฆ„/๊ฒฝ๋กœ

๋ฒ ์ด์Šค ํ™•์žฅ

์—ฌ๊ธฐ์—์„œ ํ”Œ๋ ˆ์ดํ•  ์ˆ˜ ์žˆ๋Š” ์œ„์˜ ์˜ˆ์ œ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
addons.zip https://github.com/godotengine/godot/files/407291/addons.zip

โ€”
๋‹น์‹ ์ด ์–ธ๊ธ‰๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/godotengine/godot/issues/6067#issuecomment -238299152,
๋˜๋Š” ์Šค๋ ˆ๋“œ ์Œ์†Œ๊ฑฐ
https://github.com/notifications/unsubscribe-auth/AF-Z20FQioFVkVcvhhbvDQ7jQKv5De7Hks5qd19QgaJpZM4JejbZ
.

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

2016๋…„ 8์›” 8์ผ ์˜คํ›„ 2์‹œ 2๋ถ„์— "Juan Linietsky" [email protected] ์ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

์•„ ๊ทธ๋ ‡๊ตฐ์š”.. ์ด ๋‘ ๊ฐ€์ง€๋ฅผ ํ™•์‹คํžˆ ๊ณ ์น  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์Šคํฌ๋ฆฝํŠธ ์ƒ์„ฑ ๋Œ€ํ™” ์ƒ์ž์— ์ƒ์† ์ง€์› ์ถ”๊ฐ€

2016๋…„ 8์›” 8์ผ ์˜คํ›„ 1์‹œ 54๋ถ„์— "Ralf Hรถlzemer" [email protected] ์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

์ด์ „์— ์ด๋ฏธ ๋งํ–ˆ๋“ฏ์ด ํ˜„์žฌ _๊ฐ€์žฅ ํฐ ๋‹จ์ _์€
์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜•์€ ๊ธฐ๋ณธ ์œ ํ˜•์„ ์ธ์Šคํ„ด์Šคํ™”ํ•˜๋Š” ๋น ๋ฅธ ๋ฐฉ๋ฒ•์— ๋ถˆ๊ณผํ•ฉ๋‹ˆ๋‹ค.
ํ•ด๋‹น ์Šคํฌ๋ฆฝํŠธ์˜ ์ ์ ˆํ•œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ•ด๋‹น ์ธ์Šคํ„ด์Šค์— ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ
ํŽธ์ง‘๊ธฐ์—์„œ ํ•ด๋‹น ๋…ธ๋“œ๋ฅผ ๋‹ค๋ฅธ ์Šคํฌ๋ฆฝํŠธ๋กœ ํ™•์žฅํ•˜๋Š” ๊ฒƒ์„ ๋ถˆ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
๋‚ด์žฅ ์œ ํ˜•์œผ๋กœ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ.

๊ทธ๋Ÿฌ๋‚˜ ์‚ฌ์šฉ์ž ์ •์˜ ๋…ธ๋“œ๋กœ ์ƒ์† ํŠธ๋ฆฌ๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒƒ๋„ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
"Create new Node/Resource" ๋Œ€ํ™” ์ƒ์ž๋Š” ์ด๋Ÿฌํ•œ ๋Œ€ํ™” ์ƒ์ž์—๋งŒ ํ‘œ์‹œ๋˜๊ธฐ ๋•Œ๋ฌธ์—
๋‚ด์žฅ ์œ ํ˜•์„ ํ†ตํ•ด ๋ถ€๋ชจ๋กœ ๋“ฑ๋กํ•  ๋•Œ ํŠธ๋ฆฌ
add_custom_type.

์˜ˆ๋ฅผ ๋“ค์–ด ๋‚ด ๋ชจ๋“  ์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜•์„ ์ƒ์†ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
๋‹จ์ผ ๊ธฐ๋ณธ ์œ ํ˜•์˜ ํ”„๋กœ์ ํŠธ.

_base.gd http://base.gd_

๋…ธ๋“œ ํ™•์žฅ
๋‚ด๋ณด๋‚ด๊ธฐ(์ƒ‰์ƒ) var ์ƒ‰์ƒ

_type_a.gd http://type_a.gd_

base.gd ํ™•์žฅ

_type_b.gd http://type_b.gd_

base.gd ํ™•์žฅ

์ง€๊ธˆ์ฒ˜๋Ÿผ ์ด๋Ÿฐ ์œ ํ˜•์„ ๋“ฑ๋กํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด์—
์ด ๊ฒฝ์šฐ add_custom_type์˜ ๋‘ ๋ฒˆ์งธ ์ธ์ˆ˜๋Š” "Node"์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด
๋Œ€ํ™” ์ƒ์ž์— ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

func _enter_tree():
add_custom_type("๊ธฐ๋ณธ", "๋…ธ๋“œ", preload("base.gd"), preload("base.png"))
add_custom_type("TypeA", "Node", preload("type_a.gd"), preload("type_a.png"))
add_custom_type("TypeB", "๋…ธ๋“œ", preload("type_b.gd"), preload("type_b.png"))

... ๊ทธ๋ฆฌ๊ณ  ์ด๊ฒƒ์ด ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค.

[์ด๋ฏธ์ง€: add_node_flat]
https://cloud.githubusercontent.com/assets/8785013/17486294/9bcc029c-5d90-11e6-81e6-6fce6b0e7cf0.png

์ด์™€ ๊ฐ™์ด ์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜•์„ ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์€ ์ข‹์ง€๋งŒ,
๋Œ€ํ™” ์ƒ์ž๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์œ ํ˜•์˜ ์ƒ์† ํŠน์„ฑ์„ ๋ฐ˜์˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
๋‹ค๋ฅธ ๋‚ด์žฅ ์œ ํ˜•. ๋ชจ๋“  ๋‚ด์žฅ ์œ ํ˜•์˜ ๊ฒฝ์šฐ ํ•ด๋‹น ํŠธ๋ฆฌ๋ฅผ ๋ณด๊ณ 
๋‚ด๊ฐ€ ๋ฌด์—‡์„ ๋‹ค๋ฃจ๊ณ  ์žˆ๋Š”์ง€ ํ•œ ๋ˆˆ์—๋ณด์‹ญ์‹œ์˜ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‚˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ™•์‹ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
Sprite๋Š” Node2D์ด๋ฏ€๋กœ _์ œ๊ณต๋˜๋Š” ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ์ƒ์†ํ•ฉ๋‹ˆ๋‹ค.
by_ Node2D. ์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜•์˜ ๊ฒฝ์šฐ์—๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.

์ด์ œ ์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜•์„ ์ „์—ญ ๋ฒ”์œ„์— ์™„์ „ํžˆ ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด
์œ„์—์„œ ์–ธ๊ธ‰ํ•œ @akien-mga https://github.com/akien-mga ์ฒ˜๋Ÿผ
์ดํ•ดํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค.

๋จผ์ € _type name_์—์„œ ์ฐธ์กฐํ•˜๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜•์—์„œ ์ƒ์†ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ํŒŒ์ผ ๊ฒฝ๋กœ/์ด๋ฆ„ ๋Œ€์‹ .

_base.gd http://base.gd_

๋…ธ๋“œ ํ™•์žฅ
๋‚ด๋ณด๋‚ด๊ธฐ(์ƒ‰์ƒ) var ์ƒ‰์ƒ

_type_a.gd http://type_a.gd_

๋ฒ ์ด์Šค ํ™•์žฅ

_type_b.gd http://type_b.gd_

๋ฒ ์ด์Šค ํ™•์žฅ

... ๊ทธ๋Ÿฌ๋ฉด ์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜•์˜ ๋“ฑ๋ก์ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‹จ์ˆœํ™”๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด๊ฒƒ. add_custom_type์˜ ๋ˆ„๋ฝ๋œ ๋‘ ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜์— ์œ ์˜ํ•˜์‹ญ์‹œ์˜ค.

func _enter_tree():
add_custom_type("๊ธฐ๋ณธ", preload("base.gd"), preload("base.png"))
add_custom_type("TypeA", preload("type_a.gd"), preload("type_a.png"))
add_custom_type("TypeB", preload("type_b.gd"), preload("type_b.png"))

... "์ƒˆ๋กœ ๋งŒ๋“ค๊ธฐ
๋…ธ๋“œ/๋ฆฌ์†Œ์Šค" ๋Œ€ํ™” ์ƒ์ž:

[์ด๋ฏธ์ง€: add_node_tree]
https://cloud.githubusercontent.com/assets/8785013/17487264/619f4da0-5d94-11e6-880f-a00791e30125.png

... ๋ฌผ๋ก  ํŽธ์ง‘๊ธฐ์—์„œ ์ด๋Ÿฌํ•œ ์œ ํ˜•์„ ํ™•์žฅํ•˜๋Š” ๊ธฐ๋Šฅ์€
์‚ฌ์šฉ์ž ์ •์˜ ์Šคํฌ๋ฆฝํŠธ:

[์ด๋ฏธ์ง€: custom_type_no_script]
https://cloud.githubusercontent.com/assets/8785013/17487807/b54aced2-5d96-11e6-90e5-ee838b6a1335.png

... ์Šคํฌ๋ฆฝํŠธ ๋Œ€์‹  _type name_์œผ๋กœ๋„ ์ฐธ์กฐ๋ฉ๋‹ˆ๋‹ค.
์ด๋ฆ„/๊ฒฝ๋กœ

๋ฒ ์ด์Šค ํ™•์žฅ

์—ฌ๊ธฐ์—์„œ ํ”Œ๋ ˆ์ดํ•  ์ˆ˜ ์žˆ๋Š” ์œ„์˜ ์˜ˆ์ œ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
addons.zip https://github.com/godotengine/godot/files/407291/addons.zip

โ€”
๋‹น์‹ ์ด ์–ธ๊ธ‰๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/godotengine/godot/issues/6067#issuecomment -238299152,
๋˜๋Š” ์Šค๋ ˆ๋“œ ์Œ์†Œ๊ฑฐ
https://github.com/notifications/unsubscribe-auth/AF-Z20FQioFVkVcvhhbvDQ7jQKv5De7Hks5qd19QgaJpZM4JejbZ
.

@reduz
๋…ธ๋“œ๊ฐ€ ์Šคํฌ๋ฆฝํŒ…๋˜์—ˆ์Œ์„ ๋ช…ํ™•ํžˆ ํ•˜๋Š” ๊ธฐ์ˆ ์ ์ธ ์ด์œ ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ๊ทธ๋ ‡๋‹ค๋ฉด ์ ์œ ๋œ ์Šคํฌ๋ฆฝํŠธ ์Šฌ๋กฏ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜•์„ ํ‘œ์‹œํ•˜๋Š” ๋‹ค์†Œ ์„œํˆฌ๋ฅธ ๋ฐฉ๋ฒ•์ธ ๊ฒƒ ๊ฐ™์œผ๋ฉฐ ๋…ธ๋“œ์˜ ํ˜„์žฌ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๊ต์ฒดํ•˜์—ฌ ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ™•์žฅํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์–ป๋Š”๋‹ค๋Š” ์•„์ด๋””์–ด๋Š” ์•„๋ฌด๋„ ์ƒ๊ฐํ•˜์ง€ ๋ชปํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ†ตํ•œ ํ™•์žฅ์ด ๊ธฐ๋ณธ ์œ ํ˜•์— ๋Œ€ํ•ด ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์ด ์•„๋‹™๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž๊ฐ€ ํ•ด๋‹น ์Šคํฌ๋ฆฝํŠธ ํ•„๋“œ๋ฅผ ์ง€์šฐ๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”? ์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜•์ด ์ด์ „ ์Šคํฌ๋ฆฝํŠธ๋กœ ๋˜๋Œ์•„๊ฐ€๋‚˜์š” ์•„๋‹ˆ๋ฉด ๊ธฐ๋ณธ ์œ ํ˜•์œผ๋กœ ์™„์ „ํžˆ ๋˜๋Œ์•„๊ฐ‘๋‹ˆ๊นŒ? ๋‹ค์‹œ ๋งํ•˜์ง€๋งŒ, ๋‚˜๋Š” ์ด๊ฒƒ์ด ์ข‹์€ ์ƒ๊ฐ์ด ์•„๋‹ˆ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

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

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

์—ฌ๊ธฐ์„œ ์š”์ ์€ ์‚ฌ์šฉ์ž ์ง€์ • ๋…ธ๋“œ๋ฅผ ์ •์˜ํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ๊ฐ€ _instanced_ ๋…ธ๋“œ์˜ ์†์„ฑ์ด ์•„๋‹ˆ๋ผ ํ•ด๋‹น ์œ ํ˜•์˜ ์†์„ฑ์ด๊ธฐ ๋•Œ๋ฌธ์— _should_ ์ˆจ๊ฒจ์ ธ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด ์Šคํฌ๋ฆฝํŠธ๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ๋…ธ๋“œ์— ์†์„ฑ์„ ๋ถ€์—ฌํ•ด์•ผ ํ•˜์ง€๋งŒ ๋‚ด์žฅ ๋…ธ๋“œ์˜ C++ ํด๋ž˜์Šค์ฒ˜๋Ÿผ ์ธ์Šคํ„ด์Šค ๋…ธ๋“œ์˜ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์ด์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. API๋ฅผ ์ œ๊ณตํ•˜์ง€๋งŒ ์ˆ˜์ •์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๊ณ  ํ™•์žฅ๋งŒ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. Sprite๋ฅผ ์ธ์Šคํ„ด์Šคํ™”ํ•  ๋•Œ scenes/2d/sprite.cpp ๊ฐ€ ์ธ์Šคํ„ด์Šคํ™”๋œ ๋…ธ๋“œ์˜ ์Šคํฌ๋ฆฝํŠธ๋กœ ์ฒจ๋ถ€๋˜์ง€ ์•Š๋Š” ๊ฒƒ์ฒ˜๋Ÿผ, my_custom_node.gd ๊ฐ€ ์ธ์Šคํ„ด์Šค ์‚ฌ์šฉ์ž ์ •์˜ ๋…ธ๋“œ์˜ ์ˆ˜์ • ๊ฐ€๋Šฅํ•œ ์Šคํฌ๋ฆฝํŠธ๋กœ ์ฒจ๋ถ€๋˜์–ด์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๋‹ค.

์ง€๊ธˆ ๋‹น์žฅ์€ ๊ธฐ์ˆ ์ ์œผ๋กœ _๊ฐ€๋Šฅํ•œ_์ง€๋Š” ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ ์ž์—ฐ์Šค๋Ÿฌ์šด ์‚ฌ์šฉ ์‚ฌ๋ก€ AFAIU๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜•์˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ˆ˜์ •ํ•˜๋ฉด ์œ ํ˜• ์ž์ฒด๊ฐ€ ์ˆ˜์ •๋˜๋ฏ€๋กœ ์ด ์œ ํ˜•์˜ ๋ชจ๋“  ์ธ์Šคํ„ด์Šค์— ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜•์„ ์‚ฌ์šฉํ•˜๋Š” ์ธ์Šคํ„ด์Šคํ™”๋œ ๋…ธ๋“œ์—๋Š” extends CustomNode ์ž์ฒด ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

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

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

์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ๋…ธ๋“œ์— ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ˆจ๊ธฐ๋Š” ๊ฒƒ์— ๋ฐ˜๋Œ€ํ•ฉ๋‹ˆ๋‹ค. ๋ญ์•ผ
์•„๋‹Œ ๊ฒƒ์„ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•˜๋Š” ํฌ์ธํŠธ?

์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์ด ์Šฌ๋กฏ์ด ์‚ฌ์šฉ ์ค‘์ด๊ฑฐ๋‚˜ ํ•„์š”ํ•˜๋‹ค๋Š” ์˜๋ฏธ๋Š” ์•„๋‹™๋‹ˆ๋‹ค.
๋‘ ๋ฒˆ์งธ ์Šคํฌ๋ฆฝํŠธ,
๊ธฐ์กด ๊ฒƒ.

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

2016๋…„ 8์›” 10์ผ ์˜คํ›„ 11์‹œ 1๋ถ„์— "Marc" [email protected] ์ด ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ์‹ค, ๊ทธ ํฌ์ธํ„ฐ๋Š” ํ•„์š”ํ•˜์ง€๋„ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ‘œ์‹œํ•˜๋ฉด
์˜ˆ๋ฅผ ๋“ค์–ด ์Šคํฌ๋ฆฝํŠธ๋กœ add_custom_type()์„ ์ถ”๊ฐ€ํ•˜๋ฉด ์—”์ง„์ด
์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํด๋ž˜์Šค์— ํ”Œ๋ž˜๊ทธ๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์Šคํฌ๋ฆฝํŠธ ํด๋ž˜์Šค๋Š” ์—”์ง„ ์œ ํ˜• ํ™•์žฅ์ž…๋‹ˆ๋‹ค." ์‚ฌ์šฉ์ž ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ œ๊ฑฐํ•˜๋ฉด
๊ทธ๋Ÿฐ ๋‹ค์Œ "custom
type"์„ ์ž…๋ ฅํ•˜๊ฑฐ๋‚˜ ์—†๋Š” ๊ฒฝ์šฐ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

โ€”
๋‹น์‹ ์ด ์–ธ๊ธ‰๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/godotengine/godot/issues/6067#issuecomment -239055986,
๋˜๋Š” ์Šค๋ ˆ๋“œ ์Œ์†Œ๊ฑฐ
https://github.com/notifications/unsubscribe-auth/AF-Z2xLGOhgMk__ZoRW1neRu1aRb5Qr_ks5qeoJogaJpZM4JejbZ
.

@reduz ์ถฉ๋ถ„ํžˆ ์ข‹์„ ๊ฒƒ ๊ฐ™์•„์š” :์Šค๋งˆ์ผ:

@reduz ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ๋‘ ๋ฒˆ์งธ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ํ•„์š”ํ•˜๋‹ค๊ณ  ๋งํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ์Šคํฌ๋ฆฝํŠธ(ํ”Œ๋Ÿฌ๊ทธ์ธ์—์„œ ์ •์˜ํ•œ ์‚ฌ์šฉ์ž ์ •์˜)๋ฅผ ์ƒ์†ํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ถ”๊ฐ€ํ•œ ๋‹ค์Œ ์ œ๊ฑฐํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ ์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์Šคํฌ๋ฆฝํŠธ ์—†์ด ๋…ธ๋“œ๋ฅผ ๊ธฐ๋ณธ ์—”์ง„ ์œ ํ˜•์œผ๋กœ ๋˜๋Œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๊นŒ?

๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋“  ๊ทธ๊ฒƒ์„ ๋” ์‚ฌ์šฉ์ž ์นœํ™”์ ์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

2016๋…„ 8์›” 11์ผ 06:10์— "Marc" [email protected] ์ด ์ผ์Šต๋‹ˆ๋‹ค.

@reduz https://github.com/reduz ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๋‹ค๊ณ  ๋งํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.
๋‘ ๋ฒˆ์งธ ์Šคํฌ๋ฆฝํŠธ. ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋˜๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.
์ฒซ ๋ฒˆ์งธ ๊ฒƒ(ํ”Œ๋Ÿฌ๊ทธ์ธ์—์„œ ์ •์˜ํ•œ ์‚ฌ์šฉ์ž ์ •์˜)์„ ์ƒ์†ํ•˜์ง€๋งŒ ๋‹ค์Œ์œผ๋กœ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๊ฒƒ์„ ์ œ๊ฑฐํ•˜์‹ญ์‹œ์˜ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ๋…ธ๋“œ๋ฅผ ๊ธฐ๋ณธ ์—”์ง„ ์œ ํ˜•์œผ๋กœ ๋˜๋Œ๋ฆฝ๋‹ˆ๋‹ค.
๊ทธ๋Ÿผ ์Šคํฌ๋ฆฝํŠธ?

โ€”
๋‹น์‹ ์ด ์–ธ๊ธ‰๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/godotengine/godot/issues/6067#issuecomment -239109334,
๋˜๋Š” ์Šค๋ ˆ๋“œ ์Œ์†Œ๊ฑฐ
https://github.com/notifications/unsubscribe-auth/AF-Z26JUJ0gjaCFwlsIDsINWp3_nqliwks5qeubygaJpZM4JejbZ
.

์ด ์ฃผ์„ https://github.com/godotengine/godot/issues/6067#issuecomment -238299152์— ์„ค๋ช…๋œ ๊ฒฝ๋กœ ๋Œ€์‹  ์œ ํ˜• ์ •์˜ ๋…ธ๋“œ๋กœ ํ™•์žฅ ๋ถ€๋ถ„์„ ํŒŒํ—ค์ณค์Šต๋‹ˆ๋‹ค.

์ถ”๊ฐ€ํ•  ๋ช‡ ๊ฐ€์ง€ ์ œ์•ˆ ์‚ฌํ•ญ:

  • ์• ๋“œ์˜จ ์œ ํ˜•์˜ node.get_type()์€ ์œ ํ˜• ์ด๋ฆ„์„ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ:

add_custom_type("MyCustomNode", "Node2D", preload("my_custom_node.gd"), preload("icon.png"))

node.get_type() should return "MyCustomNode" instead of "Node2D"
  • ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ์œ ํ˜•๋ณ„๋กœ ๋‹ค๋ฅธ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ์‹œ:
์‚ฌ์šฉ์ž A๋Š” Node2D๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ณด๋‹ค ์ •ํ™•ํ•œ ๊ฐ€์‹œ์„ฑ ์•Œ๋ฆผ์„ ์œ„ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
add_custom_type("PreciseNotifier", "Node2D", preload("precise_notifier.gd"), preload("icon.png"))

๊ทธ๋Ÿฐ ๋‹ค์Œ ์‚ฌ์šฉ์ž B๋Š” ๋‹ค๋ฅธ ๊ตฌ์„ฑ์ด ์žˆ๋Š” ๋‹ค๋ฅธ ์• ๋“œ์˜จ ํด๋”์˜ ์ •ํ™•ํ•œ ์•Œ๋ฆฌ๋ฏธ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํŠธ๋ฆฌ๊ฑฐ ์• ๋“œ์˜จ์„ ๊ฐœ๋ฐœํ•ฉ๋‹ˆ๋‹ค.
add_custom_type("Trigger", "PreciseNotifier", preload("trigger.gd"), preload("icon.png"))
๊ทธ๋ฆฌ๊ณ  trigger.gd ์Šคํฌ๋ฆฝํŠธ์—์„œ๋„ ์œ ํ˜• ์ด๋ฆ„์œผ๋กœ ํ™•์žฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
extends PreciseAddon
๋ฌผ๋ก  ์‚ฌ์šฉ์ž๋Š” ํŠธ๋ฆฌ๊ฑฐ ํ•˜๋‚˜๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋‘ ์• ๋“œ์˜จ์„ ๋ชจ๋‘ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

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

๊ทธ๋Ÿฐ ๋‹ค์Œ ์ ˆ์ถฉ์•ˆ์€ ์ผ์ข…์˜ ์Šคํฌ๋ฆฝํŠธ++ ์•„์ด์ฝ˜์ด ์žˆ๋Š” ์Šคํฌ๋ฆฝํŠธ ์•„์ด์ฝ˜ ์˜†์— ์žˆ๋Š” ์žฅ๋ฉด ํŠธ๋ฆฌ ๋…์˜ ๋…ธ๋“œ ํ–‰์— ์ถ”๊ฐ€ UI ๋ฒ„ํŠผ์„ ๋‘๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ํด๋ฆญํ•˜๋ฉด extends Base ๋˜๋Š” extends "Base" ์™€ ๊ฐ™์ด ์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜•์—์„œ ์ด๋ฏธ ์ƒ์†๋œ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์žˆ๋Š” ์ผ๋ฐ˜์ ์ธ "์Šคํฌ๋ฆฝํŠธ ์ž‘์„ฑ" ํŒ์—… ์ฐฝ์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ •์˜๋œ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ์‚ฌ์ „ ์„ค์ • ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋ฌด์—‡์ด๋“  ์ฆ‰์‹œ ๋Œ€์ฒด๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋…ธ๋“œ์— ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์žˆ์Œ์„ ์—ฌ์ „ํžˆ ๋ช…ํ™•ํ•˜๊ฒŒ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ํ•ด๋‹น ์‚ฌ์ „ ์„ค์ • ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‰ฝ๊ฒŒ ๊ต์ฒดํ•  ์ˆ˜ ์žˆ๋Š” ์นœ์ˆ™ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ์ œ์•ˆ์€ ์ปค์Šคํ…€ ๋…ธ๋“œ๋ฅผ ์—”์ง„ ๋‚ด ๋Œ€์‘ ๋…ธ๋“œ์™€ ๋‹ค์†Œ ๋‹ค๋ฅด๊ฒŒ ์ทจ๊ธ‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์•„๋งˆ๋„ ๋œ ์ง๊ด€์ ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ƒ๊ฐ?

์ด ํ† ๋ก ์˜ ๋’ท๋ถ€๋ถ„์—์„œ 2์„ผํŠธ๋ฅผ ์ค„ ๋•Œ ๋ฌธ์ œ๋Š” ์• ๋“œ์˜จ์„ ์ƒ์†ํ•˜๋Š” ์—ฌ๋Ÿฌ ๋…ธ๋“œ๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋™์ผํ•œ ์›๋ณธ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๊ณต์œ ํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์— ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. Juan์ด ์ด ์Šค๋ ˆ๋“œ์˜ ๋งจ ์ฒ˜์Œ์— ์ฃผ์žฅํ–ˆ๋“ฏ์ด ์ฝ”๋“œ ๊ฐ€์‹œ์„ฑ์€ ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋””์ž์ธ ์„ ํƒ์ด์ž ์• ๋“œ์˜จ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๋…ธ๋“œ ๋™์ž‘์„ ํˆฌ๋ช…ํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๋ฐ ์ค‘์š”ํ•œ ๊ฒƒ์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ผ๋ฐ˜์ ์œผ๋กœ ์ฝ”๋“œ์—์„œ ๋‹ค๋ฅธ ๋…ธ๋“œ์˜ ๋™์ž‘์„ ๋ณ€๊ฒฝํ•˜๊ณ  ์‹ถ์„ ๊ฒƒ์ด๋ฉฐ ํ˜„์žฌ๋กœ์„œ๋Š” ์›๋ž˜ ์Šคํฌ๋ฆฝํŠธ ์ฐธ์กฐ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ์ƒˆ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋งŒ๋“ค๊ณ  ๊ธฐ๋ณธ ์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋ฅผ ๋ณต์‚ฌํ•˜์—ฌ ๋ถ™์—ฌ๋„ฃ๋Š” ๊ฒƒ๋ฟ์ž…๋‹ˆ๋‹ค. ์ƒˆ ์• ๋“œ์˜จ ๋…ธ๋“œ์˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ƒˆ .gd ํŒŒ์ผ๋กœ save as ํ•  ์ˆ˜๋„ ์—†์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์›๋ณธ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋‹ค๋ฅธ ๋ชจ๋“  ๋…ธ๋“œ์— ๋Œ€ํ•œ ์ฐธ์กฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฏ€๋กœ ์ด 3๋‹จ๊ณ„ ๋ณต์‚ฌ-๋ถ™์—ฌ๋„ฃ๊ธฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ ˆ์ฐจ์ƒ.

๋‹ค์‹œ ๋งํ•˜์ง€๋งŒ ๊ทธ๋ ‡๊ฒŒ ๋ณต์žกํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ํŠน๋ณ„ํ•œ ๊ฒฝ์šฐ์— GDScript ํŽธ์ง‘๊ธฐ์˜ save as ์˜ต์…˜์ด ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์œผ๋ฉฐ ' GDScript ํŽธ์ง‘๊ธฐ์—์„œ '๋ณต์‚ฌ ๋ฐ ์ €์žฅ' ๋ฒ„ํŠผ์„ ์‚ฌ์šฉํ•˜์—ฌ ์• ๋“œ์˜จ์„ ๋น ๋ฅด๊ฒŒ ์‚ฌ์šฉ์ž ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(๊ทธ๋ฆฌ๊ณ  ์•„ํ‚คํ…์ฒ˜ ์ธก๋ฉด์—์„œ ์ด ๋ฒ„ํŠผ์„ ํ‘œ์‹œํ•˜๋Š” ๊ฒƒ์€ ์ƒ์†๋œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•  ํ•„์š” ์—†์ด Godot์—์„œ ๊ฒŒ์ž„์„ ๋งŒ๋“œ๋Š” ์ข‹์€ ์ ‘๊ทผ ๋ฐฉ์‹์ด๊ธฐ ๋•Œ๋ฌธ์— ์˜๋ฏธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค).

@henriquelalves ๋‚˜๋Š” ์ฝ”๋“œ์—์„œ ์‚ฌ์šฉ์ž ์ •์˜ ๋…ธ๋“œ๋ฅผ ์‚ฌ์šฉ์ž ์ •์˜ํ•˜๋Š” ๊ฒƒ์ด ๊ธฐ๋ณธ์ ์œผ๋กœ ์ƒ์†์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด extends "addons/thing/thing.gd" ? ์ƒ์†๋œ ์Šคํฌ๋ฆฝํŠธ๋Š” ๋ฌด์—‡์„ ์žฌ์ •์˜ํ•˜๋Š”์ง€ ์•Œ๋ฉด ์• ๋“œ์˜จ ๋ฒ„์ „๊ณผ ๋™์ผํ•œ ์ž‘์—…์„ ๊ณ„์† ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋ณต์‚ฌ/๋ถ™์—ฌ๋„ฃ๊ธฐ๊ฐ€ ํ•„์š” ์—†์Šต๋‹ˆ๋‹ค.

@Zylann ๋‹น์‹ ์ด ์˜ณ์•˜์ง€๋งŒ ์ผ๋ฐ˜์ ์œผ๋กœ ์ฝ”๋“œ ๊ฐ€์‹œ์„ฑ๊ณผ ์ž๋™ ์™„์„ฑ ๋‹จ์  ๋•Œ๋ฌธ์— ์ด ํŠน์ • ์ ‘๊ทผ ๋ฐฉ์‹์„ ์ข‹์•„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(์ ์–ด๋„ 2.1์—์„œ๋Š” ์ง€๊ธˆ๊นŒ์ง€ ํ…Œ์ŠคํŠธํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค). ๊ทธ๋ฆฌ๊ณ  ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ๋ฉ”์„œ๋“œ๋ฅผ ์žฌ์ •์˜ํ•˜๊ณ  ์‹ถ์ง€ ์•Š๊ณ  ์›๋ž˜ ์• ๋“œ์˜จ ์Šคํฌ๋ฆฝํŠธ์—์„œ ํ™•์žฅ ๋ณ€์ˆ˜๊ฐ€ ์•„๋‹Œ ํŠน์ • ํ•ญ๋ชฉ๋งŒ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ํ˜„์žฌ save as ๋™์ž‘์—์„œ ์ €๋ฅผ ๊ดด๋กญํžˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌํ•œ ์Šคํฌ๋ฆฝํŠธ์— ๋Œ€ํ•œ ๋ชจ๋“  ๋…ธ๋“œ ์ฐธ์กฐ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ ๋Š” ์Šคํฌ๋ฆฝํŠธ ์‚ฌ๋ณธ์„ ์‹ ์†ํ•˜๊ฒŒ ์ƒ์„ฑํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. UI ์นœํ™”์ ์ธ ๋ฐฉ์‹์œผ๋กœ ์ด๊ฒƒ์„ ํ•ด๊ฒฐํ•˜๋ฉด ์‚ฌ์šฉ์ž ์ •์˜ํ•  ์—ฌ๋Ÿฌ ๋…ธ๋“œ์™€ ์ฝ”๋“œ ๊ฐ€์‹œ์„ฑ ๋“ฑ์˜ ์›๋ž˜ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

@henriquelalves ๊ธ€์Ž„, ๋‚˜๋Š” ๋ณต์‚ฌ/๋ถ™์—ฌ๋„ฃ๊ธฐ tbh xD๋ฅผ ์ฐธ์„ ์ˆ˜ ์—†๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‹น์‹ ์€ ๋˜ํ•œ ๋ฒ„์ „ ๊ด€๋ฆฌ๊ฐ€ ์žˆ๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ํฌํฌํ•˜๊ณ  ์ฒ˜์Œ์— ๋Œ€์‹  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

@Zylann Forking ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ์•„์ฃผ ๊ฐ„๋‹จํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์— ๋” ๋งŽ์€ ๋‹จ๊ณ„๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜ํ•˜ํ•˜. ์—ฌ์ „ํžˆ save as ๋™์ž‘์ด ์ด์ƒํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋”๋ผ๋„ ์ด๊ฒƒ์ด ์šฐ์„  ์ˆœ์œ„๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ ์ˆ˜๋™ ๋ณต์‚ฌ-๋ถ™์—ฌ๋„ฃ๊ธฐ๋ฅผ ๊ณ„์†ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@henriquelalves ๋ณต์‚ฌ/๋ถ™์—ฌ๋„ฃ๊ธฐ๋Š” ๋ถ„๊ธฐ์ž…๋‹ˆ๋‹ค^^ ํ•˜์ง€๋งŒ ๋ฒ„์ „ ๊ด€๋ฆฌ ์—†์ด ์™„๋ฃŒํ•˜๋ฉด ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์—…๋ฐ์ดํŠธ๋˜๋ฉด ๋‚˜์ค‘์— ๋’ค์—์„œ ๋ฌผ์–ด๋œฏ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

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

์ €๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ๋…ธ๋“œ๊ฐ€ ์ผ๋ฅ˜ ๋‚ด์žฅ ์œ ํ˜•์ฒ˜๋Ÿผ ์ž‘๋™ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ฃผ์žฅํ•˜๋Š” ์ง„์˜์— ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์™œ ์• ๋“œ์˜จ์„ ๋งŒ๋“ค๊ฑฐ๋‚˜ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ท€์ฐฎ๊ฒŒํ•ฉ๋‹ˆ๊นŒ? ๋Œ€ํ™” ์ƒ์ž์—์„œ ๋ณผ ์ˆ˜ ์žˆ๊ณ  ์Šคํฌ๋ฆฝํŠธ ์ถ”๊ฐ€ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๊นŒ?

@RodeoMcCabe ๋ฌธ์ œ๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜•์ด ์‹ค์ œ๋กœ๋Š” ์—ฌ์ „ํžˆ ์—”์ง„ ๋‚ด ๋…ธ๋“œ ์œ„์— ๊ณ„์ธตํ™”๋œ ์Šคํฌ๋ฆฝํŠธ์ด๋ฉฐ ์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜• ๋…ธ๋“œ๊ฐ€ ์—”์ง„ ์†Œ์Šค๋กœ ์ง์ ‘ ์ปดํŒŒ์ผ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ํ•ด์•ผ ํ•  ์ผ์€ ์ด๋Ÿฌํ•œ ์Šคํฌ๋ฆฝํŒ…๋œ ๋…ธ๋“œ๊ฐ€ ์‚ฌ์šฉ์ž์˜ ๋ˆˆ์— ์—”์ง„ ๋‚ด ๋…ธ๋“œ์˜ ๋™์ž‘์„ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ตฌ์ฒด์ ์ธ ๋‹จ๊ณ„/๊ธฐ๋Šฅ ์„ธํŠธ๋ฅผ ๊ณต์‹ํ™”ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด...

  1. "๋…ธ๋“œ ์ƒ์„ฑ" ์ฐฝ์— ๋…ธ๋“œ ์ถ”๊ฐ€(์™„๋ฃŒ)
  2. ์‚ฌ์šฉ์ž๊ฐ€ "๋…ธ๋“œ ์ƒ์„ฑ" ์ฐฝ์— ๋Œ€ํ•ด ๋…ธ๋“œ์— ๋Œ€ํ•œ ํ…์ŠคํŠธ "๊ฐ„๋‹จํ•œ ์„ค๋ช…"์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค(์™„๋ฃŒ๋˜์ง€ ์•Š์€ ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๊นŒ? - ์ ์–ด๋„ add_custom_type ์˜ ์ผ๋ถ€๊ฐ€ ์•„๋‹˜).
  3. ์‚ฌ์šฉ์ž๊ฐ€ "๋…ธ๋“œ ์ƒ์„ฑ" ์ฐฝ์—์„œ ๋…ธ๋“œ ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ํ‘œ์‹œํ•˜๊ณ  ์ถ”์ƒ ์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜•์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ add_custom_type ํ•จ์ˆ˜๊ฐ€ ์ถ”์ƒ ์œ ํ˜•์ธ์ง€ ์—ฌ๋ถ€์— ๋Œ€ํ•ด bool์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์„ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. "๋…ธ๋“œ ์ƒ์„ฑ" ๋งˆ๋ฒ•์‚ฌ๋Š” ๊ทธ์— ๋”ฐ๋ผ ์ถ”์ƒ ์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜• ์ƒ์„ฑ์„ ์ฐจ๋‹จํ•˜๋„๋ก ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  4. ๋…ธ๋“œ๊ฐ€ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์—†๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋„๋ก ํ•˜์‹ญ์‹œ์˜ค.

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

    ๋น„. ์ธ์ŠคํŽ™ํ„ฐ์— ํ‘œ์‹œ๋˜๋Š” ์Šคํฌ๋ฆฝํŠธ ์†์„ฑ์€ ์‚ฌ์šฉ์ž๊ฐ€ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋กœ๋“œํ•˜์ง€ ์•Š๋Š” ํ•œ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋น„์–ด ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ํ‘œ์‹œ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์Šคํฌ๋ฆฝํŠธ๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜•์œผ๋กœ ์‚ฌ์šฉ๋œ ์Šคํฌ๋ฆฝํŠธ ์œ ํ˜•์—์„œ ํŒŒ์ƒ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์‚ฌ์šฉ์ž๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜•์˜ ์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ ์œ„์น˜๋ฅผ ์•Œ ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค(์Šคํฌ๋ฆฝํŠธ๋ผ๋Š” ๊ฐœ๋…์€ ์ˆจ๊ฒจ์ ธ ์žˆ์–ด์•ผ ํ•จ). ์ด๊ฒƒ์€ ์‚ฌ์šฉ์ž ์ •์˜ ํด๋ž˜์Šค์˜ ๋ฌธ์ž์—ด ์ด๋ฆ„์ด ๋‹ค๋ฅธ ์—”์ง„ ๋‚ด ํด๋ž˜์Šค์ฒ˜๋Ÿผ GDScript ํŒŒ์„œ์— ์˜ํ•ด ์ธ์‹๋˜์–ด์•ผ ํ•˜๊ฑฐ๋‚˜(์–ผ๋งˆ๋‚˜ ์‰ฌ์šด์ง€/์–ด๋ ค์šด์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Œ) ๋ ˆ์ฝ”๋“œ๋ฅผ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•œ ์ผ์ข…์˜ ์ „์—ญ ํ•จ์ˆ˜๊ฐ€ ์žˆ์–ด์•ผ ํ•จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ํด๋ž˜์Šค ์ด๋ฆ„, ์˜ˆ๋ฅผ ๋“ค์–ด add_custom_type("MyClass", "Node", load(res://addons/git-repo/api/my_class.gd), load(res://addons/git-repo/icons/icon_myclass.svg) ์— ์žˆ๋Š” ์Šคํฌ๋ฆฝํŠธ์˜ ๊ฒฝ์šฐ ์‚ฌ์šฉ์ž๋Š” extends MyClass ๋˜๋Š” extends custom("MyClass") ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

  5. ์Šคํฌ๋ฆฝํŠธ์— ์‚ฌ์šฉ๋˜๋Š” ํŽธ์ง‘๊ธฐ ์•„์ด์ฝ˜์€ ํ˜„์žฌ ์Šคํฌ๋ฆฝํŠธ์— ์‚ฌ์šฉ๋˜๋Š” ํฐ์ƒ‰ ์ƒ์ž ๋ชจ์–‘์˜ ์•„์ด์ฝ˜ ๋Œ€์‹  ์นดํ…Œ๊ณ ๋ฆฌ ๋ธ”๋ก์— ์ถ”๊ฐ€๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค( property_editor.cpp ). ์ด๊ฒƒ์€ ์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜• ๋…ธ๋“œ ๊ฐœ์ฒด์— ๋Œ€ํ•œ __meta__ ์‚ฌ์ „ ์†์„ฑ์˜ ์ผ๋ถ€์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  6. ์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜•์—์„œ "์Šคํฌ๋ฆฝํŠธ ์ถ”๊ฐ€"๋ฅผ ํด๋ฆญํ•˜๋ฉด 4b์—์„œ ์‚ฌ์šฉ๋œ ๋ฐฉ๋ฒ•์œผ๋กœ "์ƒ์†" ํ•„๋“œ๋ฅผ ๋ฏธ๋ฆฌ ์ฑ„์›Œ์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  7. ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜• ์Šคํฌ๋ฆฝํŠธ๋Š” ์—ฌ์ „ํžˆ ํ›„๋“œ ์•„๋ž˜์— ์žˆ์–ด์•ผ ํ•˜๋ฉฐ ์ œ๊ฑฐ๋˜์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜• ๋…ธ๋“œ๋Š” ๋กœ๋“œ๋œ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ null๋กœ ์„ค์ •๋œ ๊ฒฝ์šฐ ์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜• ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋ฐฑ์—… ์Šคํฌ๋ฆฝํŠธ๋กœ ํšจ๊ณผ์ ์œผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์—๋””ํ„ฐ์˜ Scene ๋„ํฌ์™€ ์ธ์ŠคํŽ™ํ„ฐ ๋„ํฌ์— ๊ธฐ๋ณธ ์œ ํ˜•์˜ ์—๋””ํ„ฐ ์•„์ด์ฝ˜๊ณผ ์Šคํฌ๋ฆฝํŠธ ์†์„ฑ์ด ๊ณ„์† ํ‘œ์‹œ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ €๋Š” ์ด๋ฏธ "์Šคํฌ๋ฆฝํŠธ ๋ณ€์ˆ˜"๋ฅผ ์‹ค์ œ ์Šคํฌ๋ฆฝํŠธ์˜ ์ด๋ฆ„์œผ๋กœ ๋ฐ”๊พธ๋Š” ๊ธฐ๋Šฅ์„ ๋ณ‘ํ•ฉํ•˜๋Š” ๊ณผ์ •์— ์žˆ์ง€๋งŒ ์ด๋Ÿฌํ•œ ๋ชจ๋“  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์ถ”๊ฐ€๋˜๋ฉด ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
  8. Object::get_script() ๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜• ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์žˆ๊ณ  ๋กœ๋“œ๋œ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์—†๋Š” ๋…ธ๋“œ์— ๋Œ€ํ•ด null ๋ฅผ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  9. Object::get_property_list , ๋ฉ”์†Œ๋“œ ๋ฐ ์‹ ํ˜ธ์— ๋Œ€ํ•œ ์œ ์‚ฌํ•œ ๊ธฐ๋Šฅ์€ ๋กœ๋“œ๋œ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์—†๋”๋ผ๋„ ์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜• ์Šคํฌ๋ฆฝํŠธ์˜ ๋‚ด์šฉ์„ ํฌํ•จํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  10. Object::get_custom_script() ๊ฐ™์€ ๋‘ ๋ฒˆ์งธ C++ Object ํ•จ์ˆ˜๊ฐ€ ํ•„์š”ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์Šคํฌ๋ฆฝํŒ… ์ธก์—์„œ ์ด ๋‘ ๋ฒˆ์งธ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ธ์‹ํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ์—๋„ ์—”์ง„์ด ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  11. ์‚ฌ์šฉ์ž ์ง€์ • ์œ ํ˜• ํŒŒ์ƒ์ด ์•„๋‹Œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๊ฐœ์ฒด์— ๋กœ๋“œํ•˜๋ ค๋Š” ์‹œ๋„๋Š” ์™„์ „ํžˆ ์‹คํŒจํ•˜๊ณ  ์˜ค๋ฅ˜(๊ด€๋ จ ํ•จ์ˆ˜์˜ &is_valid ์ฐธ์กฐ bool)๋ฅผ ๋ณด๊ณ ํ•˜์—ฌ ๊ฐœ์ฒด๊ฐ€ ์ด๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ •๋ณด์— ๋Œ€ํ•œ ํ”ผ๋“œ๋ฐฑ์„ ์ œ๊ณตํ•ด์•ผ ํ•˜๋Š” ๊ด€๋ จ Godot ํŽธ์ง‘๊ธฐ ์‹œ๋‚˜๋ฆฌ์˜ค๋„ ์ด๋ฅผ ์„ค๋ช…ํ•˜๊ธฐ ์œ„ํ•ด ์—…๋ฐ์ดํŠธ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

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

์ด ์ค‘ ์ข‹์€ ์†Œ๋ฆฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ๋‚˜๋Š” ๋‹จ์ง€ ์กฐ๊ธˆ ์ˆ™๊ณ ํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‚ด๊ฐ€ ๋†“์นœ ํ•ญ๋ชฉ์ด ๋” ์žˆ์„ ๊ฒƒ์ด๋ผ๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋ฏธ์นœ ์†Œ๋ฆฌ์ฒ˜๋Ÿผ ๋“ค๋ฆฌ๋ฉด ์ €์—๊ฒŒ ์•Œ๋ ค์ฃผ์‹ญ์‹œ์˜ค. ;-)

ํŽธ์ง‘: ์•„, ํ•˜์ง€๋งŒ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜• ์Šคํฌ๋ฆฝํŠธ์™€ ์ผ์น˜ํ•˜๋Š” ๊ฒฝ์šฐ ์žฅ๋ฉด ๋…์—์„œ ์Šคํฌ๋ฆฝํŠธ ์•„์ด์ฝ˜์„ ์ˆจ๊ธฐ๊ฒ ๋‹ค๋Š” reduz์˜ ์ œ์•ˆ๋„ ๊ฐ€์น˜๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹จ, get_script() ๋ฉ”์„œ๋“œ๋Š” ์—ฌ์ „ํžˆ ์•„๋ฌด ๊ฒƒ๋„ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Object ์ž์ฒด์— ๋ณ„๋„์˜ ์Šคํฌ๋ฆฝํŠธ ์†์„ฑ์„ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ ๋„ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ• ์ด ์žˆ์„๊นŒ์š”? Idk, ์™œ๋ƒํ•˜๋ฉด ์šฐ๋ฆฌ๊ฐ€ ์œ ์ง€ํ•˜๊ณ  ์‹ถ์ง€๋งŒ custom_type ์Šคํฌ๋ฆฝํŠธ ๊ฐœ๋…์œผ๋กœ ์œ ์ง€ํ•˜๊ธฐ ์–ด๋ ค์šด ๊ฐœ์ฒด๋‹น 1๊ฐœ์˜ ์Šคํฌ๋ฆฝํŠธ์— ๋Œ€ํ•œ ์ฝ”๋“œ๋ฒ ์ด์Šค์— ์ด๋ฏธ ๋งŽ์€ ๊ฐ€์ •์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์ข‹์€ ์ œ์•ˆ, ์ž˜ ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ชจ๋“  ๊ฒƒ์ด ๊ตฌํ˜„๋˜๋ฉด ์šฐ๋ฆฌ๊ฐ€ ์ฐพ๊ณ  ์žˆ๋Š” ๋™์ž‘์ด ์ œ๊ณต๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ ๋…ธ๋“œ๋‹น 1๊ฐœ์˜ ์Šคํฌ๋ฆฝํŠธ ๊ทœ์น™์„ ์–ด๊ธฐ๋Š” ๊ฒƒ์€ ์ฝ”๋“œ์˜ ๋งŽ์€ ์˜ˆ๊ธฐ์น˜ ์•Š์€ ๋ถ€๋ถ„์— ๋ฐ˜ํ–ฅ์„ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ๋Š” ๋‚˜์œ ์†Œ์‹์ด ๋  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ์ž˜ ๋ชจ๋ฅด๊ณ  ๋‚ด C++๋Š” ํ‰๋ฒ”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์†Œ๊ธˆ ํ•œ ์•Œ๊ณผ ํ•จ๊ป˜ ๊ทธ๊ฒƒ์„ ๊ฐ€์ ธ ๊ฐ€๋ผ. Reduz๋Š” ์œ„์—์„œ ์›๋ž˜ ๋…ธ๋“œ๋‹น ํ•˜๋‚˜ ์ด์ƒ์˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ์œผ๋ฉฐ "๊ทธ๋งŒํ•œ ๊ฐ€์น˜๊ฐ€ ์žˆ๋Š” ๊ฒƒ์ด ๋” ๋ฌธ์ œ์˜€์Šต๋‹ˆ๋‹ค"๋ผ๊ณ  ๋งํ–ˆ๋Š”๋ฐ, ์ด๋Š” ๋‚˜์—๊ฒŒ ํ•ฉ๋ฆฌ์ ์œผ๋กœ ๋“ค๋ฆฝ๋‹ˆ๋‹ค.

ํฌ์ธํŠธ 1~4๋Š” ํ›Œ๋ฅญํ•˜๊ณ  1-script ๊ทœ์น™์„ ์–ด๊ธฐ์ง€ ์•Š๊ณ  ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ถ”์ƒ ์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜•์€ ์–ด์จŒ๋“  ์ธ์Šคํ„ด์Šคํ™”ํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ์‚ฌ์šฉ์ž๊ฐ€ ํŽธ์ง‘๊ธฐ์—์„œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋ถ„๋ช…ํžˆ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ๊ทธ๋ ‡๊ฒŒ ํ•˜๋ ค๊ณ  ํ•  ์ˆ˜๋„ ์žˆ์œผ๋ฏ€๋กœ ํ•„์š”ํ•œ ๊ฒ€์‚ฌ์™€ ์˜ค๋ฅ˜๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํฌ์ธํŠธ 6๋„ ์ข‹๊ณ  ์—ฌ๊ธฐ์„œ ์šฐ๋ฆฌ๊ฐ€ ์—ฌ๊ธฐ์„œ ๋ฒ—์–ด๋‚  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํฌ์ธํŠธ 6์— ๋”ฐ๋ผ ์ƒˆ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ํ˜„์žฌ ์‚ฌ์šฉ์ž ์ง€์ • ๋…ธ๋“œ์— ์—ฐ๊ฒฐ๋œ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ƒˆ(ํŒŒ์ƒ๋œ) ์Šคํฌ๋ฆฝํŠธ๋กœ ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค. ์ด์ „(๊ธฐ๋ณธ) ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋…ธ๋“œ์—์„œ ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค. ์ƒˆ๋กœ ์ฒจ๋ถ€๋œ ์Šคํฌ๋ฆฝํŠธ๋Š” ์›๋ž˜ ์Šคํฌ๋ฆฝํŠธ์—์„œ ํŒŒ์ƒ๋˜๋ฏ€๋กœ ๋ชจ๋“  ๊ธฐ๋Šฅ์ด ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ธฐ๋ณธ ํด๋ž˜์Šค(์ถ”์ƒ์ด๋“  ์•„๋‹ˆ๋“ )๊ฐ€ ์žˆ๊ณ  ํŒŒ์ƒ๋œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋…ธ๋“œ์— ์ฒจ๋ถ€ํ•˜๋Š” ๊ฒฝ์šฐ ์ข…์ข… ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์ฐจ์ด์ ์€ ์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜•์— ๋” ์ด์ƒ ํ•ด๋‹น ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ฒจ๋ถ€๋˜์–ด ์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ƒˆ ์Šคํฌ๋ฆฝํŠธ๋Š” ๋‹จ์ˆœํžˆ ์‚ฌ์šฉ์ž ์ •์˜ ๋…ธ๋“œ์˜ ์ด๋ฆ„์ด ์•„๋‹ˆ๋ผ extends "res://addons/path/to/base-script.gd" ๋ผ๊ณ  ๋งํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹ค์‹œ ์ƒ๊ฐํ•ด ๋ณด๋ฉด remove_custom_type() ๊ฐ€ ํ˜ธ์ถœ๋˜์ง€ ์•Š์•˜๊ณ  ์ฒจ๋ถ€๋œ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์—ฌ์ „ํžˆ ์ด์ „ ์Šคํฌ๋ฆฝํŠธ์—์„œ ํŒŒ์ƒ๋˜๋ฏ€๋กœ ์ด๊ฒƒ์ด ํ•„์š”ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์ด ์ ์— ๋Œ€ํ•ด ๋ช…ํ™•ํžˆ ํ•ด ์ฃผ์‹ญ์‹œ์˜ค.

ํฌ์ธํŠธ 7, 8, 9๋Š” ์ข‹๊ณ  1-script ๊ทœ์น™์„ ์œ ์ง€ํ•˜๋ฉด์„œ ๊ทธ๋‹ค์ง€ ์–ด๋ ต์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. 1-script ๊ทœ์น™์„ ์œ ์ง€ํ•˜๋ฉด 10์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. 11์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๋…ธ๋“œ ์œ ํ˜•์„ ํ™•์žฅํ•˜์ง€ ์•Š๋Š” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์—ฐ๊ฒฐํ•˜๋ ค๊ณ  ํ•˜๋ฉด ๋‚ด์žฅ ๋…ธ๋“œ๊ฐ€ ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์–ด์จŒ๋“ , ๊ทธ๊ฒƒ์€ ๋งŽ์€ ์ž‘์—…์ฒ˜๋Ÿผ ๋“ค๋ฆฌ๊ณ  ์šฐ๋ฆฌ๋Š” ์ด๋ฏธ ๋ฒ ํƒ€ ๋ฒ„์ „์ด๋ฏ€๋กœ ์ด๊ฒƒ์ด 3.1 ๋˜๋Š” 3.2์šฉ์ด ๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค(์ตœ๊ทผ ๋กœ๋“œ๋งต์„ ๋ณธ ์ ์ด ์—†์Œ).

@RodeoMcCabe ์˜ˆ, ์ด๊ฒƒ์€ ํ™•์‹คํžˆ 3.0์šฉ์ด ์•„๋‹™๋‹ˆ๋‹ค.

๋…ธ๋“œ๋‹น 1๊ฐœ์˜ ์Šคํฌ๋ฆฝํŠธ ๊ทœ์น™์„ ์–ด๊ธฐ๋Š” ๊ฒƒ์€ ์ฝ”๋“œ์˜ ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๋งŽ์€ ๋ถ€๋ถ„์— ๋ฐ˜ํ–ฅ์„ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ๋Š” ๋‚˜์œ ์†Œ์‹์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

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

์Šคํฌ๋ฆฝํŒ… ์ธก๋ฉด(afaik)์—๋Š” ์ถ”์ƒ ์œ ํ˜•์ด ์—†์Šต๋‹ˆ๋‹ค. ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ถ”์ƒํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๊ณ  ์žˆ๋‹ค๋Š” ๋ง์”€์ด์‹ ๊ฐ€์š”? can_instance ๋ฉ”์„œ๋“œ๋Š” ์Šคํฌ๋ฆฝํŒ… ์ธก์— ๋…ธ์ถœ๋˜์ง€๋งŒ ์Šคํฌ๋ฆฝํŠธ ์ž์ฒด๊ฐ€ ์œ ํšจํ•œ์ง€ ํ™•์ธํ•˜๊ณ  ๋„๊ตฌ์ธ ๊ฒฝ์šฐ ScriptServer์—์„œ ํ˜„์žฌ ์Šคํฌ๋ฆฝํŒ…์ด ํ™œ์„ฑํ™”๋˜์–ด ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์Šคํฌ๋ฆฝํŠธ ์œ ํ˜•์˜ ์ถ”์ƒ์„ฑ๊ณผ๋Š” ์•„๋ฌด ๊ด€๋ จ์ด ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

CreateDialog::_update_search ๋ฉ”์„œ๋“œ๊ฐ€ ํ…์ŠคํŠธ๋ฅผ ํšŒ์ƒ‰์œผ๋กœ ํ‘œ์‹œํ•˜๊ฑฐ๋‚˜ ์„ ํƒํ•  ์ˆ˜ ์—†๊ฒŒ ๋งŒ๋“œ๋Š” ์‹œ์  ๋“ฑ์„ ์•Œ๊ธฐ ์œ„ํ•ด์„œ๋Š” ํด๋ž˜์Šค๊ฐ€ ์ถ”์ƒ์ธ์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ ๋กœ ๋ฌธ์ œ(#13401)์˜ ์ถ”์ƒ์ ์ธ ๋ถ€๋ถ„์— ๋Œ€ํ•œ ๋ฌธ์ œ๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

Object ์œ ํ˜•์— backup_script private ๋ฉค๋ฒ„๋ฅผ ์ถ”๊ฐ€ํ•œ ๋‹ค์Œ ์ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ script ์†์„ฑ ๊ฒ€์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉด ์ „๋ฐ˜์ ์œผ๋กœ ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

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


์ž๋™ ์ƒ์†์€ ํ”Œ๋Ÿฌ๊ทธ์ธ ์ž์ฒด์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋ฉฐ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋ณต์ œํ•˜์ง€ ์•Š๊ณ ๋Š” ๋‘˜ ์ด์ƒ ๋งŒ๋“ค ์ˆ˜ ์—†๊ฒ ์ฃ ?

Multiscript๋Š” ์˜ฌํ•ด ๋‘ ๋ฒˆ์งธ๋กœ ์ถ”๊ฐ€๋˜์—ˆ์œผ๋ฉฐ ๋‹ค์‹œ ์ฃฝ์ด๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค(์—ฌ๋Ÿฌ ๋ฌธ์ œ ๋ฐœ์ƒ).


์Šคํฌ๋ฆฝํŠธ ๋Œ€์‹  ์‚ฌ์šฉ์ž ์ •์˜ ๋…ธ๋“œ์˜ ๊ธฐ๋ฐ˜์œผ๋กœ ์žฅ๋ฉด์„ ํ—ˆ์šฉํ•˜๋ฉด ๋ฃจํŠธ์— ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์—†๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์ถ”์ƒ์„ฑ์ด๋‚˜ ์ด์ „์— ํ–ˆ๋˜ ๋‹ค๋ฅธ ์ œ์•ˆ์— ์˜ํ–ฅ์„ ๋ฏธ์นœ๋‹ค๋Š” ๋ง์”€์ด์‹ ๊ฐ€์š”? ์ด๊ฒŒ ์–ด๋””์„œ ์—ฐ๊ฒฐ์ด ๋˜๋Š”์ง€ ์•ˆ๋ณด์ด๋„ค์š”...

์ž๋™ ์ƒ์†์€ ํ”Œ๋Ÿฌ๊ทธ์ธ ์ž์ฒด์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋ฉฐ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋ณต์ œํ•˜์ง€ ์•Š๊ณ ๋Š” ๋‘˜ ์ด์ƒ ๋งŒ๋“ค ์ˆ˜ ์—†๊ฒ ์ฃ ?

/addons/ ํด๋”์— ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋‘ ๋ฒˆ ํฌํ•จํ•˜๊ณ  ํ”„๋กœ์ ํŠธ ์„ค์ •์˜ ํ”Œ๋Ÿฌ๊ทธ์ธ ์„น์…˜์—์„œ ๋‘˜ ๋‹ค ํ™œ์„ฑํ™”ํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๊ณ  ๋ง์”€ํ•˜์‹œ๋ ค๋Š” ๊ฑด๊ฐ€์š”? ๊ฐ™์€ ์ด๋ฆ„์œผ๋กœ ์ •์˜๋œ ์—ฌ๋Ÿฌ ์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜•์„ ๊ฐ€์งˆ ์ˆ˜ ์—†์Œ).

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

  1. ๋…ธ๋“œ์˜ ๋‚ด์žฅ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋…ธ๋“œ๋ฅผ ์ธ์Šคํ„ด์Šคํ™”ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€(์ถ”์ƒ)๋ฅผ ๊ฒฐ์ •ํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.
  2. ๊ธฐ๋ณธ ์ œ๊ณต ๋…ธ๋“œ ์œ ํ˜•์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  3. ์‚ฌ์šฉ์ž ์ •์˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋…ธ๋“œ์˜ backup_script ์†์„ฑ์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค(์Šคํฌ๋ฆฝํŒ… API์— ๋…ธ์ถœ๋˜์ง€ ์•Š์Œ).
  4. ๋…ธ๋“œ์˜ ์ž์ฒด Object ์ฝ”๋“œ๊ฐ€ ๋‹ค๋ฅธ ๋ชจ๋“  ์‚ฌ๋žŒ์ด backup_script ๋ฅผ ๊ฐœ์ฒด์˜ ๊ณต์‹ script ์†์„ฑ์œผ๋กœ ๋ณด๋„๋ก ์†์ด๋Š” ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
  5. ํŽธ์ง‘๊ธฐ ์•„์ด์ฝ˜์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์—…๋ฐ์ดํŠธ
  6. ๊ฐ„๋žตํ•œ ์„ค๋ช…(?)์— ๋Œ€ํ•œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์—…๋ฐ์ดํŠธ

...๋Œ€์‹ ์—...

  1. ๋‚ด์žฅ ๋…ธ๋“œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  2. script ์†์„ฑ์œผ๋กœ ์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜• ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ฒจ๋ถ€ํ•˜์‹ญ์‹œ์˜ค.
  3. ์‚ฌ์šฉ์ž ์ •์˜ ํŽธ์ง‘๊ธฐ ์•„์ด์ฝ˜์˜ ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜์‹ญ์‹œ์˜ค.

Multiscript๋Š” ์˜ฌํ•ด ๋‘ ๋ฒˆ์งธ๋กœ ์ถ”๊ฐ€๋˜์—ˆ์œผ๋ฉฐ ๋‹ค์‹œ ์ฃฝ์ด๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค(์—ฌ๋Ÿฌ ๋ฌธ์ œ ๋ฐœ์ƒ).

๋‚˜๋Š” ๋™์˜ํ•œ๋‹ค. ๋ฉ€ํ‹ฐ์Šคํฌ๋ฆฝํŒ… ๊ฐœ์ฒด๋Š” ์ด ์‹œ์ ์—์„œ ๋‚˜์œ ์ƒ๊ฐ์ด ๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค(์–ด์จŒ๋“  ์‹ค์ œ๋กœ ํ•„์š”ํ•˜์ง€๋„ ์•Š์Œ). ๊ทธ๊ฒƒ์€ ๋‚ด๊ฐ€ ์ œ์•ˆํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ๊ณต๊ฐœ ๋ณด๊ธฐ์—์„œ Object ์—๋Š” ์—ฌ์ „ํžˆ 1๊ฐœ์˜ ์Šคํฌ๋ฆฝํŠธ๋งŒ ์žˆ์–ด์•ผ ํ•˜์ง€๋งŒ ์Šคํฌ๋ฆฝํŠธ ์—ญํ• ์„ ๋Œ€์‹ ํ•˜๋Š” ๋ฐฑ์—… ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค(๋”ฐ๋ผ์„œ script ์†์„ฑ์— ์ž์‹ ์„ ํ• ๋‹น). ๊ธฐ๋ณธ script ์†์„ฑ์ด null / unloaded ๋“ฑ์œผ๋กœ ์„ค์ •๋  ๋•Œ๋งˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด Object ํด๋ž˜์Šค์— ๋Œ€ํ•œ ์ฝ”๋“œ๋ฒ ์ด์Šค์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ ๋„ "์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜•"์„ ๋ณด๋‹ค ํšจ๊ณผ์ ์œผ๋กœ ์ง€์›ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ฝ”๋“œ(์˜ˆ: CreateDialog ์—์„œ ์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜• ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ• ๋‹นํ•˜๋Š” ์ฝ”๋“œ)๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ๋Š” ์ด ๋ฐฑ์—… ์Šคํฌ๋ฆฝํŠธ ์†์„ฑ์— ๋Œ€ํ•œ ์ „์šฉ setter/getter๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด script ์†์„ฑ์ด ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์— ๋Œ€ํ•œ ์˜ตํŠธ์ธ ์ˆ˜์ •์ด ์ด๋ฃจ์–ด์ง€๋ฉฐ ์—”์ง„์— ํ•„์š”ํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ๋น„๊ต์  ์ ์Šต๋‹ˆ๋‹ค.

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

"๋Œ€์ฒด ๋ฐ ์ƒ์† ์Šคํฌ๋ฆฝํŠธ" ํŽธ์ง‘๊ธฐ ๋„๊ตฌ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ๋” ์‰ฝ๊ณ  ํˆฌ๋ช…ํ•˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ? ๋‚ด ๋ง์€, ์ด๊ฒƒ์€ ์šฐ๋ฆฌ๊ฐ€ Addon ๋…ธ๋“œ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์—†์„ ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์ œ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ addon ๋…ธ๋“œ๋Š” ์‹ค์ œ๋กœ Create Node ํŠธ๋ฆฌ์— ์ถ”๊ฐ€ํ•˜๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ๋…ธ๋“œ์ผ ๋ฟ์ด๋ฉฐ ์‚ฌ์šฉ์ž๋Š” ์ด๋ฅผ ์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. UX ๊ด€์ ์—์„œ(์ €๋Š” ์ „๋ฌธ๊ฐ€๋Š” ์•„๋‹ˆ์ง€๋งŒ) ํŽธ์˜๋ฅผ ์œ„ํ•ด ํˆฌ๋ช…์„ฑ์„ ํฌ์ƒํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@MarianoGnu @henriquelalves ๋‘˜ ๋‹ค ์‹ค์ œ๋กœ ๊ฐ™์ง€ ์•Š์Šต๋‹ˆ๋‹ค. "์ปค์Šคํ…€ ์œ ํ˜•"์˜ ์˜๋ฏธ๋Š” ์—”์ง„ ๋‚ด ๋…ธ๋“œ ์œ ํ˜•์„ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ์Šคํฌ๋ฆฝํŠธ ์ž์ฒด๋ฅผ ์ œ๊ฑฐํ•  ์ˆ˜ ์—†์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. Node2D๊ฐ€ ์ˆœ์ˆ˜ํ•œ ๋…ธ๋“œ์ฒ˜๋Ÿผ ์ž‘๋™ํ•˜๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด Node2D์˜ Node2D์„ฑ์„ ์ œ๊ฑฐํ•  ์ˆ˜ ์—†๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ๋…ธ๋“œ์— ๋ถ€์—ฌํ•˜๋Š” ๊ธฐ๋Šฅ์ด ๊ธฐ๋ณธ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

์œ„์˜ Akien์˜ ์ธ๊ธฐ ์žˆ๋Š” ์ถ”์ฒœ ๊ฒŒ์‹œ๋ฌผ์€ ์œ ์‚ฌํ•œ ์„ธ๋ถ€ ์ •๋ณด๋ฅผ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

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

"์ƒ์†๋œ ์Šคํฌ๋ฆฝํŠธ์— ๋Œ€ํ•œ ๋Œ€์ฒด" ํ•ญ๋ชฉ์„ ์šฉ์ดํ•˜๊ฒŒ ํ•˜๋Š” ํŽธ์ง‘๊ธฐ ๋„๊ตฌ๋ฅผ ๋งŒ๋“ค๋ฉด ๋ฉ‹์ง€๊ฒ ์ง€๋งŒ, ์–ด๋–ค ๊ธฐ๋Šฅ๋„ ์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜• ์Šคํฌ๋ฆฝํŠธ ๋˜๋Š” ๊ทธ ์•„๋ž˜์— ์žˆ๋Š” ์Šคํฌ๋ฆฝํŠธ ๊ณ„์ธต ๊ณ„์ธต์„ ๋ณผ ์ˆ˜ ์—†์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. "๋‚ด์žฅ๋œ" ๋™์ž‘์„ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•ฉ๋‹ˆ๋‹ค.

์‹ค์ œ๋กœ gdscript_parser ๋ฐ ๊ธฐํƒ€ ์Šคํฌ๋ฆฝํŒ… ์ฝ˜ํ…์ธ ์—์„œ ์ฝ˜ํ…์ธ ์— ์•ก์„ธ์Šคํ•˜๋ ค๋ฉด $# EditorNode::get_editor_data().get_custom_types() ๊ฐ€ ์•„๋‹Œ ClassDB ์‹ฑ๊ธ€ํ†ค์— ์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜• ์ •๋ณด๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ข‹์Šต๋‹ˆ๋‹ค. ๋ชจ๋“ˆ์€ ํ•ด๋‹น ์ •๋ณด์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์—†์ง€๋งŒ ์‹ค์ œ๋กœ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

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

@willnationsdev ์ €๋Š” ์ปค์Šคํ…€ ์œ ํ˜•์ด ์—”์ง„ ๋‚ด ๋…ธ๋“œ๋กœ ์ทจ๊ธ‰๋˜๋Š” ๊ฒƒ์— ์ „์ ์œผ๋กœ ๋™์˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ €์—๊ฒŒ Editor Addons์˜ '๊ฐ•๋ ฅํ•จ'์€ ์‚ฌ์šฉ์ž ์ •์˜ ๋…ธ๋“œ ๋ฐ ํŽธ์ง‘๊ธฐ ๋„๊ตฌ์˜ "ํŒฉ"์„ ๋งŒ๋“ค๊ณ  github๋ฅผ ํ†ตํ•ด ๊ณต์œ ํ•˜๋Š” ๊ฒƒ์ด ์–ผ๋งˆ๋‚˜ ์‰ฌ์šด์ง€์— ๋‹ฌ๋ ค ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ชจ๋“  ๋„๊ตฌ์™€ ๋…ธ๋“œ๋Š” ์‚ฌ์‹ค ๋ณต์‚ฌํ•˜์—ฌ ๋ถ™์—ฌ๋„ฃ์„ ์ˆ˜ ์žˆ๋Š” ์žฅ๋ฉด๊ณผ ์Šคํฌ๋ฆฝํŠธ์ด์ง€๋งŒ Godot๋Š” ์ด๋ฅผ ์šฉ์ดํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด Addon API๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ฒ˜์Œ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ ๋‚˜๋„ ์• ๋“œ์˜จ์ด ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์—†์„ ๊ฒƒ์ด๋ผ๊ณ  ์˜ˆ์ƒํ–ˆ์ง€๋งŒ ์—”์ง„ ์ž์ฒด๊ฐ€ ์—”์ง„ ๋‚ด ๋…ธ๋“œ๋กœ ์ทจ๊ธ‰ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์˜€๊ธฐ ๋•Œ๋ฌธ์ด๋ฉฐ ์ด๋Š” ์•„ํ‚คํ…์ฒ˜๊ฐ€ ์•„๋‹ˆ๋ผ UX ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์ด๊ฒƒ์„ ๊ณ ์น  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. ๋…ธ๋“œ ์ƒ์„ฑ ํŠธ๋ฆฌ์˜ ์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜•์€ ๋‹ค๋ฅธ ์ƒ‰์ƒ์œผ๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค(์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜•์ž„์„ ๋ถ„๋ช…ํžˆ ๋‚˜ํƒ€๋ƒ„).
  2. ์žฅ๋ฉด์— ์ถ”๊ฐ€ํ•˜๋ฉด ์Šคํฌ๋ฆฝํŠธ ์•„์ด์ฝ˜์ด ์žˆ์ง€๋งŒ ์•ฝ๊ฐ„ ํˆฌ๋ช…ํ•ฉ๋‹ˆ๋‹ค(๊ธฐ๋ณธ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์žˆ์ง€๋งŒ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ์Œ์„ ๋‚˜ํƒ€๋ƒ„). ์Šคํฌ๋ฆฝํŠธ ์•„์ด์ฝ˜์„ ํด๋ฆญํ•˜๋ฉด ํŽธ์ง‘๊ธฐ์— ์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜• ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
  3. ์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜•์˜ "์Šคํฌ๋ฆฝํŠธ ์ถ”๊ฐ€" ๋ฒ„ํŠผ์€ ์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜• ์Šคํฌ๋ฆฝํŠธ๋กœ "์ƒ์†" ์˜ต์…˜์„ ์ž๋™์œผ๋กœ ์ฑ„์›๋‹ˆ๋‹ค.

๋‹ค์‹œ ๋งํ•˜์ง€๋งŒ, ๋‚˜๋Š” ํ™•์‹คํžˆ ์ „๋ฌธ๊ฐ€๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ Custom-Types != In-Engine Nodes์— ๋Œ€ํ•œ ๋‚˜์˜ ์›๋ž˜ ๊ฐ€์ •์ด ํ‹€๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, ๊ท€ํ•˜์˜ ์†”๋ฃจ์…˜์€ ์ด ์Šค๋ ˆ๋“œ์—์„œ ๋‚ด๊ฐ€ ๋ณธ ๊ฒƒ ์ค‘ ๊ฐ€์žฅ ๋ช…ํ™•ํ•œ ๊ฒƒ์ด๋ฏ€๋กœ Godot ๊ฐœ๋ฐœ์ด ๊ทธ๋Ÿฐ ์‹์œผ๋กœ ์ง„ํ–‰๋˜๋Š”์ง€ ์ถฉ๋ถ„ํžˆ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค.

ํŽธ์ง‘: ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ๋‹ค์‹œ ์ฝ์—ˆ๊ณ , ๋‚ด "ํ•ด๊ฒฐ์ฑ…"์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‹น์‹ ์˜ ์ฒซ 6๊ฐœ ์†”๋ฃจ์…˜ ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค. ํ•˜ํ•˜ํ•˜.

@henriquelalves @MarianoGnu ๋‚˜๋Š” ๊ทธ๊ฒƒ๋“ค์˜ ํ˜ผํ•ฉ์ด ํ™•์‹คํžˆ ํ•„์š”ํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜• ํด๋ž˜์Šค๋ฅผ ClassDB์— ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์€ ํ•„์ˆ˜์ž…๋‹ˆ๋‹ค. Henrique๊ฐ€ ์ œ์•ˆํ•œ ์„ธ ๊ฐ€์ง€ ์ œ์•ˆ์„ ๋ชจ๋‘ ์ •๋ง ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ ์•„์ด๋””์–ด 2(๋‚ด ๋ณ„๋„์˜ ์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜• ์•„์ด์ฝ˜ ์ œ์•ˆ๋ณด๋‹ค ํ›จ์”ฌ ๋‚ซ์Šต๋‹ˆ๋‹ค). ๊ทธ๋ฆฌ๊ณ  "์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜•์ด ๋ฌด์—‡์ธ์ง€"๊ฐ€ ์–ด๋Š ์ •๋„ ํˆฌ๋ช…ํ•˜๊ฒŒ ์œ ์ง€๋˜์–ด์•ผ ํ•œ๋‹ค๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ท ํ˜•์ด ์œ ์ง€๋˜์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ๋žŒ๋“ค์€ ๋ฌด์–ธ๊ฐ€๊ฐ€ ์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜•์ธ์ง€ ์—ฌ๋ถ€์™€ ๊ทธ๊ฒƒ์ด ์˜๋ฏธํ•˜๋Š” ๋ฐ”๋ฅผ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•˜์ง€๋งŒ ์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜•์ด ์—”์ง„ ์œ ํ˜•์ฒ˜๋Ÿผ ๋Š๊ปด์ง€๋„๋ก ํ•  ์ˆ˜ ์žˆ๋Š” ํ•œ ๋งŽ์ด ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@willnationsdev ๋‚˜๋Š” assetlib์—์„œ ์ด๊ฒƒ์„ ๊ฐ€์ ธ ์™€์„œ ์‚ฌ์šฉ์ž ์ •์˜ ๋…ธ๋“œ์˜ ์ฝ”๋“œ๋ฅผ "๊ธฐ๋ณธ"์Šคํฌ๋ฆฝํŠธ๋กœ ์˜ฎ๊ฒผ์Šต๋‹ˆ๋‹ค.
์ถฉ๋Œ_๊ฒฝ๋กœ_2d-1-modified.zip

๋‚ด๊ฐ€ ๋ณผ ์ˆ˜ ์žˆ๋Š” ์ฆ‰๊ฐ์ ์ธ ๋ฌธ์ œ๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋กœ๋“œํ•˜๊ณ  ํ•ด๋‹น ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๊ณ ์œ ํ•˜๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž ์ •์˜ ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด _๊ฐ™์€_ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๊ฐ–๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ์ด ๊ฒฝ์šฐ ํ”Œ๋Ÿฌ๊ทธ์ธ์— ๋Œ€ํ•œ ์Šคํฌ๋ฆฝํŠธ ๊ต์ฒด๋Š” ๋ฌด์—‡์„ ์˜๋ฏธํ•ฉ๋‹ˆ๊นŒ? (์–ด์ฉŒ๋ฉด ์•„๋ฌด๊ฒƒ๋„, ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค).

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

@henriquelalves @eon-์šฐ๋ฆฌ๋„ ๊ฐ™์€ ์ƒ๊ฐ์„ ํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ ๊ฐ™์•„์š”. ๋‚˜๋Š” ์ด๊ฒƒ์ด ๋ฌด์—‡๋ณด๋‹ค UX ๋ฌธ์ œ๋ผ๋Š” ์ ์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ์ง€๊ธˆ๊นŒ์ง€ ์ €๋Š” ์ด ์ ‘๊ทผ ๋ฐฉ์‹์— ๋ถ€๋ถ„์ ์ž…๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ๊ทธ๊ฒƒ์ด ๊ฐ€๋Šฅํ•œ ํ•œ ๋‹จ์ˆœํ•˜๊ฒŒ ์œ ์ง€๋˜๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ํ•ญ์ƒ ์ข‹์€ IMO์ž…๋‹ˆ๋‹ค.

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

ํ™•์žฅ ์Šคํฌ๋ฆฝํŠธ๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ƒ์†๋ฐ›์•„์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ต์ฒดํ•ด๋„ ๋ฌธ์ œ ์—†์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‹ค์‹œ, ๋‚˜๋Š” ์ฝ”๋“œ๋ฒ ์ด์Šค์— ์ต์ˆ™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์–ด์จŒ๋“ , ๋‚˜๋Š” 2 ์„ผํŠธ๋ฅผ ์ฃผ์—ˆ์œผ๋ฏ€๋กœ ์—ฌ๊ธฐ์—์„œ ์‹ค์ œ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๋งก๊ธธ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ;)

@willnationsdev ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์ถ”์ƒ์ ์ธ ๋‚ด์šฉ์„ ํ˜ผ๋™ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด "์ถ”์ƒ" ๊ธฐ๋ณธ ํด๋ž˜์Šค์—๋Š” ๋‹จ์ˆœํžˆ _init()์— ์ธ์‡„ ๋ฌธ์ด ์žˆ์–ด ์‹ค์ˆ˜๋กœ ์ธ์Šคํ„ด์Šคํ™”ํ–ˆ๋Š”์ง€ ์•Œ๋ ค์ค๋‹ˆ๋‹ค....

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

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

@Web-eWorks ์‹ค์ œ๋กœ ์ด ์ž‘์—…์„ ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ(์ง€๊ธˆ ์ด ์ˆœ๊ฐ„) ์ƒ๋‹นํ•œ ๋ถ€๋ถ„์„ ์™„๋ฃŒํ–ˆ์Šต๋‹ˆ๋‹ค(์•„์ง ๊ฐˆ ๊ธธ์ด ์กฐ๊ธˆ ๋‚จ์•„ ์žˆ์Šต๋‹ˆ๋‹ค). Object ํด๋ž˜์Šค์— ๋ฐฑ์—… ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์„ค์ •ํ•˜๊ณ  ์ƒˆ API๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก EditorPlugin ๋ฉ”์„œ๋“œ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฒƒ๊ณผ ํ•จ๊ป˜ ClassDB์— ์‚ฌ์šฉ์ž ์ง€์ • ์œ ํ˜•์— ๋Œ€ํ•œ ์ €์žฅ์†Œ๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ์ „ํžˆ ๊ด€๋ จ ClassDB ํ•จ์ˆ˜( can_instance ๋ฐ get_parent_class ๋“ฑ)๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ๋ชจ๋“  Editor/CreateDialog ํ•ญ๋ชฉ์„ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@willnationsdev ClassDB ์— ๋“ฑ๋กํ•œ๋‹ค๋Š” ๊ฒƒ์€ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋งŒ๋“œ๋Š” ์‚ฌ๋žŒ๋“ค์ด ์ถฉ๋Œ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ํด๋ž˜์Šค์— ์ ‘๋‘์‚ฌ๋ฅผ ๋ถ™์—ฌ์•ผ ํ•œ๋‹ค๋Š” ์˜๋ฏธ์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค^^"

@Zylann ์˜ˆ, ๋ถˆํ–‰ํžˆ๋„ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ด ์‹œ์ ์—์„œ ๋ฐ”์ธ๋”ฉ๊ณผ ํ•ต์‹ฌ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์˜ ๋Œ€๋ถ€๋ถ„์„ ์ •๋ฆฌํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด์ œ Editor, CreateDialog ๋ฐ EditorHelp / DocData ํด๋ž˜์Šค(๋ฐ GDScript ์ปดํŒŒ์ผ๋Ÿฌ)๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์•ž์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด.. ์•„์ง ์ œ์•ˆ๋œ ์†”๋ฃจ์…˜์ด ์ข‹์ง€ ์•Š๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
๊ฐ€์žฅ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์€ ๊ฒƒ์„ ์‹œ๋„ํ•˜๊ธฐ ์ „์— ์ €์—๊ฒŒ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.
๊ฑฐ๋ถ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

2018๋…„ 2์›” 7์ผ 20์‹œ 5๋ถ„์— "Will Nations" [email protected] ์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

@Zylann https://github.com/zylann ์˜ˆ, ํ•„์š”ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์•ˆํƒ€๊น๊ฒŒ๋„.

์ด ์‹œ์ ์—์„œ ๋‚˜๋Š” ๋Œ€๋ถ€๋ถ„์˜ ๋ฐ”์ธ๋”ฉ๊ณผ ํ•ต์‹ฌ์„ ์ •๋ฆฌํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
๋ณ€๊ฒฝ. Editor, CreateDialog ๋ฐ
์ด์ œ EditorHelp / DocData ํด๋ž˜์Šค.

โ€”
๋‹น์‹ ์ด ์–ธ๊ธ‰๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/godotengine/godot/issues/6067#issuecomment-363893711 ,
๋˜๋Š” ์Šค๋ ˆ๋“œ ์Œ์†Œ๊ฑฐ
https://github.com/notifications/unsubscribe-auth/AF-Z2xIYRcs0BFDqTyiFwqlhQWTqjEZtks5tSgIVgaJpZM4JejbZ
.

@reduz ๊ธ€์Ž„, ๋‚˜๋Š” ๋‹น์‹ ์ด ์ด์ „์— ์ œ๊ธฐํ•œ ์šฐ๋ ค๋ฅผ ๊ณ ๋ คํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ–ˆ์Šต๋‹ˆ๋‹ค.

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

์•„ ๊ทธ๋ ‡๊ตฐ์š”.. ๊ทธ๋Ÿผ ์ด๊ฒƒ์˜ ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

2018๋…„ 2์›” 7์ผ 20์‹œ 32๋ถ„์— "Will Nations" [email protected] ์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

@reduz https://github.com/reduz ๊ธ€์Ž„, ๋‚˜๋Š”
์ด์ „์— ์ œ๊ธฐํ•œ ์šฐ๋ ค ์‚ฌํ•ญ์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

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

โ€”
๋‹น์‹ ์ด ์–ธ๊ธ‰๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/godotengine/godot/issues/6067#issuecomment-363900920 ,
๋˜๋Š” ์Šค๋ ˆ๋“œ ์Œ์†Œ๊ฑฐ
https://github.com/notifications/unsubscribe-auth/AF-Z2yn68Iy6AgAKJHZ4qImH4UBAm5skks5tSghSgaJpZM4JejbZ
.

์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ๋ˆ„๊ตฐ๊ฐ€ EditorPlugin์„ ์‚ฌ์šฉํ•˜์—ฌ ์—”์ง„์— ์ƒˆ๋กœ์šด ์œ ํ˜•์˜ ๋…ธ๋“œ๋ฅผ ๋„์ž…ํ•˜๊ณ  ์‹ถ์ง€๋งŒ ํ•ด๋‹น ๋…ธ๋“œ์˜ ์Šคํฌ๋ฆฝํŒ…๋œ ์œ ํ˜•์ด ํŽธ์ง‘ ๊ฐ€๋Šฅํ•˜๊ธฐ๋ฅผ ์›ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค(๊ทธ๋“ค์€ ๋…ธ๋“œ์™€์˜ ์ƒํ˜ธ ์ž‘์šฉ์ด ์—”์ง„ ๋‚ด ์œ ํ˜•์„ ๋ชจ๋ฐฉํ•˜๊ธฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค. ). ๋”ฐ๋ผ์„œ ์˜ˆ๋ฅผ ๋“ค์–ด ๋ฐฑ์—… ์Šคํฌ๋ฆฝํŠธ๋งŒ ์žˆ๋Š” ๋…ธ๋“œ์—์„œ get_script() ๋ฅผ ์‹œ๋„ํ•˜๋ฉด null์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. set_script(null) ์‹œ๋„ํ•˜๋ฉด ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋ฐฑ์—… ์Šคํฌ๋ฆฝํŠธ๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค. set_script(a_script) ๋ฅผ ์‹œ๋„ํ•˜๋ฉด ์ƒˆ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋ฐฑ์—… ์Šคํฌ๋ฆฝํŠธ์˜ ์ƒ์† ๊ณ„์ธต์— ์žˆ๋Š” ๊ฒฝ์šฐ์—๋งŒ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์„ฑ๊ณต์ ์œผ๋กœ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค.

UX์˜ ๊ฒฝ์šฐ ๋ฐฑ์—… ์Šคํฌ๋ฆฝํŠธ๋งŒ ์žˆ์œผ๋ฉด ์Šคํฌ๋ฆฝํŠธ ์•„์ด์ฝ˜์ด ํŽธ์ง‘๊ธฐ์— ํˆฌ๋ช… ์•„์ด์ฝ˜์œผ๋กœ ํ‘œ์‹œ๋˜๋„๋ก ํ•  ๊ณ„ํš์ž…๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฒ„ํŠผ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹"์Šคํฌ๋ฆฝํŠธ ์ œ๊ฑฐ" ๋ฒ„ํŠผ์ด ์•„๋‹Œ "์Šคํฌ๋ฆฝํŠธ ์ถ”๊ฐ€" ๋ฒ„ํŠผ์ด๋ฉฐ, ์ด๋ฅผ ํด๋ฆญํ•˜๋ฉด ํ…์ŠคํŠธ์— ์œ ํ˜• ์ด๋ฆ„์ด ๋ฏธ๋ฆฌ ์ฑ„์›Œ์ง‘๋‹ˆ๋‹ค(๋น„๋ก ์‚ฌ์šฉ์ž๊ฐ€ ์Šคํฌ๋ฆฝํŠธ ์œ ํ˜•์„ GDScript/VisualScript ๋“ฑ์—์„œ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒฝ์šฐ ์Šคํฌ๋ฆฝํŠธ ๊ฒฝ๋กœ๋กœ ๋ฏธ๋ฆฌ ์ฑ„์›€). ๋‹ค๋ฅธ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ํ• ๋‹น๋˜๋ฉด ํˆฌ๋ช… ์•„์ด์ฝ˜์ด ๋‹ค์‹œ ๋ถˆํˆฌ๋ช…ํ•ด์ง‘๋‹ˆ๋‹ค. ๋‘ ๊ฒฝ์šฐ ๋ชจ๋‘ ์Šคํฌ๋ฆฝํŠธ ์•„์ด์ฝ˜์„ ํด๋ฆญํ•˜๋ฉด ํ™œ์„ฑ ์Šคํฌ๋ฆฝํŠธ ์†Œ์Šค ์ฝ”๋“œ(๋‹ค๋ฅธ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ ๋ฐฑ์—… ์Šคํฌ๋ฆฝํŠธ ์†Œ์Šค ์ฝ”๋“œ)๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์˜ ์ด์ ์„ ์‹ค์ œ๋กœ ๋ณด์ง€ ๋ชปํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์ธ์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
ํŠน์ • ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ์ƒ๊ฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

2018๋…„ 2์›” 7์ผ 20์‹œ 46๋ถ„์— "Will Nations" [email protected] ์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ƒˆ๋กœ์šด ์œ ํ˜•์˜ ๋…ธ๋“œ๋ฅผ ์†Œ๊ฐœํ•˜๋ ค๋Š” ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค.
EditorPlugin์„ ์‚ฌ์šฉํ•˜๋Š” ์—”์ง„์ด์ง€๋งŒ ์Šคํฌ๋ฆฝํŒ…๋œ ์œ ํ˜•์˜
ํŽธ์ง‘ ๊ฐ€๋Šฅํ•œ ๋…ธ๋“œ(๊ทธ๋“ค์€ ๋…ธ๋“œ์™€์˜ ์ƒํ˜ธ ์ž‘์šฉ์ด ๋ชจ๋ฐฉํ•˜๊ธฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค.
์—”์ง„ ๋‚ด ์œ ํ˜•). ์˜ˆ๋ฅผ ๋“ค์–ด ๋…ธ๋“œ์—์„œ get_script()๋ฅผ ์‹œ๋„ํ•˜๋ฉด
๋ฐฑ์—… ์Šคํฌ๋ฆฝํŠธ๋งŒ ์žˆ์œผ๋ฉด null์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์‹œ๋„ํ•˜๋ฉด
set_script(null), ์Šคํฌ๋ฆฝํŠธ๋Š” ๋ฐฑ์—… ์Šคํฌ๋ฆฝํŠธ๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ๋‚ด๊ฐ€
set_script(a_script)๋ฅผ ์‹œ๋„ํ•˜๋ฉด ์„ฑ๊ณต์ ์œผ๋กœ ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค.
์ƒˆ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋ฐฑ์—…์˜ ์ƒ์† ๊ณ„์ธต ๊ตฌ์กฐ์— ์žˆ๋Š” ๊ฒฝ์šฐ ์Šคํฌ๋ฆฝํŠธ
์Šคํฌ๋ฆฝํŠธ.

UX์˜ ๊ฒฝ์šฐ ์Šคํฌ๋ฆฝํŠธ ์•„์ด์ฝ˜์ด ํŽธ์ง‘๊ธฐ์— ํ‘œ์‹œ๋˜๋„๋ก ํ•  ๊ณ„ํš์ž…๋‹ˆ๋‹ค.
๋ฐฑ์—… ์Šคํฌ๋ฆฝํŠธ๋งŒ ์žˆ๋Š” ๊ฒฝ์šฐ ํˆฌ๋ช… ์•„์ด์ฝ˜์ž…๋‹ˆ๋‹ค. ๊ทธ ๊ฒฝ์šฐ,
์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฒ„ํŠผ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹"์Šคํฌ๋ฆฝํŠธ ์ถ”๊ฐ€" ๋ฒ„ํŠผ์ด ์•„๋‹ˆ๋ผ "์Šคํฌ๋ฆฝํŠธ ์ถ”๊ฐ€" ๋ฒ„ํŠผ์ž…๋‹ˆ๋‹ค.
"์Šคํฌ๋ฆฝํŠธ ์ œ๊ฑฐ" ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๊ณ  ํ…์ŠคํŠธ๋ฅผ ์ด๋ฆ„์œผ๋กœ ๋ฏธ๋ฆฌ ์ฑ„์›๋‹ˆ๋‹ค.
์œ ํ˜•์˜(ํ•˜์ง€๋งŒ ์Šคํฌ๋ฆฝํŠธ ๊ฒฝ๋กœ๋กœ ๋ฏธ๋ฆฌ ์ฑ„์›Œ์•ผ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
์‚ฌ์šฉ์ž๊ฐ€ GDScript/VisualScript์—์„œ ์Šคํฌ๋ฆฝํŠธ ์œ ํ˜•์„ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒฝ์šฐ
๋“ฑ.). ๋‹ค๋ฅธ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ํ• ๋‹น๋˜๋ฉด ํˆฌ๋ช… ์•„์ด์ฝ˜
๋‹ค์‹œ ๋ถˆํˆฌ๋ช…ํ•ด์ง‘๋‹ˆ๋‹ค. ๋‘ ๊ฒฝ์šฐ ๋ชจ๋‘ ์Šคํฌ๋ฆฝํŠธ ์•„์ด์ฝ˜์„ ํด๋ฆญํ•˜๋ฉด
ํ™œ์„ฑ ์Šคํฌ๋ฆฝํŠธ ์†Œ์Šค ์ฝ”๋“œ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค(๋ฐฑ์—… ์Šคํฌ๋ฆฝํŠธ ์†Œ์Šค ์ฝ”๋“œ๊ฐ€
๋‹ค๋ฅธ ์Šคํฌ๋ฆฝํŠธ๋Š” ์—†์Šต๋‹ˆ๋‹ค).

โ€”
๋‹น์‹ ์ด ์–ธ๊ธ‰๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/godotengine/godot/issues/6067#issuecomment-363904934 ,
๋˜๋Š” ์Šค๋ ˆ๋“œ ์Œ์†Œ๊ฑฐ
https://github.com/notifications/unsubscribe-auth/AF-Z26oeOMT4HpjzDsX8eygMSeUhbTgVks5tSgurgaJpZM4JejbZ
.

๋†’์€ ์ˆ˜์ค€์˜ ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ(EditorPlugins, PluginScript/SubModule ์‹œ์Šคํ…œ)์ด '์™„๋ฒฝํ•œ' ์‚ฌ์šฉ์ž ์ •์˜ ๋…ธ๋“œ ์œ ํ˜•์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ˜„์žฌ ์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜• ์‹œ์Šคํ…œ์€ "๋…ธ๋“œ์˜ ์Šคํฌ๋ฆฝํŠธ"๋ฅผ ์œ„ํ•œ ์–‡์€ ๊ณต์žฅ์œผ๋กœ, ์ƒˆ๋กœ์šด ๋…ธ๋“œ ์œ ํ˜•์„ ๊ตฌ์ถ•ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ์ˆ˜๋งŽ์€ ์›Œํฌํ”Œ๋กœ ๋ฐ ์‚ฌ์šฉ์„ฑ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฒŒ์ž„ ํ”Œ๋ ˆ์ด ์ฝ”๋“œ๋กœ ์‚ฌ์šฉ์ž ์ •์˜ ๋…ธ๋“œ๋ฅผ ํ™•์žฅํ•ฉ๋‹ˆ๋‹ค(๋‚ด์žฅ ๋…ธ๋“œ์™€ ๋ฐ˜๋Œ€). ๋” ์‹œ๊ธ‰ํ•œ ๋ฌธ์ œ๋Š” ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž ์ง€์ • ๋…ธ๋“œ์—์„œ ์ƒ์†๋˜๋Š” ์‚ฌ์šฉ์ž ์ง€์ • ๋…ธ๋“œ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ผ๋ถ€ ํŠน์ • ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ์ €์ˆ˜์ค€ ๋…ธ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํŒŒ๊ดด ๊ฐ€๋Šฅํ•œ ์ง€ํ˜•์— ๋Œ€ํ•œ ํ–‰์ง„ ํ๋ธŒ ๊ธฐ๋ฐ˜ ๋ณต์…€ GridMap ๊ตฌํ˜„, ala Minecraft ๋˜๋Š” ํ–‰์ง„ ํ๋ธŒ/์ด์ค‘ ์œค๊ณฝ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐํƒ€ ์ง€ํ˜• ์‹œ์Šคํ…œ; ์‚ฌ์šฉ์ž ์ •์˜ ์ปจํŠธ๋กค ์œ ํ˜•(๋งŽ์€ ํ˜„๋Œ€ ๊ฒŒ์ž„์—์„œ ๊ตฌํ˜„๋˜๋Š” ์›ํ˜• ๋ฉ”๋‰ด ์ปจํ…Œ์ด๋„ˆ, ์—”์ง„ ์‚ฌ์–‘ ๋ฐ–์— ์žˆ์„ ๋งŒํผ ์ถฉ๋ถ„ํžˆ ๋†’์€ ๋ชจ๋“  ์œ ํ˜•์˜ ์ €์ˆ˜์ค€ ์ปจํŠธ๋กค); ์ƒˆ ๋…ธ๋“œ๋ฅผ ๋“ฑ๋กํ•˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋นŒ๋“œํ•˜๋ ค๋Š” ๋ชจ๋“  ์žฅ์†Œ. ์ด๋Ÿฌํ•œ ๊ฐ๊ฐ์˜ ๊ฒฝ์šฐ ์ผ๋ฐ˜์ ์œผ๋กœ ๊ฒŒ์ž„ํ”Œ๋ ˆ์ด ์ฝ”๋“œ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ์ž ์ •์˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  "๊ตฌํ˜„" ์ฝ”๋“œ(GDScript/GDNative๋กœ ์ž‘์„ฑ)์™€ ๋ถ„๋ฆฌ๋˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ์ „๋‹ฌํ•˜์ง€ ๋ชปํ•œ ๊ฒƒ์€ ์—”์ง„ ๋ชจ๋“ˆ์„ ์ž‘์„ฑํ•˜๊ณ  ์ด์— ๋Œ€ํ•ด ์ปดํŒŒ์ผํ•  ํ•„์š” ์—†์ด ์ปค์Šคํ…€ ๋…ธ๋“œ๊ฐ€ ์—”์ง„ ๋…ธ๋“œ์ฒ˜๋Ÿผ ์ž‘๋™ํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ๋ชฉํ‘œ๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๊ฐœ์„ ์€ ํŠน์ • ๊ธฐ๋Šฅ(๋งŽ์€ ๊ฒƒ์ด ์žˆ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ )์— ์˜ํ•ด ๋ฐ˜๋“œ์‹œ ๊ตฌ๋™๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ "ํ˜„์žฌ ๋ฐฉ์‹์€ ํ›„์ง„ํ•˜๊ณ , ์–ด์„คํ”„๊ณ , ์ง€๋ฃจํ•˜๋‹ค"๋Š” ๊ทผ๊ฑฐ์— ์˜ํ•ด ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค. ์™„์ „ํžˆ ๊ตฌํ˜„๋œ๋‹ค๋ฉด ์ด ์‹œ์Šคํ…œ์€ ์—”์ง„์„ ์žฌ์ปดํŒŒ์ผํ•  ํ•„์š” ์—†์ด GDScript / GDNative์—์„œ ์—”์ง„์˜ ๋‚ด์žฅ ์œ ํ˜•์„ ํ™•์žฅํ•˜๋Š” ๋งค์šฐ ๊ฐ•๋ ฅํ•œ ๋ฐฉ๋ฒ•์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋””์ž์ธ ๊ด€์ ์—์„œ ์ด๊ฒƒ์€ ๋ง ๊ทธ๋Œ€๋กœ ํ˜„์žฌ ์‹œ์Šคํ…œ์— ๋Œ€ํ•œ ์ง์ ‘์ ์ธ ๊ฐœ์„ ์ž…๋‹ˆ๋‹ค.

๊ทธ ๋ชจ๋“  ํ›„์— ํŠน์ • ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ์›ํ•œ๋‹ค๋ฉด: ์ „์ฒด ํ”Œ๋Ÿฌ๊ทธ์ธ / AssetLibrary ์ƒํƒœ๊ณ„ .
์ด๊ฒƒ์ด ์ด ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•œ ์ด์ ์˜ ๋ฒ”์œ„์ž…๋‹ˆ๋‹ค.

์ž, ๋‹ค์Œ์€ ๋ช…์‹œ์ ์ธ ์˜ˆ์ž…๋‹ˆ๋‹ค.

๋‹ค์–‘ํ•œ ์ƒˆ๋กœ์šด ์œ ํ˜•์˜ ๋…ธ๋“œ๋ฅผ ์†Œ๊ฐœํ•˜๋Š” godot-skills ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

ํšจ๊ณผ: Functor ์ˆ˜์ •
Targeter: ๋น„์Šทํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ๋…ธ๋“œ๋ฅผ ์ฐพ๊ณ  ์ˆ˜์ง‘ํ•ฉ๋‹ˆ๋‹ค.
์Šคํ‚ฌ: Targeter์™€ Effects์˜ ๊ณ„์ธต์„ ๊ฒฐํ•ฉํ•˜์—ฌ ๋…ธ๋“œ๋ฅผ ์ฐพ๊ณ  ๋ชจ๋‘์— ํšจ๊ณผ๋ฅผ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.
SkillUser: ์—ฌ๋Ÿฌ ๊ธฐ์ˆ ์„ "์†Œ์œ "

๋‚˜๋Š” ์ด๋Ÿฌํ•œ ๊ฐ ๋…ธ๋“œ๊ฐ€ ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์žฅ๋ฉด์— ์ƒ์„ฑํ•˜๊ณ  ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์„ ์›ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋Ÿฌํ•œ ๋…ธ๋“œ ๊ฐ๊ฐ์€ ๊ธฐ๋ณธ ์œ ํ˜•์œผ๋กœ ์ž‘๋™ํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์ด ๋งŽ์ง€ ์•Š์œผ๋ฉฐ, ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๊ด€๋ จ๋  ๋…ธ๋“œ์— ํŒŒ์ƒ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋ฐฐ์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด์™€ ๊ฐ™์€ ์‚ฌ์šฉ ์‚ฌ๋ก€์˜ ๊ฒฝ์šฐ ์‚ฌ์šฉ์ž๊ฐ€ ํŠน์ • ์Šคํฌ๋ฆฝํŒ…๋œ ๊ธฐ๋Šฅ ์ง‘ํ•ฉ์„ ์ œ๊ฑฐํ•  ์ˆ˜ ์—†๋„๋ก ํ•˜๋ ค๋Š” ๋…ธ๋“œ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์œ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์‚ฌ์šฉ์ž๊ฐ€ ์žฅ๋ฉด์— ์ถ”๊ฐ€ํ•˜๋Š” ๋ชจ๋“  Targeter ๋…ธ๋“œ์— ๋น„ Targeter ํŒŒ์ƒ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋ฐฐ์น˜ํ•˜์ง€ ๋ชปํ•˜๋„๋ก ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์Šคํ‚ฌ์ด Targeter๋ฅผ ์ž์‹์œผ๋กœ ๊ฐ€์งˆ ๋•Œ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ฆ‰๊ฐ์ ์ธ ๊ธฐ๋Šฅ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค(Area2D ๋ฐ CollisionShape2D ๋…ธ๋“œ์™€ ์œ ์‚ฌ).

ํ˜„์žฌ ์›Œํฌํ”Œ๋กœ์—์„œ๋Š” ์‚ฌ์šฉ์ž๊ฐ€...

  1. ์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜• ๋…ธ๋“œ ์ถ”๊ฐ€
    2a. ์ฒจ๋ถ€๋œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ์Šคํฌ๋ฆฝํŠธ ์ถ”๊ฐ€ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๊ฑฐ๋‚˜
    2b. ๋…ธ๋“œ์—์„œ ์Šคํฌ๋ฆฝํŠธ ์†์„ฑ ์„ค์ •
  2. EditorPlugin์ด ํŒŒ์ƒํ•˜๋ ค๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜• ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์œ ์ง€ํ•˜๋Š” ๋Œ€ํ™” ์ฐฝ์—์„œ ์ฐพ์œผ์‹ญ์‹œ์˜ค.

์ด ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ด ๋ชจ๋“  ๊ฒƒ์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ์‚ฌ์šฉ์ž ์ •์˜ ๋…ธ๋“œ ์œ ํ˜•์„ ์ถ”๊ฐ€ํ•˜์‹ญ์‹œ์˜ค.
  2. ์Šคํฌ๋ฆฝํŠธ๋กœ ์ถ”๊ฐ€(์ž๋™์œผ๋กœ ์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜• ์Šคํฌ๋ฆฝํŠธ ํŒŒ์ƒ ์‹œ์ž‘)

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

์ข‹์•„, ๊ทธ๋ž˜์„œ ์—…๋ฐ์ดํŠธ. ๋‚˜๋Š” ํ˜„์žฌ ๋‹ค์Œ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

  • ClassDB ๋Š” ์ด์ œ ์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜•์„ ์ง์ ‘ ์ถ”๊ฐ€ ๋ฐ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • EditorPlugin ์—๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜•๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์•„์ด์ฝ˜๊ณผ ๊ฐ™์€ ๊ธฐํƒ€ ํŽธ์ง‘๊ธฐ ๊ด€๋ จ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ ๋ฐ ์ œ๊ฑฐํ•˜๋Š” ์œ ์‚ฌํ•œ ์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜• ๋ฉ”์†Œ๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฉ”์„œ๋“œ๋Š” EditorPlugin ๊ฐ€ ํ™œ์„ฑ/๋น„ํ™œ์„ฑ์œผ๋กœ ์ „ํ™˜๋  ๋•Œ๋งˆ๋‹ค ๋ฐฉ์ถœ๋˜๋Š” ์ƒˆ ์‹ ํ˜ธ์— ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค.
  • GDScript๋Š” ์ด์ œ ์Šคํฌ๋ฆฝํŠธ์—์„œ ์ƒ์†ํ•  ์‚ฌ์šฉ์ž ์ง€์ • ์œ ํ˜•์˜ ์ด๋ฆ„์—์„œ ์ง์ ‘ ์ƒ์†ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์žฅ๋ฉด ๋…์€ ํ˜„์žฌ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋…ธ๋“œ์˜ ์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜• ์Šคํฌ๋ฆฝํŠธ์™€ ์ผ์น˜ํ•  ๋•Œ ํˆฌ๋ช…ํ•œ ์Šคํฌ๋ฆฝํŠธ ์•„์ด์ฝ˜์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์„ ํด๋ฆญํ•˜๋ฉด ํŽธ์ง‘๊ธฐ์—์„œ ์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜• ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์—ด๋ฆฝ๋‹ˆ๋‹ค. ์ด ์ƒํƒœ์—์„œ๋Š” "์Šคํฌ๋ฆฝํŠธ ์ œ๊ฑฐ"๊ฐ€ ์•„๋‹Œ "์Šคํฌ๋ฆฝํŠธ ์ถ”๊ฐ€" ๋ฒ„ํŠผ์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์„ ํƒํ•˜๋ฉด ์ด ๋ฒ„ํŠผ์€ "์ƒ์†" ํ•„๋“œ๋ฅผ ์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜• ์Šคํฌ๋ฆฝํŠธ์˜ ์ด๋ฆ„์œผ๋กœ ๋ฏธ๋ฆฌ ์ฑ„์›๋‹ˆ๋‹ค(null์ด ์•„๋‹Œ ๊ฒฝ์šฐ).
  • ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ œ๊ฑฐํ•˜๋ ค๊ณ  ํ•˜๋ฉด ์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜• ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์Šคํฌ๋ฆฝํŠธ ๊ฐ’์œผ๋กœ ๋‹ค์‹œ ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ œ๊ฑฐํ•˜๋ ค๋ฉด ๋จผ์ € set_custom_script(RefPtr()); ๋กœ ์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜• ์Šคํฌ๋ฆฝํŠธ ๊ฐ’์„ ์ง€์›Œ์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ๋…ธ๋“œ ์ƒ์„ฑ ๋Œ€ํ™” ์ƒ์ž๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜•์— ๋Œ€ํ•œ ์ƒ์† ๊ด€๊ณ„ ๋ฐ ์ถ”์ƒ ๋…ธ๋“œ๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.
  • project.godot ํŒŒ์ผ์€ ์‹คํ–‰๋œ ๊ฒŒ์ž„์ด ๋‚˜๋จธ์ง€ ๊ฒŒ์ž„์ด ์‹œ์ž‘๋˜๊ธฐ ์ „์— main.cpp ์— ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ชจ๋“  ์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜•์œผ๋กœ ์ฑ„์›Œ์ง‘๋‹ˆ๋‹ค.

๋‚จ์€ ๊ณผ์ œ ์™„๋ฃŒ...

  • ์‚ฌ์šฉ์ž๊ฐ€ ์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜•์— ๋Œ€ํ•œ ํด๋ž˜์Šค API ๋ฌธ์„œ๋ฅผ ์ƒ์„ฑํ•˜๋„๋ก ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • script_create_dialog.cpp ์—์„œ ์‚ฌ์šฉ์ž๊ฐ€ Inherits ํ•„๋“œ๋ฅผ ํŽธ์ง‘ํ•  ์ˆ˜ ์—†๋„๋ก ํ•˜๋Š” ๋ณ„๋„์˜ ๋ฒ„๊ทธ๋ฅผ ๋ชจ๋‘ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.
  • GDScript ์ „์—ญ ๋งต/๋ฐฐ์—ด์—์„œ ์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜•์„ ๋™์ ์œผ๋กœ ์ถ”๊ฐ€ ๋ฐ ์ œ๊ฑฐํ•˜๋Š” ๋ฐฉ๋ฒ• ์ฐพ๊ธฐ *
  • VisualScript์—์„œ ์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜• ์ง€์› ๊ตฌํ˜„

* ์‹ค์ œ๋กœ ์ด๊ฒƒ์— ๋Œ€ํ•ด ๋ช‡ ๊ฐ€์ง€ ์งˆ๋ฌธ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋จผ์ € GDScriptLanguage ํด๋ž˜์Šค์—์„œ ์ „์—ญ์„ ์ œ๊ฑฐํ•˜๋Š” ๋ฐฉ๋ฒ• ์—†์ด gdscript_compiler.cpp ํŒŒ์ผ์—์„œ add_global_constant / _add_global ๋ด…๋‹ˆ๋‹ค. ์‹ฑ๊ธ€ํ†ค์ด ์ถ”๊ฐ€๋˜๊ฑฐ๋‚˜ ์ œ๊ฑฐ๋  ๋•Œ๋งˆ๋‹ค ์™„์ „ํžˆ ๋‹ค์‹œ ์ดˆ๊ธฐํ™”๋ฉ๋‹ˆ๊นŒ? ์ „์—ญ ์‹๋ณ„์ž๋Š” ์–ด๋–ป๊ฒŒ ๋™์ ์œผ๋กœ ํŽธ์ง‘๋ฉ๋‹ˆ๊นŒ? ์ด๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋ณ€์ˆ˜์— ๋จผ์ € ๋กœ๋“œํ•˜์ง€ ์•Š๊ณ ๋„ MyNode.static_func() ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

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

extends Node # an in-engine type.
extends \ # triggers an error if left alone, but would prompt a dropdown of the plugin API names for auto-completion as well as the names of any scripts in the current project that are not part of a plugin.
extends \MyPlugin\ # triggers an error if left alone, but would prompt a dropdown of the scripted types that exist for the plugin
extends \MyNode # extends my_node.gd somewhere in res://
extends \MyPlugin\MyNode # extends my_node.gd somewhere in res://addons/[my_plugin_something?]/

func _ready():
    print(\MyNode.CONSTANT) # would print CONSTANT in the current project's my_node.gd script

์–ด์จŒ๋“  ์ด ๋ชจ๋“  ^๋Š” ํ˜„์žฌ ์ฃผ๋ณ€์—์„œ ๋˜์ง€๊ณ  ์žˆ๋Š” ์•„์ด๋””์–ด์ผ ๋ฟ์ž…๋‹ˆ๋‹ค. ๋„ค์ž„์ŠคํŽ˜์ด์Šค๊ฐ€ ๋„์ž…๋œ ๊ฒฝ์šฐ EditorNode ์˜ resource_saved ์‹ ํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ํŒŒ์ผ ์ด๋ฆ„์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ด๋ฆ„๊ณผ ์ž๋™์œผ๋กœ ์—ฐ๊ฒฐ๋˜๋„๋ก ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ๋“ค์€ ๋ฐ˜๋“œ์‹œ ์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜•์ผ ํ•„์š”๋Š” ์—†์ง€๋งŒ(๊ฐ์ฒด์—์„œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ œ๊ฑฐํ•  ์ˆ˜ ์—†๋‹ค๋Š” ์˜๋ฏธ์—์„œ) ๋งค์šฐ ์œ ์šฉํ•˜๊ณ  ์ง๊ด€์ ์ธ ์ด๋ฆ„๋งŒ์œผ๋กœ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์Šคํฌ๋ฆฝํŠธ๋Š” ๋งจ ์œ„์— ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์ œ๋ชฉ์„ ์ œ๊ณตํ•˜์—ฌ ๊ธฐ๋ณธ ์ž๋™ ์ด๋ฆ„ ์ง€์ •( filename.capitalize().replace(" ", "") ?)์„ ์žฌ์ •์˜ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค(์˜ˆ: \MyPlugin\mynode ). ์ด์ œ ๊ฐ‘์ž๊ธฐ "\MyPlugin\mynode"๋Š” ํ•ด๋‹น ์Šคํฌ๋ฆฝํŠธ์˜ ์ „์—ญ ์‹๋ณ„์ž์ž…๋‹ˆ๋‹ค.

์—ฌ๊ธฐ๊นŒ์ง€์˜ ์ง„ํ–‰ ์ƒํ™ฉ์˜ ์Šค๋‹ˆํŽซ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

@willnationsdev \ ๋ฅผ ์„ ํƒํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ์ด๋ฏธ ์ด์Šค์ผ€์ดํ”„ ๋ฐ ์—ฌ๋Ÿฌ ์ค„์— ์‚ฌ์šฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. . , : ๋˜๋Š” :: ๊ฐ€ ๋” ์ข‹์•„ ๋ณด์ž…๋‹ˆ๋‹ค.

@Zylann ํ”„๋กœ์ ํŠธ์— ์ถ”๊ฐ€๋˜๋Š” ๋ชจ๋“  ๋…ธ๋“œ์˜ ์ ‘๋‘์‚ฌ๋กœ ๊ตฌ๋ถ„ ๊ธฐํ˜ธ๋ฅผ ์‚ฌ์šฉํ•  ๊ณ„ํš์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์˜ˆ๋ฅผ ๋“ค์–ด res://container.gd ์— ์žˆ๋Š” ์Šคํฌ๋ฆฝํŠธ๋Š” ์‹ค์ œ Container ํด๋ž˜์Šค์™€ ์ถฉ๋Œํ•˜๋Š” ๊ฒƒ์„ ์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋งˆ์นจํ‘œ(.)๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณด์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

var engine_type = Container.new()
var script_type = .Container.new()
var plugin_script_type = .MyPlugin.Container.new()

๊ทธ๋Ÿฐ ํ˜•์‹์— ๋Œ€ํ•ด ๋ฐ˜๋Œ€ํ•˜๋Š” ์‚ฌ๋žŒ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

ํŽธ์ง‘ํ•˜๋‹ค:

ํŒŒ์ƒ ํด๋ž˜์Šค ํ•จ์ˆ˜ ๋‚ด์—์„œ ๋ถ€๋ชจ์˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์ง€๋งŒ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

func _virtual_method():
    ._virtual_method() # parent stuff
    # my stuff

ํ  ... ์ƒ์ˆ˜ ๋ฐ / ๋˜๋Š” ๋ณ€์ˆ˜์— ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ ๊ด„ํ˜ธ๋Š” ์ˆ˜ํผ ํ•จ์ˆ˜์ด๊ณ  ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๊ฐ€๋Šฅํ•œ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์‹๋ณ„์ž์ž„์„ ์˜๋ฏธํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

๊ฐœ์ธ์ ์œผ๋กœ '์ž๋™ ๋“ฑ๋ก' ์Šคํฌ๋ฆฝํŠธ์˜ ์ด๋ฆ„์„ ํŒŒ์ผ์˜ ์„ ์–ธ์œผ๋กœ ์ œ์–ดํ•˜๋Š” โ€‹โ€‹๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

register <NAME> extends <PARENT>

๋˜๋Š” GDScript์— ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ํ˜„์žฌ extend <NAME> ํ”„๋กค๋กœ๊ทธ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ์œ ์‚ฌํ•œ ๊ตฌ๋ฌธ์ž…๋‹ˆ๋‹ค.

ํŽธ์ง‘: ๋˜ํ•œ ๋ถ€๋ชจ(์˜ˆ: Spatial)์—์„œ ํŒŒ์ƒ๋œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉ์ž ์ง€์ • ์ž์‹(์˜ˆ: Sprite3D->CustomType)์— ํ• ๋‹นํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฌป๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ด๋ฏธ ์—”์ง„ ์œ ํ˜•์— ๋Œ€ํ•ด ์ž‘๋™ํ•˜๋ฉฐ ์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜• ์ž์ฒด์—์„œ ํŒŒ์ƒ๋˜๋„๋ก ํ• ๋‹น๋œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ œํ•œํ•˜๋Š” ๊ฒƒ์€ ์ž˜ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@Web-eWorks ์ถฉ๋ถ„ํžˆ ๊ณต์ •ํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ API๋ฅผ ์™„์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์ž‘์—…ํ•œ ๋‹ค์Œ PR์ด ์ œ์ถœ๋˜๋ฉด ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ๋Œ€ํ•œ ์ƒˆ ๋ฌธ์ œ๋ฅผ ์—ด๊ฒ ์Šต๋‹ˆ๋‹ค.

@Web-eWorks๊ฐ€ ์˜๋ฏธํ•˜๋Š” ๋ฐ”๋ฅผ ์ž˜ ์ดํ•ดํ•˜๋”๋ผ๋„ ์—ฌ์ „ํžˆ ์ด ์งˆ๋ฌธ์ด ์žˆ์Šต๋‹ˆ๋‹ค. Object ์— ๋‹จ์ผ ์Šคํฌ๋ฆฝํŠธ๋งŒ ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์–ด๋–ป๊ฒŒ ... "์Šคํฌ๋ฆฝํŠธ ๊ฐ€๋Šฅ"ํ•ฉ๋‹ˆ๊นŒ? ๊ทธ์™€ ๋ณ„๊ฐœ๋กœ ClassDB์— ๋“ฑ๋กํ•˜๋Š” ๊ฒƒ์€ ํ”„๋กœ๊ทธ๋ž˜๋จธ์™€ ๋””์ž์ด๋„ˆ์˜ ์‚ฌ์šฉ ์ธก๋ฉด์—์„œ ๊ธ€๋กœ๋ฒŒ ์‹๋ณ„์ž์— ๋ถˆ๊ณผํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

@Zylann ๋‚ด ํฌํฌ์—์„œ ์ˆ˜ํ–‰ํ•œ ์ž‘์—…์€ Object custom_script ์†์„ฑ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฐ’์ด ํ• ๋‹น๋œ ๊ฒฝ์šฐ์—๋งŒ ์ค‘์š”ํ•˜์ง€๋งŒ ์Šคํฌ๋ฆฝํŠธ ๊ฐ€ ํ• ๋‹น๋œ ๊ฒฝ์šฐ ๊ธฐ๋ณธ script ์†์„ฑ์— ๋Œ€ํ•œ ๋ฐฑ์—… ์Šคํฌ๋ฆฝํŠธ/์ œ์•ฝ ์กฐ๊ฑด ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. script custom_script ์„ค์ •๋˜๊ณ  Script ๋ฅผ script ์— ์ƒˆ๋กœ ํ• ๋‹นํ•˜๋ฉด Script ์ธ์Šคํ„ด์Šค๋Š” custom_script ์—์„œ ํŒŒ์ƒ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด ๋ชจ๋“  ๊ฒƒ์€ ๋ฐฐํ›„์—์„œ Object ์— ์˜ํ•ด ๊ด€๋ฆฌ๋˜๋ฏ€๋กœ ์—”์ง„์— ๊ด€ํ•œ ํ•œ Object ์—๋Š” ์—ฌ์ „ํžˆ 1๊ฐœ์˜ ์‹ค์ œ ์Šคํฌ๋ฆฝํŠธ๋งŒ ์žˆ์Šต๋‹ˆ๋‹ค.

ClassDB ์ฝ˜ํ…์ธ ์—๋Š” ๋“ฑ๋ก๋œ ์‚ฌ์šฉ์ž ์ง€์ • ์œ ํ˜•์˜ ๋ณด์กฐ ๋งต์ด ์žˆ์œผ๋ฉฐ ์Šคํฌ๋ฆฝํŠธ ์ž์ฒด ๋ฐ ๊ธฐํƒ€ ์ •๋ณด๋ฅผ ํ• ๋‹นํ•œ ์ด๋ฆ„์— ๋งคํ•‘ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ๊ด€๋ จ ์ƒ์† ๋ฐฉ๋ฒ•( get_class_list , is_parent_class , get_parent ๋“ฑ)๊ณผ ํ•จ๊ป˜ ํ•ด๋‹น ์ด๋ฆ„๊ณผ ์ƒ์† ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๊ฒƒ์€ ์ผ๋ถ€ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์˜ตํŠธ์ธ ํ”Œ๋ž˜๊ทธ๋กœ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. get_class_list ๋Š” ์ด์ œ true ๋ฅผ ๋‘ ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌํ•˜๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜•๋งŒ ํฌํ•จํ•˜๋Š” bool ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์—”์ง„์˜ ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„๊ณผ์˜ ํ˜ธํ™˜์„ฑ์ด ๊นจ์ง€๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

@willnationsdev ๊ทธ๋ž˜์„œ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋‚ด์žฅ ํด๋ž˜์Šค์ฒ˜๋Ÿผ ์ž‘๋™ํ•˜๋„๋ก ํ•˜๋Š” ์‹œ์Šคํ…œ์—์„œ ์‚ฌ์šฉ์ž๊ฐ€ ๋ชจ๋“  ์Šคํฌ๋ฆฝํŠธ์™€ ์• ๋“œ์˜จ์ด ๋‚ด์žฅ ํด๋ž˜์Šค์™€ ๊ฐ™์€ ์ผ๋ฅ˜ ์‹œ๋ฏผ์œผ๋กœ ๊ฐ„์ฃผ๋˜๊ณ  "๊ตฌ์‹" ๋ฐฉ์‹์„ ๋ฒ„๋ฆฌ๊ธฐ๋ฅผ ์›ํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์•„. ํ˜„์žฌ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์€ extends Node VBoxContainer ์— ๋„ฃ์„ ์ˆ˜ ์žˆ๊ณ  ์—ฌ์ „ํžˆ ์ž˜ ์ž‘๋™ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ˜„์žฌ ๊ตฌํ˜„์ด ์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜•์— ๋Œ€ํ•œ ๋™์ž‘์„ ์ค‘๋‹จํ•˜๋ฉด ๋ช‡ ๊ฐ€์ง€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์—”์ง„ ์œ ํ˜•์—์„œ ์ง์ ‘ ํŒŒ์ƒ๋œ '์ผ๋ฐ˜' ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ ์‚ฌ์šฉ์ž ์ •์˜ ์Šคํฌ๋ฆฝํŠธ์˜ ๋™์ž‘์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?

@Zylann ์ด๊ฒƒ์ด ๋ฐ”๋กœ ๋‚ด๊ฐ€ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ๋„์ž…ํ•˜์—ฌ ์—”์ง„ ๋‚ด ์œ ํ˜•๊ณผ ์ถฉ๋Œํ•˜์ง€ ์•Š๊ณ  ์ด๋ฆ„์„ ํ†ตํ•ด ์Šคํฌ๋ฆฝํŠธ์™€ ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค. ์‚ฌ๋žŒ๋“ค์ด ์ƒˆ๋กœ์šด ๋ฐฉ๋ฒ•๋งŒ ์‚ฌ์šฉํ•˜๊ณ  ์˜› ๋ฐฉ๋ฒ•์„ ๋ฌด์‹œํ•˜๋Š” ๊ฒƒ์„ ๋ง‰๋Š” ๊ฒƒ์€ ์—†์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‚˜๋Š” ์‹ค์ œ๋กœ ๊ทธ๊ฒƒ์ด ์ „๋ฐ˜์ ์œผ๋กœ ๋” ๋‚˜์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋งค๋ฒˆ ๋ช…์‹œ์  ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์€ ํž˜๋“  ์ผ์ž…๋‹ˆ๋‹ค.

@Web-eWorks ์—ฌ๊ธฐ์—์„œ ํŒ”๋กœ์šฐํ•˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์ง€๋งŒ...

์ปค์Šคํ…€ ์œ ํ˜•์€ ํŠนํžˆ ์ƒ์†์„ ์œ„ํ•ด ์—”์ง„ ๋‚ด ์œ ํ˜•์ฒ˜๋Ÿผ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์‚ฌ์šฉ์ž ์ง€์ • ์œ ํ˜•์—์„œ ํ™•์žฅํ•˜๋Š” ๊ฒฝ์šฐ ์—”์ง„ ๋‚ด ๊ณ„์ธต ๊ตฌ์กฐ์˜ ์™„์ „ํžˆ ๋‹ค๋ฅธ ๋ถ„๊ธฐ์—์„œ ํ™•์žฅํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ „. Node ํ™•์žฅํ•˜๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜• MyNode ์„ ์ƒ์„ฑํ•˜๋ฉด Node2D ๋ฅผ ๋„ฃ์„ ์ˆ˜ ์—†๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ํ•ด๋‹น ์Šคํฌ๋ฆฝํŠธ๋ฅผ VBoxContainer ์— ๋„ฃ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. Node2D "์ผœ๊ธฐ" a VBoxContainer . ์ด๊ฒƒ์€ ์‹ค์ œ๋กœ ์˜๋„๋œ ๋™์ž‘์ž…๋‹ˆ๋‹ค.

์ด์ œ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๊ฐœ๋…์„ ์‚ฌ์šฉํ•˜๋ฉด ์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜•์ด ์•„๋‹Œ ๋ช…๋ช…๋œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๊ฐ–๋Š” ๊ฒƒ์ด ์ด์ƒ์ ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด ๊ฒฝ์šฐ Node ๋ฅผ ํ™•์žฅํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋งŒ๋“ค๊ณ  Node , VBoxContainer AND MyNode ์— ๋„ฃ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ง์ด ๋ผ?

๊ทธ๋ž˜์„œ ๋‚ด๊ฐ€ ๋งํ•˜๋ ค๋Š” ๊ฒƒ์€ MeshInstance $๋ฅผ ์ƒ์†ํ•˜๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜• MyNode ์„ ๋งŒ๋“ค๊ณ  ํŽธ์ง‘๊ธฐ์—์„œ ํ•ด๋‹น ๋…ธ๋“œ์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค๊ณ  Spatial ๋ฅผ ์ƒ์†ํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜๋Š” ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. MyNode ์œ ํ˜•์˜ ๋…ธ๋“œ์— ์—ฐ๊ฒฐํ•˜๋ฉด ์ œ๋Œ€๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๊นŒ? ๊ทธ๊ฒƒ์€ '์—”์ง„' ๋…ธ๋“œ์—์„œ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜๋ฉฐ, ์ด๊ฒƒ์ด ์šฐ๋ฆฌ๊ฐ€ ์—๋ฎฌ๋ ˆ์ดํŠธํ•ด์•ผ ํ•˜๋Š” ๋™์ž‘์ž…๋‹ˆ๋‹ค.

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

@Web-eWorks ์˜ˆ, ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ClassDB ์˜ custom_types ๋งต์— ์žˆ๋Š” ๋ชจ๋“  "์ฒซ ๋ฒˆ์งธ ์ˆ˜์ค€" ํ•ญ๋ชฉ์€ $#$ classes #$ ๋งต์˜ ์œ ํ˜•์— ๋‹ค์‹œ ๋งํฌ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜•์ด ์ƒ์„ฑ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์‚ฌ์šฉ์ž ์ง€์ • ์œ ํ˜•์—์„œ ์ตœ๋Œ€ Object ๊นŒ์ง€ ์—”์ง„ ์œ ํ˜•์œผ๋กœ ๋‹ค์‹œ ์ด๋™ํ•  ๋•Œ ์ƒ์† ์ฒด์ธ์ด ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.

@willnationsdev ํ™•์‹คํžˆ ํ•˜์ž๋ฉด MyNode ์— _ready ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  Spatial์—์„œ ํŒŒ์ƒ๋œ ์‚ฌ์šฉ์ž ์Šคํฌ๋ฆฝํŠธ์˜ ์ค€๋น„ ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด Spatial._ready(), MeshInstance._ready(), MyNode._ready(), script._ready() ์™€ ๊ฐ™์ด ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค. ? (๋˜๋Š” _ready ๊ฐ€ ๋ฐœ์†ก๋˜๋Š” ์ฃผ๋ฌธ์— ์ƒ๊ด€์—†์ด.)

๋‚˜๋Š” ์ด๊ฒƒ์ด ๋ถˆํ•„์š”ํ•˜๊ณ  ํ˜ผ๋ž€์Šค๋Ÿฝ๋‹ค๋Š” ๋‚ด ๊ฒฌํ•ด๋ฅผ ์—ฌ์ „ํžˆ ๊ณ ์ˆ˜ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋Š” ์ฝ”์–ด ์—”์ง„์ด ์•„๋‹Œ ์—๋””ํ„ฐ UI์—์„œ ํ•ด๊ฒฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@reduz ๊ทธ๋ ‡๋‹ค๊ณ  Editor UI๋งŒ์œผ๋กœ๋Š” ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ๊ฐœ์ฒด์— ๋Œ€ํ•œ ์‚ฌ์šฉ์ž์˜ ์Šคํฌ๋ฆฝํŠธ ์กฐ์ž‘์„ ์ œ์–ดํ•˜๋ ค๋Š” ๊ฒฝ์šฐ์—๋Š” ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์„ค์ •ํ•˜๊ณ  ์‹ถ์–ดํ•˜๋Š” ๊ธฐ๋Šฅ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

gdscript_compiler๊ฐ€ ์Šคํฌ๋ฆฝํŒ…๋œ ์œ ํ˜•์— ๋Œ€ํ•œ ์ƒˆ๋กœ์šด ์ „์—ญ ์‹๋ณ„์ž๋ฅผ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•ด ClassDB์—์„œ ๋ชจ๋‘ ์ถ”์ ํ•˜๊ณ  ClassDB๊ฐ€ ์—”์ง„์˜ ๋ชจ๋“  ์ƒ์† ์ •๋ณด๋ฅผ ๊ด€๋ฆฌํ•˜๋„๋ก ํ—ˆ์šฉํ•˜๋Š” ๋Œ€์‹  EditorData์˜ ์ฝ˜ํ…์ธ ๋ฅผ ์ฐธ์กฐํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ œ์•ˆํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

๋ฌผ๋ก  ์—๋””ํ„ฐ UI์˜ ๊ด€์ ์—์„œ ํ’€์–ด์•ผ ํ•  ๋ถ€๋ถ„๋„ ์žˆ์ง€๋งŒ, ํ•ต์‹ฌ์ ์œผ๋กœ ํ’€์–ด์•ผ ํ•  ๋ถ€๋ถ„๋„ ์žˆ๋‹ค. ClassDB์˜ ๊ด€์ ์—์„œ ์—”์ง„์— ์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜•์„ ์ถ”๊ฐ€ํ•˜๋Š” _actual_ ์œ ํ˜•์€ ๋งค์šฐ ๊ฐ•๋ ฅํ•˜๊ณ  ๊ถ๊ทน์ ์œผ๋กœ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ํ˜ผ๋ž€์Šค๋Ÿฌ์šด ํ•œ, ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ํ˜„์žฌ ์‹œ์Šคํ…œ๋ณด๋‹ค ๋” ํ˜ผ๋ž€์Šค๋Ÿฝ์ง€ ์•Š๊ณ  ์•„๋งˆ๋„ ๋œํ•  ๊ฒƒ์ด๋ผ๊ณ  ์—ฌ์ „ํžˆ ์ฃผ์žฅํ•ฉ๋‹ˆ๋‹ค.

@Web-eWorks ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ์ƒ์† ๋ฐ์ดํ„ฐ๋ฅผ ํŽธ์ง‘๊ธฐ์—์„œ ์ถ”์ ํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์€ ์‹ค์ œ๋กœ ๋‚ด ์ƒ๊ฐ์— ํ›จ์”ฌ ๋” ํ˜ผ๋ž€์Šค๋Ÿฌ์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํŽธ์ง‘๊ธฐ ์—†์ด ๊ฒŒ์ž„์„ ์‹คํ–‰ํ•˜๋ฉด ํ•ด๋‹น ์œ ํ˜• ์ •๋ณด๊ฐ€ ๋” ์ด์ƒ ์กด์žฌํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ด์ƒํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ๋ฉ๋‹ˆ๋‹ค project.godot ClassDB ์‹œ์ž‘ ์‹œ ์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜•์„ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•œ EditorPlugins ์—†์Œ์œผ๋กœ ์ธํ•ด ์žฅ๋ฉด์„ ์‹คํ–‰ํ•  ๋•Œ GDScript๊ฐ€ ์ปดํŒŒ์ผ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค).

@Web-eWorks ๊ทธ๋ฆฌ๊ณ  ์ด์ „ ์งˆ๋ฌธ์— ๋Œ€๋‹ตํ•˜๊ธฐ ์œ„ํ•ด ์˜ˆ, ์ œ๋Œ€๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด ํ…Œ์ŠคํŠธ ์‹œ๋‚˜๋ฆฌ์˜ค์—๋Š” $ GDSkillsEffect > GDSkillsAPI > Node ๋ฅผ ํ™•์žฅํ•˜๋Š” Node.gd ๊ฐ€ ์žˆ๊ณ  ๊ฐ ์Šคํฌ๋ฆฝํŠธ์— ๊ตฌํ˜„๋œ _ready ๋ฉ”์„œ๋“œ๋Š” ์ ์ ˆํ•œ ์ฃผ๋ฌธ: API, ํšจ๊ณผ, Node.gd.

๋‘ ๊ฐœ์˜ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋ชจ๋‘ ์ด๋ฆ„์œผ๋กœ ์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜• ์Šคํฌ๋ฆฝํŠธ์—์„œ ์ƒ์†์„ ์‹œ๋„ํ•  ๋•Œ๋งˆ๋‹ค ํ˜„์žฌ ์ผ์ข…์˜ ๋ฌดํ•œ ๋ฃจํ”„ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ „. Node.gd ์— extends GDSkillsEffect ๊ฐ€ ์žˆ๊ณ  gdskills_effect.gd ์— extends GDSkillsAPI ๊ฐ€ ์žˆ์œผ๋ฉด gdskills_effect.gd ๋˜๋Š” gdskills_api.gd ๋ฅผ ์ˆ˜์ •ํ•˜๊ณ  ์ €์žฅํ•˜๋ ค๊ณ  ํ•˜๋ฉด ํŽธ์ง‘๊ธฐ๊ฐ€ ๋ฌดํ•œํžˆ "๋กœ๋“œ"ํ•œ ๋‹ค์Œ ์ถฉ๋Œํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์ด ์•„๋งˆ๋„ ํ˜„์žฌ ๋‚˜์˜ ๊ฐ€์žฅ ํฐ ๋ฒ„๊ทธ์ผ ๊ฒƒ์ด๋‹ค.

@willnationsdev ์•„, ์•„๋‹ˆ์š”, Node.gd ํ™•์žฅ Node , _not_ GDSkillsEffect ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. _that_์ด ์ž‘๋™ํ•˜๋ฉด ๋ชจ๋“  ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ์€ ์žฅ๋ฉด ํŠธ๋ฆฌ์˜ ํ‘œํ˜„์ž…๋‹ˆ๋‹ค.

-> User Script:
  extends Node
  func _ready(): pass

@Web-eWorks ์•„, ๋ฌด์Šจ ๋ง์”€์ธ์ง€ ์•Œ๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ธ€์Ž„, ๊ทธ๊ฒƒ์€ ์ž‘๋™ํ•ด์•ผํ•˜์ง€๋งŒ ๋ฐฉ๊ธˆ ํ…Œ์ŠคํŠธํ–ˆ์œผ๋ฉฐ Object::set_script() ๋…ผ๋ฆฌ๊ฐ€ ์–ด๋–ค ์ด์œ ๋กœ ์ฐจ๋‹จํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋ฏ€๋กœ ์ˆ˜์ •ํ•ด์•ผ ํ•  ๋ฒ„๊ทธ์ž…๋‹ˆ๋‹ค. XD Node ๊ฐ€ ์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜• ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํŒŒ์ƒ์‹œํ‚ค์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ๊ฐ์ง€ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์‹คํŒจํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@Web-eWorks ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ์ด๊ฒƒ์€ ClassDB์—์„œ ๋ณ€๊ฒฝํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๊ฐ ์Šคํฌ๋ฆฝํŒ… ์–ธ์–ด๊ฐ€ ๋‹ค๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์ด ํ•ต์‹ฌ์—์„œ ํ•ด๊ฒฐ๋  ํ•„์š”๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Mono์—์„œ ์ƒˆ ํด๋ž˜์Šค๋ฅผ ์‰ฝ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ž‘๋™ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. GDScript์˜ ๊ฒฝ์šฐ ์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์„ ๋ฏธ๋ฆฌ ๋กœ๋“œ๋œ ์ „์—ญ์œผ๋กœ ๋…ธ์ถœํ•˜๋Š” ๊ฐ„๋‹จํ•œ ๊ฒฝ์šฐ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. PR์—์„œ ์ œ์•ˆํ•œ ๋งŒ๋Šฅ ์†”๋ฃจ์…˜์€ ํ™•์‹คํžˆ ๊ฐˆ ๊ธธ์ด ์•„๋‹™๋‹ˆ๋‹ค.

@willnationsdev ๋‚˜๋Š” ๋‹น์‹ ์˜ ๋…ธ๋ ฅ์— ๊ฐ์‚ฌํ•˜์ง€๋งŒ ์ด๊ฒƒ์€ ์ด๋ฏธ ๋์—†์ด ๋…ผ์˜๋˜์—ˆ์œผ๋ฉฐ ํ•ฉ์˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

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

@willnationsdev ์ฐธ๊ณ ๋กœ ์—”์ง„ ๋™์ž‘์€ ์ƒ์† ๊ณ„์ธต ๊ตฌ์กฐ์—์„œ _something_์„ ํ™•์žฅํ•˜๊ฑฐ๋‚˜ ๊ทธ ์ด์ „์˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋…ธ๋“œ์— ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ extends Spatial MeshInstance ์— ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ Control ๋˜๋Š” Node ์—๋Š” ์ถ”๊ฐ€ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค Spatial . ์ด๊ฒƒ์€ ๋ณต์ œํ•ด์•ผ ํ•˜๋Š” ๋™์ž‘์ž…๋‹ˆ๋‹ค. (๋ถ€๋‹ด์—†์ด...)

@reduz ๊ทธ๋Ÿฌ๋‚˜ Mono์—์„œ ์ƒˆ ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ์—”์ง„์˜ ์ƒ์† ๊ณ„์ธต ๊ตฌ์กฐ์— ์ถ”๊ฐ€๋ฉ๋‹ˆ๊นŒ? ๋˜๋Š” ํŽธ์ง‘๊ธฐ์˜ ๋…ธ๋“œ ์ƒ์„ฑ ๋Œ€ํ™” ์ƒ์ž? ์•„๋งˆ๋„ ์ด๊ฒƒ์˜ ๋ชฉ์ ์ด ๋ฌด์—‡์ธ์ง€ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ๊ธฐ์ˆ ํ•˜๋Š” ์ƒˆ๋กœ์šด ๋ฌธ์ œ๋ฅผ ์—ด์–ด์•ผ ํ•  ํ•„์š”๊ฐ€ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์ €๋Š” ์šฐ๋ฆฌ๊ฐ€ ์—ฌ๊ธฐ์„œ ๊ฐ™์€ ๊ฒƒ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ์ง€ ์•Š๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

ClassDB ์ˆ˜์ •์˜ ์š”์ ์€ ์—”์ง„์„ ๋‹ค์‹œ ์ปดํŒŒ์ผํ•  ํ•„์š” ์—†์ด ์ƒˆ๋กœ์šด ์œ ํ˜•์˜ ๋…ธ๋“œ(๋˜๋Š” ๋ฆฌ์†Œ์Šค)๋ฅผ ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. @willnationsdev ๊ฐ€ ๋™์ผํ•œ ๋ถ„๊ธฐ์—์„œ ์ž‘์—…ํ•˜๊ณ  ์žˆ๋Š” ์ ‘์„  ๋ฌธ์ œ์ด์ง€๋งŒ GDScript์— ์ƒˆ๋กœ์šด ์‚ฌ์šฉ์ž ์ •์˜ ์ „์—ญ์„ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์˜ ์š”์ ์€ ํ•ดํ‚น์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์—”์ง„ ์œ ํ˜•์„ ํ™•์žฅํ•˜๊ธฐ ์œ„ํ•ด ์ž˜ ์„ค๊ณ„๋œ _์‹œ์Šคํ…œ_์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@Web-eWorks ์—”์ง„ ์ƒ์† ๊ณ„์ธต์€ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์•„๋‹Œ C++์šฉ์ž…๋‹ˆ๋‹ค. ๋‘ ๊ฐ€์ง€๋ฅผ ํ˜ผํ•ฉํ•˜๋ ค๋Š” ์‹œ๋„๋Š” ์ฒ˜์Œ๋ถ€ํ„ฐ ๊ฐœ๋…์ ์œผ๋กœ ์ž˜๋ชป๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

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

@Web-eWorks Mono๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์ƒˆ๋กœ์šด ํด๋ž˜์Šค์ด๊ธฐ ๋•Œ๋ฌธ์— ๋งˆ์น˜ ์ƒˆ๋กœ์šด ํด๋ž˜์Šค๊ฐ€ ์ถ”๊ฐ€๋œ ๊ฒƒ์ฒ˜๋Ÿผ ํˆฌ๋ช…ํ•˜๊ฒŒ ๋ณด์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. GDScript์˜ ๊ฒฝ์šฐ ํด๋ž˜์Šค๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ํŒŒ์ผ์ด๋ฏ€๋กœ ์ด ๋ฐฉ๋ฒ•์œผ๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ์ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์„ค์ •์„ ์œ„ํ•ด ์ „์šฉ UI๊ฐ€ ์žˆ๋Š” ์ƒˆ ์ „์—ญ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์‹ฑ๊ธ€ํ†ค ์ž๋™ ๋กœ๋“œ์˜ ๊ฒฝ์šฐ์™€ ๊ฐ™์ด)... ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹์—”์ง„ ํด๋ž˜์Šค๊ฐ€ ์•„๋‹Œ ์Šคํฌ๋ฆฝํŠธ ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค.

@willnationsdev ๋‚ด ์š”์ ์€ ์—”์ง„์— ์‹ค์ œ ์ƒˆ ํด๋ž˜์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด ์ž˜๋ชป๋˜์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ํ˜ผ๋ž€์Šค๋Ÿฌ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์žˆ๋Š” ๋…ธ๋“œ์ผ ๋ฟ์ด๋ฏ€๋กœ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ˆจ๊ธฐ๋Š” ๋Œ€์‹  ๋งŒ๋“ค๊ธฐ ๋Œ€ํ™” ์ƒ์ž์—์„œ ๋” ์ž˜ ๋ณด์ด๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ๋งž๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@reduz ๊ธ€์Ž„์š”. Node+Script๋Š” Scene์ž…๋‹ˆ๋‹ค. add_custom_type ๋ฉ”์ปค๋‹ˆ์ฆ˜์€ ํ‘œ์ค€์— ๋”ฐ๋ผ ๊ธฐ์ˆ ์ ์œผ๋กœ 'ํด๋ž˜์Šค'๊ฐ€ ์•„๋‹ˆ๋”๋ผ๋„ '์ƒˆ ํด๋ž˜์Šค'๋ฅผ ๋“ฑ๋กํ•˜๋Š” Mono์ฒ˜๋Ÿผ ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ClassDB๋ฅผ ๊ฑด๋“œ๋ฆด ํ•„์š” ์—†์ด ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค๋ฉด ๋ชจ๋‘ ๊ท€๋‹ด์•„ ๋“ฃ๊ฒ ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ @akien-mga๋Š” ์žฅ๋ฉด ํŠธ๋ฆฌ ๋ณด๊ธฐ์—์„œ ์‚ฌ์šฉ์ž ์ง€์ • ๋…ธ๋“œ์˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ˆจ๊ธธ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ œ์•ˆํ•˜์—ฌ ์‚ฌ์šฉ์ž๊ฐ€ ํ•ด๋‹น ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋งŒ๋“ค๊ณ  ์‹ค์ˆ˜๋กœ ํŽธ์ง‘ํ•œ ๊ฒƒ์— ๋Œ€ํ•ด ํ˜ผ๋™์„ ์ฃผ์ง€ ์•Š๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค(๊ทธ๋Ÿฌ๋‚˜ ์—ฌ์ „ํžˆ ๋งจ ์•„๋ž˜์˜ ๊ฒ€์‚ฌ๊ธฐ์—๋Š” ํ‘œ์‹œ๋จ) .

์ด๋Ÿฌํ•œ ๋…ธ๋“œ์—์„œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ์ƒ์† ๋ชจ๋“œ์—์„œ ์ƒ์„ฑ ๋Œ€ํ™” ์ƒ์ž๊ฐ€ ์—ด๋ฆฌ๋ฏ€๋กœ ์‚ฌ์šฉ์ž ์›Œํฌํ”Œ๋กœ์—๋Š” ์—ฌ์ „ํžˆ ๋งค์šฐ ํˆฌ๋ช…ํ•˜์ง€๋งŒ ์—”์ง„์˜ ์ผ๋ถ€๊ฐ€ ์•„๋‹Œ ์‚ฌ์šฉ์ž ์ง€์ • ๋…ธ๋“œ์ž„์ด ๋ถ„๋ช…ํ•ฉ๋‹ˆ๋‹ค.

@willnationsdev ๊ตฌ์ฒด์ ์œผ๋กœ ๊ตฌํ˜„ ๋ฒ”์œ„๋ฅผ ์ž์„ธํžˆ ์„ค๋ช…ํ•˜๋Š” ๋ณด๋‹ค ๊ฐ„๊ฒฐํ•œ ์ƒˆ ๋ฌธ์ œ๋ฅผ ์—ฌ๋Š” ๋ฐ ์ด์˜๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

@Web-eWorks ๋…ธ๋“œ + ์Šคํฌ๋ฆฝํŠธ๋Š” ์žฅ๋ฉด์ด ์•„๋‹ˆ๋ฉฐ ํŠธ๋ฆฌ ๋ ˆ์ด์•„์›ƒ์˜ ๋…ธ๋“œ๋Š” ์žฅ๋ฉด์ž…๋‹ˆ๋‹ค. ๋…ธ๋“œ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์‚ฌ์šฉ์ž ์ง€์ • ๋ฆฌ์†Œ์Šค ์œ ํ˜•์„ ์ถ”๊ฐ€ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์•„๋‹ˆ์š”, ์ƒˆ ํด๋ž˜์Šค๋ฅผ ๋“ฑ๋กํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์ž‘๋™ํ•˜์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋ฏธ๋ฆฌ ์ถ”๊ฐ€๋œ C++ ํด๋ž˜์Šค๋ผ๋Š” ๊ฒƒ์ด ๋ถ„๋ช…ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@Web-eWorks ์˜ˆ, ์ €์—๊ฒŒ๋Š” ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ €๋ฅผ ์–ธ๊ธ‰ํ•ด์ฃผ์‹œ๋ฉด ํ•‘์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜๋„ ๋ณ„๋„์˜ ๋ฌธ์ œ๊ฐ€ ํ•„์š”ํ•œ์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ?

๋‹ค๋ฅธ ๊ด€์ ์—์„œ ๋ณด์„ธ์š”. ๋‹น์‹ ์˜ ์ฃผ์žฅ์€ ๋งˆ์น˜ ์ƒˆ๋กœ์šด ์—”์ง„ ์œ ํ˜•์œผ๋กœ ์—”์ง„ ์œ ํ˜•์„ ํ™•์žฅํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์ด๋„๋ก ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

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

@reduz ๋‚ด๊ฐ€ Node+Script์— ๋Œ€ํ•ด ์˜๋ฏธํ•œ ๊ฒƒ์€ ๊ทธ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด Scene์„ ์ธ์Šคํ„ด์Šคํ™”ํ•จ์œผ๋กœ์จ ์ด๋ฏธ ๋‹ค๋ฃจ์–ด์กŒ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Mono ๊ตฌํ˜„์„ ์ž˜๋ชป ์ดํ•ดํ•˜๊ณ  ์žˆ์„ ์ˆ˜ ์žˆ์ง€๋งŒ Mono ํด๋ž˜์Šค๋Š” ์—ฌ์ „ํžˆ Scripts๊ฐ€ ์•„๋‹™๋‹ˆ๊นŒ?

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

@reduz ํ•˜์ง€๋งŒ ์šฐ๋ฆฌ ๋ชฉํ‘œ ์ค‘ ํ•˜๋‚˜๋Š” C++ ํด๋ž˜์Šค์— ๋ฏธ๋ฆฌ ํ• ๋‹น๋œ ์Šคํฌ๋ฆฝํŠธ์ธ ์‚ฌ์šฉ์ž ์ง€์ • ์œ ํ˜• ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ œ๊ฑฐํ•  ์ˆ˜ ์—†๋„๋ก ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋Ÿฐํƒ€์ž„์— ํ•ญ์ƒ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํŽธ์ง‘๊ธฐ ์ปจํ…์ŠคํŠธ์—์„œ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†๋Š” ์ž‘์—…์ž…๋‹ˆ๋‹ค(ํ•ด๋‹น ๊ธฐ๋Šฅ์„ ์œ ์ง€ํ•˜๊ณ  ํŽธ์ง‘๊ธฐ์—์„œ ๋””์ž์ธ ํƒ€์ž„์— ์‚ฌ์šฉ์ž ์ง€์ • ์œ ํ˜• ์Šคํฌ๋ฆฝํŠธ๋งŒ ๋ณดํ˜ธํ•˜๋ ค๋Š” ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹ˆ๋ฉด).

๋‚˜๋Š” ํ™•์‹คํžˆ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์—ด๋ ค ์žˆ์Šต๋‹ˆ๋‹ค. ์–ด๋Š ์ชฝ์ด๋“ , ๊ฐ€์žฅ ์‰ฌ์šด ๊ตฌํ˜„์€ ์ผ๋ถ€ ํƒ€์‚ฌ ๋“ฑ๋ก ํด๋ž˜์Šค(ClassDB, ProjectSettings, EditorData ๋˜๋Š” ๋ˆ„๊ฐ€ ๋ฌด์—‡์„ ์•Œ๊ณ  ์žˆ๋Š”์ง€ ์—ฌ๋ถ€)๋ฅผ ํ™•์ธํ•˜์—ฌ Object๊ฐ€ ์กฐ๊ฑด๋ถ€๋กœ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž์ฒด์— ํ• ๋‹นํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค(๋‚ด ๊ตฌํ˜„์—์„œ ์ˆ˜ํ–‰ํ•œ ๋Œ€๋กœ). . ๊ทธ๋Ÿฌ๋ฉด ํŽธ์ง‘๊ธฐ ์ž์ฒด๊ฐ€ ํ•ด๋‹น ํƒ€์‚ฌ์™€ ํ™•์ธํ•˜๊ณ  ๋‹ค๋ฅด๊ฒŒ ํ‘œ์‹œํ•˜๋Š” ๊ฒƒ์ด ๋งค์šฐ ์‰ฌ์›Œ์ง‘๋‹ˆ๋‹ค(๋‚ด ๊ตฌํ˜„์—์„œ ์ˆ˜ํ–‰ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ). ๋“ฑ๋ก์„ ClassDB๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ์ปจํ…์ŠคํŠธ๋กœ ์˜ฎ๊ธฐ๋Š” ๊ฒƒ์€ ๊ทธ๋‹ค์ง€ ๋งŽ์€ ์ž‘์—…์ด ์•„๋‹ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

^^ ๊ทธ ํƒ€ํ˜‘์ด ๋ฐ›์•„๋“ค์—ฌ์งˆ๊นŒ์š”? ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด Object๊ฐ€ ์ œ3์ž์™€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ํ• ๋‹น๋œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ฐ€๋Šฅํ•œ ์œ„์น˜๋ฅผ ์„ธ๋ถ€์ ์œผ๋กœ ๊ด€๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ›จ์”ฌ ๋” ๋ณต์žกํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

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

@willnationsdev ๋‹น์‹ ์ด ๋ฌด์—‡์„ ํ•˜๋ ค๋Š”์ง€ ์ดํ•ด๋Š” ํ•˜์ง€๋งŒ ์ด๊ฒƒ์ด ๊ฒฐ์ฝ” ๊น”๋”ํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์งˆ ์ˆ˜ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ˆจ๊ธธ ์ด์œ ๊ฐ€ ์—†๋Š” ๋ณต์žก์„ฑ์„ ์˜ˆ์ƒ๋Œ€๋กœ ์™„์ „ํžˆ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๋ฐฉ์‹์œผ๋กœ ์ˆจ๊ธฐ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

@Zylann ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ๋™์ผํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ a) ์Šคํฌ๋ฆฝํŠธ๊ฐ€ gdnative ๋‚ด๋ถ€ b) gdnative ๋‚ด๋ถ€ ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์†”์งํžˆ ๋งํ• ๋งŒํผ ์ต์ˆ™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@reduz ๊ฐœ์ฒด์— ๋Œ€ํ•œ ์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋ฐ˜ ์ œ์•ฝ ์กฐ๊ฑด์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๋ง์”€์ด์‹ ๊ฐ€์š”? ์ฒดํฌ ๋กœ์ง์„ ์—๋””ํ„ฐ ์ž์ฒด๋กœ ์˜ฎ๊ธธ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋””์ž์ธ ํƒ€์ž„์— ์ œ์•ฝ ์กฐ๊ฑด์„ ์‰ฝ๊ฒŒ ํ™•์ธํ•  ์ˆ˜ ์žˆ์ง€๋งŒ(์˜ˆ: UI ๋ณ€๊ฒฝ) ๋Ÿฐํƒ€์ž„์—๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์‚ฌ๋žŒ๋“ค์€ ์—ฌ์ „ํžˆ โ€‹โ€‹์ž ์žฌ์ ์œผ๋กœ ๊ฒŒ์ž„์ด ์‹คํ–‰๋˜๋ฉด ์ƒํ™ฉ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒŒ ๋‹น์‹ ์—๊ฒŒ ๋” ์ข‹์„๊นŒ? ๊ทธ๋ž˜๋„ ๋Ÿฐํƒ€์ž„์— ๋ฌผ๊ฑด์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์œผ๋ฉด ์ข‹๊ฒ ์ง€๋งŒ...

@willnationsdev ์–ด๋–ค ์ข…๋ฅ˜์˜ ์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋ฐ˜ ์ œ์•ฝ์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๊นŒ?

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

์žฅ๋ฉด ๊ณ„์ธต์—์„œ ํ™•์žฅ๋œ ์Šคํฌ๋ฆฝํŠธ์— ๋Œ€ํ•œ ์Šคํฌ๋ฆฝํŠธ ์•„์ด์ฝ˜์„ ์ˆจ๊ธฐ๊ณ  ๊ณต๊ฒฉ๋ฐ›์€ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ƒ์†ํ•˜๋Š” ๋…ธ๋“œ์˜ ๊ธฐ๋ณธ ํด๋ž˜์Šค๋ฅผ ์ƒ์†ํ•˜๋Š” ๋Œ€์‹  ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ "์Šคํฌ๋ฆฝํŠธ ์ถ”๊ฐ€" ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค. ํˆฌ๋ช…ํ•˜๊ณ  ClassDB๋ฅผ ์ „ํ˜€ ์–ด์ง€๋Ÿฝํž ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ script_language.h ์˜ ์ผ๋ถ€ ์ •๋ณด๋ฅผ ๊ฒ€ํ† ํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋„ ClassDB ์— ์ถ”๊ฐ€ํ•œ ์ƒˆ ์ฝ˜ํ…์ธ ๋ฅผ ScriptLanguage ํด๋ž˜์Šค๋กœ ์˜ฎ๊ธฐ๊ณ  ์ผ์ข…์˜ ScriptDB ์‹ฑ๊ธ€ํ†ค์€ ์Šคํฌ๋ฆฝํŒ… ์–ธ์–ด์—์„œ ์‚ฌ์šฉํ•˜๋ ค๋Š” ๊ฒฝ์šฐ์—๋งŒ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  object.cpp ์—๋Š” ์ด๋ฏธ script_language.h ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— $# set_script(const RefPtr &p_script) ์—์„œ ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. p_script ๊ฐ€ ์‹ค์ œ๋กœ ์Šคํฌ๋ฆฝํŠธ์ธ์ง€ ํ™•์ธ
  2. p_script ๊ฐ€ ์†ํ•œ ์–ธ์–ด ํ™•์ธ
  3. p_script ๋ฐ Object ์ธ์Šคํ„ด์Šค์˜ custom_script ๋ฅผ ์—ฐ๊ฒฐ๋œ ScriptLanguage ์— ๋Œ€ํ•œ ScriptDB ์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
  4. $# Object ์— ๋Œ€ํ•œ custom_script ์— ์•”์‹œ๋œ ์ œ์•ฝ ์กฐ๊ฑด์ด ์ฃผ์–ด์ง€๋ฉด p_script ๊ฐ€ Object ์— ํ• ๋‹น๋  ์ˆ˜ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€์— ๋Œ€ํ•œ ์‘๋‹ต์„ ScriptDB ์—์„œ ๋ฐ›์Šต๋‹ˆ๋‹ค. Object ์ธ์Šคํ„ด์Šค.

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ClassDB ๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ  object.h ๋ฅผ ๊นจ๋—ํ•˜๊ฒŒ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค( custom_script ์— ๋Œ€ํ•œ setter/getter ์ œ์™ธ). ๋˜ํ•œ ์‹๋ณ„์ž์™€ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์ •์˜ํ•˜๊ธฐ ์œ„ํ•ด Godot์— ์˜์กดํ•  ํ•„์š”๊ฐ€ ์—†๋Š” ์Šคํฌ๋ฆฝํŒ… ์–ธ์–ด์˜ ๋ถˆํ•„์š”ํ•œ ๋ณต์žก์„ฑ์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: C#, C++, Python ๋“ฑ๊ณผ ๋‹ฌ๋ฆฌ GDScript ๋ฐ VisualScript๋Š” ํ•„์š”ํ•จ).

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

์ด ์ค‘ ์–ด๋–ค ๊ฒƒ์ด ํ—ˆ์šฉ ๊ฐ€๋Šฅํ•œ ๋Œ€์•ˆ @reduz์ฒ˜๋Ÿผ ๋“ค๋ฆฝ๋‹ˆ๊นŒ?

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

์ด๊ฒƒ์€ ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ๊ฐ•ํ™”๋ฉ๋‹ˆ๋‹ค.

  1. ๊ทธ๋“ค์€ ์œ ํ˜•์ด๋ผ๊ณ ํ•ฉ๋‹ˆ๋‹ค. Type์ด ํ™•์žฅ ๊ฐ€๋Šฅํ•œ์ง€ ์—ฌ๋ถ€๋Š” ์–ธ์–ด๋งˆ๋‹ค ๋‹ค๋ฅด์ง€๋งŒ(javascript: yes, golang: no, python: yes) ์ผ๋ฐ˜์ ์œผ๋กœ ์ •์˜ํ•˜๋Š” ์œ ํ˜•์€ ์ฒซ ๋ฒˆ์งธ ํด๋ž˜์Šค ์–ธ์–ด ์œ ํ˜•์ด ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ ํ™•์žฅ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. Godot์—์„œ ์ฒซ ๋ฒˆ์งธ ํด๋ž˜์Šค ์œ ํ˜•์€ ํ™•์žฅ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜•์€ ํ™•์žฅํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค(์ ์–ด๋„ ๊ฐ™์€ ๋ฐฉ์‹์€ ์•„๋‹™๋‹ˆ๋‹ค). ์กฐ๋ฆฝ์‹ ์žฅ๋ฉด์ด๋‚˜ ํ…œํ”Œ๋ฆฟ ์žฅ๋ฉด๊ณผ ๊ฐ™์€ ๋‹ค๋ฅธ ๊ฒƒ์œผ๋กœ ํ˜ธ์ถœํ•˜๋ฉด ๋‹ค๋ฅธ ๊ฒƒ์œผ๋กœ ํ‘œ์‹œํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.
  1. 'Create New Node' ์ฐฝ์˜ ์ฒซ ๋ฒˆ์งธ ํด๋ž˜์Šค ๋…ธ๋“œ์™€ ๋™์ผํ•œ ํŠธ๋ฆฌ์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋‹น์‹ ์ด ๊ทธ๊ฒƒ๋“ค์„ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. 'Prefabs' ๋˜๋Š” 'Templates' ๋˜๋Š” ์ด๋ฅผ ํ˜ธ์ถœํ•˜๋ ค๋Š” ํ•ญ๋ชฉ์— ๋Œ€ํ•ด ๋ณ„๋„์˜ ์„น์…˜์ด ์žˆ์œผ๋ฉด ๋‹ค์‹œ ๋‹ค๋ฅด๊ฒŒ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.

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

๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ์˜๋„ ํ•œ ์†”๋ฃจ์…˜๋ณด๋‹ค ํ›จ์”ฌ ๊ฐ„๋‹จํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

  1. ์ธ์ŠคํŽ™ํ„ฐ์— ์ˆจ๊ฒจ์ง„ ์†์„ฑ์„ "custom_type_script"๋ผ๋Š” Object ํด๋ž˜์Šค์— ์ถ”๊ฐ€ํ•˜๊ณ  Script ๋Œ€์‹  ์ด ์†์„ฑ์„ ์„ ํƒํ•˜๋„๋ก ์‚ฌ์šฉ์ž ์ •์˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค.
  2. ๋…ธ๋“œ๋ฅผ ํ™•์žฅํ•˜๋ ค๊ณ  ํ•  ๋•Œ ์ด ์†์„ฑ์ด null์ธ์ง€ ํ™•์ธํ•˜๊ณ  ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ ๋…ธ๋“œ ํด๋ž˜์Šค ๋Œ€์‹  ์ด ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ™•์žฅํ•ฉ๋‹ˆ๋‹ค(Extend "res:/path/to/script.gd" ์“ฐ๊ธฐ).
  3. ๋…ธ๋“œ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ null์ธ ๊ฒฝ์šฐ ์‚ฌ์šฉ์ž ์ •์˜ ์Šคํฌ๋ฆฝํŠธ์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก get_script_instance๋ฅผ ๋ณ€๊ฒฝํ•˜์‹ญ์‹œ์˜ค.

@MarianoGnu ๊ธ€์Ž„, ํŽธ์ง‘๊ธฐ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋งŒ๋“œ๋Š” ์ธก๋ฉด์—์„œ script ์†์„ฑ์„ ์ž๋™์œผ๋กœ ์ฑ„์šฐ๊ณ  ์ฒ˜์Œ๋ถ€ํ„ฐ null์ด ๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๋Š” ๊ฒƒ์ด ๋” ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. script ์†์„ฑ์ด๋ฉฐ script ์†์„ฑ์„ ์ฐธ์กฐํ•  ๋•Œ๋งˆ๋‹ค ์ฐพ์•„ script ์˜ ๊ฐ’๋งŒ ๋ณ€๊ฒฝํ•˜๋ฉด ํ•ด๋‹น ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. .

์ฆ‰, ์ด ํ”„๋กœ์„ธ์Šค๋ฅผ ๋‹ค์‹œ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ชฉํ‘œ์˜ ์ผ๋ถ€๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์Šคํฌ๋ฆฝํŒ… ์–ธ์–ด๊ฐ€ ์Šคํฌ๋ฆฝํŠธ ํด๋ž˜์Šค๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด ํŒŒ์ผ ๊ฒฝ๋กœ๊ฐ€ ์•„๋‹Œ ์‹๋ณ„์ž๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์„ ํƒํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ScriptDB ๊ฐœ๋… ๋˜๋Š” ClassDB ์ˆ˜์ •์ด ์ฒ˜์Œ์— ์ œ์•ˆ๋œ ์œ ์ผํ•œ ์ด์œ ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด์ œ Juan์ด ClassDB ๋ณ€๊ฒฝ ์‚ฌํ•ญ์— ๋Œ€ํ•ด ๊ทธ๋ ‡๊ฒŒ๊นŒ์ง€ ๋ฐ˜๋Œ€ํ•˜๋Š” ์ด์œ ๋ฅผ ์•Œ์•˜์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์Šคํฌ๋ฆฝํŒ… API์—๋งŒ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ณ„ ์Šคํฌ๋ฆฝํŒ… ์–ธ์–ด๋กœ ๋œ ๋ชจ๋“  ์ •๋ณด๊ฐ€ ์ž์ฒด์ ์œผ๋กœ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐœ์ฒด์— ๋ณด์ด์ง€ ์•Š๋Š” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ €์žฅํ•˜๋Š” ๋Œ€์‹  ScriptDB์— ์ €์žฅํ•˜๋Š” ๋Œ€์‹  ์Šคํฌ๋ฆฝํŠธ ํŒ๋…๊ธฐ์— ์‚ฌ์ „ ์ „๋‹ฌ์„ ์ถ”๊ฐ€ํ•˜์—ฌ "extend CustomClassName"์„ "extend "res:/path/stored/inScriptDB.gd๋กœ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. " GdScript์˜ ํ”„๋ฆฌ์ปดํŒŒ์ผ๋Ÿฌ์—์„œ๋Š” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์Šคํฌ๋ฆฝํŠธ์—์„œ ์ƒ์† ๊ณ„์ธต ๊ตฌ์กฐ์—์„œ ๋ฒ—์–ด๋‚˜๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด ๋งค์šฐ ๋ฒˆ๊ฑฐ๋กญ๊ธฐ ๋•Œ๋ฌธ์—(๊ณ„์ธต ๊ตฌ์กฐ๋Š” ๋ฃจํŠธ์—์„œ ๋งจ ์•„๋ž˜๋กœ ์ง์„ ์ด์–ด์•ผ ํ•˜๋ฉฐ ๋ถ„๊ธฐ๊ฐ€ ์žˆ์œผ๋ฉด ํ˜ผ๋ž€์„ ์•ผ๊ธฐํ•ฉ๋‹ˆ๋‹ค)

์Šคํฌ๋ฆฝํŠธ๋ฅผ ์Šคํฌ๋ฆฝํŠธ ์ƒ์† ๊ณ„์ธต์—์„œ ๋ฒ—์–ด๋‚˜๊ฒŒ ํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ๋ฒˆ๊ฑฐ๋กญ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค(๊ณ„์ธต์€ ๋ฃจํŠธ์—์„œ ์•„๋ž˜๋กœ ์ง์„ ์ด์–ด์•ผ ํ•˜๋ฉฐ ๋ถ„๊ธฐ๊ฐ€ ์žˆ์œผ๋ฉด ํ˜ผ๋ž€์„ ์•ผ๊ธฐํ•ฉ๋‹ˆ๋‹ค)

@MarianoGnu ์—ฌ๊ธฐ์— ์•ฝ๊ฐ„์˜ ์˜คํ•ด๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์–ด๋Š ์‹œ์ ์—์„œ ์ƒ์†์˜ ์ง์„ ์ด ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๊นŒ? ๋‚ด๊ฐ€ ๊ตฌํ˜„ํ•˜๋Š” ํ•œ, ์Šคํฌ๋ฆฝํŠธ ์‚ฌ์ด์—๋Š” ํ•ญ์ƒ ๋งค์šฐ ๋ช…ํ™•ํ•œ ์ƒ์† ๊ณ„์ธต์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒ์† ๊ณ„์ธต ์ž์ฒด๊ฐ€ ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์— ๋Œ€ํ•ด์„œ๋Š” ์•„๋ฌด ๊ฒƒ๋„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋ฐฉ๊ธˆ ์ฃผ์–ด์ง„ ์Šคํฌ๋ฆฝํŠธ๋ฅผ StringName์— ๋งคํ•‘ํ•˜๊ณ  ์ผ์ข…์˜ DB์—์„œ ์ฐพ๋Š” ๊ฒƒ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ด๋ฏธ ๊ทธ ์ž‘์—…์„ ์ง„ํ–‰ํ•˜๊ณ  ์žˆ๋‹ค๋ฉด ์Šคํฌ๋ฆฝํŠธ ํ…์ŠคํŠธ๋ฅผ GDScript ์ปดํŒŒ์ผ๋Ÿฌ์˜ ๊ฒฝ๋กœ๋กœ ๋‹ค์‹œ ๋ฐ”๊ฟ€ ์ด์œ ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ํ•˜๋Š” ์ผ์€ Script ์ธ์Šคํ„ด์Šค๋ฅผ script ๋ณ€์ˆ˜์— ํ• ๋‹นํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ResourceLoader::load(path) ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋กœ๋“œํ–ˆ๋Š”์ง€ ์•„๋‹ˆ๋ฉด $#$ Class/ScriptDB::get_script(namespace_and/or_identifier) ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๊ฐ€์ ธ์™”๋Š”์ง€๋Š” ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์–ธ๊ธ‰ํ•˜๊ณ  ์‹ถ์€ ๊ฒƒ์€ Godot์˜ ์ƒˆ๋กœ์šด ์‚ฌ์šฉ์ž๋กœ์„œ ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ "์ปค์Šคํ…€ ๋…ธ๋“œ"๊ฐ€ ๋นŒํŠธ์ธ ๋…ธ๋“œ ์—ญํ• ์„ ํ•  ๊ฒƒ์ด๋ผ๋Š” ์ธ์ƒ ํ•˜์— ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ๋…ธ๋“œ ๋ชฉ๋ก์—์„œ ์„ ํƒํ–ˆ์„ ๋•Œ ์Šคํฌ๋ฆฝํŠธ ์—†์ด ๋…ธ๋“œ๋ฅผ ์–ป์„ ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ–ˆ์ง€๋งŒ ํ”Œ๋Ÿฌ๊ทธ์ธ์—์„œ ์Šคํฌ๋ฆฝํŒ…ํ•œ ๊ธฐ๋Šฅ์€ ์ด๋ฏธ ๋‚ด์žฅ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค(๋‚ด์žฅ ๋…ธ๋“œ์˜ ๊ฒฝ์šฐ์ฒ˜๋Ÿผ). ๋ฐฉ๊ธˆ ๋“ค์–ด์˜ค๋Š” ๋ˆ„๊ตฐ๊ฐ€๋กœ๋ถ€ํ„ฐ ๋‹ค๋ฅธ ์˜๊ฒฌ์„ ์ œ์‹œํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค(์—ฌ๊ธฐ์—์„œ ๋…ผ์˜๊ฐ€ ์ด๋ฏธ ๊ด‘๋ฒ”์œ„ํ•˜๊ฒŒ ์ง„ํ–‰๋œ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ).

"์‚ฌ์šฉ์ž ์ •์˜ ๋…ธ๋“œ"๋Š” ์Šคํฌ๋ฆฝํŠธ์ผ ๋ฟ์ด๋ฏ€๋กœ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋‚ด์žฅ ๋…ธ๋“œ์— ํ• ๋‹นํ•˜๋Š” ๊ฒƒ๊ณผ์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์‚ฌ์šฉ์ž ์ •์˜ ๋…ธ๋“œ ๊ธฐ๋Šฅ์€ ๋ฌด์—‡์„ ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

@MCrafterzz ํ”Œ๋Ÿฌ๊ทธ์ธ์—์„œ ์ƒ์„ฑํ•œ ์ปค์Šคํ…€ ๋…ธ๋“œ ์œ„์— ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ปค์Šคํ…€ ๋…ธ๋“œ์— ์ถ”๊ฐ€ํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์žˆ์–ด์•ผ ํ•œ๋‹ค๊ณ  ๋…ผ์˜ํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ ์ปค์Šคํ…€ ๋…ธ๋“œ๋Š” ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ด๋ฏธ ์ฒจ๋ถ€๋˜์–ด ์žˆ๊ณ  ์•„์ด์ฝ˜๊ณผ ์ด๋ฆ„์ด ์ด๋ฏธ ๋ณ€๊ฒฝ๋œ ๋…ธ๋“œ๋กœ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

@willnationsdev ์ด ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ ์–ด๋Š ์ •๋„ ๋„๋‹ฌํ–ˆ์Šต๋‹ˆ๊นŒ?
๋‚˜๋Š” ์ด ๊ธฐ๋Šฅ์ด 3.1 ์ด์ „์— ์—ฌ๊ธฐ์— ์žˆ์—ˆ์œผ๋ฉด ์ •๋ง ์ข‹๊ฒ ์Šต๋‹ˆ๋‹ค. ์ •๋ง ๋†€๋ผ์šด ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.
Godot ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ฐ ์• ๋“œ์˜จ ์‹œ์Šคํ…œ์šฉ.

๋ˆ„๊ตฌ์—๊ฒŒ๋„ ์••๋ ฅ์„ ๊ฐ€ํ•˜๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‹ˆ ์—…๋ฌด ๋ฐฉ์‹์œผ๋กœ ๋ฐ›์•„๋“ค์ด์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

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

@swarnimarun

๋˜ํ•œ ์‚ฌ์šฉ์ž๋Š” ์œ ํ˜• ์ด๋ฆ„ ๋Œ€ ํŒŒ์ผ ๊ฒฝ๋กœ ๋งคํ•‘์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ์ „์—ญ์— ์œ ํ˜•์„ ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. GDScript๋Š” ์ด๋Ÿฌํ•œ ๋งคํ•‘์„ ๋ณธ์งˆ์ ์œผ๋กœ ๋‹จ์ˆœํ•œ ์ „์—ญ ์œ ํ˜• ์ด๋ฆ„์œผ๋กœ ์ธ์‹ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์œ ํ˜•์€ ๋“ฑ๋กํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜•์ผ ํ•„์š”๊ฐ€ ์—†์œผ๋ฉฐ ์œ ํ˜•์€ ์Šคํฌ๋ฆฝํŠธ ๋˜๋Š” ์žฅ๋ฉด์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ง€๊ธˆ๊นŒ์ง€ ์ƒˆ ๋ฐฑ์—”๋“œ๋ฅผ ๊ตฌํ˜„ํ–ˆ๊ณ  ์›๋ž˜ ์‚ฌ์šฉ์ž ์ง€์ • ์œ ํ˜• ์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋Šฅ์„ ๋‹ค์‹œ ์„ค์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœ ์ค‘์ž…๋‹ˆ๋‹ค. ์ง€๊ธˆ๋ถ€ํ„ฐ ์•„๋งˆ ์ผ์ฃผ์ผ. ๋‚˜๋Š” ์ด๋ฒˆ ์ฃผ์— ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋ฐ”์ฉ๋‹ˆ๋‹ค.

@willnationsdev ๊ฑฑ์ • ๋งˆ์„ธ์š”. 3.1์ด ๋˜๋ฉด ๋งŒ์กฑํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ๊ฝค ๋งŽ์€ ์ž‘์—…์ด ๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค.
์ข‹์€ ์ผ์„ ๊ณ„์†ํ•˜์‹ญ์‹œ์˜ค.

ํ˜„์žฌ ํŽธ์ง‘๊ธฐ๋Š” ๋…ธ๋“œ์˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‰ฝ๊ฒŒ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

extend

๋…ธ๋“œ ์ž์ฒด๋Š” ํ˜„์žฌ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

2

๊ทธ๋ฆฌ๊ณ  @reduz ์˜ ์ฃผ์š” ๊ด€์‹ฌ์‚ฌ๋Š” ์ด๋ฏธ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ฒจ๋ถ€๋˜์–ด ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์ˆจ๊ธฐ๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ํ•œํŽธ์œผ๋กœ๋Š” ์ด๋ฅผ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ˆจ๊ธฐ์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ฐ˜๋ฉด์— ์‚ฌ์šฉ์ž ์ •์˜ ๋…ธ๋“œ์—๋Š” ๊ฑฐ์˜ ํ•ญ์ƒ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ฒจ๋ถ€๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์—†์œผ๋ฉด ์‚ฌ์šฉ์ž ์ •์˜ ๋…ธ๋“œ๋Š” ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์ง€ ์•Š๊ณ  ์‚ฌ์šฉ์ž ์ •์˜ ์•„์ด์ฝ˜์ด ์žˆ๋Š” ๊ธฐ์กด ์ผ๋ฐ˜ ๋…ธ๋“œ์ž…๋‹ˆ๋‹ค.

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

์—ฌ๊ธฐ ๋‚ด ๊ฐ„๋‹จํ•œ ์†”๋ฃจ์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ์ •์˜ ๋…ธ๋“œ์˜ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‚ฌ์šฉ์ž ์ •์˜ ๋…ธ๋“œ์˜ ์ •์˜์— ์žˆ๋Š” ์Šคํฌ๋ฆฝํŠธ์™€ ๋™์ผํ•œ ๊ฒฝ์šฐ ์Šคํฌ๋ฆฝํŠธ ์•„์ด์ฝ˜์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํฌ๋ฏธํ•ด์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

3

์˜๋ฏธ:

4

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

์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ˆจ๊ธฐ๊ณ  ์‹ถ์ง€ ์•Š์œผ์„ธ์š”? ์ข‹์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ custom_node ์Šคํฌ๋ฆฝํŠธ์™€ ํ”„๋กœ์ ํŠธ ๋…ธ๋“œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

@aaronfranke ์ œ ์ƒ๊ฐ์—๋Š” ์ด๊ฒƒ์ด ์ตœ๊ณ ์˜ ์†”๋ฃจ์…˜์ž…๋‹ˆ๋‹ค. ์ธ์Šคํ„ด์Šคํ™”๋œ ์žฅ๋ฉด์—์„œ๋„ ์ด์ ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@zatherz et al, ์ด์ œ #30697์ด ๊ตฌํ˜„๋˜์—ˆ์œผ๋ฏ€๋กœ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? https://github.com/godotengine/godot/issues/6067#issuecomment -238250383์— ์ค‘์š”ํ•œ ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

#30697์—์„œ ์ˆ˜์ •ํ•œ ๋Œ€๋กœ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค. https://github.com/godotengine/godot/issues/6067#issuecomment -238250383์— ์„ค๋ช…๋œ OP์˜ ์›๋ž˜ ์ œ์•ˆ์€ ๊ตฌํ˜„๋˜์ง€ ์•Š์•˜์ง€๋งŒ https:// ์—์„œ @reduz ์˜ ์šฐ๋ ค๋กœ ์ธํ•ด ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. github.com/godotengine/godot/issues/6067#issuecomment -239060186.

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