์ฒ ๊ถ์ ๋น ๋ฅธ ๋คํธ์ํฌ ๋ฐ์์๋์ ์ ํฉํ ๋คํธ์ํฌ ๋ชจ๋ธ๋ก, Rollback Netcode๋ผ๋๊ฒ ์๋ค๋๊ฑธ ๋ฐฐ์ ๋๋ C++๋ก๋ GGPO๋ผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๋๋ผ.
์ฐจํ ๊ฐ๋จํ 4์ธ ๋คํธ์ํฌ ๊ฒ์๋ง๋ค๋ ์จ๋จน์ผ๋ ค๊ณ ๊ผญ ๋ง๋ค์ด๋ณด๊ณ ์ถ์๋๋
์ด๊ฒ ์์ ์ ๋ง๋ค์๋ Lockstep ๋๊ธฐํ ๊ธฐ๋ฒ๋ณด๋ค ์ถ๊ฐ๋ก ๊ตฌํํด์ผ ํ ๊ฒ ์๋๋ผ.
Lockstep์ ๊ทธ๋ฅ Deterministic(๊ฒฐ์ ๋ก ์ ) ์๋ฎฌ๋ ์ด์ ๊ตฌํํ๊ณ , Input์ ๋ฏธ๋์ ์์ฝ์ ํ๊ณ , ์์ชฝ ๊ธฐ๊ธฐ ๋์์ ์คํํ๋ฉด ๋ฌ๊ฑฐ๋
๋์ ์ด๊ฒ ๋จ์ ์ด, ํ์ฌ ์ ๋ ฅ์ ๋ฏธ๋์ ์์ฝ์ ํ๋๊ฑฐ๋ค๋ณด๋, ๋ฐ์์๋๊ฐ ๋๋ฆผ.
๊ทผ๋ฐ Rollback์ Deterministic ์๋ฎฌ๋ ์ด์ ์ด ๋ฒ ์ด์ค๊ธด ํ๋ฐ, ๋ก์ปฌ Input์ ๋ฐ๋ก ๋ก์ปฌ์์ ์ฒ๋ฆฌํด๋ฒ๋ฆฌ๊ณ , ๋ค๋ฅธ ํ๋ ์ด์ด์๊ฒ ๋ด Input์ ์ ์กํด๋ฒ๋ฆผ.
์๋ฅผ๋ค๋ฉด ๋ด Input์ด 280 tick์ ๋ฐ์ํ๊ณ ๊ทธ๊ฑธ ์ ์กํ๋ฉด, ๋ค๋ฅธ ํ๋ ์ด์ด์๊ฒ 300tick์ฏค์ ๋์ฐฉํจ.
๊ทธ๋ผ ๋ค๋ฅธ ํ๋ ์ด์ด๋ 280tick ๊ณผ๊ฑฐ๋ก ๋์๊ฐ์(๋งค ํฑ๋น ๊ฒ์์๋๋ฅผ ๋ฏธ๋ฆฌ ์ ์ฅํด๋์) ๋ฐ์ Input์ 280ํ๋ ์์ ์ง์ด๋ฃ๊ณ ์๋ 300ํ๋ ์๊น์ง ์์๊ฐ์ ์๋ฎฌ๋ ์ด์ ์ ํด๋ฒ๋ฆผ.
์ด๋ ๊ฒ ํ๋ฉด ๋ก์ปฌ์์๋ ๋งค์ฐ ๋น ๋ฅธ ๋ฐ์์๋๊ฐ ๊ธฐ๋ณธ์ผ๋ก ๋ณด์ฅ๋จ. ํ์ด ์ข ๋๋ ค๋, ์๋ก ๋๊ธฐํ๊ฐ ์ ์ด๋ฃจ์ด์ง.
๋์ ์ด๊ฒ ๊ฐ๋ฅํ๋ ค๋ฉด, ๋งค ์๋ฎฌ๋ ์ด์ ๋ง๋ค ๊ฒ์์๋ ๋ณต์ฌ๋ณธ(Snapshot)์ ์ต์ํ 3์ด(์ด๋น 60ํฑ์ด๋ฉด 180๊ฐ)์ ๊ฒ์์๋๋ฅผ ์บ์ฑํด๋๊ณ ์์ด์ผ ํจ.
ECS์์๋ ์ด์งํผ ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ Component๋ก๋ง ์ ์ฅ๋์ด ์์ด์, ๊ทธ๋ฅ ๊ฒ์์๋๋ฅผ ๋ฐ์ด๋๋ฆฌ๋ก Dumpํด๋ฒ๋ฆฌ๋ฉด ์ ์ฅ ๋. ๋ก๋ํ๋๊ฒ๋ ๋งค์ฐ ๋น ๋ฆ
์๋ฒ๋ DotnetCore์ TCP์๋ฒ ํ๋ ๋์ฐ๊ณ , ํ๋ ์ด์ด ์
๋ ฅ๋ง ๋ฆด๋ ์ด ํด์ค ๋ฟ, ๊ทธ ์ด๋ค ๋ค๋ฅธ ์ ๋ณด๋ ๊ณต์ ์ํจ.
์ฝ๋๋ ๊ทธ๋ฅ ์ฑ๊ธ๊ฒ์ ์ง๋ฏ์ด ๋ง๋ค๋ฉด ์์์ ๋คํธ์ํฌ ๋จ.
์๋๋ ์ด ํํ ๊ฒ์ ์์คํ ์ด๋ ์ฝ๋
๊ฐ๋จํ ์์คํ ๋ค ๋ช๊ฐ๋ก ๋ง๋ค์ด์ ธ ์์. ํ์คํ ECS๊ฐ ๋จ์ ์ค์๊ฐ ์๋ฎฌ๋ ์ด์ ๊ฒ์ ๋ง๋๋๊ฑฐ๋ ์ ๋ง ํธํ๋ฏ.
์๋๋ ์ด ๋๊ธฐํ๊ฐ ๊ฐ๋ฅํ๋๋ก ํด์ฃผ๋ ํต์ฌ ๋ฃจํ ์ฝ๋์
๋งค ํ๋ ์๋ง๋ค ํ์ฌ ๊ฒ์์๋๋ฅผ ์ ์ฅํ๊ณ , ํ์ฌ ์ ๋ ฅ์ ์ ์กํ๊ณ , ๋ค๋ฅธํ๋ ์ด์ด ์ ๋ ฅ์ ์์ธกํ๊ณ , ๋กค๋ฐฑ์ด ํ์ํ๋ฉด ํ๊ณ ๊ทธ๋ฐ์.
๋์ถฉ ๋์๊ฐ๋๊ฑฐ ๋ณด๊ณ ์ถ์ด์ ๋ง ์ง๋ณด๊ธด ํ๋๋ฐ, ๋๋๊น ์ฐธ ์ ๊ธฐํด์ ๊ณต์ ํด๋ด
๋ ๊ฐ์ง๋ฌธ ์ฃ์กํ๋ฐ Lockstep๋๊ธฐํ์์ ๋ณดํต ํ๋ณด๋ค ๋์ ๋ฏธ๋์๊ฐ์ Input ์ ํด๋๊ณ ์คํํ ๋ ๊ทธ ์๊ฐ์ ์ด๋ป๊ฒ ๋๊ธฐํํ๋์? ๊ตฌ๊ธ์๊ฐ์๋ฒ๊ฐ์๋ฐ์ ๊ฐ์ ธ์๋ ์์ฃผ ๋ฏธ์ธํ ์ค์ฐจ๋ ์์๊ฒ ๊ฐ์๋ฐ ๊ทธ์ ๋๋ ๋ฌด์ํ๋์?
์๊ฐ์ผ๋ก ๋๊ธฐํ ์ํจ. ์๋ฅผ๋ค๋ฉด ํ์ฌ ๋ด tick์ด 30์ธ๋ฐ ๋ง๋ฆฐ ์ด๋ ์ ๋ ฅ์ ํ์. ๊ทธ๋ผ ์ ๋ ฅ์ 10tick๋ฏธ๋์ธ 40์ ์์ฝ์ ํ๋๊ฑฐ์. ๋ค๋ฅธ ๊ธฐ๊ธฐ์์๋ 35tick์ผ์ฏค์ ๋ด๊ฐ๋ณด๋๋ 40tick ์ ๋ ฅ์ด ๋์ฐฉํ์๊ฑฐ๊ณ . ๊ทธ๋ผ 40tick์ ๋ฐ์ดํธ๋ฅผ ํ ๋ ์๋ฌด๋ฌธ์ ์์ด ๋ชจ๋ ํด๋ผ์ด์ธํธ๊ฐ ์ ๋ฐ์ดํธ๋ฅผ ํ๋ฉด ๋๋๊ฑฐ
์ํ ๊ฒ์ ์์๋๋ถํฐ ๊ฐ์ด ํฑ์ ์ธ๋ฉด ๋๋๊ฑฑ๋์ ๋งค์ฐ ๊ฐ์ฌํฉ๋๋ค
์ ๋ ฅ์ด ์์ด๋ "์ ๋ ฅ์ด ์๋ค"๋ ์ ๋ ฅ๋ ๋ณด๋ด์ผํจ. ๊ทธ๋์ผ ๋ค๋ฅธ ๊ธฐ๊ธฐ์์๋ ํด๋น tick์ ์ ๋ฐ์ดํธํ๊ฒ๋จ. ์ ์ ๊ฐ ์ ๋ ฅ์ ์ํ๊ฒ๋ ์ด์จ๋ ์ ๋ ฅ์ผ๋ก ์นจ
์ ๋ ฅ์ด ์์๋๋ ํต์ ์ ํด์ผ ํ๋์? ๊ทธ๋ผ ๋ง์ฝ ๊ฒ์๋ด ์๋ฎฌ๋ ์ด์ ์ด ์ด๋น 50ํฑ์ด๋ฉด ์ด๋น 50๋ฒ ํต์ ํด์ผ ํ๋์?
์ ๋ ฅ์ด ์ ๊ตํด์ผ ํ๋ค๋ฉด ๋งคํฑ๋น ๋ณด๋ด๋ ์๊ด์ ์์. ์์ Doom ๋ฉํฐํ๋ ์ด๊ฐ ๊ทธ๋ ๊ฒ ๊ตฌํํ๋ค๊ณ ํ๋๋ฐ, ์ด๊ฒ latency๊ฐ ๊ธธ์ด์ ์ ๋ ฅ ์์ฝ์ ๋ง 30tick ๋ฏธ๋๋ก ํด๋ฒ๋ฆฌ๋ฉด, ๋งคํฑ ์ ๋ ฅ์ ๋ณด๋ด๋ดค์ ์ ๊ตํจ์ด ๋จ์ด์ ธ์ ์๋ฏธ๊ฐ ์์. ๊ทธ๋์ ๊ทธ๋ฅ ์๋ฎฌ์ด ์ด๋น 50tick์ด๋ฉด ํ 0~20tick๋์ ๋ฐ์ํ ์ ๋ ฅ์ ๋ชจ์์ 10tick ๋ค์ ๋ณด๋ด๋๊ฒ๋ ๋์์ง ์์. ์์ RTS ๋คํธ์ํฌ ๊ตฌํํ ๋ ๋ค๋ฅธ RTS ์์ค์ฝ๋ ๋ฏ์ด๋ณด๋๊น ๊ทธ๋ ๊ฒ ํ๋๋ผ๊ณ . ๊ทธ๋์ ๋๋ ๊ฑ ๊ทธ๋ ๊ฒ ๋ง๋ค์์์
์คํ ๊ทธ๋ ๊ตฐ์ ์ ๋ ๋ฝ์คํ ์ผ๋ก ๊ตฌํ์ค์ด์๋๋ฐ ๋กค๋ฐฑ ํจ ๊ธฐ์๊ฑฐ๋ ค๋ด์ผ๊ฒ ์...
์ ๊ฐ์ฉ๋น.. ์ผ๋จ ๊ฐ์ถ ๋ฐ์ต๋๋ท..
์์ฐ....
๋ญ์ง๋ชฐ๋ผ๋ ๊ตณ ;
ํด๋น ๋๊ธ์ ์ญ์ ๋์์ต๋๋ค.
์ด๊ฒ ๊ฒ์ ์๋ฎฌ๋ ์ด์ ๊ณต๊ฐ์ด EcsWorld๋๊น, ์ฌ์ค World๊ฐ ๊ฐ๊ณ ์๋๊ฑด Entity๋ ๊ฐ๊ฐ์ Component๋ฐฐ์ด๋ฐ์ ์๊ฑฐ๋ . Entity๋ Component ์ ๋ถ struct๊ณ ๋ค ๋ฐฐ์ด๋ก ์ ์ฅ๋์ด ์์. c#์ unsafe์ฝ๋๋ก memcpy๋ก ๋ณต์ฌํด๋ฒ๋ฆฌ๋ฉด ๋ก์. ๊ฐ์ฒด๋ผ๋๊ฒ ์์.
3์ด์น ์บ์ฑํ๊ณ ๋์ ์์ ์ ๋ ฅ๊ฐ๋ง ๊ตํ ์คํ
๋์ ๋คํธ์ํฌ ์ง์ฐ ๋์ด์ง๋ฉด ์๋ ๋ง๋น์ฒ๋ผ ๋ก์ปฌ์์ ์ฑ๊ณตํ์ ๋ฌ๋๊ฑฐ ๋ฒ๋ณต๋นํจใ ใ ใ ใ ใ ใ ใ
๋ฉํฐํ๋ ์ด๋ bevy๊ฐ ๋ ํธํ๊ตฐ..