StateMachineBehaviour¸¦ »ç¿ëÇÏ¸é ¾Ö´Ï¸ÞÀÌ¼Ç ½ºÅ×ÀÌÆ®º°·Î ½ºÅ©¸³Æ®¸¦ ÁöÁ¤ÇÒ¼ö ÀÖ´Ù. StateMachineBehaviourÀ» »ç¿ëÇϸé AnimatorStateInfo »ç¿ëÀ» ´ëüÇÏ°í Äڵ带 °£´ÜÇÏ°Ô ÀÛ¼º ÇÒ¼ö ÀÖ´Ù. StateMachineBehaviour¸¦ »ó¼ÓÇÑ Å¬·¡½º¸¦ ÀÛ¼ºÇÏ¿© ¾Ö´Ï¸ÞÀÌ¼Ç StateÀÇ "Add Behaviour"·Î ½ºÅ©¸³Æ®¸¦ Ãß°¡ ÇÒ¼ö ÀÖ´Ù. StateMachineBehaviour ±âº»StateMachineExample.cs ÆÄÀÏusing UnityEngine;
using System.Collections; public class StateMachineExample : StateMachineBehaviour { public override void OnStateMachineEnter(Animator animator, int stateMachinePathHash) { //StateMachine·Î Àüȯ ÇÒ ¶§, ù ¹ø° Update ÇÁ·¹ÀÓÀÌ´Ù. //StateMachine ¼ºê ½ºÅ×ÀÌÆ® ¼ÓÀ¸·Î ÀÌÇà ÇÒ ¶§, ÀÌ°ÍÀº È£ÃâµÇÁö ¾Ê´Â´Ù. Debug.Log("OnStateMachineEnter"); } public override void OnStateMachineExit(Animator animator, int stateMachinePathHash) { //StateMachine¿¡¼ ¸¶À̱׷¹ÀÌ¼Ç ÇÒ ¶§, ¸¶Áö¸· Update ÇÁ·¹ÀÓÀÌ´Ù. //StateMachine ¼ºê ½ºÅ×ÀÌÆ® ¼ÓÀ¸·Î ÀÌÇà ÇÒ ¶§, ÀÌ°ÍÀº È£ÃâµÇÁö ¾Ê´Â´Ù. Debug.Log("OnStateMachineExit"); } public override void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) { //»óÅ ¸Ó½ÅÀÌ »óŸ¦ Æò°¡ÇÏ´Â °æ¿ì ù ¹ø° Update ÇÁ·¹ÀÓ¿¡¼ È£ÃâµÈ´Ù. Debug.Log("OnStateEnter"); } public override void OnStateExit(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) { //»óÅ ¸Ó½ÅÀÌ »óŸ¦ Æò°¡ÇÏ´Â °æ¿ì, ¸¶Áö¸· Update ÇÁ·¹ÀÓ¿¡¼ È£ÃâµÈ´Ù. Debug.Log("OnStateExit"); } public override void OnStateMove(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) { //MonoBehaviour.OnAnimatorMove Á÷ÈÄ¿¡ È£ÃâµÈ´Ù. Debug.Log("OnStateMove"); } public override void OnStateUpdate(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) { //óÀ½°ú ¸¶Áö¸· ÇÁ·¹ÀÓÀ» Á¦¿ÜÇÏ°í Update ÇÁ·¹ÀÓ¸¶´Ù È£ÃâµÈ´Ù. Debug.Log("OnStateUpdate"); } public override void OnStateIK(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) { //MonoBehaviour.OnAnimatorIK Á÷ÈÄ¿¡ È£ÃâµÈ´Ù. Debug.Log("OnStateIK"); } } Animator ºä¿¡¼ ½ºÅ×ÀÌÆ®¸¦ ¼±Åà Çϸé ÀνºÆåÆ®ºä¿¡¼ "Add Behaviour" ¹öÆ°À» ãÀ»¼ö ÀÖ´Ù. "Add Behaviour" ¹öÆ°À» Ŭ¸¯Çϸé StateMachineBehaviour¸¦ »ó¼ÓÇÑ Å¬·¡½º¸¦ Ãß°¡ ÇÒ¼ö ÀÖ´Ù. ¿¹Á¦¸¦ ½ÇÇàÇϸé OnStateMachineEnter, OnStateMachineExit°¡ ÀüÇô È£ÃâµÇÁö ¾Ê´Â´Ù. ¾ðÁ¦ ºÒ¸®´ÂÁö Á¤È®ÇÏ°Ô ¸ð¸£°Ú´Ù. ??????? ¿¹Á¦¸¦ ½ÇÇàÇÏ¸é ´ÙÀ½°ú °°Àº ·Î±×°¡ ¹ß»ýÇÑ´Ù. GetBehaviour( ) ÇÔ¼ö·Î StateMachineExample ÄÄÆ÷³ÍÆ®¸¦ ¾ò¾î¿Ã¼ö ÀÖ´Ù. AnimationController.cs ÆÄÀÏ public class AnimationController : MonoBehaviour {
Animator anim; StateMachineExample stateMachineExample; void Start() { anim = gameObject.GetComponent<Animator>(); stateMachineExample = anim.GetBehaviour<StateMachineExample>(); } } »ç¿îµå Ç÷¹ÀÌ ÇÏ´Â ¿¹Á¦¾Ö´Ï¸ÞÀÌ¼Ç ÁøÀԽà »ç¿îµå¸¦ Ç÷¹ÀÌ ÇÏ´Â ¿¹Á¦ÀÌ´Ù.AudioSourceManager°¡ ¾øÀ¸¸é Animator ÄÄÆ÷³ÍÆ®°¡ ÀÖ´Â °ÔÀÓ ¿ÀºêÁ§Æ®¿¡¼ AudioSource¸¦ ÂüÁ¶ÇÑ´Ù. StateMachineExample.cs ÆÄÀÏ using UnityEngine;
using System.Collections; public class StateMachineExample : StateMachineBehaviour { public AudioClip soundEffectClip; public float delay; private float elapsedTime; private AudioSource audioSource; public override void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) { if (null == audioSource) { var audioSourceObj = GameObject.Find("AudioSourceManager"); audioSourceObj = audioSourceObj != null ? audioSourceObj : animator.gameObject; audioSource = audioSourceObj != null ? audioSourceObj.GetComponent<AudioSource>() : null; } if (null != soundEffectClip && 0 >= delay) PlaySoundClip(); } public override void OnStateUpdate(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) { if (null == soundEffectClip) return; elapsedTime += Time.deltaTime; if (elapsedTime >= delay) PlaySoundClip(); } private void PlaySoundClip() { if (null == audioSource) return; if (null == soundEffectClip) return; audioSource.PlayOneShot(soundEffectClip); soundEffectClip = null; } } Âü°í) http://qiita.com/toRisouP/items/b6540b7f514d18b9a426 »ç¿îµå ¿¹Á¦ http://techblog.kayac.com/unity_advent_calendar_2016_15 |