
์๋
ํ์ธ์, ์ ๋ Pixonic์ ์๋ฒ ๊ฐ๋ฐ์ Nikita Brizhak์
๋๋ค. ์ค๋์ ๋ชจ๋ฐ์ผ ๋ฉํฐํ๋ ์ด์ด์ ์ง์ฐ ๋ณด์์ ๋ํด ์ด์ผ๊ธฐํด ๋ณด๊ณ ์ถ์ต๋๋ค.
์๋ฒ ์ง์ฐ ๋ณด์์ ๋ํ ๊ธฐ์ฌ๋ ๋ฌ์์์ด๋ฅผ ํฌํจํ์ฌ ๋ง์ด ์์ฑ๋์์ต๋๋ค. ์ด๋ ๋๋ผ์ด ์ผ์ด ์๋๋๋ค. ์ด ๊ธฐ์ ์ 90๋ ๋ ํ๋ฐ๋ถํฐ ๋ฉํฐํ๋ ์ด์ด FPS ์ ์์ ์ ๊ทน์ ์ผ๋ก ์ฌ์ฉ๋์ด ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ์๋ฅผ ๋ค์ด, ์ด๋ฅผ ๊ฐ์ฅ ๋จผ์ ๋์ ํ ๋ชจ๋ ์ค ํ๋์ธ QuakeWorld ๋ชจ๋๋ฅผ ๋ ์ฌ๋ ค ๋ณด์ธ์.
๋ชจ๋ฐ์ผ ๋ฉํฐํ๋ ์ด์ด ์ํ ๊ฒ์์ธ Dino Squad์์๋ ์ด๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์ด ๊ธ์์ ์ ๊ฐ ๋งํ๊ณ ์ ํ๋ ๊ฒ์ ์ด๋ฏธ ์ฒ ๋ฒ์ด๋ ์ฐ์ฌ์ง ๋ด์ฉ์ ๋ฐ๋ณตํ๋ ๊ฒ์ด ์๋๋ผ, ๊ธฐ์ ์คํ๊ณผ ํต์ฌ ๊ฒ์ํ๋ ์ด์ ํน์ฑ์ ๊ณ ๋ คํ์ฌ ๊ฒ์์ ์ง์ฐ ๋ณด์์ ์ด๋ป๊ฒ ๊ตฌํํ๋์ง ์ค๋ช
ํ๋ ค๋ ๊ฒ์
๋๋ค.
๋น์ฌ์ ํต์ฌ๊ณผ ๊ธฐ์ ์ ๋ํด ๊ฐ๋จํ ์ค๋ช
ํ๊ฒ ์ต๋๋ค.
๋ค์ด๋ ธ ์ค์ฟผ๋๋ ์จ๋ผ์ธ ๋ชจ๋ฐ์ผ PvP ์ํ ๊ฒ์์ ๋๋ค. ํ๋ ์ด์ด๋ ๋ค์ํ ๋ฌด๊ธฐ๋ฅผ ์ฅ์ฐฉํ ๊ณต๋ฃก์ ์กฐ์ข ํ๊ณ 6๋ 6 ํ์ผ๋ก ์ ํฌ๋ฅผ ๋ฒ์ ๋๋ค.
ํด๋ผ์ด์ธํธ์ ์๋ฒ๋ ๋ชจ๋ Unity์ ์์ต๋๋ค. ์ด ์ํคํ ์ฒ๋ ์ํ ๊ฒ์์ ์ ํ์ ์ธ ์์ ๋๋ค. ์๋ฒ๋ ๊ถ์์ ์ด๊ณ ํด๋ผ์ด์ธํธ ์์ธก์ ํด๋ผ์ด์ธํธ์์ ์๋ํฉ๋๋ค. ๊ฒ์ ์๋ฎฌ๋ ์ด์ ์ ์์ฒด ECS๋ฅผ ์ฌ์ฉํ์ฌ ์์ฑ๋์์ผ๋ฉฐ ์๋ฒ์ ํด๋ผ์ด์ธํธ ๋ชจ๋์์ ์ฌ์ฉ๋ฉ๋๋ค.
์ง์ฐ ๋ณด์์ ๋ํด ์ฒ์ ๋ค์ด๋ณด์ จ๋ค๋ฉด, ์ด ๋ฌธ์ ์ ๋ํ ๊ฐ๋ตํ ์๊ฐ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋ฉํฐํ๋ ์ด์ด FPS ๊ฒ์์์ ๊ฒฝ๊ธฐ๋ ์ผ๋ฐ์ ์ผ๋ก ์๊ฒฉ ์๋ฒ์์ ์๋ฎฌ๋ ์ด์ ๋ฉ๋๋ค. ํ๋ ์ด์ด๋ ์ ๋ ฅ ๋ด์ฉ(๋๋ฌ์ง ํค์ ๋ํ ์ ๋ณด)์ ์๋ฒ๋ก ๋ณด๋ด๊ณ , ์๋ฒ๋ ์ด์ ๋ํ ์๋ต์ผ๋ก ์์ ๋ ๋ฐ์ดํฐ๋ฅผ ๊ณ ๋ คํ์ฌ ์ ๋ฐ์ดํธ๋ ๊ฒ์ ์ํ๋ฅผ ํ๋ ์ด์ด์๊ฒ ๋ณด๋ ๋๋ค. ์ด๋ฌํ ์ํธ์์ฉ ๋ฐฉ์์ ์ฌ์ฉํ๋ฉด ์์ผ๋ก ํค๋ฅผ ๋๋ฅธ ์๊ฐ๊ณผ ํ๋ ์ด์ด์ ์บ๋ฆญํฐ๊ฐ ํ๋ฉด์์ ์์ง์ด๋ ์๊ฐ ์ฌ์ด์ ์ง์ฐ ์๊ฐ์ด ํญ์ ํ๋ณด๋ค ์ปค์ง๋๋ค.
๋ก์ปฌ ๋คํธ์ํฌ์์๋ ์ด๋ฌํ ์ง์ฐ(์ผ๋ฐ์ ์ผ๋ก ์ ๋ ฅ ์ง์ฐ์ด๋ผ๊ณ ํจ)์ด ๋์ ๋์ง ์์ ์ ์์ง๋ง, ์ธํฐ๋ท์ผ๋ก ํ๋ ์ดํ ๊ฒฝ์ฐ ์บ๋ฆญํฐ๋ฅผ ์กฐ์ข ํ ๋ "์ผ์ ์๋ฅผ ๋ฏธ๋๋ฌ์ง๋" ๋ฏํ ๋๋์ด ๋ญ๋๋ค. ์ด ๋ฌธ์ ๋ ๋ชจ๋ฐ์ผ ๋คํธ์ํฌ์์ ํนํ ์ค์ํ๋ฐ, ํ๋ ์ด์ด์ ping์ด 200ms๋ผ๋ ์ฌ์ ํ ์ฐ์ํ ์ฐ๊ฒฐ๋ก ๊ฐ์ฃผ๋๊ธฐ ๋๋ฌธ์ ๋๋ค. ping์ ๋๊ฐ 350, 500, 1000ms์ ๋๋ค. ๊ทธ๋ฌ๋ฉด ์ ๋ ฅ ์ง์ฐ์ผ๋ก ์ธํด ๋น ๋ฅธ ์ํ ๊ฒ์์ ํ๋ ๊ฒ ๊ฑฐ์ ๋ถ๊ฐ๋ฅํด์ง๋๋ค.
์ด ๋ฌธ์ ์ ๋ํ ํด๊ฒฐ์ฑ ์ ํด๋ผ์ด์ธํธ ์ธก ์๋ฎฌ๋ ์ด์ ์์ธก์ ๋๋ค. ์ฌ๊ธฐ์ ํด๋ผ์ด์ธํธ๋ ์๋ฒ์ ์๋ต์ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ํ๋ ์ด์ด์ ์บ๋ฆญํฐ์ ์ ๋ ฅ์ ์ง์ ์ ์ฉํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ต๋ณ์ ๋ฐ์ผ๋ฉด ๊ฒฐ๊ณผ๋ฅผ ๋น๊ตํ๊ณ ์๋๋ฐฉ์ ์์น๋ฅผ โโ์ ๋ฐ์ดํธํฉ๋๋ค. ์ด ๊ฒฝ์ฐ ํค๋ฅผ ๋๋ฅธ ํ ํ๋ฉด์ ๊ฒฐ๊ณผ๊ฐ ํ์๋ ๋๊น์ง์ ์ง์ฐ์ ์ต์ํ๋ฉ๋๋ค.
์ฌ๊ธฐ์ ๋ฏธ๋ฌํ ์ฐจ์ด๋ฅผ ์ดํดํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ํด๋ผ์ด์ธํธ๋ ํญ์ ๋ง์ง๋ง ์ ๋ ฅ์ ๊ธฐ๋ฐ์ผ๋ก ์์ ์ ๊ทธ๋ฆฌ๊ณ , ์ ๊ตฐ์ ๋คํธ์ํฌ ์ง์ฐ์ ์ ์ฉํ์ฌ ์๋ฒ์์ ๋ฐ์ ๋ฐ์ดํฐ์ ์ด์ ์ํ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ทธ๋ฆฝ๋๋ค. ์ฆ, ์ ์ ๊ณต๊ฒฉํ ๋ ํ๋ ์ด์ด๋ ์์ ๊ณผ ์๋์ ์ธ ๊ณผ๊ฑฐ๋ฅผ ๋ณด๊ฒ ๋ฉ๋๋ค. ํด๋ผ์ด์ธํธ ์์ธก์ ๋ํ ์์ธํ ๋ด์ฉ .
๋ฐ๋ผ์ ํด๋ผ์ด์ธํธ ์์ธก์ ํ๋์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ง๋ง ๋ ๋ค๋ฅธ ๋ฌธ์ ๋ฅผ ์ผ๊ธฐํฉ๋๋ค. ํ๋ ์ด์ด๊ฐ ๊ณผ๊ฑฐ์ ์ ์ด ์๋ ์ง์ ์ ํฅํด ์ด์ ์๋ฉด ์๋ฒ์์ ๊ฐ์ ์ง์ ์ ํฅํด ์ด์ ์๋ฉด ์ ์ด ๋ ์ด์ ๊ทธ ์๋ฆฌ์ ์์ ์ ์์ต๋๋ค. ์๋ฒ ์ง์ฐ ๋ณด์์ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๊ณ ์๋ํฉ๋๋ค. ๋ฌด๊ธฐ๊ฐ ๋ฐ์ฌ๋๋ฉด ์๋ฒ๋ ๋ฐ์ฌ ๋น์ ํ๋ ์ด์ด๊ฐ ๋ก์ปฌ์์ ๋ณธ ๊ฒ์ ์ํ๋ฅผ ๋ณต์ํ๊ณ ์ค์ ๋ก ์ ์ ๋งํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๋์ง ํ์ธํฉ๋๋ค. ๋๋ต์ด "์"์ธ ๊ฒฝ์ฐ, ์ ์ด ๋ ์ด์ ์๋ฒ์์ ์๋๋ผ๋ ํ๊ฒฉ์ด ๊ณ์ฐ๋ฉ๋๋ค.
์ด๋ฌํ ์ง์์ ๋ฐํ์ผ๋ก ์ฐ๋ฆฌ๋ Dino Squad์ ์๋ฒ ์ธก ์ง์ฐ ๋ณด์์ ๊ตฌํํ๊ธฐ ์์ํ์ต๋๋ค. ์ฐ์ , ํด๋ผ์ด์ธํธ๊ฐ ๋ณธ ๋ด์ฉ์ ์๋ฒ์ ๋ณต์ํ๋ ๋ฐฉ๋ฒ์ ์ดํดํ๋ ๊ฒ์ด ํ์ํ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ ํํ ๋ฌด์์ ๋ณต์ํด์ผ ํ ๊น์? ์ฐ๋ฆฌ ๊ฒ์์์๋ ๋ฌด๊ธฐ์ ๋ฅ๋ ฅ์ ์ ์ค๋ฅ ์ด ๋ ์ด์บ์คํธ์ ์ค๋ฒ๋ฉ์ ํตํด ๊ณ์ฐ๋ฉ๋๋ค. ์ฆ, ์ ์ ๋ฌผ๋ฆฌ์ ์ถฉ๋์ฒด์์ ์ํธ ์์ฉ์ ํตํด ๊ณ์ฐ๋ฉ๋๋ค. ๋ฐ๋ผ์ ํ๋ ์ด์ด๊ฐ ๋ก์ปฌ์์ "๋ณธ" ์ด๋ฌํ ์ถฉ๋์ฒด์ ์์น๋ฅผ โโ์๋ฒ์์ ์ฌํํด์ผ ํ์ต๋๋ค. ๋น์ ์ฐ๋ฆฌ๋ Unity 2018.x ๋ฒ์ ์ ์ฌ์ฉํ๊ณ ์์์ต๋๋ค. ๊ทธ๊ณณ์ ๋ฌผ๋ฆฌ API๋ ์ ์ ์ด๊ณ , ๋ฌผ๋ฆฌ์ ์ธ๊ณ๋ ๋จ์ผ ์ฌ๋ณธ์ผ๋ก ์กด์ฌํฉ๋๋ค. ๋์ค์ ์์์์ ๋ณต์ํ๊ธฐ ์ํด ์ํ๋ฅผ ์ ์ฅํ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ๊ทธ๋ฌ๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ ๊น?
ํด๊ฒฐ์ฑ ์ ๋ช ํํ์ต๋๋ค. ๋ชจ๋ ์์๋ ์ด๋ฏธ ์ฐ๋ฆฌ๊ฐ ๋ค๋ฅธ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐ ์ฌ์ฉ๋์์ต๋๋ค.
- ๊ฐ ํด๋ผ์ด์ธํธ์ ๋ํด ํค๋ฅผ ๋๋ฅผ ๋ ์๋๋ฐฉ์ ๋ณธ ์๊ฐ์ ์์์ผ ํฉ๋๋ค. ์ฐ๋ฆฌ๋ ์ด๋ฏธ ์ด ์ ๋ณด๋ฅผ ์ ๋ ฅ ํจํค์ง์ ๊ธฐ๋กํ์ฌ ํด๋ผ์ด์ธํธ ์์ธก ์์ ์ ์กฐ์ ํ๋ ๋ฐ ์ฌ์ฉํ์ต๋๋ค.
- ๊ฒ์ ์ํ์ ๊ธฐ๋ก์ ์ ์ฅํ ์ ์์ด์ผ ํฉ๋๋ค. ๊ทธ๊ณณ์ ์ฐ๋ฆฌ๊ฐ ์๋๋ฐฉ(๊ทธ๋ฆฌ๊ณ ์ถฉ๋์)์ ์์น๋ฅผ โโ๊ณ ์ํ๋ ๊ณณ์ ๋๋ค. ์ฐ๋ฆฌ๋ ์ด๋ฏธ ์๋ฒ์ ์ํ ๊ธฐ๋ก์ ๊ฐ์ง๊ณ ์์๊ณ ๊ทธ๊ฒ์ ์ฌ์ฉํ์ฌ ๋น๋ํ์ต๋๋ค. . ์ฌ๋ฐ๋ฅธ ์๊ธฐ๋ฅผ ์๋ฉด ์ญ์ฌ์ ์ฌ๋ฐ๋ฅธ ์ํ๋ฅผ ์ฝ๊ฒ ์ฐพ์ ์ ์์ ๊ฒ์ ๋๋ค.
- ์ด์ ์ฐ๋ฆฌ๋ ๊ณผ๊ฑฐ๋ก๋ถํฐ ๊ฒ์ ์ํ๋ฅผ ์์ ๋ฃ์์ผ๋ฏ๋ก ํ๋ ์ด์ด ๋ฐ์ดํฐ๋ฅผ ๋ฌผ๋ฆฌ์ ์ธ๊ณ์ ์ํ์ ๋๊ธฐํํ ์ ์์ด์ผ ํฉ๋๋ค. ๊ธฐ์กด ์ถฉ๋์ฒด๋ ์ฎ๊ฒจ์ผ ํ๊ณ , ์๋ ์ถฉ๋์ฒด๋ ๋ง๋ค์ด์ผ ํ๋ฉฐ, ๋ถํ์ํ ์ถฉ๋์ฒด๋ ํ๊ดดํด์ผ ํฉ๋๋ค. ์ฐ๋ฆฌ๋ ์ด๋ฏธ ์ด ๋ ผ๋ฆฌ๋ฅผ ์์ฑํด ๋์๊ณ , ์ด๋ ์ฌ๋ฌ ECS ์์คํ ์ผ๋ก ๊ตฌ์ฑ๋์์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ด๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ๋ฌ ๊ฒ์๋ฃธ์ ํ๋์ Unity ํ๋ก์ธ์ค๋ก ๊ด๋ฆฌํ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ํ๋ก์ธ์ค๋น ๋ฌผ๋ฆฌ์ โโ์ธ๊ณ๊ฐ ํ๋๋ฟ์ด๋ฏ๋ก ๋ฐฉ ์ฌ์ด์์ ์ฌ์ฌ์ฉํด์ผ ํ์ต๋๋ค. ๊ฐ ์๋ฎฌ๋ ์ด์ ํฑ ์ ์ ์ฐ๋ฆฌ๋ ๋ฌผ๋ฆฌ ์ธ๊ณ์ ์ํ๋ฅผ "์ฌ์ค์ "ํ๊ณ ํ์ฌ ๋ฐฉ์ ๋ฐ์ดํฐ๋ก ๋ค์ ์ด๊ธฐํํ์ผ๋ฉฐ, ๋๋ํ ํ๋ง ์์คํ ์ ํตํด Unity์ ๊ฒ์ ๊ฐ์ฒด๋ฅผ ์ต๋ํ ์ฌ์ฌ์ฉํ๋ ค๊ณ ๋ ธ๋ ฅํ์ต๋๋ค. ๋จ์ ๊ฒ์ ๊ณผ๊ฑฐ์ ๊ฒ์ ์ํ์ ๋ํด ๋์ผํ ๋ ผ๋ฆฌ๋ฅผ ํธ์ถํ๋ ๊ฒ๋ฟ์ด์์ต๋๋ค.
์ด ๋ชจ๋ ์์๋ฅผ โโํ๋๋ก ํฉ์น๋ฉด, ์ฐ๋ฆฌ๋ ๋ฌผ๋ฆฌ์ ์ธ๊ณ์ ์ํ๋ฅผ ์ํ๋ ์๊ฐ์ผ๋ก ๋๋๋ฆด ์ ์๋ "ํ์๋จธ์ "์ ์ป๊ฒ ๋ฉ๋๋ค. ์ฝ๋๋ ๊ฐ๋จํ ๊ฒ์ผ๋ก ๋ฐํ์ก์ต๋๋ค.
public class TimeMachine : ITimeMachine
{
//ะััะพัะธั ะธะณัะพะฒัั
ัะพััะพัะฝะธะน
private readonly IGameStateHistory _history;
//ะขะตะบััะตะต ะธะณัะพะฒะพะต ัะพััะพัะฝะธะต ะฝะฐ ัะตัะฒะตัะต
private readonly ExecutableSystem[] _systems;
//ะะฐะฑะพั ัะธััะตะผ, ัะฐัััะฐะฒะปัััะธั
ะบะพะปะปะฐะนะดะตัั ะฒ ัะธะทะธัะตัะบะพะผ ะผะธัะต
//ะฟะพ ะดะฐะฝะฝัะผ ะธะท ะธะณัะพะฒะพะณะพ ัะพััะพัะฝะธั
private readonly GameState _presentState;
public TimeMachine(IGameStateHistory history, GameState presentState, ExecutableSystem[] timeInitSystems)
{
_history = history;
_presentState = presentState;
_systems = timeInitSystems;
}
public GameState TravelToTime(int tick)
{
var pastState = tick == _presentState.Time ? _presentState : _history.Get(tick);
foreach (var system in _systems)
{
system.Execute(pastState);
}
return pastState;
}
}์ด ๊ธฐ๊ณ๋ฅผ ์ฌ์ฉํ์ฌ ์ท๊ณผ ๋ฅ๋ ฅ์ ์ง์ฐ์ ๋ณด์ํ๋ ๋ฐฉ๋ฒ์ ์์ง ์๋ ค์ง์ง ์์์ต๋๋ค.
๊ฐ์ฅ ๊ฐ๋จํ ๊ฒฝ์ฐ, ์ฆ ๋ฉ์ปค๋์ฆ์ด ๋จ์ผ ํํธ์ค์บ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌ์ถ๋๋ฉด ๋ชจ๋ ๊ฒ์ด ๋ช ํํด ๋ณด์ ๋๋ค. ํ๋ ์ด์ด๊ฐ ์ด์ ์๊ธฐ ์ ์ ๋ฌผ๋ฆฌ์ ์ธ๊ณ๋ฅผ ์ํ๋ ์ํ๋ก ๋๋๋ ค์ผ ํ๊ณ , ๋ ์ด์บ์คํธ๋ฅผ ๋ง๋ค์ด์ผ ํ๋ฉฐ, ๋ช ์ค ๋๋ ๋ฏธ์ค๋ฅผ ๊ณ์ฐํด์ผ ํ๊ณ , ์ธ๊ณ๋ฅผ ์ด๊ธฐ ์ํ๋ก ๋๋๋ ค์ผ ํฉ๋๋ค.
ํ์ง๋ง ๋ค์ด๋ ธ ์ค์ฟผ๋์์๋ ์ด๋ฐ ๋ฉ์ปค๋์ฆ์ด ๊ฑฐ์ ์์ต๋๋ค! ๊ฒ์์ ๋์ค๋ ๋๋ถ๋ถ์ ๋ฌด๊ธฐ๋ ๋ฐ์ฌ์ฒด๋ฅผ ์์ฑํฉ๋๋ค. ๋ฐ์ฌ์ฒด๋ ์ฌ๋ฌ ์๋ฎฌ๋ ์ด์ ํฑ(์ด๋ค ๊ฒฝ์ฐ์๋ ์์ญ ํฑ) ๋์ ๋ ์๊ฐ๋ ์ฅ์๋ช ์ด์์ ๋๋ค. ์ด๊ฑธ ์ด๋ป๊ฒ ํด์ผ ํ ๊น? ๋ช ์์ ๋นํ๊ธฐ๋ฅผ ํ์ผ ํ ๊น?
ะ Valve์์๋ Half-Life ๋คํธ์ํฌ ์คํ์ ๋ํด ๊ฐ์ ์ง๋ฌธ์ ํ๋๋ฐ, ๊ทธ๋ค์ ๋ต๋ณ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ๋ฐ์ฌ์ฒด์ ์ง์ฐ ๋ณด์์ ๋ฌธ์ ๊ฐ ์๊ณ , ์ด๋ฅผ ํผํ๋ ๊ฒ์ด ๋ซ๋ค๋ ๊ฒ์ ๋๋ค.
์ฐ๋ฆฌ์๊ฒ๋ ์ด๋ฐ ์ต์ ์ด ์์์ต๋๋ค. ํฌ์ฌ์ฒด ๊ธฐ๋ฐ ๋ฌด๊ธฐ๋ ๊ฒ์ ๋์์ธ์ ํต์ฌ ํน์ง์ด์๊ฑฐ๋ ์. ๊ทธ๋์ ์ฐ๋ฆฌ๋ ๋ญ๊ฐ๋ฅผ ์๊ฐํด๋ด์ผ ํ์ต๋๋ค. ์ฌ๋ฌ ๊ฐ์ง ๋ธ๋ ์ธ์คํ ๋ฐ์ ํ ํ, ์ฐ๋ฆฌ๋ ์คํ ๊ฐ๋ฅํ ๊ฒ์ผ๋ก ๋ณด์ด๋ ๋ ๊ฐ์ง ์ต์ ์ ์๊ฐํด๋์ต๋๋ค.
1. ์ฐ๋ฆฌ๋ ํฌ์ฌ์ฒด๋ฅผ ๊ทธ๊ฒ์ ๋ง๋ ํ๋ ์ด์ด์ ์๊ฐ๊ณผ ์ฐ๊ฒฐํฉ๋๋ค. ์๋ฒ ์๋ฎฌ๋ ์ด์ ์ ๋ชจ๋ ํฑ, ๋ชจ๋ ํ๋ ์ด์ด์ ๋ชจ๋ ์ด์์ ๋ํด ์ฐ๋ฆฌ๋ ๋ฌผ๋ฆฌ์ ์ธ๊ณ๋ฅผ ํด๋ผ์ด์ธํธ ์ํ๋ก ๋กค๋ฐฑํ๊ณ ํ์ํ ๊ณ์ฐ์ ์ํํฉ๋๋ค. ์ด๋ฌํ ์ ๊ทผ ๋ฐฉ์์ ํตํด ์๋ฒ์ ๋ถํ๋ฅผ ๋ถ์ฐ์ํค๊ณ ๋ฐ์ฌ์ฒด์ ๋นํ ์๊ฐ์ ์์ธกํ ์ ์์์ต๋๋ค. ์์ธก ๊ฐ๋ฅ์ฑ์ ์ฐ๋ฆฌ์๊ฒ ํนํ ์ค์ํ์ต๋๋ค. ์๋ํ๋ฉด ๋ชจ๋ ๋ฐ์ฌ์ฒด, ์๋๋ฐฉ์ ๋ฐ์ฌ์ฒด๊น์ง ๋ชจ๋ ํด๋ผ์ด์ธํธ์์ ์์ธก๋๊ธฐ ๋๋ฌธ์ ๋๋ค.

๊ทธ๋ฆผ์์ ํฑ 30์ ํ๋ ์ด์ด๋ ์์์ ๋ฐ๋ผ ๋ฏธ์ฌ์ผ์ ๋ฐ์ฌํฉ๋๋ค. ๊ทธ๋ ์ ์ด ๋ฌ๋ ค๊ฐ๋ ๋ฐฉํฅ์ ๋ณด๊ณ ๋ฏธ์ฌ์ผ์ ๋๋ต์ ์ธ ์๋๋ฅผ ์๊ณ ์์ต๋๋ค. ๋ก์ปฌ์ ์ผ๋ก ๊ทธ๋ ํฑ 33์์ ๋ชฉํ๋ฅผ ๋ฌ์ฑํ๋ค๋ ๊ฒ์ ํ์ธํฉ๋๋ค. ์ง์ฐ ๋ณด์ ๋๋ถ์ ์๋ฒ์๋ ๋๋ฌํ ๊ฒ์
๋๋ค.
2. ์ฒซ ๋ฒ์งธ ์ต์ ๊ณผ ๋์ผํ ์์ ์ ์ํํ์ง๋ง ์ด์ ์๋ฎฌ๋ ์ด์ ์ ํ ํฑ์ ๊ณ์ฐํ ํ์๋ ๋ฉ์ถ์ง ์๊ณ ๊ฐ์ ์๋ฒ ํฑ ๋ด์์ ์ด์ ๋นํ ์๋ฎฌ๋ ์ด์ ์ ๊ณ์ํฉ๋๋ค. ์๋ฎฌ๋ ์ด์ ํ ๋๋ง๋ค ์ด์ ์๊ฐ์ ์๋ฒ ์๊ฐ์ ํ ํฑ์ฉ ๋ ๊ฐ๊น๊ฒ ๋ง๋ค๊ณ ์ถฉ๋์ฒด์ ์์น๋ฅผ โโ์ ๋ฐ์ดํธํฉ๋๋ค. ์ฐ๋ฆฌ๋ ๋ค์ ๋ ๊ฐ์ง ์ค ํ๋๊ฐ ์ผ์ด๋ ๋๊น์ง ์ด ์์ ์ ๋ฐ๋ณตํฉ๋๋ค.
- ์ด์์ ์๋ช ์ด ๋ง๋ฃ๋์์ต๋๋ค. ์ด๋ ๊ณ์ฐ์ด ๋๋ฌ๋ค๋ ๊ฒ์ ์๋ฏธํ๋ฉฐ, ์ฐ๋ฆฌ๋ ๋ง์ ๊ฒ๊ณผ ํ๋ฆฐ ๊ฒ์ ์ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ ์ด์ด ๋ฐ์ฌ๋ ์์ ๊ณผ ๊ฐ์ ์์ ์ ์ผ์ด๋ฌ์ต๋๋ค! ์ฐ๋ฆฌ์๊ฒ๋ ์ด๊ฒ์ด ์ฅ์ ์ด๊ธฐ๋ ํ๊ณ ๋จ์ ์ด๊ธฐ๋ ํ์ต๋๋ค. ์ฅ์ - ์ฌ๊ฒฉํ๋ ํ๋ ์ด์ด์ ๊ฒฝ์ฐ ์ ์ ์ฒด๋ ฅ์ด ๊ฐ์ํ๋ ์๊ฐ๊น์ง ๊ฑธ๋ฆฌ๋ ์๊ฐ์ด ํฌ๊ฒ ์ค์ด๋ค๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ง์ด๋์ค - ์ ์ด ํ๋ ์ด์ด์๊ฒ ์ด์ ์์์ ๋๋ ๊ฐ์ ํจ๊ณผ๊ฐ ๊ด์ฐฐ๋์์ต๋๋ค. ์ ์ ๋๋ฆฐ ๋ก์ผ์ ์์์ ๋ฟ์ด์ง๋ง, ๋ฐ๋ฏธ์ง๋ ์ด๋ฏธ ๊ณ์ฐ๋์์ต๋๋ค.
- ์ด์์ด ์๋ฒ ์๊ฐ์ ๋๋ฌํ์ต๋๋ค. ์ด ๊ฒฝ์ฐ, ์ง์ฐ ๋ณด์ ์์ด ๋ค์ ์๋ฒ ํฑ์์ ์๋ฎฌ๋ ์ด์ ์ด ๊ณ์๋ฉ๋๋ค. ๋๋ฆฐ ๋ฐ์ฌ์ฒด์ ๊ฒฝ์ฐ ์ด๋ก ์ ์ผ๋ก ์ฒซ ๋ฒ์งธ ์ต์ ์ ๋นํด ๋ฌผ๋ฆฌ์ ๋กค๋ฐฑ ํ์๋ฅผ ์ค์ผ ์ ์์ต๋๋ค. ๋์์ ์๋ฎฌ๋ ์ด์ ๋ถํ์ ๋ถ๊ท ํ๋ ์ปค์ก์ต๋๋ค. ์๋ฒ๊ฐ ์ ํด ์ํ์ด๊ฑฐ๋, ํ ์๋ฒ ํฑ์์ ์ฌ๋ฌ ์ด์์ ๋ํ 10ํฑ์ ์๋ฎฌ๋ ์ด์ ์ ๊ณ์ฐํ์ต๋๋ค.

์ด์ ๊ทธ๋ฆผ๊ณผ ๋์ผํ ์๋๋ฆฌ์ค์ด์ง๋ง, ๋ ๋ฒ์งธ ๋ฐฉ์์ ๋ฐ๋ผ ๊ณ์ฐ๋์์ต๋๋ค. ๋ฏธ์ฌ์ผ์ ๋ฐ์ฌ๋ ์๊ฐ๊ณผ ๊ฐ์ ํฑ์์ ์๋ฒ ์๊ฐ์ "๋ฐ๋ผ์ก์๊ณ ", ๋ค์ ํฑ๋ถํฐ ๋ช
์ค์ด ๊ณ์ฐ๋ ์ ์์ต๋๋ค. 31๋ฒ์งธ ํฑ์์๋ โโ์ด ๊ฒฝ์ฐ ์ง์ฐ ๋ณด์์ด ๋ ์ด์ ์ ์ฉ๋์ง ์์ต๋๋ค.
์ฐ๋ฆฌ๊ฐ ๊ตฌํํ ๋ฐฉ์์์๋ ์ด ๋ ๊ฐ์ง ์ ๊ทผ ๋ฐฉ์์ด ๋ฌธ์ ๊ทธ๋๋ก ๋ช ์ค์ ์ฝ๋ ์ฐจ์ด๋ก ๋ฌ๋๊ธฐ ๋๋ฌธ์ ๋ ๋ค ์์ฑํ๊ณ , ์ค๋ซ๋์ ์ด ๋์ ๋ณํํด์ ์ฌ์ฉ๋์์ต๋๋ค. ๋ฌด๊ธฐ์ ๋ฉ์ปค๋์ฆ๊ณผ ์ด์ ์๋์ ๋ฐ๋ผ ์ฐ๋ฆฌ๋ ๊ฐ ๊ณต๋ฃก์ ๋ํด ํ๋ ๋๋ ์ฌ๋ฌ ๊ฐ์ ์ต์ ์ ์ ํํ์ต๋๋ค. ์ฌ๊ธฐ์ ์ ํ์ ์ "์ ์ ํน์ ์๊ฐ ๋์ ํน์ ํ์๋งํผ ๊ณต๊ฒฉํ๋ฉด ํน์ ๋ณด๋์ค๋ฅผ ์ป๋๋ค"์ ๊ฐ์ ๊ฒ์ ๋ฉ์ปค๋์ฆ์ ๋์ ํ ๊ฒ์ ๋๋ค. ํ๋ ์ด์ด๊ฐ ์ ์ ๊ณต๊ฒฉํ๋ ํ์ด๋ฐ์ด ์ค์ํ ๋ชจ๋ ๋ฉ์ปค๋์ฆ์ ๋ ๋ฒ์งธ ์ ๊ทผ ๋ฐฉ์๊ณผ ์ ์ด์ธ๋ฆฌ์ง ์์์ต๋๋ค. ๊ฒฐ๊ตญ ์ฐ๋ฆฌ๋ ์ฒซ ๋ฒ์งธ ์ต์ ์ ์ ํํ๊ณ , ์ด์ ์ด ์ต์ ์ ๊ฒ์ ๋ด ๋ชจ๋ ๋ฌด๊ธฐ์ ๋ชจ๋ ๋ฅ๋ ๋ฅ๋ ฅ์ ์ ์ฉ๋ฉ๋๋ค.
์์ฐ์ฑ ๋ฌธ์ ๋ ๋ณ๋๋ก ์ ๊ธฐํ ๊ฐ์น๊ฐ ์์ต๋๋ค. ๋ง์ฝ ์ด ๋ชจ๋ ๊ฒ์ด ์๋๋ฅผ ๋ฆ์ถ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๋ค๋ฉด, ๋๋ ์ด๋ ๊ฒ ๋ตํ ๊ฒ์ด๋ค. ์ฌ์ค์ ๋ฐ๋ก ๊ทธ๊ฒ์ด๋ค. ์ ๋ํฐ๋ ์์ง์ด๋ ์ฝ๋ผ์ด๋๋ฅผ ์ฌ์ฉํ๋๋ฐ, ์ด๋ฅผ ์ผ๊ณ ๋๋ ์๋๊ฐ ๋งค์ฐ ๋๋ฆฝ๋๋ค. ๋ค์ด๋ ธ ์ค์ฟผ๋์์๋ ์ต์ ์ ๊ฒฝ์ฐ ์๋ฐฑ ๊ฐ์ ํฌ์ฌ์ฒด๊ฐ ๋์์ ์ ํฌ์ ์ฐธ์ฌํ ์๋ ์์ต๋๋ค. ๊ฐ ๋ฐ์ฌ์ฒด๋ฅผ ๊ฐ๋ณ์ ์ผ๋ก ์ธ๊ธฐ ์ํด ์ถฉ๋๊ธฐ๋ฅผ ์ฎ๊ธฐ๋ ๊ฒ์ ๊ฐ๋นํ ์ ์๋ ์ฌ์น์ ๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก ๋ฌผ๋ฆฌ์ ๋กค๋ฐฑ์ ํ์๋ฅผ ์ต์ํํ๋ ๊ฒ์ด ์ ๋์ ์ผ๋ก ํ์ํ์ต๋๋ค. ์ด๋ฌํ ๋ชฉ์ ์ ์ํด ์ฐ๋ฆฌ๋ ECS์ ํ๋ ์ด์ด์ ์๊ฐ์ ๊ธฐ๋กํ๋ ๋ณ๋์ ๊ตฌ์ฑ ์์๋ฅผ ๋ง๋ค์์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ง์ฐ ๋ณด์์ด ํ์ํ ๋ชจ๋ ์ํฐํฐ(ํฌ์ฌ์ฒด, ๋ฅ๋ ฅ ๋ฑ)์ ์ด๋ฅผ ์ ์ฉํ์ต๋๋ค. ์ด๋ฌํ ์ํฐํฐ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ ์, ์ฐ๋ฆฌ๋ ์ํฐํฐ๋ฅผ ์ด ์์ ๊น์ง ํด๋ฌ์คํฐ๋งํ๊ณ ํจ๊ป ์ฒ๋ฆฌํ๋ฉฐ, ๊ฐ ํด๋ฌ์คํฐ์ ๋ํด ๋ฌผ๋ฆฌ ์ธ๊ณ๋ฅผ ํ ๋ฒ์ฉ ๋กค๋ฐฑํฉ๋๋ค.
์ด ๋จ๊ณ์์๋ ์ผ๋ฐ์ ์ผ๋ก ์๋ํ๋ ์์คํ ์ด ๊ฐ์ถ์ด์ก์ต๋๋ค. ์ฝ๊ฐ ๋จ์ํ๋ ํํ์ ์ฝ๋:
public sealed class LagCompensationSystemGroup : ExecutableSystem
{
//ะะฐัะธะฝะฐ ะฒัะตะผะตะฝะธ
private readonly ITimeMachine _timeMachine;
//ะะฐะฑะพั ัะธััะตะผ ะปะฐะณะบะพะผะฟะตะฝัะฐัะธะธ
private readonly LagCompensationSystem[] _systems;
//ะะฐัะฐ ัะตะฐะปะธะทะฐัะธั ะบะปะฐััะตัะธะทะฐัะพัะฐ
private readonly TimeTravelMap _travelMap = new TimeTravelMap();
public LagCompensationSystemGroup(ITimeMachine timeMachine,
LagCompensationSystem[] lagCompensationSystems)
{
_timeMachine = timeMachine;
_systems = lagCompensationSystems;
}
public override void Execute(GameState gs)
{
//ะะฐ ะฒั
ะพะด ะบะปะฐััะตัะธะทะฐัะพั ะฟัะธะฝะธะผะฐะตั ัะตะบััะตะต ะธะณัะพะฒะพะต ัะพััะพัะฝะธะต,
//ะฐ ะฝะฐ ะฒัั
ะพะด ะฒัะดะฐะตั ะฝะฐะฑะพั ยซะบะพัะทะธะฝยป. ะ ะบะฐะถะดะพะน ะบะพัะทะธะฝะต ะปะตะถะฐั ัะฝัะธัะธ,
//ะบะพัะพััะผ ะดะปั ะปะฐะณะบะพะผะฟะตะฝัะฐัะธะธ ะฝัะถะฝะพ ะพะดะฝะพ ะธ ัะพ ะถะต ะฒัะตะผั ะธะท ะธััะพัะธะธ.
var buckets = _travelMap.RefillBuckets(gs);
for (int bucketIndex = 0; bucketIndex < buckets.Count; bucketIndex++)
{
ProcessBucket(gs, buckets[bucketIndex]);
}
//ะ ะบะพะฝัะต ะปะฐะณะบะพะผะฟะตะฝัะฐัะธะธ ะผั ะฒะพัััะฐะฝะฐะฒะปะธะฒะฐะตะผ ัะธะทะธัะตัะบะธะน ะผะธั
//ะฒ ะธัั
ะพะดะฝะพะต ัะพััะพัะฝะธะต
_timeMachine.TravelToTime(gs.Time);
}
private void ProcessBucket(GameState presentState, TimeTravelMap.Bucket bucket)
{
//ะัะบะฐััะฒะฐะตะผ ะฒัะตะผั ะพะดะธะฝ ัะฐะท ะดะปั ะบะฐะถะดะพะน ะบะพัะทะธะฝั
var pastState = _timeMachine.TravelToTime(bucket.Time);
foreach (var system in _systems)
{
system.PastState = pastState;
system.PresentState = presentState;
foreach (var entity in bucket)
{
system.Execute(entity);
}
}
}
}์ด์ ๋จ์ ๊ฒ์ ์ธ๋ถ ์ฌํญ์ ์กฐ์ ํ๋ ๊ฒ๋ฟ์ด์์ต๋๋ค.
1. ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ์ต๋ ์ด๋ ๋ฒ์๋ฅผ ์ผ๋ง๋ ์ ํํด์ผ ํ๋์ง ์ดํดํฉ๋๋ค.
์ ํฌ๋ ๋ชจ๋ฐ์ผ ๋คํธ์ํฌ๊ฐ ์ข์ง ์์ ํ๊ฒฝ์์๋ ๊ฒ์์ ์ต๋ํ ์ฝ๊ฒ ์ ๊ทผํ ์ ์๋๋ก ํ๋ ๊ฒ์ด ์ค์ํ๋ค๊ณ ์๊ฐํ๊ธฐ ๋๋ฌธ์ ์คํ ๋ฆฌ์ 30ํฑ(ํฑ ๋ ์ดํธ๋ 20Hz)์ ์ฌ์ ๋ฅผ ๋์์ต๋๋ค. ์ด๋ฅผ ํตํด ํ๋ ์ด์ด๋ ๋งค์ฐ ๋์ ํ์์๋ ์๋๋ฐฉ์ ๊ณต๊ฒฉํ ์ ์์ต๋๋ค.
2. ์๊ฐ ๋ด์ ์ด๋ค ๋ฌผ์ฒด๋ฅผ ์์ง์ผ ์ ์๊ณ ์ด๋ค ๋ฌผ์ฒด๋ฅผ ์์ง์ผ ์ ์๋์ง ํ๋ณํ์ธ์.
๋ฌผ๋ก , ์ฐ๋ฆฌ๋ ์๋๋ฅผ ์์ง์ ๋๋ค. ํ์ง๋ง ์ค์น๋ ์๋์ง ์ค๋๋ ๊ทธ๋ ์ง ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ์จ๋ผ์ธ ์ํ ๊ฒ์์์ ์ข ์ข ๊ทธ๋ ๋ฏ์ด ์ฌ๊ธฐ์๋ ๋ฐฉ์ด ๋ฅ๋ ฅ์ ์ฐ์ ์ํ๋ ๊ฒ์ด ๋ ๋ซ๋ค๊ณ ๊ฒฐ์ ํ์ต๋๋ค. ํ๋ ์ด์ด๊ฐ ํ์ฌ ๋ฐฉํจ๋ฅผ ์ด๋ฏธ ์ค์นํ ๊ฒฝ์ฐ, ๊ณผ๊ฑฐ์ ์ง์ฐ ๋ณด์ ์ด์์ ๋ฐฉํจ๋ฅผ ํต๊ณผํ์ง ์์ต๋๋ค.
3. ๊ณต๋ฃก์ ๋ฅ๋ ฅ(๋ฌผ๊ธฐ, ๊ผฌ๋ฆฌ ๊ณต๊ฒฉ ๋ฑ)์ ๋ํ ์ง์ฐ ๋ณด์์ ํ ์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํฉ๋๋ค. ์ฐ๋ฆฌ๋ ๊ทธ๋ ๊ฒ ํด์ผ ํ๋ค๊ณ ๊ฒฐ์ ํ๊ณ , ์ด์๊ณผ ๊ฐ์ ๊ท์น์ ๋ฐ๋ผ ์ด๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค.
4. ์ง์ฐ ๋ณด์์ด ์ํ๋๋ ํ๋ ์ด์ด์ ์ถฉ๋์ฒด๋ฅผ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ ์ง ๊ฒฐ์ ํฉ๋๋ค. ์ด์์ ์ผ๋ก๋, ํ๋ ์ด์ด์ ์์น๊ฐ ๊ณผ๊ฑฐ๋ก ์ด๋ํ์ง ์์์ผ ํฉ๋๋ค. ํ๋ ์ด์ด๋ ํ์ฌ ์๋ฒ์ ์๋ ์๊ฐ๊ณผ ๋์ผํ ์๊ฐ์ ๋ณผ ์ ์์ด์ผ ํฉ๋๋ค. ํ์ง๋ง ์ฐ๋ฆฌ๋ ์ฌ๊ฒฉํ๋ ํ๋ ์ด์ด์ ์ถฉ๋์ฒด๋ ๋กค๋ฐฑํ๋๋ฐ, ์ฌ๊ธฐ์๋ ๋ช ๊ฐ์ง ์ด์ ๊ฐ ์์ต๋๋ค.
์ฒซ์งธ, ํด๋ฌ์คํฐ๋ง์ด ๊ฐ์ ๋ฉ๋๋ค. ๊ฐ๊น์ด ํ์ ๊ฐ์ง ๋ชจ๋ ํ๋ ์ด์ด์๊ฒ ๋์ผํ ๋ฌผ๋ฆฌ ์ํ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ ๋ฒ์งธ๋ก, ๋ชจ๋ ๋ ์ด์บ์คํธ์ ์ค๋ฒ๋ฉ์์ ์ฐ๋ฆฌ๋ ํญ์ ๋ฅ๋ ฅ์ด๋ ๋ฐ์ฌ์ฒด๋ฅผ ์์ ํ ํ๋ ์ด์ด์ ์ถฉ๋์ฒด๋ฅผ ์ ์ธํฉ๋๋ค. ๋ค์ด๋ ธ ์ค์ฟผ๋์์ ํ๋ ์ด์ด๋ ์ํ ๊ฒ์์ ๊ธฐ์ค์ผ๋ก ๋ณด๋ฉด ์๋นํ ํน์ดํ ๊ธฐํํ์ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง ๊ณต๋ฃก์ ์กฐ์ข ํฉ๋๋ค. ํ๋ ์ด์ด๊ฐ ํน์ดํ ๊ฐ๋๋ก ์ด์ ์๊ณ ์ด์์ ๊ถค์ ์ด ํ๋ ์ด์ด์ ๊ณต๋ฃก ์ถฉ๋๊ธฐ๋ฅผ ํต๊ณผํ๋๋ผ๋ ์ด์์ ์ด๋ฅผ ๋ฌด์ํฉ๋๋ค.
์ ์งธ, ์ง์ฐ ๋ณด์์ด ์์๋๊ธฐ ์ ์๋ ECS์์ ์ป์ ๋ฐ์ดํฐ๋ฅผ ๋ฐํ์ผ๋ก ๊ณต๋ฃก ๋ฌด๊ธฐ์ ์์น๋ ๋ฅ๋ ฅ์ ์ฌ์ฉํ๋ ์์ ์ ๊ณ์ฐํฉ๋๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก ์ง์ฐ์ด ๋ณด์ ๋ ํ๋ ์ด์ด์ ์ฝ๋ผ์ด๋์ ์ค์ ์์น๋ ์ฐ๋ฆฌ์๊ฒ ์ค์ํ์ง ์์ผ๋ฏ๋ก, ์ฐ๋ฆฌ๋ ๋ ์์ฐ์ ์ด๊ณ ๋์์ ๋ ๊ฐ๋จํ ๊ธธ์ ํํ์ต๋๋ค.
๋คํธ์ํฌ ์ง์ฐ์ ๊ฐ๋จํ ์ ๊ฑฐํ ์ ์์ผ๋ฉฐ, ๋ง์คํฌ๋ก๋ง ๊ฐ๋ฆด ์ ์์ต๋๋ค. ๋ค๋ฅธ ๋ง์คํน ๋ฐฉ๋ฒ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์๋ฒ ์ง์ฐ ๋ณด์์๋ ๋จ์ ์ด ์์ต๋๋ค. ์ด์ ๋ง๋ ํ๋ ์ด์ด์ ๊ฒ์ ํ๋ ์ด ๊ฒฝํ์ ํฅ์๋์ง๋ง, ์ด์ ๋ง๋ ํ๋ ์ด์ด์ ๊ฒ์ ํ๋ ์ด ๊ฒฝํ์ ์ ํ๋ฉ๋๋ค. ํ์ง๋ง ๋๋ ธ ์ค์ฟผ๋์ ๊ฒฝ์ฐ ์ ํ์ ๋ช ํํ์ต๋๋ค.
๋ฌผ๋ก , ์ด ๋ชจ๋ ๊ฒ์ ํ๋ก๊ทธ๋๋จธ์ ๊ฒ์ ๋์์ด๋ ๋ชจ๋์๊ฒ ์๋ฒ ์ฝ๋์ ๋ณต์ก์ฑ์ด ์ฆ๊ฐํ๋ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ์์ต๋๋ค. ์ด์ ์๋ฎฌ๋ ์ด์ ์ด ์์คํ ์ ๋จ์ํ ์์ฐจ์ ํธ์ถ์ด์๋ค๋ฉด, ์ง์ฐ ๋ณด์์ ํตํด ์ค์ฒฉ ๋ฃจํ์ ๋ถ๊ธฐ๊ฐ ๋ํ๋ฌ์ต๋๋ค. ๋ํ ์ฐ๋ฆฌ๋ ์์ ํ๊ธฐ ์ฝ๊ฒ ๋ง๋ค๊ธฐ ์ํด ๋ง์ ๋ ธ๋ ฅ์ ๊ธฐ์ธ์์ต๋๋ค.
2019 ๋ฒ์ (์๋๋ฉด ์กฐ๊ธ ๋ ์ด์ ๋ฒ์ )์์ Unity๋ ๋ ๋ฆฝ์ ์ธ ๋ฌผ๋ฆฌ์ ์ฅ๋ฉด์ ๋ํ ์์ ํ ์ง์์ ๋ฐ๊ฒ ๋์์ต๋๋ค. ์ฐ๋ฆฌ๋ ๊ฐ๋ฅํ ํ ๋นจ๋ฆฌ ๋ชจ๋ ๊ฐ์ค์ ๊ณตํต๋ ๋ฌผ๋ฆฌ์ ์ธ๊ณ๋ฅผ ์์ ๊ณ ์ถ์๊ธฐ ๋๋ฌธ์ ์ ๋ฐ์ดํธ ์งํ์ ์๋ฒ์ ์ด๋ฅผ ๊ตฌํํ์ต๋๋ค.
๊ฐ ๊ฒ์๋ฐฉ์ ๊ณ ์ ํ ๋ฌผ๋ฆฌ ์ฅ๋ฉด์ ์ ๊ณตํจ์ผ๋ก์จ ์๋ฎฌ๋ ์ด์ ์ ๊ณ์ฐํ๊ธฐ ์ ์ ์ฃผ๋ณ ๋ฐฉ์ ๋ฐ์ดํฐ์์ ์ฅ๋ฉด์ "์ ๋ฆฌ"ํ ํ์์ฑ์ ์์ด์ต๋๋ค. ์ฒซ์งธ, ์์ฐ์ฑ์ด ํฌ๊ฒ ํฅ์๋์์ต๋๋ค. ๋ ๋ฒ์งธ๋ก, ํ๋ก๊ทธ๋๋จธ๊ฐ ์๋ก์ด ๊ฒ์ ์์๋ฅผ ์ถ๊ฐํ ๋ ์ฅ๋ฉด ์ ๋ฆฌ ์ฝ๋์์ ์ค์๋ฅผ ํ๋ฉด ๋ฐ์ํ ์ ์๋ ๋ค์ํ ๋ฒ๊ทธ๋ฅผ ์ ๊ฑฐํ ์ ์์์ต๋๋ค. ์ด๋ฌํ ๋ฒ๊ทธ๋ ๋๋ฒ๊น ํ๊ธฐ ์ด๋ ค์ ๊ณ , ์ข ์ข ํ ๋ฐฉ์ ์ฅ๋ฉด์ ์๋ ๋ฌผ๋ฆฌ์ ๊ฐ์ฒด์ ์ํ๊ฐ ๋ค๋ฅธ ๋ฐฉ์ผ๋ก "ํ๋ฌ๋ค์ด๊ฐ๋" ํ์์ด ๋ฐ์ํ์ต๋๋ค.
๋ํ, ์ฐ๋ฆฌ๋ ๋ฌผ๋ฆฌ์ ์ฅ๋ฉด์ ์ฌ์ฉํ์ฌ ๋ฌผ๋ฆฌ์ ์ธ๊ณ์ ์ญ์ฌ๋ฅผ ์ ์ฅํ ์ ์๋์ง์ ๋ํ ์ฐ๊ตฌ๋ ์ํํ์ต๋๋ค. ์ฆ, ์กฐ๊ฑด๋ถ๋ก ๊ฐ ๋ฐฉ์ ํ๋์ ์ฅ๋ฉด์ด ์๋ 30๊ฐ์ ์ฅ๋ฉด์ ํ ๋นํ๊ณ ์ด๋ฅผ ์ํ ๋ฒํผ๋ก ๋ง๋ค์ด์ ๊ธฐ๋ก์ ์ ์ฅํ๋ค๋ ์๋ฏธ์
๋๋ค. ์ ๋ฐ์ ์ผ๋ก ์ด ์ต์
์ ํจ๊ณผ์ ์ธ ๊ฒ์ผ๋ก ๋ํ๋ฌ์ง๋ง, ์ฐ๋ฆฌ๋ ์ด๋ฅผ ๊ตฌํํ์ง ์๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค. ์์ฐ์ฑ์ด ์์ฒญ๋๊ฒ ์ฆ๊ฐํ์ง๋ ์์์ง๋ง, ์คํ๋ ค ์ํํ ๋ณํ๊ฐ ํ์ํ๊ธฐ ๋๋ฌธ์
๋๋ค. ์ด๋ ๊ฒ ๋ง์ ์ฅ๋ฉด์ ์ค๋ซ๋์ ์์
ํ๋ค ๋ณด๋ฉด ์๋ฒ๊ฐ ์ด๋ป๊ฒ ๋์ํ ์ง ์์ธกํ๊ธฐ ์ด๋ ต์ต๋๋ค. ๊ทธ๋์ ์ฐ๋ฆฌ๋ ๋ค์ ๊ท์น์ ๋ฐ๋์ต๋๋ค.ํ์ฐํ์ง ์์๋ค๋ฉด ๊ณ ์น์ง ๋ง๋ผ.".
์ถ์ฒ : habr.com
