9 [UseWith(typeof(LineBase))]
12 const string DefaultLineShader =
"Particles/Alpha Blended";
13 const string DefaultLineShaderColor =
"_TintColor";
15 [Header(
"LineUnity Settings")]
16 [Tooltip(
"The material to use for the Unity LineRenderer (will be auto-generated if null)")]
19 public bool RoundedEdges =
true;
20 public bool RoundedCaps =
true;
25 private Vector3[] positions;
30 if (lineRenderer == null)
33 lineRenderer = gameObject.EnsureComponent<
UnityEngine.LineRenderer>();
36 if (LineMaterial == null)
38 LineMaterial =
new Material(Shader.Find(DefaultLineShader));
39 LineMaterial.SetColor(DefaultLineShaderColor, Color.white);
42 StartCoroutine(UpdateLineUnity());
45 private IEnumerator UpdateLineUnity()
47 while (isActiveAndEnabled)
51 lineRenderer.enabled =
false;
55 lineRenderer.enabled =
true;
60 lineRenderer.positionCount = source.NumPoints;
61 if (positions == null || positions.Length != source.NumPoints)
63 positions =
new Vector3[source.NumPoints];
65 for (
int i = 0; i < positions.Length; i++)
67 positions[i] = source.GetPoint(i);
72 lineRenderer.positionCount = NumLineSteps;
73 if (positions == null || positions.Length != NumLineSteps)
75 positions =
new Vector3[NumLineSteps];
77 for (
int i = 0; i < positions.Length; i++)
79 float normalizedDistance = (1f / (NumLineSteps - 1)) * i;
80 positions[i] = source.GetPoint(normalizedDistance);
86 lineRenderer.loop = source.Loops;
87 lineRenderer.numCapVertices = RoundedCaps ? 8 : 0;
88 lineRenderer.numCornerVertices = RoundedEdges ? 8 : 0;
89 lineRenderer.useWorldSpace =
true;
90 lineRenderer.startWidth = 1;
91 lineRenderer.endWidth = 1;
92 lineRenderer.startColor = Color.white;
93 lineRenderer.endColor = Color.white;
94 lineRenderer.sharedMaterial = LineMaterial;
95 lineRenderer.widthCurve = LineWidth;
96 lineRenderer.widthMultiplier = WidthMultiplier;
97 lineRenderer.colorGradient = LineColor;
98 lineRenderer.shadowCastingMode =
UnityEngine.Rendering.ShadowCastingMode.Off;
99 lineRenderer.lightProbeUsage =
UnityEngine.Rendering.LightProbeUsage.Off;
101 lineRenderer.positionCount = positions.Length;
102 lineRenderer.SetPositions(positions);
110 public class CustomEditor : MRTKEditor { }