示例#1
0
        public RootMotionInfo GetAnimationRootMotionInfo(Animation animation, float currentTime)
        {
            RootMotionInfo rootMotion = new RootMotionInfo();
            float          duration   = animation.Duration;
            float          mid        = duration * 0.5f;

            rootMotion.timeIsPastMid = currentTime > mid;
            TranslateTimeline timeline = animation.FindTranslateTimelineForBone(rootMotionBoneIndex);

            if (timeline != null)
            {
                rootMotion.start   = timeline.Evaluate(0);
                rootMotion.current = timeline.Evaluate(currentTime);
                rootMotion.mid     = timeline.Evaluate(mid);
                rootMotion.end     = timeline.Evaluate(duration);
                return(rootMotion);
            }
            TranslateXTimeline xTimeline = animation.FindTimelineForBone <TranslateXTimeline>(rootMotionBoneIndex);
            TranslateYTimeline yTimeline = animation.FindTimelineForBone <TranslateYTimeline>(rootMotionBoneIndex);

            if (xTimeline != null || yTimeline != null)
            {
                rootMotion.start   = TimelineExtensions.Evaluate(xTimeline, yTimeline, 0);
                rootMotion.current = TimelineExtensions.Evaluate(xTimeline, yTimeline, currentTime);
                rootMotion.mid     = TimelineExtensions.Evaluate(xTimeline, yTimeline, mid);
                rootMotion.end     = TimelineExtensions.Evaluate(xTimeline, yTimeline, duration);
                return(rootMotion);
            }
            return(rootMotion);
        }
        public RootMotionInfo GetAnimationRootMotionInfo(Animation animation, float currentTime)
        {
            RootMotionInfo rootMotion = new RootMotionInfo();
            var            timeline   = animation.FindTranslateTimelineForBone(rootMotionBoneIndex);

            if (timeline != null)
            {
                float duration = animation.Duration;
                float mid      = duration * 0.5f;
                rootMotion.start         = timeline.Evaluate(0);
                rootMotion.current       = timeline.Evaluate(currentTime);
                rootMotion.mid           = timeline.Evaluate(mid);
                rootMotion.end           = timeline.Evaluate(duration);
                rootMotion.timeIsPastMid = currentTime > mid;
            }
            return(rootMotion);
        }