6 using System.Collections.Generic;
17 private Stack<Line> Lines =
new Stack<Line>();
19 private Point lastPoint;
21 private const float defaultLineScale = 0.005f;
24 public void AddPoint(GameObject LinePrefab, GameObject PointPrefab, GameObject TextPrefab)
29 GameObject point = (GameObject)Instantiate(PointPrefab, hitPoint, Quaternion.identity);
30 if (lastPoint != null && lastPoint.IsStart)
32 Vector3 centerPos = (lastPoint.Position + hitPoint) * 0.5f;
34 Vector3 directionFromCamera = centerPos - cameraPosition;
36 float distanceA = Vector3.Distance(lastPoint.Position, cameraPosition);
37 float distanceB = Vector3.Distance(hitPoint, cameraPosition);
39 Debug.Log(
"A: " + distanceA +
",B: " + distanceB);
41 if (distanceB > distanceA || (distanceA > distanceB && distanceA - distanceB < 0.1))
43 direction = hitPoint - lastPoint.Position;
47 direction = lastPoint.Position - hitPoint;
50 float distance = Vector3.Distance(lastPoint.Position, hitPoint);
51 GameObject line = (GameObject)Instantiate(LinePrefab, centerPos, Quaternion.LookRotation(direction));
52 line.transform.localScale =
new Vector3(distance, defaultLineScale, defaultLineScale);
53 line.transform.Rotate(Vector3.down, 90f);
55 Vector3 normalV = Vector3.Cross(direction, directionFromCamera);
56 Vector3 normalF = Vector3.Cross(direction, normalV) * -1;
57 GameObject tip = (GameObject)Instantiate(TextPrefab, centerPos, Quaternion.LookRotation(normalF));
60 tip.transform.Translate(Vector3.up * 0.05f);
61 tip.GetComponent<TextMesh>().text = distance +
"m";
63 GameObject root =
new GameObject();
64 lastPoint.Root.transform.parent = root.transform;
65 line.transform.parent = root.transform;
66 point.transform.parent = root.transform;
67 tip.transform.parent = root.transform;
71 Start = lastPoint.Position,
100 if (Lines != null && Lines.Count > 0)
102 Line lastLine = Lines.Pop();
103 Destroy(lastLine.
Root);
111 if (Lines != null && Lines.Count > 0)
113 while (Lines.Count > 0)
115 Line lastLine = Lines.Pop();
116 Destroy(lastLine.
Root);
124 if (lastPoint != null && lastPoint.IsStart)
126 Destroy(lastPoint.Root);
135 public Vector3 Start {
get;
set; }
137 public Vector3 End {
get;
set; }
139 public GameObject Root {
get;
set; }
141 public float Distance {
get;
set; }