目前找到的解决方案是用代码加Event:
using System.Collections; using System.Collections.Generic; using UnityEngine; public class NewBehaviourScript : MonoBehaviour { public bool b = false; public bool b1 = true; public AnimationEvent mEvent; // Use this for initialization void Start () { Animation a = this.GetComponent<Animation>(); int count = a.GetClipCount(); foreach (AnimationState state in a) { Debug.Log("AnimationState:" + state.name); } mEvent = new AnimationEvent(); mEvent.functionName = "Skill_01"; mEvent.time = 5.0f;//0.18f; a.clip.AddEvent(mEvent); a.Play(); Debug.Log("clip:" + a.clip.name); Debug.Log("count:" + count.ToString()); } public void Skill_01() { Debug.Log("Skill_01 Run!"); } // Update is called once per frame void Update () { if(b && b1) { b1 = false; Animation a = this.GetComponent<Animation>(); //a.CrossFade("eat", 4.0f); //a.CrossFade("eat"); //like play a.Play("eat"); } } }
注意time不能超过动画的长度,否则会等这个时间