์ฌ๋ผ๊ฐ๋ค
if(ํ์นํ์๊ณ ๋ฐฉ๊ธ ํ์ฐจ)
์ ์ง
if(๋ฐ๋ฅ ๋ฒํผ ๋๋ฆ && buttonUp ์ค์์น)
๋ด๋ ค๊ฐ๋ค
if(์ ์ )
๋ด๋ ค๊ฐ๋ค
์ ์ง
if(ํ๋ ์ด์ด ํ์น)
์ฌ๋ผ๊ฐ๋ค
if(๋ฐ๋ฅ ๋ฒํผ ๋๋ฆ && buttonUp ์ค์์น)
๋ด๋ ค๊ฐ๋ค
๋ด๋ ค๊ฐ๋ค
if(ํ๋ ์ด์ด์ ์ถฉ๋)
์ฌ๋ผ๊ฐ๋ค
if(๋ฐ๋ฐ๋ฅ)
์ ์ง
fsm์ ๊ทธ๋ฅ ๋จ์ํ๊ฒ animator ๋์๋์ ๋ค๋ชจ(=์ํ)๋ค์ ํด๋์ค๋ ๋ฉ์๋๋ก ๋ง๋ค์ด์ ์ง์ ์ผ์ ์ํค๋๊ฑฐ์ผ.
๋๋ ์ฑ ์์ fsm์ ์ฃผ๋ก ํด๋์ค๋ก ๋ง๋๋๋ฐ ๋ฉ์๋๋ก ๋ง๋ค๋ฉด ๋ ํธํ๋ค๊ณ ๋ค์ด์ ํ๋ ์ด์ด fsm์ ์ด๋ ๊ฒ ์ง๋ดค์. fsm์์์ผ
//ํ๋์ด์ด ํด๋์ค ์ง์ญ๋ณ์
delegate void State(); //๊ฐ๋จํ ๋งํด์ ๋ฉ์๋ ์ ์ฉ ํฌ์ธํฐ์ ์ธ. void ๋ฉ์๋(void)์ ์กฐ๊ฑด์ ์ถฉ์กฑํ๋ ๋ฉ์๋์ ํํด์ ํฌ์ธํฐ ์ญํ ๊ฐ๋ฅ.
State PlayerState; //ํ์ฉ ๊ฐ๋ฅํ PlayerState๋ผ๋ ํฌ์ธํฐ ์์ฑ
...
OnAwake()
{
...
PlayerState = Idle;
...
}
FixedUpdate()
{
...
PlayerState();
...
}
#region PlayerState
void Idle()
{
#region Action
...
#endregion
#region Animator
...
#endregion
#region StateChange
...
#endregion
}
void Jump()
{
#region Action
...
#endregion
#region Animator
...
#endregion
#region StateChange
...
#endregion
}
์์ ๋๊ฐ ์ฐธ์กฐํด์ ๋ง๋ค์ด์ฃผ๋ฉด ๋๊ณ ,
ํธ๋ฆฌ๊ฑฐ ๋ฐ๋์ํค๋ Collider๋ฅผ ๋ฐ๋ก ๋๊ณ ๊ทธ๊ฑฐ๋ ํ๋ ์ด์ด๋ ์ฐ๋์ํค๊ณ ์ถ๋ค๊ณ ํ์์?
๋ด ์๊ฐ์, ๊ทธ Collider์ ์คํฌ๋ฆฝํธ๋ฅผ ํ๋ ์์ฑํด์
OnCollisionEnter(Collision A)
{
if(A.gameObject.layer/*OR tag*/ == "player")
{
SendTrigger1();
}
}
private void SendTrigger1()
{
A.gameObject.GetComponent<ํ๋ ์ด์ด์คํฌ๋ฆฝํธ>().ReceiveTrigger1;
}
์ด๋ ๊ฒ ์ ์ด๋๊ณ , ํ๋ ์ด์ด ์คํฌ๋ฆฝํธ๋ก ๊ฐ์
public void ReceiveTrigger1()
{
/*bool*/TriggerEnter1 = true;
}
๋ฐ์์ค๊ฑฐ์ผ.
๋๋ ์ถ์ํ ๊ฒ์ 0๊ฐ ์ฉ์ด์ง์ฌ์ ๊ทธ๋ฅ ์ฐธ๊ณ ๋ง ํด์คญ..
FSM์ด ๋ญ์ง ๋ชจ๋ฅด์๋ ๋ถ
fsm์ flying spaghetti machine์ ๋๋ค ํ๊ฑฐ๊ฑฑ - dc App