private void SetDirection(Vector3 dir) { //Vector3 dir = ChartCommon.FromPolar(angle, Length); float sign = Mathf.Sign(dir.x); Vector3 dirAdd = new Vector3(1f, 0f, 0f) * sign * Length; Vector3 gapAdd = new Vector3(1f, 0f, 0f) * sign * Gap; if (LineMaterial != null) { List <CanvasLines.LineSegement> segments = new List <CanvasLines.LineSegement>(); segments.Add(new CanvasLines.LineSegement(new Vector3[] { Vector3.zero, dir, dir + dirAdd })); Lines.Thickness = Thickness; Lines.Tiling = 1f; Lines.material = LineMaterial; Lines.SetLines(segments); } if (PointMaterial != null) { List <CanvasLines.LineSegement> segments = new List <CanvasLines.LineSegement>(); segments.Add(new CanvasLines.LineSegement(new Vector3[] { Vector3.zero })); Point.MakePointRender(PointSize); Point.material = PointMaterial; Point.SetLines(segments); } Vector2 anchor = new Vector2(0.5f, 0.5f); Vector2 pivot = new Vector2((sign > 0f) ? 0f : 1f, 0.5f); var rect = Text.GetComponent <RectTransform>(); if (rect != null) { rect.anchorMin = anchor; rect.anchorMax = anchor; rect.pivot = pivot; var t = Text.GetComponent <Text>(); if (t != null) { t.alignment = (sign > 0f) ? TextAnchor.MiddleLeft : TextAnchor.MiddleRight; } else { ChartCommon.DoTextSign(Text, sign); } rect.anchoredPosition = dir + dirAdd + gapAdd; } else { Debug.LogWarning("Direction text must contain a rect transform"); } }