์˜ฌ๋ผ๊ฐ„๋‹ค

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๊ฐœ ์Œฉ์ดˆ์งœ์—ฌ์„œ ๊ทธ๋ƒฅ ์ฐธ๊ณ ๋งŒ ํ•ด์คญ..