Welcome toVigges Developer Community-Open, Learning,Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
136 views
in Technique[技术] by (71.8m points)

c# - Get Length of Trail Renderer

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?


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

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();

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to Vigges Developer Community for programmer and developer-Open, Learning and Share
...