You can iterate through all points using TrailRenderer.GetPositions
like e.g.
public static class TrailRendererExtensions
{
public static float GetTrailLength(this TrailRenderer trailRenderer)
{
// You store the count since the created array might be bigger than the actual pointCount
// Note: apparently the API is wrong?! There it says starting from version 2018.1 the parameter is "out"
// if you get an error for the "out" anyway or if you use older versions instead use
//var points = new Vector3[trailRenderer.positionCount];
//var count = trailRenderer.GetPositions(points);
var count = trailRenderer.GetPositions(out var points);
// If there are not at least 2 points .. well there is nothing to measure
if(count < 2) return 0f;
var length = 0f;
// Store the first position
var start = points[0];
// Iterate through the rest of positions
for(var i = 1; i < count; i++)
{
// get the current position
var end = points[i];
// Add the distance to the last position
// basically the same as writing
//length += (end - start).magnitude;
length += Vector3.Distance(start, end);
// update the start position for the next iteration
start = end;
}
return length;
}
}
this is now an extension method so you can simply use it anywhere in your project like
var length = yourTrailRenderer.GetTrailLength();
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…