首页 > 解决方案 > 我怎样才能在运行时画线,而不仅仅是在场景中作为小玩意儿?

问题描述

在顶部我添加了:

public LineRenderer LineRenderer;

在开始:

void Start()
{
  DrawTraffic();
}

这是小玩意儿方法:

void OnDrawGizmos()
    {
        for (int k0 = 0; k0 < transform.childCount; k0++)
        {
            Vector3 Pos = transform.GetChild(k0).transform.localPosition;
            Gizmos.color = Color.green;
            Gizmos.DrawWireSphere(Pos, MaxStartScatter);
            Gizmos.DrawLine(transform.GetChild(k0).position, transform.GetChild(k0).position + transform.GetChild(k0).transform.TransformVector(Vector3.forward) * 300);
            Gizmos.color = Color.yellow;
            for (int k1 = 0; k1 < 10; k1++)
            {
                Gizmos.DrawWireSphere(Pos += transform.GetChild(k0).transform.TransformVector(Vector3.forward) * 30, MaxStartScatter);
            }
        }
    }

这是我想在运行时显示的 DrawTraffic:

private void DrawTraffic()
    {
        // set the color of the line
        LineRenderer.startColor = Color.red;
        LineRenderer.endColor = Color.red;

        // set width of the renderer
        LineRenderer.startWidth = 0.3f;
        LineRenderer.endWidth = 0.3f;

        for (int k0 = 0; k0 < transform.childCount; k0++)
        {
            Vector3 Pos = transform.GetChild(k0).transform.localPosition;

            LineRenderer.SetPosition(0, Pos);

           
        }
    }

但我不确定在 DRawTraffic 方法中下一步该做什么。如何像在小玩意中一样在所有位置之间画线?

我现在尝试了这个,但在线上出现了出站异常:

LineRenderer.SetPosition(2, transform.GetChild(k0).position + transform.GetChild(k0).transform.TransformVector(Vector3.forward) * 300);

这是我尝试过的:

private void DrawTraffic()
    {
        // set the color of the line
        LineRenderer.startColor = Color.red;
        LineRenderer.endColor = Color.red;

        // set width of the renderer
        LineRenderer.startWidth = 0.3f;
        LineRenderer.endWidth = 0.3f;

        for (int k0 = 0; k0 < transform.childCount; k0++)
        {
            Vector3 Pos = transform.GetChild(k0).transform.localPosition;

            LineRenderer.SetPosition(0, Pos);
            LineRenderer.SetPosition(1, transform.GetChild(k0).position);
            LineRenderer.SetPosition(2, transform.GetChild(k0).position + transform.GetChild(k0).transform.TransformVector(Vector3.forward) * 300);
        }
    }

标签: c#unity3d

解决方案


您必须在调用之前设置 to 的值LineRenderer.positionCounttransform.childCount 或您想要绘制的任何点数)LineRenderer.SetPosition,这很可能是您得到越界异常的原因。

参考中有一个例子:https ://docs.unity3d.com/ScriptReference/LineRenderer-positionCount.html


推荐阅读