/// <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);
    }
Esempio n. 2
0
    /// <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);
    }