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); }
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; }