Question by
SpaceHeroGuide · Mar 16, 2018 at 01:01 PM ·
2dlinerenderer
LineRenderer in 2D not reusing positions
Hello,
I'm pretty new to Unity so maybe it's a very simple bug but I don't get it.
I wrote a script that shall draw two triangles. The positions of the nodes depend on a changeable pitch value. So far this works and gives me the correct output:
However if I'm in game mode and change the pitch value in the inspector, the line renderer does not reuse the positions but draws the triangles multiple times: I expected only the shallower triangles to be displayed. In the edit mode the gizmo only displays the shallower triangles.
I wrote this script:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
class IndicatorNodes {
public Vector3 start;
public Vector3 right1;
public Vector3 right2;
public Vector3 left1;
public Vector3 left2;
public IndicatorNodes(Vector3 s, Vector3 r1, Vector3 r2, Vector3 l1, Vector3 l2) {
start = s;
right1 = r1;
right2 = r2;
left1 = l1;
left2 = l2;
}
}
[RequireComponent(typeof(LineRenderer))]
public class DrawIndicator : MonoBehaviour {
[Range(0, 10)]
public float width = 2.0f;
[Range(0, 10)]
public float legWidth = 0.75f;
[Range(0, 10)]
public float lineWidth = 0.05f;
[Range(-90, 90)]
public float pitch = 2.0f;
private LineRenderer lr;
void Start () {
lr = GetComponent<LineRenderer> ();
lr.useWorldSpace = false;
}
void Update () {
IndicatorNodes n = getNodes ();
lr.widthMultiplier = lineWidth;
lr.positionCount = 7;
lr.SetPosition (0, n.start);
lr.SetPosition (1, n.left1);
lr.SetPosition (2, n.left2);
lr.SetPosition (3, n.start);
lr.SetPosition (4, n.right1);
lr.SetPosition (5, n.right2);
lr.SetPosition (6, n.start);
}
private IndicatorNodes getNodes() {
// TODO: Use scales unitsPerDegree value to factorize pitch correctly.
float factoredPitch = pitch * 0.5f;
return new IndicatorNodes (
new Vector3 (0.0f, factoredPitch, 0.0f),
new Vector3 (width, 0.0f, 0.0f),
new Vector3 (width - legWidth, 0.0f, 0.0f),
new Vector3 (-width, 0.0f, 0.0f),
new Vector3 (-width + legWidth, 0.0f, 0.0f)
);
}
#if UNITY_EDITOR
void OnDrawGizmos() {
IndicatorNodes n = getNodes ();
Gizmos.DrawLine (n.start, n.right1);
Gizmos.DrawLine (n.right1, n.right2);
Gizmos.DrawLine (n.right2, n.start);
Gizmos.DrawLine (n.start, n.left1);
Gizmos.DrawLine (n.left1, n.left2);
Gizmos.DrawLine (n.left2, n.start);
}
#endif
}
Can anyone explain to me why the line renderer does not remove the previous lines? Thank you.
screen-shot-2018-03-16-at-135322.png
(14.1 kB)
screen-shot-2018-03-16-at-134515.png
(14.8 kB)
Comment