Esempio n. 1
0
    private float CalcAnimationTime(int ff)
    {
        if (m_FrameList == null || m_FrameList.Count <= 0)
        {
            return(-1);
        }
        int curFrame = ff;

        if (curFrame < 0)
        {
            curFrame = 0;
        }
        else if (curFrame >= m_FrameList.Count)
        {
            curFrame = m_FrameList.Count - 1;
        }
        float ret = 0;

        for (int i = 0; i <= curFrame; ++i)
        {
            ImageAnimateNode frame   = m_FrameList[i];
            float            evtTime = frame.AniTick * _cImageAnimationScale;
            ret += evtTime;
        }
        return(0);
    }
Esempio n. 2
0
    private void InitAnimationClip()
    {
        var clip = this.AniClip;

        clip.frameRate = 30;
#if UNITY_EDITOR
#else
        clip.events = null;
#endif
        Animation ctl = this.CacheAnimation;
        bool      isAnimatePhysics = AppConfig.GetInstance().IsUsePhysixUpdate;
        if (ctl.animatePhysics != isAnimatePhysics)
        {
            ctl.animatePhysics = isAnimatePhysics;
        }
        bool isFound = false;
        var  iter    = ctl.GetEnumerator();
        while (iter.MoveNext())
        {
            AnimationClip c = iter.Current as AnimationClip;
            if (c != null)
            {
                if (c == clip)
                {
                    isFound = true;
                    break;
                }
            }
        }

        ctl.clip = null;
        if (!isFound)
        {
#if UNITY_EDITOR
            if (Application.isPlaying)
            {
                ctl.AddClip(clip, clip.name);
            }
            else
            {
                AnimationClip[] clips = new AnimationClip[1];
                clips[0] = clip;
                UnityEditor.AnimationUtility.SetAnimationClips(ctl, clips);
            }
#else
            ctl.AddClip(clip, clip.name);
#endif
        }

        List <AnimationEvent> evtList = new List <AnimationEvent>();

        m_AniUsedTime = -1;
        string nextFrameStr  = "NextFrame";
        string endFrameStr   = "EndFrame";
        string firstFrameStr = "StartFrame";
        if (m_FrameList.Count >= 2)
        {
            float sumTime = 0;

            AnimationEvent evt = new AnimationEvent();
            evt.functionName   = firstFrameStr;
            evt.messageOptions = SendMessageOptions.DontRequireReceiver;
            evt.time           = 0;
            evtList.Add(evt);
            for (int i = 0; i < m_FrameList.Count; ++i)
            {
                ImageAnimateNode frame   = m_FrameList[i];
                float            evtTime = frame.AniTick * _cImageAnimationScale;
                sumTime += evtTime;
                AnimationEvent aniEvt = new AnimationEvent();
                if (i == m_FrameList.Count - 1)
                {
                    aniEvt.functionName = endFrameStr;
                }
                else
                {
                    aniEvt.functionName = nextFrameStr;
                }
                aniEvt.messageOptions = SendMessageOptions.DontRequireReceiver;
                aniEvt.time           = sumTime;
                evtList.Add(aniEvt);
            }

            if (!ctl.enabled)
            {
                ctl.enabled = true;
            }
            m_AniTotalTime = sumTime + _cImageAnimationScale;
        }
        else
        {
            // 直接針添加StartFrame EndFrame
            AnimationEvent evt = new AnimationEvent();
            evt.functionName   = firstFrameStr;
            evt.messageOptions = SendMessageOptions.DontRequireReceiver;
            evt.time           = 0;
            evtList.Add(evt);

            evt.functionName   = endFrameStr;
            evt.messageOptions = SendMessageOptions.DontRequireReceiver;
            //evt.time = 1.0f/clip.frameRate;
            evt.time = Time.fixedDeltaTime;
            //	evt.time = _cLimitFrameDeltaTime;
            evtList.Add(evt);
            if (ctl.enabled)
            {
                ctl.enabled = false;
            }

            m_AniTotalTime = Time.fixedDeltaTime * 3;
            //m_AniTotalTime = 0;
            //m_AniUsedTime = 100000;
        }
#if UNITY_EDITOR
        if (Application.isPlaying)
        {
            clip.events = evtList.ToArray();
        }
        else
        {
            UnityEditor.AnimationUtility.SetAnimationEvents(clip, evtList.ToArray());
        }
#else
        clip.events = evtList.ToArray();
#endif

        ctl.clip = clip;
    }