ํ•ด๋‹นํ•˜๋Š” ํŒ๋“ค์€ ์ „๋ถ€ ์ œ ์ฃผ๊ด€ / ๊ฒฝํ—˜ ํ•˜์— ์ด๋ฃจ์–ด์ง„ ํŒ๋“ค์ž„.ย 


์ฝ๋Š”๊ฑด ์ž์œ ์ง€๋งŒ ๋ฐ˜๋ฐ•์€ ๊ฑฐ์ ˆํ•œ๋‹ค ๊บผ์ ธ๋ผ


์งˆ๋ฌธ์€ ์กด๋‚˜ ์‚ฌ๋ž‘ํ•œ๋‹ค



C++ํŒ / ๊ทธ๋ƒฅ ํŒ


C++ ํŒ


1. Hot Reload ์จ๋„ ๋  ๋•Œ์™€ ์•ˆ ์จ์•ผ ํ•  ๋•Œ (์จ์•ผ ํ•  ๋•Œ๊ฐ€ ์จ๋„ ๋ ๋•Œ์ž„.)




- ์จ๋„ ๋  ๋•Œย 


ํ•จ์ˆ˜ ์ž‘๋™ ๋ฐฉ์‹ {} ๊ด„ํ˜ธ ์‚ฌ์ด ์ž‘๋™๋ฐฉ์‹ ๋ณ€๊ฒฝย 


๋”ฑํžˆ ๋ฌธ์ œ๋˜๋Š” ํ–‰์œ„๋Š” ์•„๋‹๊บผ๋ผ๊ณ  ์ƒ๊ฐํ•จ




- ์“ฐ๋ฉด ์•ˆ๋  ๋•Œ


ํŠน์ • ํด๋ž˜์Šค์˜ ๋ณ€์ˆ˜๋ฅผ ๋ณ€๊ฒฝ / ์ˆ˜์ • / ์ถ”๊ฐ€ / ์‚ญ์ œ ํ–ˆ์„๊ฒฝ์šฐ / ํ•จ์ˆ˜๋ฅผ ์ถ”๊ฐ€ / ๋ณ€๊ฒฝ ํ–ˆ์„๊ฒฝ์šฐ. (UPROPERTY / UFUNCTION / UENUM / USTRUCT)

(์ด์œ  : Hot Reload๋กœ ๋ณ€์ˆ˜๊ฐ€ ์ถ”๊ฐ€ ๋ณ€๊ฒฝ ์‚ญ์ œ ๋“ฑ๋“ฑ.. ์ด๋ฃจ์–ด ์กŒ์„ ๊ฒฝ์šฐ ๋ณ€์ˆ˜์— HotReload๋ผ๋Š” ํƒœ๊ทธ๊ฐ€ ๋ถ™์—ฌ์ ธ์„œ ๋‚˜์˜ค๋Š”๋ฐ ์ด๊ฑธ ๊ทธ๋Œ€๋กœ ๋ฐฉ์น˜ํ•ด์„œ ๋ธ”๋ฃจํ”„๋ฆฐํŠธ๋ฅผ ํ•ด๋‹น ๋ณ€์ˆ˜๋กœ ์ž‘์—…์„ ํ•˜๊ฒŒ๋˜๋ฉด ๋‹ค์Œ ๋นŒ๋“œ๋•Œ ์ œ๋Œ€๋กœ ์—ฐ๋™์ด ์•ˆ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Œ.

๊ทธ๋ฆฌ๊ณ  ๊ฐ€๋” Details ํŒจ๋„์˜ ์ •๋ณด๊ฐ€ ์•„์— ์•ˆ๋ณด์ด๊ฒŒ ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋Š”๋ฐ HotReload๋ฅผ ๋ง‰ ์“ฐ๋ฉด ๊ฐ€๋”๊ทธ๋Ÿผ ์ด๊ฑฐ ์ˆ˜์ •ํ•˜๋ ค๋ฉด ๋ธ”๋ฃจํ”„๋ฆฐํŠธ ๋‹ค์‹œ ๋งŒ๋“ค๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ๋ถ€๋ชจ ํด๋ž˜์Šค๋กœ ๋ธ”๋ฃจํ”„๋ฆฐํŠธ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ  ๋‹ค์‹œ ๋Œ์•„์˜ค๋ฉด ํ•ด๊ฒฐ๋˜๋Š”๋ฐ ๊ท€์ฐฎ์Œ)


- ํŠน์ • ํด๋ž˜์Šค๋ฅผ ์ถ”๊ฐ€ํ–ˆ์„ ๊ฒฝ์šฐ.


๊ทธ๋ƒฅ ๊ป๋‹คํ‚ค์ž..


Hot Reload ๋ฒ„๊ทธ๋Š” ์ง์ ‘ ๊ฒช์–ด๋ณด์…ˆ ๊ฑฐ์ง€๊ฐ™์Œ

๋‹ค๋ฅธ ๊ฒฝ์šฐ๋“ค๋„ ์žˆ๋Š”๋ฐ ์ƒ๊ฐ์ด ์•ˆ๋‚จ. ๊ทธ๋ƒฅ C++ ์ฝ”๋“œ ๋ณ€๊ฒฝํ–ˆ์œผ๋ฉด ์™ ๋งŒํ•˜๋ฉด ๊ป๋‹คํ‚ค๋Š”๊ฒŒ ์ข‹์€๋ฐ ๊ท€์ฐฎ์ž–์•„? ๊ทธ๋ƒฅ ํ•ด๋ณด๋ฉด์„œ ๋А๊ปด๋ณด์…ˆ

(??? : ๋‚˜ ์ปดํ“จํ„ฐ ๊ฐœ๋А๋ ค์„œ ๊ท€์ฐฎ์€๋ฐ?) -> ์ด๊ฑด ๊ถŒ๊ณ ์‚ฌํ•ญ์ด์ง€ ์ง์ ‘ ๋ถ€๋”ชํžˆ๋ฉด์„œย ๋ฒ„๊ทธ๋ฅผ ์˜จ๋ชธ์œผ๋กœ ๋А๋ผ์…ˆ




2. Rider ์จ๋ผ


๊ทธ๋ƒฅ ์ข€ ์จ๋ผย 


๋ณธ์ธ VSCode Visual Studio Sublime Text ๋“ฑ๋“ฑ ๋‹ค ์จ๋ดค๋Š”๋ฐ Rider ๋งŒํผ ์ข‹์€๊ฒŒ ์—†๋‹ค




์žฅ์  :ย 


1. ์ถ”๊ฐ€๋˜์ง€ ์•Š์€ ํ—ค๋”ํŒŒ์ผ์„ ๋ชจ๋“ˆ๋‹จ์œ„๊นŒ์ง€ ๊ฒ€์ƒ‰ํ•ด์„œ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค


์˜ˆ๋ฅผ ๋“ค์–ด A ๋ชจ๋“ˆ์˜ Example.h ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋ ค๊ณ  ํ•˜์ง€๋ง๊ณ  ๊ทธ๋ƒฅ ํ•ด๋‹น ํŒŒ์ผ์˜ ํด๋ž˜์Šค๋ฅผ ์ฝ”๋“œ์—์„œ ์ž‘์„ฑํ•˜๋ ค๊ณ  ํ•˜๋Š” ์ˆœ๊ฐ„!

Rider๊ฐ€ : '๋„ˆ ์ด๊ฑฐ ์ถ”๊ฐ€ ์•ˆํ–ˆ์–ด ๋ณ‘์‹ ์•„' ํ•˜๋ฉด์„œ ์ถ”๊ฐ€ํ•˜๋ผ๊ณ  ํ•ด์คŒ (Quick Action ํ‚ค ๋ฐ”์ธ๋”ฉ ํ•˜์ž ํŽธํ•˜๋‹ค) (๊ทผ๋ฐ Quick Action์ด ๋งž๋‚˜ ๋ชฐ๋ผ)


์ด ๊ธฐ๋Šฅ ์—†์œผ๋ฉด ๊ดœํžˆ ๊ฒ€์ƒ‰ ์กด๋‚˜๊ฒŒํ•ด์•ผํ•œ๋‹ค ๊ท€์ฐฎ๋‹ค



2. UPROPERTY UFUNCTION UENUM USTRUCT ๋งคํฌ๋กœ ๊ฐœ์ž˜๋จ ใ…‡ใ…‡


3. ์ฝ”๋“œ Snippet ๊ฐœ์ž˜๋จ


๋งŒ์•ฝ์— ๋‚ด๊ฐ€ ํŠน์ • ๋ชจ๋“ˆ์„ ๋‚ด ์ฝ”๋“œ์— ์ถ”๊ฐ€ํ•ด์ฃผ๊ณ ์‹ถ๋‹ค?

๊ทธ๋Ÿฌ๋ฉด ๋ชจ๋“ˆ ์ฝ”๋“œ๋ฅผ ๋˜ ๋ณต์‚ฌ ๋ถ™์—ฌ๋„ฃ๊ธฐ ํ•˜๊ณ  Public Private ํด๋” ์ƒ์„ฑํ•˜๊ณ ย 

๋ชจ๋“ˆ.h ๋ชจ๋“ˆ.cpp ์ถ”๊ฐ€ํ•˜๊ณ  Implementmodule ๋ธ”๋ผ ๋ธ”๋ผ ๋”๋Ÿฌ๋ธ ์ง“ ๋งŽ์ดํ•ด์•ผํ•˜๋Š”๋ฐ

๊ทธ๋ƒฅ ๋”ธ๊น ํ•˜๋ฉด ๋งŒ๋“ค์–ด์ง


4. C++ ํ•จ์ˆ˜ / ํด๋ž˜์Šค ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ธ”๋ฃจํ”„๋ฆฐํŠธ๋ฅผ ์ฐธ์กฐ๊ฐ€๋Šฅํ•จ!


Aํด๋ž˜์Šค๋ฅผ Derived ๋ฐ›์€ BP_A ํด๋ž˜์Šค๋ฅผ Rider ์•ˆ์—์„œ ์ฐธ์กฐ๊ฐ€๊ฐ€๋Šฅํ•จ (๊ถ๊ธˆํ•˜๋ฉด ์จ๋ณด์…ˆ ์„ค๋ช…ํ•˜๊ธฐ ๊ท€์ฐฎ์Œ)

Aํด๋ž˜์Šค์˜ BlueprintCallable / NativeEvent / ImplementableEvent ๋“ฑ๋“ฑ.. ์„ ์ฐธ์กฐ๊ฐ€๋Šฅํ•จ


Rider์—์„œ ํ•ด๋‹นํ•จ์ˆ˜ ์˜ค๋ฅธ์ชฝ์— ์žˆ๋Š” ๋ฉ”๋‰ด๋ฅผ ๋”ธ๊น ํ•˜๋ฉด ๋ธ”๋ฃจํ”„๋ฆฐํŠธ๊ฐ€ ์—ด๋ฆผ ๋ ˆ์ „๋“œ~


๋‹จ์  :ย 

์—†์–ด ๊ฑ ์จ ใ…‹



ํ…์ŠคํŠธ ์—๋””ํ„ฐ ๊ณต๋ถ€ํ•˜๊ธฐ ๊ท€์ฐฎ๋‹ค๊ณ ?

ํ…์ŠคํŠธย ์—๋””ํ„ฐ ๊ณต๋ถ€๋Š” ์ƒ์‚ฐ๋ ฅ์˜ ๊ธฐ๋ณธ์ด๋‹ค. ๊ณต๋ถ€ํ•ด๋ผ


VSCode๋ณด๋‹ค ๋„ˆ๋ฌด ๋ฌด๊ฒ๋‹ค๊ณ ?

๋‹ฅ์ณ๋ผ ๊ฑ ์จ๋ผย VSCode Intellisense ๊ณ ์น˜๊ธฐ ใ…ˆ๊ฐ™์ž–์•„

IntelliSense ์กด๋‚˜ ๋А๋ฆฌ์ž–์•„ (๋‚œ ์ด๊ฑฐ ๊ณ ์น˜๋ ค๊ณ  Clangd๊นŒ์ง€ ์—ฐ๊ตฌํ–ˆ๋Š”๋ฐ ํฌ๊ธฐํ–ˆ์–ด)


Visual Studio ๊ฐ€ ์ข‹์•™?

๋ชฐ๋ผ ๋‹ˆ์•Œ์„œํ•ด๋ผ

๋‚œ ์†”์งํžˆ ์•ˆ๋“œ๋กœ์ด๋“œ ๋””๋ฒ„๊น… ํ•  ๋•Œ, ADGE ๊น”์•„์„œ Visual Studio ์—์„œ ํŽธํ•˜๊ฒŒ ํ•œ ๊ฑฐ ์ œ์™ธํ•˜๊ณ  ๋ณ„๋กœ ๋ง˜์—์•ˆ๋“ ๋‹ค



๊ทธ๋ƒฅ ํŒ


์–ธ๋ฆฌ์–ผ ์—”์ง„์€ ๋ฏธ๋ฆฌ ๊ตฌํ˜„๋œ ํด๋ž˜์Šค๋“ค์ด ๋„ˆ๋ฌด ๋งŽ์Œ (ACharacter, UCharacterMovementComponent, UUserWidget ๋“ฑ๋“ฑ..)

ํ•˜์ง€๋งŒ ์—”์ง„ ๋‚ด๋ถ€์˜ ํด๋ž˜์Šค๋“ค์€ ๋˜๊ฒŒ ์ž˜ ๊ตฌํ˜„๋˜์žˆ๊ณ  ๊ทธ๋ฆฌ ๋ง‰ ์–ด๋ ต์ง€๋„ ์•Š์–ด ๊ทธ๋ƒฅ ๊ณต๋ถ€ํ•ด


๊ทผ๋ฐ ์ด๋ ‡๊ฒŒ ์–ธ๋ฆฌ์–ผ์—”์ง„์ด ๋ฏธ๋ฆฌ ๊ตฌํ˜„ํ•ด๋‘” ํด๋ž˜์Šค / ๊ธฐ๋Šฅ ๋“ค์— ์‹ฌ์ทจํ•ด์„œ ๋ง‰์ƒ ๋‚ด๊ฐ€ ๊ฐœ๋ฐœ์„ ์•ˆํ•˜๋ ค๊ณ  ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ƒ๊น€

์ด๊ฑฐ ์ง„์งœ ์•ˆ์ข‹์€ ์Šต๊ด€์ด๋‹ค. ํ”Œ๋Ÿฌ๊ทธ์ธ / ๋ฏธ๋ฆฌ ๊ตฌํ˜„๋œ๊ฒƒ์— ์˜์กดํ•˜๋ ค๊ณ  ํ•˜์ง€๋งˆย 


์ฒ˜์Œ์— ๊ณต๋ถ€ํ•  ๋•Œ, ์—”์ง„ ์ฝ”๋“œ๋Š” ์ ๋‹นํžˆ ๋ณด๊ณ  ์ž๊ธฐ๊ฐ€ ๊ตฌํ˜„ํ•˜๋Š” ์Šต๊ด€์„ ๊ธฐ๋ฅด์ž. (๋‚ด ์ƒ๊ฐ์ผ์ˆ˜๋„ ์žˆ์Œ)


์ด๋ ‡๊ฒŒ ์ƒ๊ฐํ•˜๋Š” ์ด์œ 


1. ์–ธ๋ฆฌ์–ผ ์—”์ง„์— ๋„ˆ๋ฌด ๊ธฐ๋Œ€๋ฉด์„œ ๊ฒŒ์ž„์„ ๊ฐœ๋ฐœํ•˜๋ฉด ์–ธ๋ฆฌ์–ผ๋กœ ๋งŒ๋“  ๊ฒŒ์ž„๊ฐ™์Œ


์ด๊ฒŒ ๋ญ” ๊ฐœ์†Œ๋ฆฌ๋ƒ? ์–ธ๋ฆฌ์–ผ๋กœ ๋งŒ๋“ค๋ฉด ๋ญ”๊ฐ€ ๊ฐœ์„ฑ์ด ์—†์–ด๋ณด์ž„

๋ญ”๊ฐ€ ๋‹ค ๊ฐ™์€ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ์ œ์ž‘๋œ๊ฒŒ ๋ˆˆ์— ๋ณด์ž„ย 

์ด๊ฑธ ํ”ผํ•˜๊ณ ์‹ถ์œผ๋ฉด ์ž๊ธฐ ์Šค์Šค๋กœ ๊ฐœ๋ฐœํ•˜๋ ค๊ณ  ํ•˜๋Š” ์ž์„ธ๊ฐ€ ์ข€ ํ•„์š”ํ•จ ๊ฑ ์‹œ์ž‘ํ•ด




2. ์–ธ๋ฆฌ์–ผ ์ธก์—์„œ ์ œ๊ณตํ•˜๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์‹œ๋„ํ•˜์ง€๋งˆย 


์ด๊ฑด ์ผ€๋ฐ”์ผ€๊ธดํ•œ๋ฐ ๋ณธ์ธ์ด 1์ธ๊ฐœ๋ฐœ์ด๋‹ค? ๊ฑ ํ•˜์ง€๋งˆ


์˜ˆ์‹œ๋กœ GAS(Game Ability System). ์กด๋‚˜ ๋ฐฉ๋Œ€ํ•จ ์ธ๋””๊ฒŒ์ž„ ๊ฐœ๋ฐœ์ž๋“ค์ด ์“ธ๋งŒํ•œ๊ฒŒ ์•„๋‹Œ๊ฑฐ๊ฐ™์Œ (๋ฉ€ํ‹ฐํ”Œ๋ ˆ์ด ๊ฐœ๋ฐœํ• ๋•Œ๋‚˜ ์“ฐ๋Š”๊ฑฐ๋‹ˆ๊น ๊ดœํžˆ ์‹ฑ๊ธ€๊ฒœ์ด๋ฉด ๊ฑด๋“ค์ง€๋งˆ)


Common UI ๊ฑ ๊ฑด๋“ค์ง€๋งˆ ๋ฉ€ํ‹ฐํ”Œ๋ ›ํผ ์ œ์ž‘ํ•  ๋–„ ์“ฐ๋Š”๊ฑด๋ฐ ๋ณ„๋กœ ํŽธํ•ด์ง€์ง€๊ฐ€ ์•Š์–ด.. ๋‚œ ์ž˜ ๋ชจ๋ฅด๊ฒ ๋‹ค UI Push ํ•  ๋•Œ ๊ธฐ๋ณธ ์ƒ์„ฑ ๋ณ€์ˆ˜๋ฅผ ์ฃผ๋Š”๊ฒƒ๋„ ์ž˜ ์•ˆ๋˜๊ณ  ๊ฑ ๋ญ”๊ฐ€ ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ๋œ๋–จ์–ด์ง„ ๊ธฐ๋ถ„์ด์•ผ


๋ญ ์ด๋Ÿฐ ์ผ€์ด์Šค๋“ค์ด ์žˆ๊ณ  ๊ทผ๋ฐ ๋ฉ€ํ‹ฐํ”Œ๋ ˆ์ด + ๋ฉ€ํ‹ฐ ํ”Œ๋ ›ํผ ๊ฐœ๋ฐœ ์‹œ์ž‘ํ•  ๊บผ ๊ฐ™์œผ๋ฉด Lyra ํ•ด๋ณด์…ˆ ์ƒ๊ฐ๋ณด๋‹ค ๊ดœ์ฐฎ์Œ ํ˜ผ์ž ๊ฐœ๋ฐœํ•˜๋ฉด ๋’ค์งˆ์ค€๋น„ํ•˜๊ณ 




3. ํ˜ผ์ž์„œ ๋ฉ€ํ‹ฐํ”Œ๋ ˆ์ด ๊ฒŒ์ž„ ๊ฐœ๋ฐœํ•˜๋ ค๊ณ  ํ•˜์ง€๋ง์ž


๋Œ€๊ฐ€๋ฆฌ์•„ํ”„๋‹ค ๊ฑ ์ข€ ํ•˜์ง€๋งˆ ์ œ๋ฐœ ๋‚ด๊ฐ€ ์—ฌ๋Ÿฌ๋ฒˆ ๊นจ์กŒ์–ด ๊ทธ๋ƒฅ ํ•˜์ง€๋งˆ


4. 2D ๊ฒŒ์ž„์€ ๊ฑ ๋‹ค๋ฅธ์—”์ง„ ๊ฐ€์ž 2.5๋นผ๊ณ 


5. ํƒˆ์ถœํ•˜์ž

์–ธ๋ฆฌ์–ผ ์—”์ง„ ํ˜ผ์ž์„œ ๊ฐœ๋ฐœํ•˜๋ฉด ๋ญ”๊ฐ€ ๊ณ ๋…๊ฐ์ด ๋ฐ€๋ ค์˜จ๋‹ค

ํŒ€์„ ๊ตฌํ•ด๋ผย