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