github ๋งํฌ: https://github.com/thefuntastic/Unity3d-Finite-State-Machine
1. ์ํ๋ ์ํ๊ฐ๋ค์ enum ํ์ ์ผ๋ก ๋์ดํ๋ค.
{
Init,
Play,
Win,
Lose
}
2. ๋งด๋ฒ ๋ณ์๋ก ์ ๋ค๋ฆญ ํ์ ์ StateMachine์ ๋ฐฉ๊ธ ์ ์ธํ enum์ผ๋ก ์ ์ธํ๋ค
StateMachine<States> fsm;
3. Awake ์ ๋ํฐ ์ด๋ฒคํธ ํจ์์์ ์ด๊ธฐํ ํจ์๋ฅผ ํธ์ถํด์ค๋ค. new๋ฅผ ํตํด์๊ฐ ์๋ ์ ํด์ง ์ ์ ํจ์๋ฅผ ํตํด ์์ฑํด์ค์ผํจ.
{
fsm = StateMachine<States>.Initialize(this);
}
4. Start ์ ๋ํฐ ์ด๋ฒคํธ๋ผ๋์ง ์๋ฌด๋์๋ ChangeState ๋ฉ์๋๋ฅผ ํตํด ์ํ๋ฅผ ๋ฐ๊ฟ์ค๋ค. ๋ฐ๊พธ๊ธฐ ์ ์ํ์์ ์๋ฌด ์ํ๊ฐ ์๋๋ฏ๋ก ์ด๊ธฐ ์ง์ ์ํ๋ฅผ ๊ผญ ์ค์ ํด์ค์ผํจ.
fsm.ChangeState(States.Init);
5. ๋ฐ๋ ์ํ์ ๋ฐ๋ผ ์๋๊ฐ์ ํจ์๋ค์ด ์ฌ์ฉ๊ฐ๋ฅํ๋ค. ์ด๊ธฐํํ ๋ ์ต์ด ํ ๋ฒ ๋ฆฌํ๋ ์ ์ ํตํด enum๊ฐ๋ง๋ค ํจ์ ํฌ์ธํฐ๋ฅผ ์บ์ฑํ๋๋ฏํจ.
- ์ํ๋ช _Enter: ์ํ ์ง์ ํ์๋. void ๋ฆฌํด ํจ์๋ก๋ ์ฌ์ฉ ๊ฐ๋ฅํ๋ IEnumerator๋ฅผ ๋ฐํํ๋ ์ฝ๋ฃจํด์ผ๋ก๋ ๋ง๋ค ์ ์๋ค. (์ด๋๋ ์ ํ๋ ์ํ๊ฐ ์๋๋ผ ์ ํ ์ค์ธ ์ํ๋ก ์ธ์ํ๋๋ฏ)
- ์ํ๋ช _Exit: ์ํ ๋๊ฐ๋. Enter์ ๋ง์ฐฌ๊ฐ์ง๋ก ์ฝ๋ฃจํด์ฒ๋ผ ๋ง๋ค ์ ์๋ค.
- ์ํ๋ช _FixedUpdate: ํด๋น ์ํ์์ FixedUpdate ๊ฐฑ์ ์ฃผ๊ธฐ๋ง๋ค ํธ์ถ๋จ
- ์ํ๋ช _Update: ํด๋น ์ํ์์ Update ๊ฐฑ์ ์ฃผ๊ธฐ๋ง๋ค ํธ์ถ๋จ
- ์ํ๋ช _LateUpdate: ์ค๋ช ์๋ต
- ์ํ๋ช _Finally: ํด๋น ์ํ ๋๊ฐ๋์ ์ ์ฌํ๋ ChangeState์ ๋๋ฒ์งธ ์ธ์์ Overwrite๊ฐ์ ์ ๋ฌํด์ ์ํ๋ฅผ ๊ฐ์ ๋ก ๋ฐ๊ฟ ์ ์๋๋ฐ ์ด๋ ์ฝ๋ฃจํด์ผ๋ก ์ ์ธ๋ _Exitํจ์๊ฐ ๋ฌด์๋ ์๊ฐ ์์ง๋ง _Finally๋ ์ํ๋ฅผ ๋๊ฐ๋ ๋ฐ๋์ ํธ์ถ๋จ. ์์ธํ๊ฑด github ๋งํฌ์ค๋ช ์ฐธ์กฐ
์๋๋ github์ ์ฐ์ฌ์ง ๊ฐ๋จํ ์์
{
Debug.Log("We are now ready");
}
//Coroutines are supported, simply return IEnumerator
IEnumerator Play_Enter()
{
Debug.Log("Game Starting in 3");
yield return new WaitForSeconds(1);
Debug.Log("Game Starting in 2");
yield return new WaitForSeconds(1);
Debug.Log("Game Starting in 1");
yield return new WaitForSeconds(1);
Debug.Log("Start");
}
void Play_Update()
{
Debug.Log("Game Playing");
}
void Play_Exit()
{
Debug.Log("Game Over");
}
์ง์ง ๊ฒ.๋.์ฝ.์ต.๋.๋ค.
๋ฌผ๋ก ํ ๊ฐ์ฒด์์ ์ฌ๋ฌ๊ฐ ์ฌ์ฉ๋ ๊ฐ๋ฅํจ.. ๋ค๋ง ํจ์๋ช ์ด ์ค๋ณต ๋ ์๋ ์์ผ๋ ๊ทธ๊ฑฐ๋ง ์ ์ํด๋๋ฉด ๋ ๋ฏ
github ๋งํฌ: https://github.com/thefuntastic/Unity3d-Finite-State-Machine
MonsterLove๋ค ์ด๊ฑฐ ใฑใ ์ง
์ฝ๋ฐฑํ๋๊ฑฐ ๋ฌธ์ ๋ก ์ด๊ฑฐํ์ ์ธ๋๋ฐ ๋ค์ด๊ฐ๋ ์๋จ
ใ ใ ใ ใ ใ ๋ง์ ์ธ๋๋ฐ ๋์ค์๋ง์ ์์ ๋ฌธ์๋ ์ํ๊ฐ ๋ค์ ๋ฌธ์๋ ์ด๋ฒคํธ ์๋ณ์๋ก ์ธ์ํด๋ฒ๋ฆผ....
์ ์ข์๋ณด์ธ๋น ์จ๋ณผ๊ฒ์ฌ ์ง๊ธ ๋ด๊ฐ ๋ฐฐ์ด ๋ฐฉ์์ ์ฌ๋ฌ๊ฐ์ง์ bool๋ณ์๊ฐ ์๋ ๊ฒ์์ปจํธ๋กค๋ฌ๊ฐ ์๊ณ (์ IsPlayerReady, IsPlayerDying) 1 ๊ฒ์์ปจํธ๋กค๋ฌ๊ฐ ์ํ๋ฅผ ๋ฐ๊พธ๋ฉด์ ์ด๋ฐ์ ๋ฐ ๋ฉ์๋๋ฅผ ์คํํ๊ณ 2 ์๊ฐ๊ฐ๋ ์ด ์๋๊ฑด ์ธ๋ถ์์ update๊ฐ ๋๋ฉด์ If(bool) ์ผ๋ก ์ฃฝ์๋์ง ๊ธฐ๋ค๋ฆฌ๋ค๊ฐ ์ฃฝ์์ผ๋ฉด ์ฒ์ฒํ
๋ํ๋ ์์ธ๋ฐ ์ ๊ฑธ ์ฌ์ฉํ๋ฉด ๊ฒ์๋ก์ง์ ์ํ๋ง ๋ฐ๊พธ๊ณ ์ํ๋ง๋ค ๋ฉ์๋ ์คํํ ๊ฑธ ์ ์ํด ๋๋ ์์ด๊ฒ ๊ตฌ๋
ใ ใ bool๋ณ์๋ก ์ฌ๋ฌ๊ฐ ์ํ๋ฅผ ๋ง๋ค๋ฉด ์ํ๊ฐ ์ค๋ณต๋ ์ ์๋ ๋ฌธ์ ๊ฐ ์์ (ํ๋ ์ด์ด๊ฐ ์ค๋น๋ ์ํ๋ฉด์๋ ์ฃฝ๋ ์ํ)