FSM์ด๋๊ฑธ ์ผ๋ง ์ ์ ์์์ ๋๋ฆ๋๋ก ๊ณต๋ถ๋ฅผ ํด๋ดค๋๋ฐ ๊ตฌ์กฐ์ ๋ํด์๋ ์ดํดํ์ง๋ง ๋ฌธ์ ๊ฐ ๊ตฌํ ํ๋ ๋ฐฉ์์ด ๊ธ๋ง๋ค ์ข ๋ฌ๋์
๊ทธ๋์ ๋ด๊ฐ ๋๋ฆ๋๋ก ํธํด ๋ณด์ด๋ ๋ฐฉ์๋๋ก ์ฌ๋ฌ ์ฝ๋๋ค ์์ด์ ๊ตฌํ์ ํ๋๋ฐ ์๋์ ํ์ง๋ง ์๊ฐ๋ณด๋ค ํธํ์ง๊ฐ ์์
์ ๋๋ฉ์ด์ ์ด์ฉํด์ ๊ตฌํ์ ์ํ์ง๋ง ์ผ๋จ ํ์ฌ ๊ตฌํ๋ State๋ค๊ณผ ์ฐ๊ฒฐ ์ํ๋ฅผ ๋ณด์ฌ์ค ์ ์๋ ์๋ฃ์
Grounded๋ Jump ์ํ์์ ๋ฐ๋ฅ ๋ ์ด๋ก ๊ฐ์ง๋๋ฉด ์๋์ผ๋ก ์ด๋๋จ
์ด์ ๋ฐ ๋ถํฐ๋ ๊ตฌํํ ์ฝ๋๋ค์ธ๋ฐ
์ด๊ฑด ํ๋ ์ด์ด์ FSM ์ฝ๋์ State๋ฅผ ๋์ ๋๋ฆฌ์ ๋ฃ์ด๋๊ณ ํ์ฑํ๋ ์ํ๋ฅผ ๊ณ์ ๋ฐ๊พธ๋๊ฑฐ์
์๋ง ๋ชฌ์คํฐ๋ ๋น์ทํ ๊ตฌ์กฐ์ FSM์ผ๋ก ๋ง๋ค๊ฑฐ ๊ฐ์๋ฐ ํ๋ฒ ์ ๋ค๋ฆญ์ผ๋ก ๋ง๋๋๊ฑฐ ์๋ํด ๋ณผ๊ฑฐ์
์ด๊ฑด State๋ค์ ๊ธฐ๋ฐ์ด ๋๋ ์ฝ๋๊ณ ์ด๊ฑธ
์ด๋ฐ ๋ฌ๋ฆฌ๊ธฐ ์ฝ๋์ฒ๋ผ ์ฌ์ฉ์ํจ Enter์์๋ ํ์ฑํ ๋ ๋๋ง๋ค ์คํ๋๋ ์ฝ๋๋ก ์ ๋๋ฉ์ด์ ์ด๋ ์ ํ ๊ฐ์ ๊ฒฝ์ฐ
์์ชฝ์ผ๋ก ํ์ ์ฃผ๋ ์ฝ๋๋ฑ์ด ๋ค์ด๊ฐ๊ฒ ๋๊ณ Execute๋ ์๋ํ๋ ๋์ ์คํํ๊ฒ ๋ ์ฝ๋์
Exit๋ ๋นํ์ฑํ ๋ ๋ ์ฌ์ฉ๋๊ณ ์ ๋๋ฉ์ด์
์ ์ข
๋ฃํ๋๋ฑ์ ์ฒ๋ฆฌ๋ฅผ ํ๊ฒ๋จ
์ด์ ์ฌ๊ธฐ์ ๋ถํฐ ์ง๋ฌธ์ธ๋ฐ
1. ๋ด๊ฐ ์ ๊ตฌํํ๊ฑด์ง ๋ชจ๋ฅด๊ฒ ์
๋ญ๊ฐ ๋๋ฆ๋๋ก ํธํ๊ฒ ํ ๋ ค๊ณ ์ ๋ ๊ฒ ์งฐ๋๋ฐ ์๋์ ํ์ง๋ง ๋ญ๊ฐ ๋ ๋ณต์กํด์ง ๊ธฐ๋ถ์ ์ด๊ฒ ๊ด์ฐฎ๊ฒ ๋ง๋ ๊ฑด์ง ๋ชจ๋ฅด๊ฒ ์
๋ณ๋ก๋ผ๋ฉด ์ถ์ฒํ๋ FSM์ฝ๋์ข ์๋ ค์ค
2. ํผ๊ฒฉ๊ฐ์ด ๊ฑฐ์ ๋ชจ๋ ์ํ์์ ์ด๋ํด์ผ ํ๋ ์ฝ๋๋ฅผ ์ด์ผ ํ ์ง ๋ชจ๋ฅด๊ฒ ์
์ด์ ๋ ๋ง์ State๋ฅผ ์ถ๊ฐํ ์์ ์ธ๋ฐ ๋ฌธ์ ๋ ํผ๊ฒฉ๊ฐ์๊ฒฝ์ฐ ๋์ค์ ์ถ๊ฐํ ํํผ๊ธฐ๋ฅผ ์ ์ธํ ๋ชจ๋ ์ํ์์ ์ด๋์ด ๊ฐ๋ฅํด์ผํ๋๋ฐ
์ด๊ฑธ ๋ชจ๋ State์ฝ๋์๋ค ์ถ๊ฐํ๋๊ฒ ๋๋ฌด ๋ฒ๊ฑฐ๋ก์ ๋ณด์ ๊ทธ๋ฅ ํผ๊ฒฉ์ ๊ฐ์งํ๋ ์ฝ๋๋ฅผ ๋ฐ๋ก ๋ง๋ค๊ณ ๋ง๋ค์ด๋ FSM์ ChangeState์ฝ๋๋ก
ํผ๊ฒฉ State๋ก ๋ฐ๋ก ๋ฐ๊ฟ๋ฒ๋ ค๋ ๋ฌธ์ ๊ฐ ์๊ธธ์ง ์์๊ธธ์ง ๋ชจ๋ฅด๊ฒ ์
๋๋ ์คํ ์ดํธ ๋จธ์ ์ ๋น์ฃผ์ผ(์ ๋๋ฉ์ด์ ) ์กฐ์์ฉ์ผ๋ก๋ง ์ฐ๊ณ ๋ฌผ๋ฆฌ ์ฒ๋ฆฌ๋ ๋ณ๋์ Locomotion ํด๋์ค๋ฅผ ๋ง๋ค์ด์ ํ๊ณ ์์ ํ์ฌ ์คํ ์ดํธ๋ฅผ ๋ณด๊ณ ํด๋นํ๋ ๋ฌผ๋ฆฌ ๋์์ ์คํํ๋ ์์ ๊ทธ๋ฆฌ๊ณ ๊ฐ ์คํ ์ดํธ ๊ฐ์ ํธ๋์ง์ ์ ์คํ ์ดํธ ์์ฒด์ ์ปจ๋์ ๋ฐฐ์ด์ ๋ง๋ค์ด๋๊ณ ITransitionCondition์ ๊ตฌํํ๋ ๊ฐ์ฒด๋ค์ ๋ฃ์ด๋๊ณ ๋งค ํฑ๋ง๋ค ์ปจ๋์ ํ์ธํด์ ํธ๋์ง์ ํ ๋ค์ ์คํ ์ดํธ๋ฅผ ์ ํ๊ฑฐ๋ ์ ์งํจ ๊ทธ๋ฌ๋ฉด ์ปจ๋์ ์ ๋ง๋ค์ด๋๊ณ ์ฌ๋ฌ ์คํ ์ดํธ์์ ์ฌํ์ฉ ๊ฐ๋ฅํจ ์ ๋ํฐ ์ ๋๋ฉ์ดํฐ์์ ํธ๋์ง์ ์ ์ํ๋๊ฑธ ์ฝ๋๋ก ํ๋ค๊ณ ์๊ฐํ๋ฉด ๋ ๋ฏ
๋์ ์ปจ๋์ ์์ ํน์ ์คํ ์ดํธ ๋๋ ์์ ๋ค๋ฅธ ๋๋ฉ์ธ์ ๊ฐ์ฒด์ ์ ๊ทผํด์ผ ๋ ๋๋ ๋ณต์กํด์ง์๋ ์์ ๊ทธ๋์ ๋๋ ์ ๋๋ฉ์ดํฐ์์ ๋ณ์ ์ ์ ํด๋๊ณ ํธ๋์ง์ ์ปจ๋์ ์ ์ฌ์ฉํ๋ฏ์ด ๋ธ๋๋ณด๋๋ผ๋ ํด๋์ค๋ฅผ ๋ง๋ค์ด์ ์คํ ์ดํธ ๋จธ์ ์ ๋ฃ์ด์ ์ ์ฌํ๊ฒ ์ฌ์ฉํ๊ณ ์์
ํ๋ ์ด์ด์ฒ๋ผ ๋ณต์กํ ์์ง์์ ๊ฐ์ง๋ ๊ฐ์ฒด์๊ฒ FSMํจํด์ ์ด์ธ๋ฆฌ์ง ์์. FSMํจํด์ [๋๊ธฐ - ํ์ - ๊ณต๊ฒฉ] ๊ฐ์ด ๋จ์ํ ํจํด์ ๊ฐ์ง ๋ชฌ์คํฐ๋ค์๊ฒ ์ฌ์ฉํ๋ ๊ฒ
foreach๋ฅผ ์ํ ๋ณ๊ฒฝ๋ง๋ค ํ ํ์๊ฐ ์์. ์ด๊ธฐํ์์ ํ ๋ฒ๋ง ํด์ฃผ๊ณ , ChangeState ์ชฝ์์ ๋ฐ๊พธ๊ธฐ ์ ์ currentState๊ฐ null์ด ์๋๋ฉด enable = false ํด์ฃผ๊ณ ์๋ก์ด ์คํ ์ดํธ๋ฅผ true๋ก ํด์ฃผ๋ฉด ๋จ. ๊ทธ๋ฆฌ๊ณ ์ด๊ฑด ๊ฐ์ธ์ ์ธ ๊ฒฝํ์ธ๋ฐ ์ ๋๋ฉ์ดํฐ์์ ์ ์ฐ๊ฒฐํด์ Setbool ํ๋๊ฑฐ๋ณด๋ค ์คํ ์ดํธ ์คํฌ๋ฆฝํธ์์ Play ์ ์ดํ๋๊ฒ ํธํ๋๋ผ.
FSM์ ์ถ์ํ๋ ์ํ์ ๋ชจ๋ธ์ด์ง, ๊ทธ๊ฑธ ์ด ์ ๋ฌผ๊ณ ๋๊ฐ์ด ๊ตฌํํ๋ค๋๊ฑด ๋๋ํฌ๋ฃจ๊ฑฐ์
๊ฑ ์กด๋ ๊ฐ๋จํ๊ฒ ์ง๋ผ๋๊น ๋ญ ํด๋์ค ๋ค ๋๋๊ณ ๋์ ๋๋ฆฌ๊น์ง ์์ด
๋๊ทธ๋ฅ ๊ตฌ์กฐ์ก๋๊ฒ ์ฌ๋ฐ๋๊ฑฐ์์ ์ง์ค
enum switch๋ก ๋ปฅ Update๋ฌธํ๋์์ ๋ค ๋๋์ผ ์ ์์