Basically, your **normal** is the line that is **perpendicular to the tangent** of the line/curve/face you’re calculating it for. Because this 3D, a **1D curve can have a normal in 2 dimensions**, as in these 2 dimensions you can have a line that is 90º to the tangent. (I’m not sure of the accuracy of this, as it is sort of a conclusion I drew up myself from the logic but: the reason the normal of faces and straight lines is at 90º to itself is because the tangent lies in the same plane?)

In my diagram above, using the linear interpolation model would give a very “blocky” curve which is parallel to the edges, but is a necessary sacrifice for efficiency (if it is made to work, a more complex interpolation model such as polynomial or spline could then be used, but these would add much more logic overhead and would give very little benefit)

If you get a point on the curve, you can use your interpolation model to find the distance to another point on the curve.

In terms of code, this would require a **list of all opposite vertex points** (the green points in my last diagram) for simplicity - in an array of 2 elements, then all of these in another array. You then generate a list of average points, as a precomputed list. Then put this** array of average points** into the script (They’d need to be in order for simplicity, as in the starting line will be the 0 element, and the finsh should be the final).

You would then (I have a vague idea how) **find the point on the curve directly relating to the objects position** (using the plane of the normal was a preliminary idea, but I am considering replacing this with some vector maths for efficiency). Then, you** interpolate from your point**, to the next average point in the array. and **from then to the finish to find the distance**, then you could assign this value to a property on the object, and then send a message containing this value to the HUD element that gives out positions.

I’ll look into making a demo of it for you.