/// <summary> /// Creates a raycast /// </summary> /// <param name="origin">the origin of the raycast</param> /// <param name="direction">the direction of the raycast</param> /// <param name="hit">returns the hit data</param> /// <param name="distance">max distance</param> /// <param name="mask">layerMask</param> /// <returns>did we hit something?</returns> public static bool Raycast(Vector3 origin, Vector3 direction, out UCPhysicsHit hit, float distance, int mask) { UCPhysicsHitsArray hits = RaycastAll(origin, direction, distance, mask, 0); hit = new UCPhysicsHit(); if (hits.Count <= 0) { return(false); } hits.Sort(); hit = hits[0]; return(true); }
/// <summary> /// Create a raycast /// </summary> /// <param name="origin">The origin of the raycast</param> /// <param name="direction">The direction of the raycast</param> /// <param name="distance">max distance</param> /// <param name="mask">mask</param> /// <param name="offset">raycast offset</param> /// <returns>The hits value</returns> public static UCPhysicsHitsArray RaycastAll(Vector3 origin, Vector3 direction, float distance, int mask, float offset) { UCPhysicsHit hit; hits = new UCPhysicsHitsArray(); ray = new Ray(origin, direction); for (int i = 0; i < physicsObjects.Count; i++) { currentPObject = physicsObjects[i]; if (Vector3.Distance(origin, currentPObject.transform.position) <= distance) { if (currentPObject.Raycast(ray, out hit, mask)) { if (hit.distance <= distance && hit.distance >= offset) { hits.AddToList(hit); } } } } if (UnityEngine.Physics.Raycast(origin, direction, out rayHit, distance)) { if (rayHit.transform.GetComponent <UCPhysicsObject>() != null) { hit = new UCPhysicsHit(); hit.Convert(rayHit); hits.AddToList(hit); } } return(hits); }