public static Vector3 GetOrthogonalVector(Vector3 vCenter, Vector3 vPoint) { Vector3 ortho = vCenter - vPoint; double magnitude = VectorUtilities.GetDistance(vCenter, vPoint); #if DEBUG DebugUtilities.Log("Original ortho vector: " + ortho); #endif return(ortho / (float)magnitude); }
public static Vector3[] GetRectanglePoints(Vector3 playerPos, Vector3[] bCorners, Bounds bound) { #if DEBUG DebugUtilities.Log("Player position:" + playerPos); #endif Vector3 oVector = GetOrthogonalVector(bound.center, playerPos); #if DEBUG DebugUtilities.Log("Ortho vector: " + oVector); DebugUtilities.Log("Plane center:" + bound.center); #endif List <Vector3> fVectors = new List <Vector3>(); Vector3[] Vertices = new Vector3[24] { bCorners[0], //front top left to front right bCorners[1], bCorners[1], //front top right to front bottom right bCorners[3], bCorners[3], //front bottom right to front bottom left bCorners[2], bCorners[2], //front bottom left to front top left bCorners[0], bCorners[4], //back top left to back top right bCorners[5], bCorners[5], //back top right to back bottom right bCorners[7], bCorners[7], //back bottom right to back bottom left bCorners[6], bCorners[6], //front top left to back top left bCorners[4], bCorners[0], //front top right to back top right bCorners[4], bCorners[1], //front bottom left to back bottom left bCorners[5], bCorners[2], //front bottom left to back bottom left bCorners[6], bCorners[3], //front bottom right to back bottom right bCorners[7] }; for (int i = 0; i < 24; i += 2) { Vector3 p0 = Vertices[i]; Vector3 p1 = Vertices[i + 1]; if (Intersect(p0, p1, oVector, bound.center, out Vector3 iPos)) { fVectors.Add(iPos); //returns vector to intercept between plane defined by oVector and bCenter, and line defined by p0 and p1. Returns false if not exist } } Bounds nBound = new Bounds(bound.center, bound.size * 1.2f); for (int i = fVectors.Count - 1; i > -1; i--) { if (!nBound.Contains(fVectors[i])) { fVectors.RemoveAt(i); } } return(fVectors.ToArray()); }