首页 > 解决方案 > 获取轨迹渲染器的长度

问题描述

如何获得在 Unity 中绘制的整个 Trail 渲染器的长度?对于线条渲染器,我们可以使用线条的第一个和第二个点来实现这一点,例如:

var length = (position2 - position1).magnitude;

但不幸的是,我找不到相同的轨迹渲染器,因为它使用多个点。那么我该如何实现呢?

标签: c#unity3d

解决方案


TrailRenderer.GetPositions您可以使用例如迭代所有点

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;
    }
}

这现在是一种扩展方法,因此您可以在项目中的任何地方简单地使用它,例如

var length = yourTrailRenderer.GetTrailLength();

推荐阅读