@@ -47,6 +47,8 @@ public override bool OnCheckObserver(uint newClientId)
4747 return ( pos - transform . position ) . magnitude < Range ;
4848 }
4949
50+ private Collider [ ] colliders = new Collider [ 32 ] ;
51+ private Collider2D [ ] colliders2d = new Collider2D [ 32 ] ;
5052 public override bool OnRebuildObservers ( HashSet < uint > observers )
5153 {
5254 if ( ForceHidden )
@@ -61,21 +63,35 @@ public override bool OnRebuildObservers(HashSet<uint> observers)
6163 {
6264 case CheckMethod . Physics3D :
6365 {
64- var hits = Physics . OverlapSphere ( transform . position , Range ) ;
65- for ( int i = 0 ; i < hits . Length ; i ++ )
66+ int hits = Physics . OverlapSphereNonAlloc ( transform . position , Range , colliders ) ;
67+ //We check if it's equal to since the OverlapSphereNonAlloc only returns what it actually wrote, not what it found.
68+ if ( hits >= colliders . Length )
6669 {
67- var uv = hits [ i ] . GetComponent < NetworkedObject > ( ) ;
70+ //Resize colliders array
71+ colliders = new Collider [ ( int ) ( ( hits + 2 ) * 1.3f ) ] ;
72+ hits = Physics . OverlapSphereNonAlloc ( transform . position , Range , colliders ) ;
73+ }
74+ for ( int i = 0 ; i < hits ; i ++ )
75+ {
76+ var uv = colliders [ i ] . GetComponent < NetworkedObject > ( ) ;
6877 if ( uv != null && uv . isPlayerObject )
6978 observers . Add ( uv . OwnerClientId ) ;
7079 }
7180 return true ;
7281 }
7382 case CheckMethod . Physics2D :
7483 {
75- var hits = Physics2D . OverlapCircleAll ( transform . position , Range ) ;
76- for ( int i = 0 ; i < hits . Length ; i ++ )
84+ int hits = Physics2D . OverlapCircleNonAlloc ( transform . position , Range , colliders2d ) ;
85+ //We check if it's equal to since the OverlapSphereNonAlloc only returns what it actually wrote, not what it found.
86+ if ( hits >= colliders . Length )
87+ {
88+ //Resize colliders array
89+ colliders2d = new Collider2D [ ( int ) ( ( hits + 2 ) * 1.3f ) ] ;
90+ hits = Physics2D . OverlapCircleNonAlloc ( transform . position , Range , colliders2d ) ;
91+ }
92+ for ( int i = 0 ; i < hits ; i ++ )
7793 {
78- var uv = hits [ i ] . GetComponent < NetworkedObject > ( ) ;
94+ var uv = colliders2d [ i ] . GetComponent < NetworkedObject > ( ) ;
7995 if ( uv != null && ( uv . isPlayerObject ) )
8096 observers . Add ( uv . OwnerClientId ) ;
8197 }
0 commit comments