public static void DrawPathGizmo(SplineBase path, Color pathColor, float start, float end, SplineBase.PositionUnits units, float offset, bool canDrawMin = true, bool canDrawMax = true) { // Draw the path Color colorOld = Gizmos.color; Gizmos.color = pathColor; float step = 1f / path.Resolution; Vector3 lastPos = path.EvaluatePositionAtUnit(start, units); Vector3 lastW = (path.EvaluateOrientationAtUnit(start, units) * Vector3.right) * path.Appearances.Width * offset; Vector3 p0 = lastPos; Vector3 p1 = lastW; int currentStep = 0; for (float t = start + step; t <= end + step / 2; t += step) { Vector3 p = path.EvaluatePositionAtUnit(t, units); Quaternion q = path.EvaluateOrientationAtUnit(t, units); Vector3 w = (q * Vector3.right) * path.Appearances.Width * offset; p0 = p - w; p1 = p + w; if (currentStep == 0 && canDrawMin) { Gizmos.DrawLine(p0, p1); } Gizmos.DrawLine(lastPos - lastW, p - w); Gizmos.DrawLine(lastPos + lastW, p + w); #if false // Show the normals, for debugging Gizmos.color = Color.red; Vector3 y = (q * Vector3.up) * path.Appearances.Width / 4; Gizmos.DrawLine(p, p + y); Gizmos.color = pathColor; #endif lastPos = p; lastW = w; currentStep++; } if (canDrawMax) { Gizmos.DrawLine(p0, p1); } Gizmos.color = colorOld; }
public Vector3 GetPositionFromPoint(int index) { return(_spline.EvaluatePositionAtUnit(GetWayPoint(index).PathPosition, _positionUnits)); }
public Vector3 PositionWithoutOffsetFromSpline(float offset) { return(SplineBase.EvaluatePositionAtUnit(offset, PositionUnits)); }