์ด์ƒํ•˜๊ฒŒ ์ง€๊ธˆ ๋””์”จ ์‚ฌ์ง„ ์—…๋กœ๋“œ ์•ˆ๋จ?


์—ฐ์žฌ๊ธ€ ํ•˜๋ ค๊ณ  ์Šค์ƒท ์ฐ์—ˆ๋Š”๋ฐ ์—…๋กœ๋“œ ์•ˆ๋˜๋„ค



1. ๊ฐœ๋ฐœํ™˜๊ฒฝ ์„ธํŒ…





๊ณ ๋„ ์—”์ง„์‚ฌ์ดํŠธ์—์„œ 3.5 stable mono ๋ฒ„์ „์„ ๋‹ค์šด๋ฐ›์Šต๋‹ˆ๋‹ค.


PC์—๋Š” VS 2019 ์ปค๋ฎค๋‹ˆํ‹ฐ ์ด์ƒ ๋ฒ„์ „์„ ๋ฐ›์Šต๋‹ˆ๋‹ค


2. ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ





๊ณ ๋„๋ฅผ ์ผœ๋ฉด


ํ”„๋กœ์ ํŠธ ์„ ํƒ ์ฐฝ์ด ๋‚˜์˜ต๋‹ˆ๋‹ค


๋ณดํ†ต์€ ๋น„์–ด์žˆ์„๊ฒ๋‹ˆ๋‹ค.


์•„๋งˆ ๊ธฐ๋ณธ์„ธํŒ…์€ ํ•œ๊ธ€ํŒ์ผ ๊ฒƒ์ด๋ฏ€๋กœ





์ƒˆ ํ”„๋กœ์ ํŠธ - ํด๋” ์ ์ ˆํ•œํ…Œ ์„ ํƒ (ํ˜น์€ ๋งŒ๋“ค๊ธฐ๋ฅผ ๋ˆŒ๋Ÿฌ์„œ ํด๋”๋จผ์ € ์ƒ์„ฑ)


GLES ๋ฒ„์ „์„ ํƒ์€ GLES2 ๋ฒ„์ „์œผ๋กœ ํ•ด์ค๋‹ˆ๋‹ค (๋ณธ์ธ์ด HDR / glow / bloom ) ๊ฐ™์€๊ฑธ ์“ด๋‹ค๋ฉด GLES3๋ฅผ ์„ ํƒํ•˜์„ธ์š”


๊ทธ๋ฆฌ๊ณ  ๋งŒ๋“ค๊ธฐ & ํŽธ์ง‘์„ ๋ˆŒ๋Ÿฌ์ฃผ๋ฉด


ํ”„๋กœ์ ํŠธ๊ฐ€ ์ผœ์ง‘๋‹ˆ๋‹ค



3. C# ์†”๋ฃจ์…˜ ์ƒ์„ฑ




์ขŒ์ƒ๋‹จ์˜ ๋ฉ”๋‰ด๋กœ ๋“ค์–ด๊ฐ€์„œ


ํ”„๋กœ์ ํŠธ -> ํˆด -> C# -> Create C# solution





์„ ์„ ํƒํ•ด์ฃผ๋ฉด


ํ•ด๋‹น ํ”„๋กœ์ ํŠธ์˜ ์†”๋ฃจ์…˜์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.


4. ํ”„๋กœ์ ํŠธ ํด๋” ๊ตฌ์กฐ





์ขŒํ•˜๋‹จ์˜ ํ”„๋กœ์ ํŠธ ๋ฆฌ์†Œ์Šค ๊ด€๋ฆฌ ํŠธ๋ฆฌ ์ฐฝ์— ๋ณด๋ฉด


res://


๋ผ๊ณ  ์จ์žˆ๋Š”๋ฐ๊ฐ€ ๋‚˜์˜ค๋Š”๋ฐ ์—ฌ๊ธฐ๊ฐ€ ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ๊ฒฝ๋กœ์ž…๋‹ˆ๋‹ค.


default_env.tres ๋ผ๋Š” ํŒŒ์ผํ•˜๊ณ 

icon.png ํŒŒ์ผ์ด ์žˆ์„๊ฒ๋‹ˆ๋‹ค



icon.pngํŒŒ์ผ์€ ์•ž์„ ๋งŒ๋“ค ๊ฒŒ์ž„์˜ ๋กœ๊ณ  & ํ”„๋กœ์ ํŠธ ๋ชฉ๋ก์— ๋œจ๋Š” ๋กœ๊ณ  ๊ทธ๋ฆผ์ž…๋‹ˆ๋‹ค.


๋‹น์‹ ์˜ ๋กœ๊ณ ๋ฅผ ๋ฐ”๊พธ๊ณ  ์‹ถ๋‹ค๋ฉด ๋ฐ”๊ฟ”์•ผ ํ•˜๋Š” ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.


์ด ๋กœ๊ณ ๋Š” ๊ฒฝ๋กœ์™€ ํŒŒ์ผ์ด๋ฆ„์ด ๊ผญ res://icon.png์ผ ํ•„์š”๋Š” ์—†๊ณ 


์ขŒ์ƒ๋‹จ ํ”„๋กœ์ ํŠธ ํƒญ์˜ ํ”„๋กœ์ ํŠธ ์„ค์ •์—์„œ ๋ณ€๊ฒฝ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๋ณดํ†ต์€ ๊ท€์ฐฎ์•„์„œ ์›๋ž˜ ๊ทธ๋Œ€๋กœ ๋‘๊ณ  ์”๋‹ˆ๋‹ค.


default_env.tres ๋Š” ์ด ํ”„๋กœ์ ํŠธ์˜ ํ™˜๊ฒฝ ์„ค์ •ํŒŒ์ผ์ž…๋‹ˆ๋‹ค.


๋งˆ์šฐ์Šค๋กœ ๋”๋ธ”ํด๋ฆญ ํ•ด๋ณด๋ฉด ์šฐ์ธก์— ์ •๋ณด๊ฐ€ ๋‚˜์˜ค๋‹ˆ ํ™•์ธํ•ด๋ณด์„ธ์š”


์˜ต์…˜์ด ๋งŽ์€๋ฐ ์ €๋Š” ์•„์ง ์•ˆ์”๋‹ˆ๋‹ค


5. ๊ฐœ๋ฐœ์‹œ์ž‘





์šฐ์„  icon.png๊ฐ€ ์žˆ๋Š” ํด๋” ๊ฒฝ๋กœ์— ์”ฌ์„ ํ•˜๋‚˜ ๋งŒ๋“ญ์‹œ๋‹ค


์šฐํด๋ฆญ ํ›„ ์ƒˆ์”ฌ์ด๋ผ๊ณ  ๋ˆ„๋ฅด๋ฉด ๋ฉ๋‹ˆ๋‹ค


์”ฌ ์ด๋ฆ„์€ sc_battle ์ด๋ผ๊ณ  ์ง“๊ฒ ์Šต๋‹ˆ๋‹ค ( sc - ์”ฌ์ด๋ผ๋Š” ๋œป, battle ์ „ํˆฌํ™”๋ฉด์ด๋ผ๋Š” ๋œป )



๊ทธ๋Ÿผ ์•„๋ฌด๋Ÿฐ ํŽ˜์ด์ง€๊ฐ€ ์•ˆ๋œฌ๊ฑฐ ๊ฐ™์ง€๋งŒ ์‚ฌ์‹ค ์ƒ๋‹จ ์ค‘์•™์— ์”ฌ ํƒญ์— ๋œน๋‹ˆ๋‹ค




์•„๋งˆ

sc_battle[๋น„์–ด์žˆ์Œ]


์ด๋ผ๊ณ  ๋œฐ๊ฑด๋ฐ


ํ•ด๋‹น์”ฌ์— ๋ฃจํŠธ๋…ธ๋“œ๋ฅผ ์„ค์ •ํ•˜์ง€ ์•Š์•˜๊ณ  ๋‚ด์šฉ๋ฌผ์ด ๋น„์–ด์žˆ๋‹ค๋Š” ๋œป์ž…๋‹ˆ๋‹ค.


์ขŒ์ธก ์ƒ๋‹จ์—๋Š”




๋ฃจ๋“œ๋…ธ๋“œ ๋งŒ๋“ค๊ธฐ๋ผ๊ณ  ๋œฐ๊ฒƒ์ž…๋‹ˆ๋‹ค



๊ทธ๋Ÿผ 2D์”ฌ์„ ๋ˆŒ๋Ÿฌ์ค๋‹ˆ๋‹ค



์—ฌ๊ธฐ์„œ ๋ˆ„๋ฅผ์ˆ˜ ์žˆ๋Š” ์”ฌ์˜ ๋ฃจํŠธ ๋…ธ๋“œ ์ข…๋ฅ˜๋Š”



2D ์”ฌ
3D ์”ฌ

์œ ์ €์ธํ„ฐํŽ˜์ด์Šค

๋‹ค๋ฅธ๋…ธ๋“œ


๋“ฑ์ด ์žˆ๋Š”๋ฐ


2D์”ฌ์€ 2D ๊ฒŒ์ž„์šฉ ์”ฌ์ด๊ฑฐ๋‚˜ 2D๊ฒŒ์ž„์šฉ ํ”„๋ฆฌํŒน์„ ๋งŒ๋“ค๋•Œ ์“ฐ๊ณ 

3D์”ฌ์€ 3D ๊ฒŒ์ž„์šฉ ์”ฌ์ด๊ฑฐ๋‚˜ 2D๊ฒŒ์ž„์šฉ ํ”„๋ฆฌํŒน์„ ๋งŒ๋“ค๋•Œ ์“ฐ๊ณ 
์œ ์ €์ธํ„ฐํŽ˜์ด์Šค๋Š” ์œ ๋‹ˆํ‹ฐ์˜ ์บ”๋ฒ„์Šค ๋ ˆ์ด์–ด์™€ ๊ทธ ํ•˜๋ถ€ UI ์ปจํŠธ๋กค ๊ธฐ๋Šฅ๊ณผ ๊ฐ™๋‹ค๊ณ  ๋ณด๋ฉด ๋ฉ๋‹ˆ๋‹ค

๋‹ค๋ฅธ๋…ธ๋“œ๋Š”


2D 3D ์œ ์ €์ธํ„ฐํŽ˜์ด์Šค


์•„๋งˆ ์„ธ๊ตฐ๋ฐ์„œ ๋‹ค ํ™œ์šฉํ• ์ˆ˜์žˆ๋Š” ๋…ธ๋“œ๋“ค์ž…๋‹ˆ๋‹ค


๋ณดํ†ต ํŠธ๋žœ์ง€์…˜์ด๋‚˜ ์ด์ง• ๊ฐ™์€๊ฑธ ์ฒ˜๋ฆฌํ•˜๋Š” Tween์ด๋‚˜
๋ทฐ๋ณดํŠธ ๊ฐ™์€๊ฒŒ ์—ฌ๊ธฐ์— ์†ํ•ฉ๋‹ˆ๋‹ค.


ํ•˜์—ฌํŠผ 2D ์”ฌ์œผ๋กœ ์‹œ์ž‘ํ•ฉ์‹œ๋‹ค


6. 2D ์”ฌ๊ณผ 3D์”ฌ์˜ ์ฐจ์ด


์œ ๋‹ˆํ‹ฐ์™€ ๋‹ค๋ฅด๊ฒŒ ๊ณ ๋„๋Š” 2D์™€ 3D๊ฐ€ ์ฐจ์ด๋‚ฉ๋‹ˆ๋‹ค


2D ๋Š” ์Šคํ”„๋ผ์ดํŠธ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์™„์ „ ํ‰๋ฉด์— ๊ทธ๋ฆฌ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ํ•˜๋Š”๋Œ€์‹  ZIndex๊ฐ€ ๊ฑฐ์˜ ๋Œ€๋ถ€๋ถ„์˜ 2D๋…ธ๋“œ์— ์žˆ์–ด์„œ ๊ทธ๋ ค์ง€๋Š” ์ˆœ์„œ ์ •ํ•˜๊ธฐ๋Š” ์ข‹์Šต๋‹ˆ๋‹ค


Y์ถ• ๊ฐ’์— ๋”ฐ๋ผ ๊ทธ๋ ค์ง€๋Š” ์ˆœ์„œ๊ฐ€ ๋‹ฌ๋ผ์ง€๋Š” YSort๋ผ๋Š” ๊ฑธ ์ƒ์†ํ•˜๋ฉด ์ €์ ˆ๋กœ Y ๊ฐ’์— ์˜ํ•ด ์•„๋ž˜ ์บ๋ฆญ์ด ๊ฒน์น˜๊ฒŒ ํ• ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.


๊ทธ๋ฆฌ๊ณ  ์œ ๋‹ˆํ‹ฐ๋ž‘์€ ๋‹ค๋ฅด๊ฒŒ ์œ„์น˜ ์ขŒํ‘œ๋“ฑ์„ ํ”ฝ์…€๋‹จ์œ„๋กœ ์„ธํŒ…ํ•˜๋ฉฐ


์›”๋“œ ์ขŒํ‘œ๊ณ„๋„ x๋Š” ์šฐ์ธก y๋Š” ์•„๋ž˜์ชฝ์ž…๋‹ˆ๋‹ค



---


3D ์”ฌ์€ ์œ ๋‹ˆํ‹ฐ๋ž‘ ๋น„์Šทํ•˜๊ฒŒ ์ž์ฒด ์ขŒํ‘œ๊ณ„๊ฐ€ ์žˆ์–ด์„œ ํ”ฝ์…€๋‹จ์œ„๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.


์œ ๋‹ˆํ‹ฐ์—์„œ๋Š” ํ”ฝ์…€ ํผ ์œ ๋‹› ์˜ต์…˜์œผ๋กœ ์Šคํ”„๋ผ์ดํŠธ๋ฅผ ์ž„ํฌํŠธํ• ๋•Œ ๋ช‡ํ”ฝ์…€์ด ํ•œ์นธ ( 1์œ ๋‹›)์ด ๋ ์ง€ ์ •ํ•˜๋Š”๋ฐ


์—ฌ๊ธฐ๋„ ๊ทธ๋Ÿฐ ๋‹จ์œ„๋กœ ์›€์ง์ž…๋‹ˆ๋‹ค.


๊ณ ๋กœ ์œ ๋‹ˆํ‹ฐ ์†Œ์Šค๋ฅผ ๊ณ ๋„๋กœ ํฌํŒ…ํ•œ๋‹ค๋ฉด 2D๋ณด๋‹ค๋Š” 3D๊ฐ€ ์ขŒํ‘œ๊ณ„๊ฐ€ ๋น„์Šทํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.




ํŠน์ดํ•œ์ ์€ ๊ณ ๋„๋Š” 2D๋ฉด 2D๋งŒ ๋˜๊ณ  3D๋ฉด 3D๋งŒ ๋˜๋Š”๊ฑฐ ๊ฐ™์Šต๋‹ˆ๋‹ค


2D ์”ฌ์—์„œ 3D ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ํ™”๋ฉด๋‚ด์—์„œ ๋ณด์ด์ง€๊ฐ€ ์•Š๊ณ 


3D ์—์„œ๋„ 2D ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ๊ฒŒ์ž„ ์”ฌ๋‚ด์—์„œ ํ™•์ธ ๋ถˆ๊ฐ€์ž…๋‹ˆ๋‹ค



๊ณ ๋กœ ์ž‘์—…์ „์— ๊ฒŒ์ž„ ๋ฐฉํ–ฅ์„ ํ™•์‹คํžˆ ์ •ํ•˜๊ณ  ๊ฐ€๋Š”๊ฒŒ ์ข‹์Šต๋‹ˆ๋‹ค



----


7. ์”ฌ - ํ”„๋ฆฌํŒน์˜ ์ฐจ์ด


์œ ๋‹ˆํ‹ฐ์—๋Š” ๊ฒŒ์ž„์˜ค๋ธŒ์ ํŠธ๋ฅผ ํ”„๋ฆฌํŒน์œผ๋กœ ๋งŒ๋“œ๋Š” ๊ธฐ๋Šฅ์ด ์žˆ์ง€๋งŒ


๊ณ ๋„์—๋Š” ํ”„๋ฆฌํŒน์ด๋ผ๋Š” ๊ธฐ๋Šฅ์€ ์—†์Šต๋‹ˆ๋‹ค


๋Œ€์‹  ์”ฌ์ด ํ”„๋ฆฌํŒน์„ ๋Œ€์‹ ํ•ฉ๋‹ˆ๋‹ค


์”ฌ์„ ์ €์žฅํ•˜๋ฉด ๊ทธ๊ฑธ ๋‹ค๋ฅธ ์”ฌ์—์„œ ํ”„๋ฆฌํŒน์ฒ˜๋Ÿผ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค



ํ•˜์ง€๋งŒ ๊ฐœ๋…์ ์œผ๋กœ ๋ดค์„๋•Œ



๊ฐœ๋ฐœ์ž๊ฐ€ ํ™”๋ฉด์ด๋ผ๊ณ  ์ธ์‹ํ•˜๋Š” ์”ฌํ•˜๊ณ 


๊ฐœ๋ฐœ์ž๊ฐ€ ํ”„๋ฆฌํŒน(๋งŒ๋“ค์–ด์„œ ์ €์žฅํ•ด๋†“์€ ๋…ธ๋“œ(์˜ค๋ธŒ์ ํŠธ) ๋ฉ์–ด๋ฆฌ)๋ผ๊ณ  ์ธ์‹ํ•˜๋Š” ์”ฌ์€ ๋‹ค๋ฅผ ๊ฒ๋‹ˆ๋‹ค.



๊ทธ๋ž˜์„œ ์ €๋Š” ํ™”๋ฉด์ธ ๊ฒฝ์šฐ๋Š” sc_battle ๊ฐ™์ด ์ €์žฅํ•˜๊ณ 


ํ”„๋ฆฌํŒน์ธ ๊ฒฝ์šฐ๋Š” pf_actor, pf_item, pf_monster์™€ ๊ฐ™์ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค



8. ๊ทธ๋ž˜์„œ ์ฝ”๋“œ๋Š” ์–ธ์ œ ์“ฐ๋‚˜


์ฝ”๋“œ๋Š” ์•„๊นŒ ๋งŒ๋“  ์ƒˆ์”ฌ์—์„œ 2D ์”ฌ์„ ๋ˆ„๋ฅด๋ฉด


Node2D๋ผ๋Š”๊ฒŒ ์ขŒ์ธกํŠธ๋ฆฌ์— ์ตœ์ƒ์œ„์— ๋œน๋‹ˆ๋‹ค



๊ฑฐ๊ธฐ์„œ


Node2D ์˜ค๋ธŒ์ ํŠธ (์•ž์œผ๋กœ๋Š” ์˜ค๋ธŒ์ ํŠธ ๋Œ€์‹  ๋…ธ๋“œ๋ผ๊ณ  ํ•˜๊ฒ ์Œ) ๋ฅผ ์„ ํƒํ•˜๋ฉด


๊ทธ ์‚ด์ง์œ„์— ์ดˆ๋ก์ƒ‰ + ๊ฐ€ ์Šคํฌ๋ฆฝํŠธ ๋ชจ์–‘ ์•„์ด์ฝ˜ ์œ„์— ๋– ์žˆ๋Š”๊ฒŒ ๋ณด์ผ๊ฒ๋‹ˆ๋‹ค


์ด๊ฒŒ ๋…ธ๋“œ์— ์Šคํฌ๋ฆฝํŠธ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค


์œ ๋‹ˆํ‹ฐ์—์„œ ์ƒˆ ์Šคํฌ๋ฆฝํŠธ ๋งŒ๋“ค์–ด์„œ ์ปดํฌ๋„ŒํŠธ์— ์ถ”๊ฐ€ํ•˜๋Š” ๊ฑฐ๋ž‘ ๊ฐ™์Šต๋‹ˆ๋‹ค


๊ทธ๊ฑธ ๋ˆ„๋ฅด๋ฉด



๋…ธ๋“œ ์Šคํฌ๋ฆฝ๋“œ ๋ถ™์ด๊ธฐ๋ผ๊ณ  ๋‚˜์˜ค๋Š”๋ฐ


๊ฑฐ๊ธฐ์— ๊ธฐ๋ณธ GDScript๋ผ๊ณ  ๋˜์–ด์žˆ๋Š”๊ฑธ C#์œผ๋กœ ๋ฐ”๊ฟ”์ค๋‹ˆ๋‹ค



์ƒ์†์€ ํ˜„์žฌ Node2D๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋”ํ• ๊ฒƒ์ด๋ฏ€๋กœ Node2D๋กœ ํ•ด์ค๋‹ˆ๋‹ค


๋งŒ์•ฝ ๋‹ค๋ฅธ ๋…ธ๋“œ ํƒ€์ž…์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ๋ผ๋ฉด ๋ฐ”๊ฟ”์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.


์˜ˆ) Sprite ๊ธฐ๋ฐ˜์ธ๊ฒฝ์šฐ ์ƒˆ ์Šคํฌ๋ฆฝํŠธ ๋งŒ๋“ค๋•Œ ์ƒ์†์„ Sprite๋กœ


์œ ๋‹ˆํ‹ฐ์—์„œ Monobehavior๋กœ ํ‰์น˜๋Š” ๊ฑฐ๋ž‘์€ ๋‹ค๋ฅด๊ฒŒ ๋‹ค์–‘ํ•˜๊ฒŒ ์ƒ์† ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

(์•„๋‹Œ๊ฐ€? ์œ ๋‹ˆํ‹ฐ ๋†“์€์ง€ ์ข€ ๋˜์„œ ์ฐฉ๊ฐ์ผ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค)



ํ…œํ”Œ๋ฆฟ์€ ๊ทธ๋ƒฅ ๋””ํดํŠธ๋กœ ๋†“์œผ๋ฉด ๋ฉ๋‹ˆ๋‹ค ( ๋‚˜์ค‘์— ์ž์‹ ๋งŒ์˜ ํŽธ๋ฆฌํ•œ ํ…œํ”Œ๋ฆฟ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ฑธ๋กœ ์•„๋Š”๋ฐ ์—ฌ๊ธฐ๋Š” ๋ฒ”์œ„ ๋„˜์–ด์ž„ )


๊ฒฝ๋กœ๋Š” ์•„๋ฌด๋ฐ๋‚˜ ์ •ํ•ด์ค๋‹ˆ๋‹ค


์ €๋Š” ์•„์ง ์ƒˆ ํ”„๋กœ์ ํŠธ๋‹ˆ๊นŒ


res://sc_battle.cs ๋กœ ์ €์žฅํ•  ์ƒ๊ฐ์ž…๋‹ˆ๋‹ค.


c# ํŒŒ์ผ์ด๋ฆ„ ์ปจ๋ฒค์…˜์ด๋ž‘์€ ์ข€ ๋‹ค๋ฅด๊ฒŒ ์–ธ๋”๋ฐ”๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์Šค๋„ค์ดํฌ ์ผ€์ด์Šค (sc_battle)์„ ํŒŒ์ผ๋ช…์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ๋Š” ํ•˜๋Š”๋ฐ


์”ฌ ์ด๋ฆ„์ด๋ž‘ ๋งž์ถ˜๊ฑฐ๋‹ˆ๊นŒ ๊ทธ๋ƒฅ ๋‘ก๋‹ˆ๋‹ค.



(๊ณ ๋„์—์„œ ์”ฌ ์—ด๋•Œ, ์”ฌ์˜ ์ตœ์ƒ์œ„ ๋ฃจํŠธ์— ์”ฌ๊ณผ ์ด๋ฆ„๊ณผ ๊ฐ™์€ ํŒŒ์ผ sc_battle -> sc_battle.gd, sc_battle.cs
์„ ์ฐพ๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์–ด์„œ ์ด๋ ‡๊ฒŒ ํ•จ )


๊ทธ๋ฆฌ๊ณ  ๋งŒ๋“ค๊ธฐ๋ฅผ ๋ˆ„๋ฅด๋ฉด


vs 2019์˜ ๊ฒฝ์šฐ ์ž๋™์œผ๋กœ vs2019 ์—๋””ํ„ฐ๊ฐ€ ์—ด๋ฆฝ๋‹ˆ๋‹ค


2017 ์ดํ•˜์˜ ๊ฒฝ์šฐ ์Šคํ…Œ์ด๋ธ” ๋ฒ„์ „์—์„œ ์ง€์›ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ


2017๋ฒ„์ „๋„ ๋Œ์•„๊ฐ€๊ฒŒ ๊ณ ๋„์—”์ง„ ์ฝ”๋“œ ์ˆ˜์ •ํ›„ ์ง์ ‘ ๋นŒ๋“œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค



------------------ sc_battle.cs


using Godot; // ๋ชจ๋“  ๊ณ ๋„ ์˜์กด ์ฝ”๋“œ๋Š” ์ด ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ๋ณด๋ฉด ๋จ

using System;


public class sc_battle : Node2D

{

// Declare member variables here. Examples:

// private int a = 2;

// private string b = "text";


// Called when the node enters the scene tree for the first time.

// ์œ ๋‹ˆํ‹ฐ์˜ Awake๋ฌธ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋จ

public override void _Ready()

{

}


// // Called every frame. 'delta' is the elapsed time since the previous frame.

// ์œ ๋‹ˆํ‹ฐ์˜ Update๋ฌธ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋จ, float delta๋Š” ํ•œํ”„๋ ˆ์ž„ ์ง€๋‚ฌ์„๋•Œ์˜ ์‹ค์ œ ์ง€๋‚˜๊ฐ„ ์‹œ๊ฐ„ (์œ ๋‹ˆํ‹ฐ์˜ Time.delta ์™€ ๊ฐ™์Œ )

// public override void _Process(float delta)

// {

//

// }

}



์ด๋ ‡๊ฒŒ ๋‚˜์˜ต๋‹ˆ๋‹ค


๊ทธ๋Ÿฐ ๋’ค ๋Œ€๊ฐ• ๋‚˜์™€์„œ



์—๋””ํ„ฐ๋กœ ๋Œ์•„๊ฐ€์„œ


์”ฌ์„ ์šฐ์„  ์ €์žฅํ•ฉ๋‹ˆ๋‹ค


-----


์œ ๋‹ˆํ‹ฐ๋ž‘ ๋‹ค๋ฅด๊ฒŒ ๊ณ ๋„์˜ ํŠน์ดํ•œ ์ ์ธ๋ฐ


์”ฌ์„ ์ถ”๊ฐ€ํ•˜๋ฉด ๋ฐ”๋กœ ํŒŒ์ผ์ด ์ƒ๊ธฐ๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ


sc_battle์ด๋ผ๊ณ  ์ €์žฅํ•  ์ž„์‹œ์”ฌ์ด ์—ด๋ฆฌ๊ณ 


Ctrl + S


๋ฅผ ๋ˆŒ๋Ÿฌ์•ผ ์‹ค์ œ๋กœ ํŒŒ์ผ๋กœ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค



๋งˆ์น˜ ๋ฉ”๋ชจ์žฅ์ด๋‚˜ ํ•œ๊ธ€ ์ƒˆ๋ฌธ์„œ๋ฅผ ํ‚จ๋‹ค์Œ์—


์ €์žฅํ•ด์•ผ๋งŒ ์‹ค์ œ ํŒŒ์ผ๋กœ ์ €์žฅ๋˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.



์‹ค์ˆ˜ํ•˜๋ฉด ํŒŒ์ผ์„ ๋‚ ๋ฆฌ๋‹ˆ ์กฐ์‹ฌํ•˜์„ธ์š”


----

9. ํ”Œ๋ ˆ์ด์–ด ์บ๋ฆญํ„ฐ


์ž ์ด์ œ ํ”Œ๋ ˆ์ด์–ด ์บ๋ฆญํ„ฐ๋ฅผ ๋งŒ๋“ค์–ด ๋ด…์‹œ๋‹ค


์”ฌ์—์„œ Node2D๋ฅผ ์„ ํƒํ•˜๊ณ  ์ด๋ฆ„์„ ๋ฐ”๊ฟ”์ค๋‹ˆ๋‹ค sc_battle๋กœ ๋ณ€๊ฒฝ์ž…๋‹ˆ๋‹ค



๊ทธ๋ฆฌ๊ณ  Node2D ์„ ํƒํ•œ ์ƒํƒœ์—์„œ


๋งˆ์šฐ์Šค ์šฐํด๋ฆญ -> ์ž์‹๋…ธ๋“œ ์„ ํƒ -> Sprite๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค


ํ™•์ธ์„ ๋ˆŒ๋Ÿฌ์„œ ์ƒ์„ฑ ํ•œ ๋’ค์—


๋…ธ๋“œ ์ด๋ฆ„์„


spPlayer๋กœ ๋ฐ”๊ฟ” ์ค์‹œ๋‹ค


ํ”Œ๋ ˆ์ด์–ด ์Šคํ”„๋ผ์ดํŠธ ๋ผ๋Š” ๋œป


์ ‘๋‘์‚ฌ๋ฅผ ๋ถ™์—ฌ์ฃผ๋ฉด


์”ฌ์ด ๋ณต์žกํ•ด์กŒ์„๋•Œ ํƒ€์ž… ๋‹จ์œ„๋กœ ์ฐพ๊ธฐ๊ฐ€ ์‰ฌ์›Œ์„œ ์ €๋Š” ์ด๋ ‡๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค



๊ทธ๋ฆฌ๊ณ  ๋‹ค์‹œ spPlayer๋ฅผ ์„ ํƒํ›„


์šฐ์ธก์„ ๋ณด๋ฉด


์Šคํ”„๋ผ์ดํŠธ์˜ ๋ฉค๋ฒ„ ์ค‘์—์„œ


Texture๋ผ๋Š” ๋…€์„์ด ์žˆ์Šต๋‹ˆ๋‹ค


[๋น„์—ˆ์Œ]


์ด๋ผ๊ณ  ํ‘œ์‹œ๋œ๋ฐ๋ฅผ ๋ˆ„๋ฅด๋ฉด


๋ฌด์Šจ 12์ข…๋ฅ˜ ์ธ๊ฐ€ 13์ข…๋ฅ˜ ํ…์Šค์ณ ์ข…๋ฅ˜๊ฐ€ ๋‚˜์˜ค๋Š”๋ฐ


๋„ˆ๋ฌด ์–ด๋ ต์Šต๋‹ˆ๋‹ค..


๋ฌด์‹œํ•˜๊ณ  ๋ฉ”๋‰ด ํ•˜๋‹จ์˜


๋น ๋ฅธ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ๋ฅผ ๋ˆ„๋ฅด๋ฉด


ํ˜„์žฌ ํ”„๋กœ์ ํŠธ์— ์žˆ๋Š” ํŒŒ์ผ ๋ชฉ๋ก๋งŒ ๋‚˜์˜ค๊ณ 


icon.png๊ฐ€ ์žˆ์„๊ฒ๋‹ˆ๋‹ค


๋„ค ์ฒซ๋ฒˆ์งธ ํ”Œ๋ ˆ์ด์–ด๋Š” ๊ณ ๋„๊ตฐ์ž…๋‹ˆ๋‹ค


๋ˆŒ๋Ÿฌ์ฃผ๋ฉด ์”ฌ ํ™”๋ฉด์— ์บ๋ฆญํ„ฐ๊ฐ€ ๋‚˜์˜ต๋‹ˆ๋‹ค


์šฐ์„  ์”ฌ์„ ์ €์žฅํ•˜๊ณ  ๋‹ค์‹œ VS ์ฝ”๋“œ ์—๋””ํ„ฐ๋กœ ๋„˜์–ด๊ฐ‘๋‹ˆ๋‹ค


------ sc_battle.cs


using Godot;


public class sc_battle : Node2D {

private Sprite spPlayer;


public override void _Ready() {

spPlayer = this.GetNode<Sprite>("spSprite"); // ํ”Œ๋ ˆ์ด์–ด ์Šคํ”„๋ผ์ดํŠธ๋ฅผ ๋ฐฐํ‹€์”ฌ ์ผœ์งˆ๋•Œ ์ง€์ •

spPlayer.SelfModulate = new Color(1f, 0f, 0f, 1f); // ์ผœ์ง€๋Š” ์ˆœ๊ฐ„ ํ”Œ๋ ˆ์ด์–ด ์Šคํ”„๋ผ์ดํŠธ ์ƒ‰์กฐ๋ฅผ ๋ถ‰์€ ์ƒ‰์œผ๋กœ ํ•จ

}


public override void _Process(float delta) { // ๋งค ํ”„๋ ˆ์ž„๋งˆ๋‹ค

base._Process(delta);


Position += new Vector2(1, 1); // ์”ฌ ์ „์ฒด๋ฅผ ์šฐํ•˜๋‹จ์œผ๋กœ ์ด๋™ํ•จ

}

}




---
์“ธ๋ฐ ์—†๋Š” ์ฃผ์„์„ ์—†์• ๊ณ 


3๊ฐ€์ง€ ๊ธฐ๋Šฅ์„ ์†๋Œ€๋ดค์Šต๋‹ˆ๋‹ค


1) ๋ฐฐํ‹€์”ฌ ์‹œ์ž‘์‹œ ์Šคํ”„๋ผ์ดํŠธ๋ฅผ ๋ณ€์ˆ˜์— ์ง€์ •, GetNode๋ฅผ ์ผ๊ณ , ์”ฌ๋‚ด์—์„œ์˜ ๊ฒฝ๋กœ("spSprite")๋ฅผ ์ง€์ •ํ•ด์คฌ์Šต๋‹ˆ๋‹ค.

์œ ๋‹ˆํ‹ฐ๋กœ ์น˜๋ฉด Find("spSprite").GetComponent<Sprite>() ์™€ ๋น„์Šทํ•˜๊ฒ ์ฃ ?

ํฐ ์ฐจ์ด๋Š” ์—†์Šต๋‹ˆ๋‹ค


2) ์Šคํ”„๋ผ์ดํŠธ ์ปฌ๋Ÿฌ๋ฅผ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค

ํ™”๋ฉด์— ๋ณด์ด๋Š” ๋…€์„๋“ค์€ ๋ณดํ†ต ์ปฌ๋Ÿฌ์˜ต์…˜์ด ๋‘๊ฐœ ์žˆ์Šต๋‹ˆ๋‹ค (์Šคํ”„๋ผ์ดํŠธ ์ƒ‰์— ์ƒ‰์ƒ๊ฐ’์„ ๊ณฑํ•ด์„œ ์ถœ๋ ฅ )

SelfModulate - ์ž๊ธฐ๋งŒ ์ƒ‰์ƒ๋ณ€ํ™˜ (์•„๋งˆ๋„ )
Modulate - ์ž์‹๊นŒ์ง€ ๋ชจ๋‘ ์ƒ‰์ƒ ๋ณ€ํ™˜


3) ๋งค ํ”„๋ ˆ์ž„๋งˆ๋‹ค ์šฐํ•˜๋‹จ์œผ๋กœ 1ํ”ฝ์…€์”ฉ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค

์œ ๋‹ˆํ‹ฐ์˜ Update์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค

๋งŒ์•ฝ ์œ ๋‹ˆํ‹ฐ์˜ PixedUpdate๊ฐ™์€๊ฑธ ์›ํ•œ๋‹ค๋ฉด?
์•„๋งˆ _PhysicsProcess๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋“œ ํ•˜์„ธ์š”



์ž ์ €์žฅ์„ ํ•˜๊ณ 


๊ณ ๋„๋กœ ๋Œ์•„์™€์„œ


F6์„ ๋ˆ„๋ฆ…๋‹ˆ๋‹ค -> ํ˜„์žฌ์”ฌ ์‹คํ–‰

F5๋ฅผ ๋ˆ„๋ฅด๋ฉด -> ์‹œ์ž‘ ์”ฌ์œผ๋กœ ์ •ํ•ด์ ธ์žˆ๋Š” ๋ฉ”์ธ์”ฌ ์‹คํ–‰



--


์—ฌ๊ธฐ๊นŒ์ง€..


๋Œ€๊ฐ• ๊ฐ„๋‹จํ•œ ๊ณ ๋„ C# ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค


--



ํŒ 1 ) ๊ณ ๋„๋กœ ๋œ ์˜ˆ์ œ ํ”„๋กœ์ ํŠธ ๋ฐ ํ…œํ”Œ๋ฆฟ ํ”„๋กœ์ ํŠธ๋ฅผ ๋ณด๊ณ  ์‹ถ๋‹ค๋ฉด


๊ณ ๋„ ์ฒ˜์Œ ์ผค๋•Œ ๋œจ๋Š” ํ”„๋กœ์ ํŠธ ๋งค๋‹ˆ์ €์—์„œ


์—์…‹ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ”„๋กœ์ ํŠธ ํƒญ์„ ๋ˆ„๋ฅด๊ณ  "CS" ์ž…๋ ฅํ›„ ๊ฒ€์ƒ‰ํ•˜์„ธ์š”


ํ•ด๋‹น ํ”„๋กœ์ ํŠธ๋Š” C# ๊ณ ๋„ ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค


ํŒ 2 ) gds ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋ณด๊ณ  cs๋กœ ํฌํŒ…ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ


onready var textLabel:Label


์ด๋Ÿฐ ์ฝ”๋“œ๋Š”


Label textLabel;


public override _Ready(){

textLabel = this.Load<Label>("textLabel");

}


๊ณผ ๊ฐ™์ด ๋ณ€๊ฒฝํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.



ใ……ใ„ฑ