From ef85079c64d937ec5975f5b0b3c886774b01a285 Mon Sep 17 00:00:00 2001 From: BlackMATov Date: Wed, 30 Nov 2016 01:29:27 +0700 Subject: [PATCH] fix big number raycast hit cout --- Assets/IsoTools/Addons/Physics/IsoPhysics.cs | 34 +++++++++++++------- 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/Assets/IsoTools/Addons/Physics/IsoPhysics.cs b/Assets/IsoTools/Addons/Physics/IsoPhysics.cs index d0d769b..6e7de8a 100644 --- a/Assets/IsoTools/Addons/Physics/IsoPhysics.cs +++ b/Assets/IsoTools/Addons/Physics/IsoPhysics.cs @@ -52,11 +52,17 @@ namespace IsoTools.Physics { int layer_mask = UnityEngine.Physics.DefaultRaycastLayers, QueryTriggerInteraction query_trigger_interaction = QueryTriggerInteraction.UseGlobal) { - var hit_count = UnityEngine.Physics.RaycastNonAlloc(ray, _raycastNonAllocBuffer, - max_distance, - layer_mask, - query_trigger_interaction); - return RaycastBufferToIsoRaycastHits(hit_count, results); + do { + var hit_count = UnityEngine.Physics.RaycastNonAlloc(ray, _raycastNonAllocBuffer, + max_distance, + layer_mask, + query_trigger_interaction); + if ( hit_count >= results.Length || hit_count < _raycastNonAllocBuffer.Length ) { + return RaycastBufferToIsoRaycastHits(hit_count, results); + } else { + _raycastNonAllocBuffer = new RaycastHit[_raycastNonAllocBuffer.Length * 2]; + } + } while ( true ); } // @@ -247,12 +253,18 @@ namespace IsoTools.Physics { int layer_mask = UnityEngine.Physics.AllLayers, QueryTriggerInteraction query_trigger_interaction = QueryTriggerInteraction.UseGlobal) { - var collider_count = UnityEngine.Physics.OverlapBoxNonAlloc( - center, half_extents, _overlapNonAllocBuffer, - Quaternion.identity, - layer_mask, - query_trigger_interaction); - return OverlapBufferToIsoColliders(collider_count, results); + do { + var collider_count = UnityEngine.Physics.OverlapBoxNonAlloc( + center, half_extents, _overlapNonAllocBuffer, + Quaternion.identity, + layer_mask, + query_trigger_interaction); + if ( collider_count >= results.Length || collider_count < _overlapNonAllocBuffer.Length ) { + return OverlapBufferToIsoColliders(collider_count, results); + } else { + _overlapNonAllocBuffer = new Collider[_overlapNonAllocBuffer.Length * 2]; + } + } while ( true ); } //