/// <summary> /// 添加帧事件(从所有动画片段层级中找) /// </summary> /// <param name="clipName">动画片段名称</param> /// <param name="frame">第几帧</param> /// <param name="action">回调</param> public void AddEvent(string clipName, int frame, System.Action action) { bool hasAdd = HasAddEvent(clipName, frame); if (hasAdd) { return; } ParaObj para = ScriptableObject.CreateInstance <ParaObj>(); para.action = action; Animator ani = GetComponent <Animator>(); AnimationClip ac = System.Array.Find <AnimationClip>(ani.runtimeAnimatorController.animationClips, (AnimationClip _clip) => { AnimationClip _ac = null; if (_clip.name == clipName) { _ac = _clip; } return(_ac); }); //AnimationClip clip = ani.GetClip(clipName); AnimationEvent ae = new AnimationEvent(); ae.time = frame / ac.frameRate; ae.functionName = "Callback"; ae.objectReferenceParameter = para; ac.AddEvent(ae); }
/// <summary> /// 添加帧事件 /// </summary> /// <param name="clipName">动画片段名称</param> /// <param name="frame">第几帧</param> /// <param name="action">回调</param> public void AddEvent(string clipName, int frame, System.Action action) { ParaObj para = ScriptableObject.CreateInstance <ParaObj>(); para.action = action; //Animation ani = GetComponent<Animation>(); AnimationClip clip = ani.GetClip(clipName); AnimationEvent ae = new AnimationEvent(); ae.time = frame / clip.frameRate; ae.functionName = "Callback"; ae.objectReferenceParameter = para; clip.AddEvent(ae); }
/// <summary> /// 添加帧事件(从某一层动画片段找) /// </summary> /// <param name="clipName">动画片段名称</param> /// <param name="frame">第几帧</param> /// <param name="action">回调</param> public void AddEvent(int layer, string clipName, int frame, System.Action action) { bool hasAdd = HasAddEvent(clipName, frame); if (hasAdd) { return; } ParaObj para = ScriptableObject.CreateInstance <ParaObj>();//可以优化 para.action = action; AnimationClip ac = GetClip(clipName); AnimationEvent ae = new AnimationEvent(); ae.time = frame / ac.frameRate; ae.functionName = "Callback"; ae.objectReferenceParameter = para; ac.AddEvent(ae); }