private void DoUpdatePatrouiller(ref Patrouiller patrouiller, float time, float deltaTime)
        {
            if (patrouiller.TimeProgress > 1)
            {
                if ((MyFeatureFlag & FeatureFlag.MovePingPang) != 0)
                {
                    patrouiller.TimeProgress = 1;
                    patrouiller.Direction    = CacluateDirection(-1.0f);
                }
                else
                {
                    patrouiller.TimeProgress = 0;
                }

                patrouiller.Transform.localRotation = patrouiller.Direction > 0
                                        ? StartToEndRotation
                                        : EndToStartRotation;
            }
            else if (patrouiller.TimeProgress < 0)
            {
                // 只有动态修改PingPang的情况才会进入这个分支
                patrouiller.TimeProgress            = 0;
                patrouiller.Direction               = CacluateDirection(1.0f);
                patrouiller.Transform.localRotation = StartToEndRotation;
            }
            else
            {
                float timeProgressDelta = deltaTime / StartToEndTime;
                patrouiller.TimeProgress += timeProgressDelta * patrouiller.Direction;
            }

            float progress = StartToEndProgressCurve.Evaluate(patrouiller.TimeProgress);

            patrouiller.Transform.localPosition = patrouiller.Start + (patrouiller.End - patrouiller.Start) * progress;
        }
        private void DoUpdatePatrouiller(ref Patrouiller patrouiller, float time, float deltaTime)
        {
            if (patrouiller.TimeProgress > 1)
            {
                if ((MyFeatureFlag & FeatureFlag.MovePingPang) != 0)
                {
                    patrouiller.TimeProgress = 2.0f - patrouiller.TimeProgress;
                    patrouiller.Direction    = CacluateDirection(-1.0f);
                }
                else
                {
                    patrouiller.TimeProgress = patrouiller.TimeProgress - 1.0f;
                }
            }
            else if (patrouiller.TimeProgress < 0)
            {
                if ((MyFeatureFlag & FeatureFlag.MovePingPang) != 0)
                {
                    patrouiller.TimeProgress = -patrouiller.TimeProgress;
                    patrouiller.Direction    = CacluateDirection(1.0f);
                }
                else
                {
                    patrouiller.TimeProgress = 1.0f - patrouiller.TimeProgress;
                }
            }
            else
            {
                float timeProgressDelta = deltaTime / StartToEndTime;
                patrouiller.TimeProgress += timeProgressDelta * patrouiller.Direction;
            }

            Vector3 newPatrouillerPosition = EvaluatePatrouillerPosition(patrouiller);

            patrouiller.Transform.localPosition = newPatrouillerPosition;
            patrouiller.Transform.localRotation = Quaternion.LookRotation(newPatrouillerPosition - patrouiller.LastPatrouillerPosition);
            patrouiller.LastPatrouillerPosition = newPatrouillerPosition;
        }
        private Vector3 EvaluatePatrouillerPosition(Patrouiller patrouiller)
        {
            float progress = StartToEndProgressCurve.Evaluate(patrouiller.TimeProgress);

            return(PatrouillerPath.EvaluateInBezier_LocalSpace(progress) + patrouiller.PositionOffset);
        }