12 public RayStep(Vector3 origin, Vector3 terminus) : this()
16 Length = Vector3.Distance(origin, terminus);
17 Direction = (Terminus -
Origin).normalized;
20 public Vector3
Origin {
get;
private set; }
21 public Vector3 Terminus {
get;
private set; }
22 public Vector3 Direction {
get;
private set; }
23 public float Length {
get;
private set; }
27 return Vector3.MoveTowards(
Origin, Terminus, distance);
34 Length = Vector3.Distance(origin, terminus);
35 Direction = (Terminus -
Origin).normalized;
38 public void CopyRay(Ray ray,
float rayLength)
42 Direction = ray.direction;
43 Terminus =
Origin + (Direction * Length);
46 public static implicit
operator Ray(
RayStep r)
51 #region static utility functions 61 Debug.Assert(steps != null);
64 Vector3 point = Vector3.zero;
65 float remainingDistance = distance;
67 for (
int i = 0; i < steps.
Length; i++)
69 if (remainingDistance > steps[i].Length)
71 remainingDistance -= steps[i].
Length;
75 point = Vector3.Lerp(steps[i].
Origin, steps[i].Terminus, remainingDistance / steps[i].Length);
76 remainingDistance = 0;
81 if (remainingDistance > 0)
98 Debug.Assert(steps != null);
102 float remainingDistance = distance;
104 for (
int i = 0; i < steps.
Length; i++)
106 if (remainingDistance > steps[i].Length)
108 remainingDistance -= steps[i].
Length;
113 remainingDistance = 0;
118 if (remainingDistance > 0)
121 step = steps[steps.
Length - 1];
135 Debug.Assert(steps != null);
138 return GetStepByDistance(steps, distance).Direction;