@@ -47,6 +47,8 @@ public override bool OnCheckObserver(uint newClientId)
47
47
return ( pos - transform . position ) . magnitude < Range ;
48
48
}
49
49
50
+ private Collider [ ] colliders = new Collider [ 32 ] ;
51
+ private Collider2D [ ] colliders2d = new Collider2D [ 32 ] ;
50
52
public override bool OnRebuildObservers ( HashSet < uint > observers )
51
53
{
52
54
if ( ForceHidden )
@@ -61,21 +63,35 @@ public override bool OnRebuildObservers(HashSet<uint> observers)
61
63
{
62
64
case CheckMethod . Physics3D :
63
65
{
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 )
66
69
{
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 > ( ) ;
68
77
if ( uv != null && uv . isPlayerObject )
69
78
observers . Add ( uv . OwnerClientId ) ;
70
79
}
71
80
return true ;
72
81
}
73
82
case CheckMethod . Physics2D :
74
83
{
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 ++ )
77
93
{
78
- var uv = hits [ i ] . GetComponent < NetworkedObject > ( ) ;
94
+ var uv = colliders2d [ i ] . GetComponent < NetworkedObject > ( ) ;
79
95
if ( uv != null && ( uv . isPlayerObject ) )
80
96
observers . Add ( uv . OwnerClientId ) ;
81
97
}
0 commit comments