Animation Controller

Animation Controller¸¦ ÀÌ¿ëÇÏ¿© ¾Ö´Ï¸ÞÀ̼ÇÀ» Á¦¾îÇÏ°í ƯÁ¤Å°¿¡ ÇÔ¼ö°¡ È£Ã⠵ǵµ·Ï Çغ¸ÀÚ.

1. ÇÁ·ÎÁ§Æ® ºä > Create > Animation Controller Ãß°¡

¿©±â¼­´Â NpcAnimÀ̶ó´Â À̸§À¸·Î Ãß°¡ ÇÏ¿´´Ù.



NpcAnimÀ» ¸¶¿ì½º·Î ´õºí Ŭ¸¯ÇÏ¸é ´ÙÀ½°ú °°ÀÌ µðÆúÆ® »óÅÂÀÇ Animator ºä°¡ ¶á´Ù.




2. ÇÁ·ÎÁ§Æ®ºä¿¡¼­ ¾Ö´Ï¸ÞÀ̼Ǻä·Î ¾Ö´Ï¸ÞÀ̼ÇÀ» µå·¡±× ÇÑ´Ù.



3. Entry¿¡¼­ ¿ìŬ¸¯ÇÏ¿© "Set StateMachine Default State"¸¦ ÁöÁ¤ÇÑ´Ù.

¿©±â¼­´Â µðÆúÆ® ¾Ö´Ï¸ÞÀÌ¼Ç »óŸ¦ "player@idle"·Î ÁöÁ¤ÇÑ´Ù.


4. ¾Ö´Ï¸ÞÀ̼ÇÀÇ TransitionÀ» ¸¸µç´Ù.

¾Ö´Ï¸ÞÀÌ¼Ç »óÅ À§¿¡¼­ ¿ìŬ¸¯ÇÏ¿© "Make Transition"À¸·Î Æ®·£Áö¼ÇÀ» ¸¸µç´Ù.


TransitionÀÌ ¿Ï¼ºµÈ »óÅÂÀÌ´Ù.


5. Æ®¸®°Å¸¦ Ãß°¡ÇÏ°í Æ®·£Áö¼ÇÀÇ Trigger¸¦ ¼³Á¤ÇÑ´Ù.

Animator > Parameters > "+" > Trigger·Î "Fly", "Walk" Æ®¸®°Å¸¦ Ãß°¡ÇÑ´Ù.


Æ®·£Áö¼ÇÀ» ¼±ÅÃÇÑ´Ù.


ÀνºÆåÆ®ºä > Conditions > "+"·Î ¿øÇÏ´Â Trigger¸¦ ¼±ÅÃÇÑ´Ù.
(»èÁ¦ÇÒ·Á¸é "=" ºÎºÐÀ» ¼±ÅÃÈÄ¿¡ "-"¹öÆ°À» Ŭ¸¯ÇÑ´Ù)


6. À̺¥Æ®¸¦ Ãß°¡ÇÑ´Ù.

¸Þ´º > Window > AnimationÀ» ½ÇÇàÇϸé Animationºä°¡ ¿­¸°´Ù.



"Samples" ¿ìÃøÀÇ ¿øÇÏ´Â ÇÁ·¹ÀÓ À§Ä¡¿¡¼­ ¸¶¿ì½º ¿ìŬ¸¯ >>  "Add Animatin Event"¸¦ Ŭ¸¯Çϸé "Edit Animation Event" ´ëÈ­»óÀÚ°¡ ¿­¸°´Ù.
(ÇØ´ç ÇÁ·¹ÀÓÀÌ ½ÇÇà µÉ¶§, CallbackWalkAnim ÇÔ¼ö°¡ ½ÇÇà µÈ´Ù.)





//PlayerController.cs ¼Ò½º

using UnityEngine;
using System.Collections;

public class PlayerController : MonoBehaviour
{
    Animator anim;

    void Start()
    {
        anim = GetComponent<Animator>();
        //anim.Play("Player@fly", -1, 0f);
        
        StartCoroutine(StartAnimation(2, 2));
    }

    void CallbackFlyAnim()
    {
    }

    void CallbackWalkAnim()
    {
        Debug.Log("Run Walk Animation");
    }

    IEnumerator StartAnimation(float waitTime1, float waitTime2)
    {
        yield return new WaitForSeconds(waitTime1);
        anim.SetTrigger("idle_walk");
        yield return new WaitForSeconds(waitTime2);
        anim.SetTrigger("Fly");
    }
}

CallbackFlyAnim( ), CallbackWalkAnim( )Àº ¾Ö´Ï¸ÞÀÌ¼Ç À̺¥Æ®¿¡¼­ ºÎ¸£±â À§ÇØ ¸¸µé¾ú´Ù.

Animator.SetTrigger( )·Î TransitionÀÇ Trigger¸¦ ºÎ¸¦¼ö ÀÖ´Ù.

        anim.SetTrigger("Fly");
 
        //Á¶±ÝÀÌ¶óµµ ½Ã°£À» Àý¾àÇÏ°í ½Í´Ù¸é ´ÙÀ½°ú °°ÀÌ ÇÑ´Ù.
        int flyHash = Animator.StringToHash("Fly");
        anim.SetTrigger(flyHash);

< ÇöÀç ½ÇÇàÁßÀÎ ¾Ö´Ï¸ÞÀÌ¼Ç Á¤º¸ ±¸Çϱâ >

Animator.GetCurrentAnimatorStateInfo( )ÀÇ AnimatorStateInfo·Î ÇöÀç ½ÇÇàÁßÀÎ ¾Ö´Ï¸ÞÀ̼ÇÀ» ¾Ë¼ö ÀÖ´Ù.

        int flyTriggerHash = Animator.StringToHash("Fly");

        int walkHash = Animator.StringToHash("Base Layer.player@walk");
        int flyHash = Animator.StringToHash("Base Layer.Player@fly");

        AnimatorStateInfo stateInfo = anim.GetCurrentAnimatorStateInfo(0);

        //¶Ç´Â ¾Æ·¡¿Í °°ÀÌ Á÷Á¢ ¾Ö´Ï¸ÞÀÌ¼Ç À̸§À» ÁÙ¼öµµ ÀÖ´Ù
        //if(stateInfo.IsName("Base Layer.player@walk") == true)
        if (stateInfo.fullPathHash == walkHash)
        {
            Debug.Log("current animation walk");
            anim.SetTrigger(flyTriggerHash);
            //¶Ç´Â ¹®ÀÚ¿­À» Á÷Á¢ ³ÖÀ»¼öµµ ÀÖ´Ù
            //anim.SetTrigger("Fly");
        }

ÇöÀç walk ¾Ö´Ï¸ÞÀ̼ÇÀÌ ÁøÇàÁßÀÎÁö °Ë»ç ÇÒ·Á¸é ´ÙÀ½°ú °°ÀÌ Ã¼Å© ÇÑ´Ù.
µÎ°¡Áö ¹æ½ÄÀÌ ÀÖ´Ù.

if(stateInfo.IsName("Base Layer.player@walk") == true)

or

int walkHash = Animator.StringToHash("Base Layer.player@walk");
if (stateInfo.fullPathHash == walkHash)