private void ShowDirections() { Handles.color = Color.green; Vector3 point = _spline.GetPoint(0.0f); Handles.DrawLine(point, point + _spline.GetDirection(0.0f) * directionScale); int steps = stepsPerCurve * _spline.CurveCount; for (int i = 0; i < steps; i++) { point = _spline.GetPoint((1 + i) / (float)steps); Handles.DrawLine(point, point + _spline.GetDirection((i + 1) / (float)steps) * directionScale); } }
protected virtual void Update() { if (goingForward) { _progress += Time.deltaTime / duration; if (_progress > 1.0f) { if (mode == SplineWalkerMode.Once) { _progress = 1.0f; } else if (mode == SplineWalkerMode.Loop) { _progress -= 1.0f; } else { _progress = 2.0f - _progress; goingForward = false; } } } else { _progress -= Time.deltaTime / duration; if (_progress < 0.0f) { _progress = -_progress; goingForward = true; } } Vector3 position = spline.GetPoint(_progress); transform.position = position; if (lookForward) { transform.LookAt(position + spline.GetDirection(_progress)); } }