繁体   English   中英

如何在Unity3D中在地面上绘制一组点?

[英]How to plot a set of points on the ground in Unity3D?

我必须在Unity3D项目中在地面上绘制一组点。 点的2D图类似于此: 情节 [1]。

蛮力方法是将gameObjects分配给每个点,但是由于有成千上万的点,因此代价很高。 我正在寻找Unity粒子系统的某些可能用法以实现我的目标。 实际上,任何可能的方法都可以。

我的最终目标是突出地面上的那些点,以指示玩家遵循的路径。

任何建议,将不胜感激。

看一下Unity的LineRenderer组件。 它接受用于绘制线的Vector3数组。 您可以从检查器分配点,或使用代码一次或逐点分配整个阵列。

private LineRenderer lineRenderer;

public void AddPosition(Vector3 position)
{
    lineRenderer.positionCount += 1;
    lineRenderer.SetPosition(lineRenderer.positionCount - 1, position);
}

public void SetPositions(Vector3[] positionArray)
{
    lineRenderer.SetPositions(positionArray);
}

使用线性渲染器,您可以设置各种属性,例如颜色和宽度。 您也可以轻松禁用和启用整个对象。

您可能还考虑过滤点。 人类不需要而且常常不能使用机器可以产生的精度。 过滤器示例:

const float MinDistanceSqr = 0.00001f; // Min Distance of 0.001 (1mm)
const float MaxCosine = 0.999f; // Approx 2.57 degrees

private Vector3[] FilterPoints(Vector3[] source) {

    var filtered = new Stack<Vector3>(source.Length);

    // Push first point
    filtered.Push(source[0]);

    for ( var i = 1; i < source.Length; i++ ) {
        var step = filtered.Peek() - source[i];

        // Check Minimum Distance
        if (step.sqrMagnitude < MinDistanceSqr)
            continue; // ignore this point

        // if not last point
        if ( i + 1 < source.Length) {
            // Check Minimum Angle to next segment
            var nextStep = source[i] - source[i + 1];

            if (Vector3.Dot(step, nextStep) > MaxCosine)
                continue; // ignore this point
        }

        // Passed all filters, add to stack
        filtered.Push(source[i]);
    }


    return filtered.ToArray();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM