/// <summary> /// https://docs.unity3d.com/ScriptReference/Physics.OverlapCapsuleNonAlloc.html /// </summary> /// <param name="chd"></param> /// <param name="point0"></param> /// <param name="point1"></param> /// <param name="radius"></param> /// <returns>True, if cast hits something</returns> public static bool OverlapCapsule (ColliderHitData chd, Vector3 point0, Vector3 point1, float radius) { CheckCHDInit(chd); for (; ;) { chd.numHits = Physics.OverlapCapsuleNonAlloc (point0, point1, radius, chd.collResults, chd.layerMask, chd.triggerInteraction); if (CheckCastResultsCHD(chd)) { break; } } return(chd.numHits > 0); }
/// <summary> /// https://docs.unity3d.com/ScriptReference/Physics.OverlapBoxNonAlloc.html /// </summary> /// <param name="chd"></param> /// <param name="center"></param> /// <param name="halfExtends"></param> /// <param name="orientation"></param> /// <returns>True, if cast hits something</returns> public static bool OverlapBox (ColliderHitData chd, Vector3 center, Vector3 halfExtends, Quaternion orientation) { CheckCHDInit(chd); for (; ;) { chd.numHits = Physics.OverlapBoxNonAlloc (center, halfExtends, chd.collResults, orientation, chd.layerMask, chd.triggerInteraction); if (CheckCastResultsCHD(chd)) { break; } } return(chd.numHits > 0); }
/// <summary> /// Check data for basic initialization /// </summary> /// <param name="chd"></param> static void CheckCHDInit(ColliderHitData chd) { if (chd.collResults == null || chd.collResults.Length == 0 || chd.collResults[0] == null) { chd.Init(chd.sizeAtInit); } }
/// <summary> /// Function will cannot be called with a null 'results' /// parameter to determine how many results are REALLY /// available. So, if the number of hits is exactly /// the length of the array I resize the array and /// call again to be sure. /// </summary> /// <param name="chd"></param> /// <returns>True if Cast needs to be called again</returns> static bool CheckCastResultsCHD(ColliderHitData chd) { if (chd.autoResize && chd.numHits == chd.collResults.Length) { System.Array.Resize <Collider>(ref chd.collResults, chd.collResults.Length * 2); return(false); } return(true); }