Get Distance at Location Along Spline

Here’s the same thing (more or less) in C++ with a consideration for having the location at the end point.


UFUNCTION(BlueprintCallable, BlueprintPure, Category = "Spline")
static float UUtilities::FindDistanceAlongSplineClosestToLocation(const USplineComponent* Spline, const FVector& Location)
{
    float InputKey = Spline->FindInputKeyClosestToWorldLocation(Location);
    int32 SplinePoint = FMath::TruncToInt(InputKey);
    float SplinePointDistance = Spline->GetDistanceAlongSplineAtSplinePoint(SplinePoint);
    if (SplinePoint < Spline->GetNumberOfSplinePoints())
    {
        float NextPointDistance = Spline->GetDistanceAlongSplineAtSplinePoint(SplinePoint + 1);
        return FMath::Lerp(SplinePointDistance, NextPointDistance,  InputKey - SplinePoint);
    }
    else
    {
        float PrevPointDistance = Spline->GetDistanceAlongSplineAtSplinePoint(SplinePoint - 1);
        return FMath::Lerp(PrevPointDistance, SplinePointDistance, SplinePoint - InputKey);
    }
}

2 Likes