fsm๋ง๋ค๋ ค๊ณ ์ฌ๊ธฐ๋ค ์ง๋ฌธ๊ธ ๊ณ์ ์ฐ๊ณ ๋ง ํ๋๋ฐ ์ข ์ฌ๊ณ ๋ค์ ๊ณต๋ถํด์ ๋ค์ ๋ง๋ค๊ธฐ ์์ํ์
fsm์ ์ฉ์ํฌ๊ฒ ํ๋ ์ด์ด๋ ์ ๋ค์ด๋ผ์ ์ ๋ค๋ฆญ์ผ๋ก ํด์ ๋ค๊ฐ์ด ์ ์ฉ ์ํฌ ์๊ฐ์ด์๊ณ ๊ฐ ์ํ ๋ด์๋๋ ๋์
๋๋ฆฌ๋ฅผ ์ด์ฉํด ์ํ ๋ฐ๊พธ๊ณ ๊ทธ๋ฌ๋ ์ฝ๋๋ฅผ ์งฐ์
์ผ๋จ ์ด๋ ๊ฒ ํ๋ ์ด์ด์ fsm์ ๋ง๋ค์ด ์คฌ์ ๊ทธ๋ฐ๋ฐ ์ด์ ์ํ ์ ํํ๋ ๊ธฐ๋ฅ์ด๋ ์ด๋ ๊ณต๊ฒฉ๊ฐ์๊ฑฐ ๊ตฌํํ ๋ ค๋ฉด ํ๋ ์ด์ด ์ ๋ณด๋ฅผ ๋ถ๋ฌ์์ผ ํ๋๊น
์ํ์์ ์ํ๋จธ์ ์ ์ฐธ์กฐํ๋ ๊ธฐ๋ฅ์ ๋ง๋ค๋ ค ํ๋๋ฐ
์ด๋ ๊ฒ BaseState์์ ์ํ๋จธ์ ๋ด๋ ๋ณ์ ํ๋ ์ ์ธํ๊ณ ์์ฑ์๋ก ์ด๊ธฐํ ํ๋ ๋ฐฉ๋ฒ์ ๋ ์ฌ๋ ธ๊ณ ์ด๋ ๊ฒ ๋ง๋ค์ด ์คฌ์
์ด์ IdleState์๋ ์ ์ฉ์ ์์ผ์ฃผ๊ณ
์ด์ ํ๋ ์ด์ด ์ํ๋จธ์ ์์ ๋์
๋๋ฆฌ์ ์ถ๊ฐ๋ฅผ ํด์ค๋ ค๋๊น ๋ฌธ์ ๊ฐ ๋ฐ์ํจ
ํ์์ด ์๋ง๋๊ฑฐ ๊ฐ์๋ฐ ์ด์ผ ํ๋ฉด ์ข์๊น? ์ ๋ค๋ฆญ์ด ์ต์ํ์ง ์์์ ํด๊ฒฐ ๋ฐฉ์์ ์ ํ ๋ชจ๋ฅด๊ฒ ์ ์์ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ๊ตฌํํ๋๊ฒ ์ ๋ต์ผ๊น?
์์งํ ์ํ๋จธ์ ๊ด๋ จ ์ง๋ฌธ์ ๊ฑฐ์ ๋์ ํ๋ค ์ถ์ด ํด์ ๋ฅ์น๊ณ ๊ฑ ๊ณต๋ถ ์ข๋ง ํ๊ณ ๋๋๋ฐ๋ก ๋ง๋ค๋ ค ํ๋๋ฐย
๋๋ฆ ์๊ฐํ ์ต์ ์ ๋ฐฉ์์ด ์๋์ ์ข ํด๊ฒฐ ํ๊ณ ์ถ๊ธดํจ
๋๋ฌด ์ธ๋ฐ์์ด ์ง์ฐฉํ๋ฉด์ ์ง๋ฌธ๊ธ ์ด๊ฑฐ ๊ฐ์๋ฐ ๊ทธ๋๋ ์ผ๋จ ํด๊ฒฐ์ ํ๊ณ ์ถ์
interface IStateContext { void SetState(IState state); } interface IState { void OnStateEnter(IStateContext stateContext); void OnStateUpdate(IStateContext stateContext); void OnStateExit(IStateContext stateContext); } ์ฒ๋ผ State ํจ์ ํธ์ถ ํ ๋ State ๋ง๋ค ๊ณต์ ํ๋ StateContext๋ฅผ ๋์ ธ์ฃผ๊ฑฐ๋ OnStateAwake ํจ์ ๋ง๋ค๊ณ Awake ๋จ์ ๊ณต์ ํ๋ ์ ๋ณด๋ฅผ ๋ค ๋๊ฒจ์ฃผ๊ฑฐ๋ ํ๋๊ฒ ํธํ์ง ์์๊น
๋๋ฆฌ๊ณ ๋๋ฆฐ๊ฒ fsm์ธ๋ฐ ๊ฒ์ํด์ ๋ณต๋ถํ์