public static void AddTimelineAnimEvent(Animator anim, AnimatorStateTrack animTrack) { if (anim == null || animTrack == null) { return; } double lastTime = -1; TimelineAnimEvent lastHitAnim = null; foreach (var clip in animTrack.GetClips()) { if (clip != null) { TimelineAnimEvent evt = AddTimelineAnimEvent(anim, clip); if (evt != null && evt.stateName.StartsWith("hit") && evt.triggerTime > lastTime) { lastTime = evt.triggerTime; lastHitAnim = evt; } } } if (lastHitAnim != null) { lastHitAnim.isLastHit = true; } }
public static TimelineAnimEvent AddTimelineAnimEvent(Animator anim, TimelineClip clip) { if (anim == null || clip == null || !(clip.asset is AnimatorStatePlayableAsset)) { return(null); } var evt = new TimelineAnimEvent(anim, clip.asset as AnimatorStatePlayableAsset, clip.start); if (evt.anim != null) { for (int i = 0; i < animEvts.Count; i++) { if (animEvts[i].triggerTime > evt.triggerTime) { animEvts.Insert(i, evt); return(null); } } animEvts.Add(evt); } return(evt); }