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) |