问题
How do I get the length of the whole Trail renderer that is drawn in Unity? For line renderer, we can achieve this using the 1st and 2nd points of the line such as:
var length = (position2 - position1).magnitude;
But unfortunately I could not find the same for trail renderer since it uses multiple points. So how do I achieve this?
回答1:
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();
来源:https://stackoverflow.com/questions/65681053/get-length-of-trail-renderer