這是unity里面的Animator 一共倆個狀態一個靜止一個攻擊,下面是圖片
下面是代碼掛在人物上即可,自己可以運行打印一下
using System.Collections; using System.Collections.Generic; using UnityEngine; public class AnimatorEc : MonoBehaviour { public Animator ani;//人物的動畫狀態機 public TrailRenderer trail; //拖尾效果 private AnimationClip[] clips; //動畫的集合 // Use this for initialization void Start () { clips = ani.runtimeAnimatorController.animationClips; AnimationClip clip = clips[1]; //因為我的是在第二個,用的話需要自己設定clip[int] AddAnimationEvent(ani, clip.name, "StartEvent", 0); AddAnimationEvent(ani, clip.name, "HalfEvent", clip.length * 0.5f); AddAnimationEvent(ani, clip.name, "EndEvent", clip.length); } private void Update() { if (Input.GetMouseButtonDown (0)) { ani.SetBool("fack", true); } else { ani.SetBool("fack", false); } } /// <summary> /// 給動畫添加新的事件 /// </summary> /// <param name="_Animator"> 人物的狀態機</param> /// <param name="_ClipName">動畫的名稱</param> /// <param name="_EventFunctionName">時間/秒</param> /// <param name="_time"></param> private void AddAnimationEvent(Animator _Animator, string _ClipName, string _EventFunctionName, float _time) { AnimationClip[] _clips = _Animator.runtimeAnimatorController.animationClips; for (int i = 0; i<_clips.Length; i++) { if (_clips[i].name == _ClipName) { AnimationEvent _event = new AnimationEvent(); _event.functionName = _EventFunctionName; _event.time = _time; _clips[i].AddEvent(_event); break; } } _Animator.Rebind(); } private void StartEvent() { Debug.Log("開始播放動畫"); } private void HalfEvent() { trail.emitting = true; Debug.Log("動畫放到一半的時候"); } private void EndEvent() { trail.emitting = false; Debug.Log("動畫結束的時候"); } /// <summary> /// 清除所有的事件 /// </summary> private void ClearAllEvent() { for (int i = 0; i<clips.Length; i++) { clips[i].events = default(AnimationEvent[]); } Debug.Log("清除所有事件"); } private void OnDestroy() { ClearAllEvent(); } }
判斷動畫是否播放結束
if (animator.GetCurrentAnimatorStateInfo(0).normalizedTime>1.0f
當大於1 的時候就播放結束了
感謝各位的閱讀,謝謝大家
End