Godot ์์ง ํ๊ฐ๊ธฐ(์ฌ๋ ์ด ๋ ์คํ์ด์ด 2 ๊ฐ๋ฐ์)
Godot ์์ง ํ๊ฐ๊ธฐ(์ฌ๋ ์ด ๋ ์คํ์ด์ด 2 ๊ฐ๋ฐ์)
https://caseyyano.com/on-evaluating-godot-b35ea86e8cf4
๊ณ ๋(Godot) ์์ง ํ๊ฐ๊ธฐ
์์ฑ์: Casey Yano (2023๋ 10์ 17์ผ)
๋ฉ๊ฐ ํฌ๋ฆฟ(Mega Crit)์์ ๊ณ ๋(Godot) ์์ง์ ํ๊ฐํ๊ธฐ ์ํด ์งํํ๋ 3์ฃผ๊ฐ์ ์ฌ๋ด ๊ฒ์์ผ์ ๋ง ๋ง์ณค์ต๋๋ค.
์ ์์ง์ ๋ฐ๊พธ๋ ค ํ๋๊ฐ?
๋ฏธ๋์์ ์จ ๋ถ๋ค์ ์ํด ์ค๋ช ํ์๋ฉด, 2023๋ 9์ 12์ผ ์ ๋ํฐ(Unity)๋ ๋ฐํ์ ์์๋ฃ ์ ์ฑ ์ ๋ฐํํ๊ณ 10์ผ ํ ๋ถ๋ถ์ ์ผ๋ก ์ฒ ํํ์ต๋๋ค.
๊ทธ ์ฌ์ด ๊ฐ๋ฐ์๋ค์ ์ด๊ฒ์ด ์ด๋ฏธ ์ถ์๋ ๊ฒ์์๋ ์ ์ฉ๋๋์ง ์์ง ๋ชปํ๊ณ , ๋ฐํ์ ์์๋ฃ์ ์ ์๋ ๋ชจํธํ์ผ๋ฉฐ, ์ด๋ฅผ ์ด๋ป๊ฒ ๊ฐ์งํ๋์ง์ ๋ํ ์ฐ๋ ค๊ฐ ์์์ก๊ณ , ์ ๋ํฐ๋ ๊นํ๋ธ(GitHub)์ ์ด์ฉ์ฝ๊ด(TOS) ํ์ด์ง๋ง์ ์ญ์ ํ๋ฉด์ ๋ํผ๋์ด ๋ฒ์ด์ก์ต๋๋ค.
์ ๋ํฐ๋ ๋์ค์ ํด๋น ๊นํ๋ธ ํ์ด์ง์ ํธ๋ํฝ์ด ์ ์ด์ ์ฝ๊ด ํฌ๋ช ์ฑ ์ ์ง ๋ฐฉ์์ ์ญ์ ํ๋ค๊ณ ๋ฐํ์ต๋๋ค. ???
๋งํ ๊ฒ๋ ์์ด ์ ๋ํฐ๋ ์ด์ํ ํ์ ์ฑ๋ช ๊ณผ ๋ถ์คํ ํด๋ช ์ผ๋ก ์ํฉ์ ๋ ์ ํ์์ผฐ๊ณ , ๋ค๋ฅธ ์ฌ๋๋ค๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ํผ๋์ค๋ฌ์ํ๋ ์ง์๋ค์ ์ฌ๋๋ค์ ์ง์ ์ํค๊ธฐ ์ํด ์ต์ ์ ๋คํ์ต๋๋ค. ๋์ฌ์์ด์์ต๋๋ค.
์ด๊ธฐ ๋ฌธ์ ์ ํ์ ์ํฉ์ ๋ํ ์์ธํ ๋ด์ฉ์ ๊ด๋ จ ๋งํฌ์์ ํ์ธํ ์ ์์ต๋๋ค.
์ ๋ํฐ๊ฐ ํ ์ง์ ๋ฉ์ฒญํ ์ง์ด์์ต๋๋ค. ์ ๋ ์ ์ด์ ๊ทธ๋ค์ ์์ง์ ๊ทธ๋ ๊ฒ ์ข์ํ์ง๋ ์์๊ณ , IPO ์์ฅ ์ดํ ๋ฒ๊ทธ๊ฐ ๋ง์ ์ปดํฌ๋ํธ๋ค์ ๊ณ ์น์ง๋ ์์ผ๋ฉด์ ์์๋ฃ๋ฅผ ๋ง๋ถ์ด๋ '์ปค๋ฎค๋ํฐ๋ฅผ ์ํ' ์์ง์ด๋ผ๋ ๋ง์ ๋ค์์ ๋ ์ ํ ๋ ๋ฆฝ์ ์ธ ์ธ๋ ๊ฐ๋ฐ์๋ผ๋ ๋๋์ ๋ฐ์ง ๋ชปํ์ต๋๋ค.
๊ทธ๋์ ๋ฉ๊ฐ ํฌ๋ฆฟ ํ๊ณผ ์ ๋ ์ฝ ์ผ์ฃผ์ผ ๋์ ๊ณ ๋๋ฅผ ํ๊ฐํ ํ, "๊ณ ๋๋ ์ ๋ ์ด๋ฐ ๊ฑธ ๋ชป ํ๋ค"๋ผ๊ฑฐ๋ ์ํคํ ์ฒ์์ ํจ์ (์๋ฅผ ๋ค์ด ์ฐฝ์์๊ฐ ECS์ ๋๋ฌด ๊ด์ ์ผ๋ก ์ง์ฐฉํ๋ค๊ฑฐ๋) ๊ฐ์ ๋ฌธ์ ์ ๋ค์ ๊ฒํ ํ๊ธฐ ์ํด 2์ฃผ์ง๋ฆฌ ๊ฒ์์ ๋ง๋๋ ๊ฒ์ด ์ต์ ์ด๋ผ๊ณ ๊ฒฐ์ ํ์ต๋๋ค.
๊ทธ๋ฐ๋ฐ ์ ๊ณ ๋(Godot)์ธ๊ฐ?
๊ฒ์ ์์ง์ ์ ํํ ๋ ์ ๊ฐ ๊ณ ๋ คํ๋ ๋ช ๊ฐ์ง ์๊ตฌ ์ฌํญ์ด ์์ต๋๋ค. ์ฃผ๋ก ์๊ฐ๋๋ ๊ฒ๋ค์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
๋จ์ํ ๊ฒ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ด์์ ๊ธฐ๋ฅ: SDL์ด๋ LWJGL๋ก ์์ ํด ๋ณธ ๊ฒฝํ์, ์กฐ๊ธ ๋ ์น์ ํ๊ฒ ์๋ดํด ์ฃผ๋ ์์ง์ ์ํฉ๋๋ค. ๋ฆฌ์์ค ๋ก๋ฉ/์ธ๋ก๋ฉ, ํฐํธ ์ฒ๋ฆฌ, ๋์คํ๋ ์ด ์ฒ๋ฆฌ๋ฅผ ์ํ ์ฌ๋ด API ๋ช ๊ฐ ์ ๋๋ ์์์ผ๋ฉด ํฉ๋๋ค. ๊ทธ๋ฐ ๊ฒ๊น์ง ์ง์ ์ง๊ณ ์ถ์ง๋ ์์ต๋๋ค. ์ ๋ ๊ฒ์์ ๋ง๋ค๊ณ ์ถ์ผ๋๊น์!
์ ์ ํ์ ์ธ์ด(Statically-Typed Language): ๋น์ฃผ์ผ ์คํฌ๋ฆฝํ , ๋๋๊ทธ ์ค ๋๋กญ ์ ์ฉ ์๋ํฐ๋ ์ ๋ ์ฌ์ํ๋ฉฐ, ๋์ ์คํฌ๋ฆฝํ ๋ฐฉ์๋ ์์น ์์ต๋๋ค. ์ ๋ C++, C, Objective-C, Java๋ฅผ ๋ค๋ฃฐ ์ค ์๊ณ Python๊ณผ JavaScript๋ ์์ง๋ง ์ ๊ฒ๋ ๊ทธ์ ์ฐ์ฐํ ๋ฟ์ ๋๋ค. ์ ๊ฐ ์ด ์ธ์ด๋ค๋ก ์์ฑํ๋ ์ฝ๋๊ฐ ๋ฌธ์ ๋ผ๊ธฐ๋ณด๋ค, ํ์ฌ ๋ด์์ ๋ชจ๋ ๊ฒ์ ์ ์ ํ์ ์ผ๋ก ์์ฑํ๋๋ก ๊ฐ์ ํ ๋ฐฉ๋ฒ์ด ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ ๋ ์ ํ ๋ผ๊ฐ ์ด๋์ ๋ฅ์ ์์ง๋ ๊ฐ์ ํ์ง ๋ชปํฉ๋๋ค.
์ปค๋ฎค๋ํฐ:
๊ณ ๋๋ ์ด์ ๋ฉด์์ ๋์ค์ ์ธ ๋์์ฒ๋ผ ๋๊ปด์ง๋๋ค.
์ธ๊ธฐ๊ฐ ๋ง์์๋ก ๊ณตํต์ ์ธ ๋ฌธ์ ๋ค์ด ๋ ๋ง์ด ํด๊ฒฐ๋๊ณ ๋ ผ์๋ฉ๋๋ค.
์ ๋ ๋๋ํ ์ฌ๋์ด ์๋๋๋ค.
๋ฌธ์ ๋ฅผ ๋น ๋ฅด๊ฒ ํด๊ฒฐํ์ง ๋ชปํ๋ฉด ๊ทธ๋ฅ ๋์ถฉ ์์๋ฐฉํธ์ผ๋ก ๋์ฐ๊ณ ๋์ด๊ฐ๋๋ค.
๊ทธ๋๋ ํ๋ก์ ํธ๋ฅผ ์ํด ๋์ ์์ฑ๋๋ฅผ ๊ฐ์ง ํด๊ฒฐ์ฑ ์ ์ฐพ์์ ์ ์ฉํ๋ ๊ฒ์ ์ ํธํฉ๋๋ค.
์ฐ๋ฆฌ๋ ์๊ท๋ชจ๋ก ํจ์จ์ ์ผ๋ก ์ผํ๊ธฐ ๋๋ฌธ์ ๊ตณ์ด ๋ฐํด๋ฅผ ๋ค์ ๋ฐ๋ช ํ๊ณ ์ถ์ง ์์ต๋๋ค.
์ ๊ฐ ๋ณผ๋ฅ๋ฉํธ๋ฆญ ํด๋ผ์ฐ๋๋ฅผ ์ง์ ๊ตฌํํ ๊ฒ ๊ฐ๋์? ์ฌ์ํ๊ฒ ์ต๋๋ค.
ํฌํ (Porting):
์ง์ ํฌํ ์ ํ๊ณ ์ถ์ต๋๋ค!
์ฌ๋ ์ด ๋ ์คํ์ด์ด(Slay the Spire)์ LibGDX๋ฅผ ์ ํํ๋ ์ด์ ๋ PC, Mac, Linux๋ฅผ ์ง์ํ ์ ์์๊ธฐ ๋๋ฌธ์ ๋๋ค.
๋ค, JavaVM์์ ๋์๊ฐ๊ณ ์จ๊ฐ ๋ฌธ์ ๊ฐ ์์ง๋ง 'ํ ๋ฒ ์์ฑํด์ ์ด๋์๋ ์คํ(Write once, run anywhere)' ์๋๊ฒ ์ต๋๊น?
์๋์์ต๋๋ค.
์ฝ์์์๋ ์คํ๋์ง ์์๊ณ Mac๊ณผ Windows ์ ๋ฐ์ดํธ๋ ๋์์์ด ์ถฉ๋์ ์ผ์ผ์ผฐ์ต๋๋ค.
์ด์จ๋ ํฌํ ์ ์ด๋ ค์ด ์ผ์ธ๋ฐ, ๊ณ ๋์ ๊ฒฝ์ฐ W4Games๊ฐ ํฌํ ํด์ ๊ฐ๋ฐ ์ค์ธ ๊ฒ์ผ๋ก ๋ณด์ด๋ฉฐ ์ฝ์ ํฌํ ์ ์งํํ๋ ๋ค๋ฅธ ํ์ฌ๋ค๋ ์์ต๋๋ค!
๋งค์ฐ ๋ฉ์ง ์ผ์ ๋๋ค.
๋ํ ๋ ์ค์์น๋ก ๋์จ ๋ธ๋กํํ (Brotato)์ ์นด์ธํธ ๋น์คํธ(Cassette Beasts)๋ผ๋ ๐!?
์ผ๋ฐ์ ์ธ ์์ง ์๋, ์ ๋ฐ์ดํธ ๋น๋, ์ธํฐํ์ด์ค์ ์พ์ ํจ, ๊ทธ๋ฆฌ๊ณ ์์ ์/์ค๋ฆฝ์๊ฐ '์กด ๋ฆฌ์นํฐ์๋ก(์ ์ ๋ํฐ CEO) ์ฆํ๊ตฐ' ์ฆ์ธ๋ฅผ ๋ณด์ด๋์ง ์ฌ๋ถ ๋ฑ ์์ง์ ์ ํํ๋ ๋ค๋ฅธ ์ด์ ๋ค๋ ์์ต๋๋ค.
๊ณ ๋๋ ์ด๋ฌํ ์๊ตฌ ์ฌํญ๋ค์ ์ถฉ์กฑํ๊ณ C#๋ ์ง์ํ๋ค๊ณ ๋์ด ์์์ต๋๋ค.
์ข์ต๋๋ค. ๊ฒ์์ ๋ง๋ค์ด ๋ด ์๋ค.
๋์ฑ ๋์ผ๋ฆฌ์คํธ(Dancing Duelists)๋ ์ด๋ค ๊ฒ์์ธ๊ฐ?
์์ ์ธ๊ธํ๋ ๋ฐ๋ก ๊ทธ ๊ฒ์์ผ ๊ฒ์์ ๋๋ค!
ํ๋ก๊ทธ๋๋จธ ํ ๋ช ์ด '๋๊ท๋ชจ ํฌํ ' ์์ ์ ์์ํด์ผ ํ๊ณ ์ฝ์ด ํ๋ ์์ํฌ์ ์์ ์๊ฐ ๋๋ฌด ๋ชฐ๋ฆฌ๋ ๊ฒ์ ์์น ์์๊ธฐ ๋๋ฌธ์ ๊ฒฐ๊ตญ ์ผ์ 1์ฃผ์ผ์ ๋ ์ฐ๊ฒ ๋์์ต๋๋ค.
์ ํฌ๋ ๋ฑ๋น๋ฉ ์คํ ๋ฐฐํ๋ฌ๋ฅผ ๋ง๋ค๊ธฐ๋ก ํ์ต๋๋ค.
์ต์ํ๊ธฐ๋ ํ๊ณ , ์ ํฌ๊ฐ ๋ง๋ค๊ธฐ ์ข์ํ๋ ์ฅ๋ฅด์ ์์๋ค(์ฝํ ์ธ ๊ฐ ๋ฐฉ๋ํ๊ณ ๊ฒฐ์ ๋ก ์ ์ธ ๊ฒ์)์ ๋ง์ด ๋ด๊ณ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
https://youtu.be/ocDoNhz5JkM?si=RGWUGr05QjIFmI-C
(์ผ๋ถ ๊ณต๊ฐ)
๊ฒ์ ์ฝํ ์ธ ํ์ดํ๋ผ์ธ
๋ค๋ฅธ ํ์ฌ๋ค๊ณผ ๋ฌ๋ฆฌ ์ ํฌ๋ ๊ธฐํ ์ค์ฌ(design-first) ํ์ฌ์ด๋ฉฐ, ๋ ๋ช ์ ๊ฒ์ ๋์์ด๋(์ ์ ์ค์๋) ๋ชจ๋ ๊ธฐ์ ์ ์ผ๋ก ๋ฅ์ํ์ฌ ์ฌ๋ฌ ํด์ ๋ฐ๋ก ๋ง๋๋ ๋ฒ๊ฑฐ๋ก์์ ํผํ ์ ์์ต๋๋ค.
์ ๋ํฐ์์ ์์ ํ ๋๋ ์ ํฌ๋ ํ๋ฆฌํน์ ์ฝํ ์ธ ๋ก ๋ง๋ค๊ฑฐ๋ Scriptable Object๋ฅผ ์ฝํ ์ธ ๋ฐ์ดํฐ ์ ์ฅ ์๋จ์ผ๋ก ์ฌ์ฉํ๋ ๋ฐฉ์์ ์ง์ํ์ต๋๋ค.
๋ง์ฐ์ค๋ก ์ด๋ฆฌ์ ๋ฆฌ ํด๋ฆญํ๊ณ ์ถ์ง ์์๊ณ , IDE๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ํจ์ฌ ๋นจ๋๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ ์์ ๋งค๊ฐ๋ณ์๋ฅผ ์ค๊ฐ๊ธฐ ํธํ๊ณ , ๊ฐ๋ ฅํ ๊ฒ์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ์์ง์ด ์ฝ๋ ์ค์ ์ ํํ ์ง์ด์ฃผ๋ฉด ๋ฒ๊ทธ๋ฅผ ํด๊ฒฐํ๊ธฐ๋ ํจ์ฌ ์์ํฉ๋๋ค.
์ด๋ฌํ '์ฝ๋ ๊ธฐ๋ฐ ์ฝํ ์ธ (Content-as-code)' ์ํคํ ์ฒ๋ ์ฌ๋ ์ด ๋ ์คํ์ด์ด๋ฅผ ๋ง๋ค ๋ ์ฌ์ฉํ๋ ๋ฐฉ์ ๊ทธ๋๋ก์ด๋ฉฐ, ์ด๋ฒ ์นด๋ ๊ฒ์์ผ์์๋ ๊ณ ๋ ์์ง์์ ์๋ฒฝํ๊ฒ ์๋ํ์ต๋๋ค.
ํ๋ก๊ทธ๋๋ฐ์ด๋ผ๋ ๋จ์ด์ ๊ฑฐ๋ถ๊ฐ์ด ์๋ ๋น๊ธฐ์ ์ง ๋์์ด๋๋ผ๋ฉด ๋ค์ ์ฝ๋๋ฅผ ์ดํด๋ณด์ธ์.
์ ํฌ๊ฐ '๋ฐฑํ๋ฆฝ(Backflip)'์ด๋ผ๋ ์นด๋๋ฅผ ๊ตฌํํ ๋ฐฉ์์ ๋๋ค.
์ธ์คํํฐ๋ ํน์ํ ๋ฐ์ดํฐ ํฌ๋งท์ ์ฌ์ฉํ๋ ๊ฒ๋ณด๋ค ์ด ๋ฐฉ์์ด ํจ์ฌ ์์ํ๋ค๊ณ ์๊ฐํ์ง๋ง, ๊ฐ์ธ ์ทจํฅ์ ๋ฐ๋ผ ๋ค๋ฅผ ์ ์์ต๋๋ค.
C#
public sealed class Backflip : CardModel {
public override string Title => "Backflip";
public override string Description => "Deal 2 damage.\nGain 2 HP.";
protected override string PortraitPath => "backflip.png";
public override async Task OnPlay(FighterClashState owner, FighterClashState target) {
await FighterCmd.Damage(target, 2, owner, this);
await FighterCmd.GainHp(owner, 2, owner);
}
}
์ด ๊ฒ์ ์ฝํ ์ธ ๋ฅผ ๊ตฌํํ๊ธฐ ์ ์ ํ๋ฉด ๊ฐ ์ฒ๋ฆฌ ๋ก์ง, UI, ์ ๋๋ฉ์ด์ , VFX, ์ค๋์ค, ํฐํธ ๋ฑ์ ์ํ ํ๋ ์์ํฌ๋ฅผ ๋จผ์ ๊ตฌ์ถํด์ผ ํ์ต๋๋ค.
๋๋ถ๋ถ์ ์์ง๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๋งค๋์ , ํฉํ ๋ฆฌ๋ฅผ ๊ตฌ์ฑํ๊ณ ๊ฒฝ์ ์ํ(Race condition)๋ฅผ ๋ฐฉ์งํ๋ฉด์ ๊ฒ์ ์ฝํ ์ธ ๋ฅผ ์ต๋ํ ์พ์ ํ๊ฒ ์ถ๊ฐํ๊ณ ํธ๋ฌ๋ธ์ํ ํ ์ ์๋ ์ต์ ์ ๋ฐฉ์์ ์ฐพ์์ผ ํ๊ธฐ์, ์ผ ๊ธฐ๊ฐ์ ๋๋ถ๋ถ์ ์ฌ๊ธฐ์ ์์์ต๋๋ค.
ํ๋ฉด๊ณผ ์ค๋ธ์ ํธ
์ ๋ ํ๋ฉด์ ๋ก๋ฉํ๊ณ ์ธ๋ก๋ฉํ๋ ์์ ์ ์ซ์ดํฉ๋๋ค.
๋ถํ์ํ๊ฒ ๋๋ฆฌ๊ณ , ์ ๋ฆฌ(cleanup) ๋ฐฉ์์ด ๋ํดํ๋ฉฐ, ์จ๊ฐ ๋ค์ํ ๋ฐ์ดํฐ๋ฅผ ์ด๊ณณ์ ๊ณณ์ผ๋ก ๋๊ธฐ๋ ๊ธฐ๋ฐํ ๋ฐฉ๋ฒ์ ๊ณ ์ํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
2D ๊ฒ์์ฒ๋ผ ์ธ๋ก๋ํ๊ณ ๋ก๋ํด์ผ ํ ๋์์ด ์์ ๋๋ ๋ช ๊ฐ์ง ์์ ๋ง ๋ด๋ฆฌ๊ณ ์ ์์ ์ ์ฌ๋ฆด ์ ์์ต๋๋ค.
ํ์ ์ด ์๋ค๋ฉด ์ฌ์ ์ ๋น๋๊ธฐ๋ก ๋ฏธ๋ฆฌ ๋ก๋ํ ์๋ ์์ต๋๋ค.
์ ๋ํฐ์ ๊ณ ๋ ๋ชจ๋ ๋ถ๋ชจ/์์ ๊ด๊ณ๋ก ์ค๋ธ์ ํธ๋ฅผ ์๊ฐํํ๊ณ ์ฌ ๋ฆฌ๋ก๋ฉ์ ํผํ ์ ์์ด ์ ์ฐํฉ๋๋ค.
ํ๋ ๊ฒ์ ์์ง์ ๋ฉ์ง ์ ์ค ํ๋์ ๋๋ค.
์ฌ ํธ๋ฆฌ๋ฅผ ์๊ฐํํด์ ๋ณด์ง ์์ผ๋ฉด ๊ฐ๋ ์ค๋ธ์ ํธ๋ฅผ ๋ฏธ์ฒ ์ ๋ฆฌํ์ง ๋ชปํ๊ณ ๋จ๊ฒจ๋๋ ๊ฒฝ์ฐ๊ฐ ์๊น๋๋ค.
์ฌ ํธ๋ฆฌ๊ฐ ๋์จ ๊น์ ์ด์ผ๊ธฐํ์๋ฉด, ์ ๋ํฐ์๋ ์ฌ(Scenes)๊ณผ ํ๋ฆฌํน(Prefabs)์ด ๋๋์ด ์์ต๋๋ค.
๊ณ ๋์์๋ ์ด ๋์ด scenes๋ผ๋ ํ๋์ ๊ฐ๋ ์ผ๋ก ํฉ์ณ์ ธ ์์ผ๋ฉฐ, tscn ํฌ๋งท์ผ๋ก ์ ์ฅ๋์ด Git๊ณผ ์๋ฒฝํ ํธํ๋ฉ๋๋ค.
์ ๋ง ๋๋จํฉ๋๋ค.
Perforce๊ฐ ๊ณผ์ฐ ์ ์ฉํ ํด์ธ์ง ํ์๊ฐ์ด ๋ค๊ฒ ๋ง๋ค์๋ ์ ๋ํฐ์ YAML ๋ฐฉ์๋ณด๋ค ํจ์ฌ ๋ซ์ต๋๋ค(Perforce๋ ์ ์ฉํ์ง ์์ต๋๋ค, ๋ฐ๋ฐ ํ์).
๋์ฐํ๋ ํ๋ฆฌํน ๋ณํฉ์ ์๋๋ ๋๋ฌ์ต๋๋ค.
๋ฌผ๋ก ์ฌ์ ๋ณ๊ฒฝ ์ฌํญ์ด ๋๋ฌด ๋ง์ผ๋ฉด ์ฝ๊ฐ์ ๋ฌธ์ ๊ฐ ์๊ธธ ์ ์์ง๋ง, ์ ๋ง '์ฝ๊ฐ'์ ๋ถ๊ณผํฉ๋๋ค.
์ด๋ฌํ ์ฌ ๋ด๋ถ์ ์ค๋ธ์ ํธ๋ค์ ๋ ธ๋(Node)๋ผ๊ณ ๋ถ๋ฆ ๋๋ค.
์ฆ, GameObject๊ฐ Node๊ฐ ๋ ์ ์ ๋๋ค.
์ปดํฌ๋ํธ๋ฅผ ์ฌ๋ฌ ๊ฐ ๋ถ์ผ ์๋ ์์ง๋ง, ๋๋ถ๋ถ์ ์๊ตฌ ์ฌํญ์ ์ฒ๋ฆฌํ ์ ์๋ ๋ค์ํ ๋ ธ๋ ํ์ฅ ํด๋์ค๋ค์ด ์กด์ฌํฉ๋๋ค.
์๋ค๋ฉด ๊ธฐ๋ณธ Node ํด๋์ค๋ฅผ ์์๋ฐ์ ์ง์ ์์ฑํ๋ฉด ๋ฉ๋๋ค.
์ ๋ ์๋ ๊น๊นํ ํธ์ด๋ผ ์ด ๋ฐฉ์์ด ์คํ๋ ค ๋ง์์ ๋ญ๋๋ค.
์จ๊ฐ ์ปดํฌ๋ํธ๋ก ๋ค๋ฒ๋ฒ ๋ ์ ๋ํฐ์ ํ๋์ผ์ํ์ธ ๊ฐ์ GameObject๋ค์ ํญ์ ๋ง์์ ๋ค์ง ์์์ต๋๋ค.
ํ๋ฃจ ์ข ์ผ ์ธ์คํํฐ๋ฅผ ์คํฌ๋กคํ๋ ๊ฒ์ ๊ณ ํต์ค๋ฝ์ต๋๋ค.
๋ ผ๋์ ์ฌ์ง๊ฐ ์๊ฒ ์ง๋ง, ์ ๋ ๋ชจ๋ํฐ ์ ์ฒด ํ๋ฉด์ ํ์ฉํด ๋น ๋ฅด๊ณ ๋งค๋๋ฝ๊ฒ ๊ฒ์์ ๋ง๋ค๊ณ ์ถ๊ณ Alt+Tab์ ๋๋ฌด ์์ฃผ ๋๋ฅด๊ณ ์ถ์ง ์์ต๋๋ค.
๋๋ก๋ ๋ ธ๋์ ์ฌ๋ฌ ์ค์ ์ ๋ง์ ธ์ผ ํ์ง๋ง, ๊ฐ ๋ ธ๋๊ฐ ๊ฐ์ง ์ ํ๋ ํ๋ผ๋ฏธํฐ๊ฐ ์คํ๋ ค ์์ ์ ์ ์ ์ง์ผ์ค๋ค๋ ๋๋์ ๋ฐ์์ต๋๋ค.
UI ๋ ์ด์์
๋ ธ๋ ์ด์ผ๊ธฐ๊ฐ ๋์จ ๊น์ ๋ง๋ถ์ด์๋ฉด, ๋ ธ๋๋ฅผ ๋ถ๋ชจ-์์ ๊ด๊ณ๋ก ๋ฌถ๊ณ ๋ค์ํ ์ง์ ์ ์ต์ปค(Anchor)๋ฅผ ์ก๋ ๋ฐฉ์์ ๊ฒ์ UI๋ฅผ ๋ฐฐ์นํ๊ณ ๋ค์ํ ํ๋ฉด ๋น์จ ๋ฐ ํด์๋ ํธํ์ฑ์ ๋์ด๋ ํ๋์ ์ธ ๋ฐฉ์์ ๋๋ค.
์์ฒด ์์ง์ ๋ง๋๋ ๊ฐ๋ฐ์๋ค์ด ์ UI ์์ ์ ์ซ์ดํ๋์ง ๊ถ๊ธํ๋ค๋ฉด, ๋ฐ๋ก ์ด๋ฐ ์์คํ ์ ์ง์ ๊ตฌํํ๊ณ ์ถ์ง ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
๋ฒ๊ฑฐ๋กญ๊ณ , ๋ ๋ค๋ฅธ ์์ํ ํ๋ฉด ๋น์จ์ ์ง์ํ๊ฒ ๋์๋ค๊ณ ํด์ ๋ฑํ ๋ฌด์ธ๊ฐ๋ฅผ ์ฑ์ทจํ๋ค๋ ๋๋๋ ๋ค์ง ์์ต๋๋ค.
์ ๋ํฐ์ ๊ณ ๋ ๋ชจ๋ ๋ฆฌ์คํธ๋ ๊ทธ๋ฆฌ๋๋ก ์ ๋ฆฌํ ์ ์๋๋ก ํผ๋ฒ, ์ต์ปค, ๋ค์ํ ์ปจํ ์ด๋๋ฅผ ์ ๊ณตํฉ๋๋ค.
๋๋ก๋ ๋งค์ฐ ํท๊ฐ๋ฆด ์ ์๋๋ฐ, ํน์ ๋ณ์๊ฐ ์ ๊ธธ ๋๋ ๊ทธ ์ด์ ๊ฐ ์์ฃผ ๋ช ํํด์ผ ํ๋ค๊ณ ์๊ฐํ์ง๋ง ๊ฒฐ์ฝ ๊ทธ๋ ์ง ์์ต๋๋ค.
์ต์ ์ ๊ฒฝ์ฐ์๋ "๋ถ๋ชจ๊ฐ ํ๊ฐ ๋ฌ๊ธฐ ๋๋ฌธ์ ์ด ์์ ์ ์ํํ ์ ์์ต๋๋ค"๋ผ๋ ์์ ํ์ ์ด ๋น๋๋ค.
๊ทธ๋์ ํ์ต ๊ณก์ ์ด ์กด์ฌํ๋ฉฐ, ์ ๋ํฐ๋ UI Toolkit์ ํตํด ์ด ๋ชจ๋ ๊ฒ์ ๊ฐ์์๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ๋น๋์ค ๊ฒ์์์ UI๋ฅผ ๋ง๋๋ ๊ณผ์ ์ ์์ํ ์ฌ์์ผ๋ก ๋จ๊ฒ ๋ ๊ฒ์ ๋๋ค.
UI ์์ ์ ์ฆ๊ธฐ๋ ์ฌ๋์ ๊ณ ์ 6๋ช ์ ๋์ ๋ถ๊ณผํ๊ณ , ์ ๋ํฐ ์ฑ ์์๋ ํ๋ก ํธ์๋ ์น ๊ฐ๋ฐ์ ์ถ์ ์ผ ๊ฒ์ด๋ฉฐ, ์ด์ ๋ชจ๋ ์ธ๋ ๊ฐ๋ฐ์๋ ๊ทธ ๋ฐฉ์์ ๊ฐ์ ๋ก ๋ฐฐ์์ผ ํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
์กฐ์๋ฅผ ํํฉ๋๋ค.
์ด์จ๋ ๊ณ ๋์ ์ ๋ํฐ ๋ชจ๋ UI์ฉ ํน์ ๋ ธ๋๋ค์ ํํธ์์ต๋๋ค.
๋ง์ต๋๋ค.
๊ณผ๊ฑฐ์๋ ํํธ์์๊ณ ์์ผ๋ก๋ ํํธ์์ ๊ฒ์ ๋๋ค.
๊ฒ์์๋ ๋ณต์กํ UI ์์ธ ์ผ์ด์ค๊ฐ ๋ง์์ ์ผ๋ฐ์ ์ธ ํ ํ๋ฆฟ์ ๋น๋ ค ์ฐ๋ฉด ๊ฒ์์ ์ง์ด ๋จ์ด์ง๋๋ค.
UI๋ User Interface์ ์ฝ์์ด๋ฉฐ, ์ ์ (ํ๋ ์ด์ด)๊ฐ ์ธํฐํ์ด์ค(๊ฒ์)์ ์ํธ์์ฉํ๋ ํต๋ก์ ๋๋ค.
์ด๋ณด ๊ฐ๋ฐ์๋ค์ ๋ชจ๋ ๊ธฐ๋ณธ๊ฐ์ ์ฌ์ฉํฉ๋๋ค.
๋ฒํผ ์์์ด ๋ฏธ์ธํ๊ฒ ๋ฐ๋ ๋: "์, UI ๊ฐ๋ฐ์๊ฐ ๊ฒ์ผ๋ฅธ ์ ๋ํฐ ๊ฒ์์ด๊ตฐ."
๊ธ์ ์์ ๋ง์ฐ์ค๋ฅผ ์ฌ๋ ธ๋๋ฐ ๋ง์ฐ์ค ์ปค์๊ฐ ํ ์คํธ์ ๋ฒกํฐ ์ธ๊ณฝ์ ์ ์ ํํ ๋ฟ์์ผ๋ง ๋ฐ์ํ ๋: "์, ํ๋์ ๊ฒ์์ด๊ตฐ. ์ด๋ป๊ฒ 2023๋ ์ ์์ง๋ ํ๋์ ๊ฒ์์ ํ๊ณ ์์ง?"
์ ๋ํฐ์ ๋ชป์๊ธด ๊ธฐ๋ณธ 'Font' ์ปดํฌ๋ํธ ๋ฒํผ๊ณผ UI ์ปจํธ๋กค์ ๋ํด์๋ ๋ง๋ ๊บผ๋ด์ง ๋ง์ธ์.
๊ทธ๋ ์ง๋ง TextMeshPro๋ ์ ๋ง ํ๋ฅญํ์ต๋๋ค.
๊ทธ๋ฆฝ๋ค์. ์ ๋ฐ ๊ธ๊ผด ์๋ ํฌ๊ธฐ ์กฐ์ ์ ์ต์/์ต๋์น๋ฅผ ๊น๋ํ ์ง์ฌ๊ฐํ ์์ ์์ง ์ค์ ์ ๋ ฌ๋ง ํ ์ ์๊ฒ ํด์คฌ์ผ๋ฉด ์ข๊ฒ ์ต๋๋ค.
ํ ์คํธ๋ฅผ ๋ณด๊ธฐ ์ข๊ฒ ๋ง๋ค๊ธฐ ์ํด ์์ฒด ์ฝ๋๋ฅผ ์์ฑํด์ผ ํ์ต๋๋ค.
์ ๋ ํฐํธ์ ํ ์คํธ์ ๋งค์ฐ ์ ๊ฒฝ์ ๋ง์ด ์๋๋ค.
(์ ํฌ ๋์ค์ฝ๋ ์๋ฒ์๋ ์ ๊ฐ ํฐํธ ์ด์ผ๊ธฐ๋ฅผ ๋๋ฌด ๋ง์ด ํ๋ฉด ๊ฒฝ๊ณ ๋ฅผ ์ฃผ๋ ๋ด์ด ์์ ์ ๋์ ๋๋ค.)
๊ทธ๋๋ ๊ณ ๋์์ MSDF(Multi-channel Signed Distance Field)๋ฅผ ์ง์ํ๋ ๊ฒ์ ๋ณด๊ณ ๊ธฐ๋ปค์ต๋๋ค.
๋ฉ์ง ๊ธฐ์ ์ ๋๋ค!
๋ชจ์๋ฆฌ๊ฐ ์์ฃผ ๋ ์นด๋กญ๊ณ ์ค์ผ์ผ๋ง๋ ํ๋ฅญํฉ๋๋ค.
์์ ํ ์๋ํ์ง ์์ ๋๋ง ๋นผ๊ณ ์. ๐ข
(๋ค, ์์ ํ๋ก์ ํธ์ ํจ๊ป ์ด์๋ฅผ ์ ๋ณดํ ์์ ์ ๋๋ค. ๋ฐฉ๊ธ ์ผ์ ๋๋์ผ๋ ์๊ฐ์ ์กฐ๊ธ๋ง ์ฃผ์ธ์.)
C#์ ์ค์ ๋ก ์ ๋๋ก ์ง์ํ๋๊ฐ?
C#์์๋ ํน์ API์ ์ ๊ทผํ ์ ์์ง ์์๊น?
์ฌ์์ ์ค๋ธ์ ํธ๋ฅผ ์ฐพ๋ ๊ฒ์ด ๋ฒ๊ฑฐ๋กญ์ง ์์๊น?
์ปดํ์ผํ ๋ ํญ์ ์ ๋ฐ์ดํธ ์ค์ด๊ฑฐ๋ ๋ถ์์ ํ์ง ์์๊น?
IDE์์ ๊ณ ๋ ์๋ํฐ๋ก Alt+Tab์ ๋๋ฅผ ๋๋ง๋ค ๋งค๋ฒ 10์ด์ฉ ์คํฌ๋ฆฝํธ๋ฅผ ์ปดํ์ผํ๋๋ผ ์ํฌํ๋ก์ฐ๊ฐ ์๋ง์ด์ง ์์๊น?
์ด๋ฐ ์๊ฐ๋ค์ C# ๊ด๋ จ ์ด์ผ๊ธฐ ์ค์ GDScript ์ ๋์ฌ๋ค์ด ๋ฑ์ฅํ์ ๋ ์ ๊ฐ ๊ฐ์ก๋ ๋น์ด์ฑ์ ์ธ ๋๋ ค์๋ค์ด์์ต๋๋ค.
์์์๋ ์ธ๊ธํ๊ณ ๋ค์ ๋ง์๋๋ฆฌ์ง๋ง, ์ ๋ ์ ์ ํ์ ์ธ์ด๋ฅผ ์ ํธํฉ๋๋ค.
๋์จํ๊ณ ๋ชจํธํ ๋์ ํ์ ์ var ๊ฐ์ ๊ฒ์ ์ ํ ์์น ์์ผ๋ฉฐ, ์๋ฌด๋ ์ ์ฑํฅ์ ๋ฐ๊ฟ ์ ์์ต๋๋ค.
์ ๋ ๋ช ํํ๊ณ ์ฅํฉํ ๊ฒ์ ์ข์ํฉ๋๋ค.
๋น์ทํ ๋งฅ๋ฝ์์ ์ ํฌ๋ CSV ๋์ JSON์ ์ฌ์ฉํฉ๋๋ค.
๊ฐ์ ์๋ฆฌ์ ๋๋ค.
๋ณธ๋ก ์ผ๋ก ๋์๊ฐ์, C# ํตํฉ ์์ค์ ๋งค์ฐ ๋๋์ต๋๋ค.
์ ๊ฐ ์ฃผ๋ก ์ฌ์ฉํ๋ IDE(JetBrains Rider) ์ค์ ๋ ์ฌ์ ์ต๋๋ค.
์๋ ์์ฑ์ด ํ๋ฅญํ๊ฒ ์๋ํ๊ณ ๊ธฐ๋ณธ์ ์ผ๋ก IDE์์ ๊ฒ์์ ๋ฐ๋ก ์คํํ ์ ์์์ต๋๋ค.
๋ํ ๊ณ ๋๋ก ์ ํํ์ฌ ๊ฒ์์ ์คํํ๋ ์๋๊ฐ ๋นจ๋์ต๋๋ค.
์ ๋ง, ์์ฃผ ๋นจ๋์ต๋๋ค.
์ ๋ํฐ์์ 5~10์ด ๋์ ๋จ๋ "Compiling Scripts..." ํ์ ์ ๋ ์ ์ ๋ชฝ์ ๋ํ๋๊ณค ํ์ต๋๋ค.
๋น ๋ฅธ๊ฐ? ๊ทธ๋ ๋ค
์คํฌ๋ฆฝํธ ์ปดํ์ผ ์ง์ฐ์ด ์ฌ๋ผ์ก๊ณ ๊ณ ๋๋ ์ ๋ํฐ๋ณด๋ค ํจ์ฌ ๊ฐ๋ณ์ต๋๋ค.
ํ์ด์๋ ๊ทธ๋ํฝ์ด๋ ํ๋ คํ ์กฐ๋ช ๊ธฐ์ ์ ์ํ์ ๋ค๋ฉด ๋๋ฆด ๋ง์์ด ์์ง๋ง, ์ ฐ์ด๋, ํํฐํด ์์คํ , ๋จธํฐ๋ฆฌ์ผ ๋ฑ ๊ธฐ๋ณธ์ ์ธ ์์๋ค์ ์ถฉ๋ถํ ๋ค๋ฃฐ ์ ์์ต๋๋ค.
์ต์ฒจ๋จ์ ์๋์ง ๋ชฐ๋ผ๋ ์ ๋ ์ ๋ชจ๋ฆ ๋๋ค.
์ ๊ด์ฌ์ฌ๋ ๊ฐ์ฅ ํ๋ คํ ์ฅ๋๊ฐ์ด ์๋๋ฉฐ, ์ด์จ๋ ์ ๋ ์ธ๋ ๊ฐ๋ฐ์๋๊น์.
๊ณ ๋๋ ๊ฐ๋ณ๊ธฐ ๋๋ฌธ์ ๋งค๋ฒ ๋๋ฒ๊ทธ ํด์ ๋ง๋ค๊ฑฐ๋ ์ฌ์ฉํ๋ ๋์ , ๊ฒ์์ ์คํํ๊ณ ์์น๋ฅผ ๋ณ๊ฒฝํ ๋ค ๋ค์ ์คํํ๋ ๊ณผ์ ์ด ๋งค์ฐ ์พ์ ํฉ๋๋ค.
๋ํ ๋ฐํ์ ์ค์ ๋ ธ๋๋ฅผ ๋ณ๊ฒฝํ๋ฉด ์คํ ์ค์ธ ๊ฒ์์ ์ฆ์ ๋ฐ์๋ฉ๋๋ค!
์ ๋ํฐ๋ฅผ ๋ฐฐ์ธ ๋ "์ค, ์ด๊ฑด ์ ๋ง ํ๋์ ์ด๋ค"๋ผ๊ณ ๋๊ผ๋ ์๊ฐ์ด์๋๋ฐ, ๊ณ ๋์์๋ ์ ์๋ํด์ ๊ธฐ๋ปค์ต๋๋ค.
์ ๋ํฐ์ ๋นํด ๋ช ๊ฐ์ง ์ ํ ์ฌํญ์ด ์์ง๋ง ์ ๋ฐ์ ์ผ๋ก ์ ๋ง ํ๋ฅญํฉ๋๋ค.
์๋ ์ด์ผ๊ธฐ๋ก ๋์๊ฐ์๋ฉด, ํ๋ก์ ํธ๋ฅผ ์ฌ๋ ์๋๊ฐ ๋ ๋น ๋ฅด๊ณ ๋ถํ์ํ ์ธ์ฆ ์ ์ฐจ๋ ํ์ ์์ต๋๋ค.
ํ๋ก์ ํธ ์คํ๋ ๋น ๋ฅด๊ณ , ์คํฌ๋ฆฝํ ์ํฌํ๋ก์ฐ๋ ๋น ๋ฅด๋ฉฐ, ๋น๋ ์ต์คํฌํธ๋ ๋น ๋ฆ ๋๋ค.
๊ทธ๋ฅ ๋น ๋ฆ ๋๋ค!
์ฐธ๊ณ : ์ธํฐ๋ท์ raycast2d ์ฑ๋ฅ์ ๋ํ ๋ถ๋ง์ด ์ผ๋ถ ์์์ต๋๋ค.
๋ ์ด์บ์คํธ๋ฅผ ๋ง์ด ์ฌ์ฉํ ๊ณํ์ด๋ผ๋ฉด ๊ด๋ จ ๋ด์ฉ์ ์กฐ๊ธ ์ฐพ์๋ณด์๋ ๊ฒ์ ์ถ์ฒํฉ๋๋ค.
TexturePacking / TextureAtlas / SpriteAtlas
์กฐ๊ธ ๋ณ๋ก์ ๋๋ค. ๊ทธ๊ฒ ์ ๋ถ์ ๋๋ค.
๊ทธ๋๋ TexturePacker(์๋ํํฐ ํ ์ค์ฒ ํจํน ํด)๋ก ๋ง๋ ํ์ผ์ ์ฝ์ ์๋ ์์ต๋๋ค.
์ฝ๊ฐ ๋ฒ๊ฑฐ๋ก์ธ ๋ฟ์ ๋๋ค.
ํ์ง๋ง ์๊ฐํด๋ณด๋ฉด ์ ๋ํฐ๋ ๊ฒ์์ ์คํํ ๋๋ง๋ค ํจํน์ ๋ค์ ํ๊ณค ํ์ต๋๋ค.
๊ทธ๊ฒ๋ ๋ฉ์ฒญํ์ฃ .
์ด์ฉ๋ฉด ์ด ์ํฌํ๋ก์ฐ๋ ์ด๋์๋ ์ข์๋ ์ ์ด ์์๋์ง๋ ๋ชจ๋ฆ ๋๋ค.
TextureAtlas๋ฅผ ์ฌ์ฉํ ๋ NinePatch ํ ์ค์ฒ๋ฅผ ์ค์ ํ๋ ๊ฒ์ด ๋ฒ๊ฑฐ๋กญ์ต๋๋ค.
๊ทธ๋ฆฌ ๋ณต์กํ ๋ฌธ์ ๋ ์๋ ๊ฒ ๊ฐ์ ๊ธฐ๋ฅ ์์ฒญ์ ์ ์ถํด ๋ณผ๊น ํฉ๋๋ค.
๋์ฑ ๋์ผ๋ฆฌ์คํธ์ ๊ธฐํ์ ์์ฌ์ด ์
์, ๋ค์ ๋์ฑ ๋์ผ๋ฆฌ์คํธ(Dancing Duelists) ์ด์ผ๊ธฐ๋ก ๋์๊ฐ๊ฒ ์ต๋๋ค.
ํ๋ก์ ํธ ๊ท๋ชจ๋ฅผ ์ค์ด๊ธฐ ์ํด ๋์ ํ๋ ์ ํ ์ฌํญ๋ค๊ณผ ์๊ฐ ์ ์ฝ์ผ๋ก ์ธํด ์ถฉ๋ถํ ํ์ํ์ง ๋ชปํ๋ ๊ธฐํ ์์ญ๋ค์ ์ง์ด๋ณด๋ ค ํฉ๋๋ค.
๋ฑ์ด ๋๋ฌด ๋ฌด์์์ ์:
์ด๊ธฐ ๊ธฐํ์์๋ ํ๋ ์ด์ด๊ฐ ์ํ๋ ์์๋๋ก ๋ฑ์ ๊ตฌ์ฑํ ์ ์์์ต๋๋ค.
๋ฑ์ ์์์ ์๋๋ก ์๋ ์คํ๋๋ ๋ฐฉ์์ด์์ต๋๋ค.
ํ์ง๋ง ์ด๋ฅผ ์ง๊ด์ ์ผ๋ก ๋ง๋ค๋ ค๋ฉด ์๋นํ UX ์์ ์ด ํ์ํ๊ณ ๋ฐธ๋ฐ์ค๋ฅผ ๋ง์ถฐ์ผ ํ๋ ๋ณต์ก์ฑ์ด ์ปค์ง๋๋ค.
๊ฒ์์ ๋น ๋ฅด๊ฒ ํ๋ ์ดํ ์คํธ ๊ฐ๋ฅํ ์ํ๋ก ๋ง๋ค ์ ์์ ๊ฑฐ๋ผ ์์ํ์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ ๋ฌธ์ ๊ฐ ์๋ ์ฝํ ์ธ ๋ฅผ ๋ค๋ฌ๊ธฐ ์ํ ์ฌ๋ฌ ์ฐจ๋ก์ ํ ์คํธ ์ธ์ ์ ์งํํ ์ฌ์ ๊ฐ ์์์ต๋๋ค.
์ด ๋ฌด์์์ฑ ๋๋ถ์ ์ผ ๊ท๋ชจ์ ๋ง๊ฒ ๋จ์ํจ์ ์ ์งํ ์ ์์์ต๋๋ค.
ํด ์์ ๋ฌธ์ :
๋๊ฐ ๋จผ์ ๊ณต๊ฒฉํ ๊ฒ์ธ๊ฐ?
๋ฌด์น๋ถ๋ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ ๊ฒ์ธ๊ฐ?
๋ฉํฐํ๋ ์ด์ด๋ผ๋ฉด ๋๊ฐ ์ ๊ณต์ ์ก์ ๊ฒ์ธ๊ฐ?
์คํผ๋ ์คํฏ?
๋์ ๋์ง๊ธฐ?
๋ด๊ฐ ๋จผ์ ํ๊ณ ๊ทธ ๋ค์ ์๋๊ฐ ๊ณต๊ฒฉ?
๊ณต์ ์ฑ์ ํด๊ฒฐํด์ผ ํ๋ ์คํ ๋ฐฐํ๋ฌ ์ฅ๋ฅด์์ ์ด๋ ๊ฝค ๋ณต์กํ ๋ฌธ์ ์๊ธฐ์, ๊ฒฐ๊ตญ ํ๋ ์ด์ด๊ฐ ํญ์ ์ ๊ณต์ ์ก๋ PvE ๋ฐฉ์์ ์ ํํ์ต๋๋ค.
์์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋จ์ํ๋๊ธฐ๋ ํ์ง๋ง ์ด๋ก ์ธํด ๊ฒ์์ ๊น์ด๋ ์์์ก์ต๋๋ค.
์ฒํธ์ผ๋ฅ ์ ์ธ ๋น๋:
์ด์์ ์ผ๋ก๋ ๊ฐ ํ์ดํฐ๋ง๋ค ๊ณ ์ ํ ์นด๋ ํ์ ๋ง๋ค์ด 2~4๊ฐ์ ๊ณตํต ์ํคํ์ ์ผ๋ก ๋น๋ํ ์ ์๊ฒ ํ๊ณ ๋ฉํฐ ํ, ๊ณต์ ํ, ๊ทธ๋ฆฌ๊ณ ์ฅ์ ๊ตฌ(trinket) ์์คํ ์๋ ์ ์ฌํ ๋ฐฉ์์ ์ ์ฉํ์ ๊ฒ์ ๋๋ค.
์ด ์ ๋ ์์ ์ฝํ ์ธ ๋ฅผ ๋ง๋ค๊ณ ๋ฐธ๋ฐ์ค๋ฅผ ๋ง์ถ๋ฉฐ ์ํคํ์ ์ ํ์ํ๋ ๊ฒ์ ์์ฒญ๋ ์์ ์ ๋๋ค.
์์ฝ๊ฒ๋ ์ด๋ฒ ์ผ ๋ฒ์ ์ ์นด๋ ํ์ '์คํ(Spin)' ์นด๋๋ก ๋๋ฐฐ๋์์ต๋๋ค.
๋ ๋ง์ ํ๊ณ๊ฐ ์์์ง๋ง, ์ด๋ฌํ ๊ฐ์ง์น๊ธฐ ๋๋ถ์ ์งง์ ์๊ฐ ์์ ๊ฒ์์ ์์ฑํ ์ ์์๋ค๊ณ ์๊ฐํฉ๋๋ค.
๊ฒ์์ ์ ์ฌ๋ ฅ์ ์จ์ ํ ์คํํ์ง ๋ชปํ ๊ฒ์ ์์ฝ์ง๋ง, ์ค์ฉ์ ์ธ ํ๋๋ฅผ ์ทจํ๊ณ ์์ง ํ์์ ์ํ ๊ฒ์์ผ์ ๋๋ฌด ์ง์ฐฉํ์ง ์๋ ๊ฒ์ด ์ข์ต๋๋ค.
๋ฉํฐํ๋ ์ด์ด?! ์์ฝ๊ฒ๋...
์คํ ๋ฐฐํ๋ฌ ์ฅ๋ฅด์ ํน์ฑ์ ๋ง์ถฐ ์ด๋ฒ ์ผ ๊ฒ์์ ๋ฉํฐํ๋ ์ด์ด๋ก ๋ง๋ค์ง์ ๋ํด ๊ณ ๋ฏผ์ด ๋ง์์ต๋๋ค.
ํ์ง๋ง ๋ช ๊ฐ์ง ๊ธฐํ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ง ๋ชปํด ๊ฒฐ๊ตญ ๊ตฌํํ์ง ๋ชปํ์ต๋๋ค.
์ด๋ ๊ณง ์ ํฌ๊ฐ ์ง์ ๊ฒ์์ ํ๋ ์ดํ๊ณ , ๋ฑ์ ์ ์ฅํ ๋ค์, ๊ทธ ๋ฑ๋ค๊ณผ ๋์ ํด์ผ ํจ์ ์๋ฏธํ์ต๋๋ค.
ํ๋ ์ดํ ์คํธ๋ฅผ ํตํด ์ด ๋ฐ์ดํฐ๋ฅผ ์์งํ๋ ๊ณผ์ ์ด ์์๋งํผ ์ํํ์ง ์์ ์๋ํ ์คํฌ๋ฆฝํธ๋ฅผ ๋๋ ธ์ต๋๋ค.
"๋จธ์ ๋ฌ๋?", "AI?", "์ ๊ฒฝ๋ง ๋ญ์๊ธฐ?"๋ฅผ ์ผ๋๊ณ ๋ฌผ์ผ์ค ํ ๋ฐ, ์ ํ ์๋๋๋ค.
๋ฌด์ฐจ๋ณ ๋์ (Brute force) ๋ฐฉ์์ด์์ต๋๋ค.
"ํด ์์ ๋ฌธ์ "๋ก ์ธํด ๊ฒ์์ด ๋น๋์นญ์ ์ด์๊ณ , ๋งค ์ ํฌ ์์ ์ ๋ฑ์ด ๋ฌด์์๋ก ์์ด๋ฉด์ ํฐ ๋ณ์๊ฐ ์๊ฒผ๊ธฐ ๋๋ฌธ์ ์ ์๊ฒ๋ ์ด ๋ฐฉ์์ผ๋ก ์ถฉ๋ถํ์ต๋๋ค.
์์ ๊ณ ๋๊ฐ ์์ ํ๊ธฐ์ ๋น ๋ฅด๋ค๊ณ ๋ง์๋๋ ธ์ง๋ง, ์คํ ๋ฆฌ์์ค๋ ๋งค์ฐ ์ ๊ฒ ์๋ชจํฉ๋๋ค.
(๊ณ ๋์ ์ฑ๋ฅ์ ๊ฝค ํ๋ฅญํด์ ์ค๋์ค/์ ๋๋ฉ์ด์ ์ ๋ชจ๋ ์ผ ์ํ๋ก ํ ๋ฒ์ ์ฝ 15๊ฐ์ ์ธ์คํด์ค๋ฅผ ๋์์ ์คํํ ์ ์์์ต๋๋ค.)
๊ทธ๋์ ์นด๋ ์ ํ์ ๋ฌด์ฐจ๋ณ ๋์ ์ผ๋ก ๋๋ ค ํ๋ ์ด์ด๊ฐ ๋ง๋ ์์ ๋ฑ๋ค๊ณผ ์ธ์ฐ๊ฒ ํ ๋ค, ์น๋ฆฌํ๋ฉด ๊ทธ ๋ฑ์ ์ ์ฅํ์ฌ ๊ฒ์์ ๋ค์ ํตํฉํ์ต๋๋ค.
ํ์ดํฐ๋น ๋ผ์ด๋๋ณ๋ก ์ฝ 20๊ฐ์ ๊ณ ์ ๋ฑ์ ์ํ๊ณ , ํ๋ ์ด์ด๊ฐ ๋ง๋ ๋ฑ์ ์ด๊ธธ ์ ์๋ ์ต์ํ์ ์ ํฌ๋ ฅ์ ๊ฐ์ถ ์ฝ 1,200๊ฐ์ ๊ณ ์ ์๋๋ฅผ ๋ง๋ค์ด๋์ต๋๋ค.
๋ฐ์ดํฐ ์์ด ๋ง์ ๋ณด์ด์ง๋ง ๊ณ ์ 2MB์ ๋ถ๊ณผํฉ๋๋ค. ์ด ๋ฑ๋ค์ JSON ํ์ผ๋ก ์ ์ฅ๋ฉ๋๋ค.
(์์ JSON ๋ฐ์ดํฐ ์๋ต)
๊ฒฐ๊ณผ์ ์ผ๋ก ํ์ฌ ํ์ดํฐ๋ก ์ฐ์นํ ์๋ก ๋์ด๋๋ฅผ ๋์ด๊ธฐ ์ํด ๋ง๋ จํ๋ strength ๋ณ์๋ ์ฌ์ฉํ์ง ์์์ต๋๋ค.
๋ง๋ฌด๋ฆฌํ๋ฉฐ
ํด๋์ต๋๋ค!
๋จ 3์ฃผ ๋ง์ ์ง๊ธ ๋ฐ๋ก ๋ค์ด๋ก๋ํด์ ํ๋ ์ดํ ์ ์๋ ์ง์ง ๋น๋์ค ๊ฒ์์ ๋ง๋ค์ด๋์ต๋๋ค:
Dancing Duelists ํ๋ ์ด ๋งํฌ
์ ๋ ฅ ์ฒ๋ฆฌ, SDK ์ฐ๋, ํ๋ฉด๋น ๋์, ํ์งํ, ํ๋์จ์ด ํธํ์ฑ, ์๋ํํฐ ํ๋ฌ๊ทธ์ธ(์ ํฌ๋ Spine2D์ FMOD ์ฌ์ฉ), ๋ชจ๋ ์ง์ ๋ฑ ๋ค๋ค์ผ ํ ์ฃผ์ ๊ฐ ๋ ๋ง์ง๋ง, ์ข์ ๋น๋์ค ๊ฒ์์ ๋ง๋๋ ๊ฒ์ ๋จ๊ฑฐ๋ฆฌ ๊ฒฝ์ฃผ๊ฐ ์๋๋ผ ๋ง๋ผํค์ ๋๋ค.
์ด๋ฒ ํ๊ธฐ๋ ์ฌ๊ธฐ๊น์ง ์์ฑํ๊ฒ ์ต๋๋ค.
์ ๊ฐ ๊ฒฐ์ฝ ๊ณ ๋ ์ ๋ฌธ๊ฐ๋ ์๋์ง๋ง, ์ง์ง 2D ๋น๋์ค ๊ฒ์์ ๋ง๋ค๊ธฐ ์ํ ๋๊ตฌ๋ค์ ์ถฉ๋ถํ ๊ฐ์ถ์ด์ ธ ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
๐ฅ ์ค์๊ฐ ๋คํฐ์ฆ ๋ฒ ์คํธ ๋ฐ์
- NORU๊ณ ๋ ๋๋ฌด ๊ฐํ๋ค์!!
- Indie1์ค ์ฌ๊ธฐ ๊ณ ๋+์์ต์ผ๋ก ๋ง๋ค์๊ตฌ๋ gd์คํฌ๋ฆฝํธ ์๋ก๋ฐฐ์ฐ๊ธฐ ๋ถ๋ด์ค๋ฌ์ด๋ฐ ์์ต์ ์ ๋๋ก ์ง์ํ๋ ๊ถ๊ธํ๋๋ฐ ์์ฑ๊น์ง ๊ฐ๊ฑฐ๋ณด๋ฉด ์์ต์ผ๋ก ํด๋ ๋๊ฒ ๊ตฐ
- ๋น์์ฌ๋์ค2๋ C# ์ผ์๋ผ๋?
- ใ ใ ์ ๋ํฐ ์๊ฑด๋ค๊ณ UI ๋์ ์ผ๋ก ์์ฑํ๋๊ฑฐ AI๋ก๋ ํ๋์ง์ธ์ค ์์๋๋ฐ ์ค์ ๋ก๋ ํ๋๊ฑฐ์๊ตฌ๋
- ใ ใ ์ ์ฝ์์ต๋๋ค

๐ฌ ๋๊ธ 0๊ฐ