public void FixedUpdate() { var thisContains = false; foreach (var particle in manager.Around(Position, ScaledSize)) { Vector2 halfSize = ScaledSize / 2; Vector2 direction = particle.particleInfo.Position - Position; direction.x = Mathf.Abs(direction.x); direction.y = Mathf.Abs(direction.y); if (direction.x < halfSize.x && direction.y < halfSize.y) { OnCollision.Invoke(particle); thisContains = true; } } if (thisContains ^ lastContains) { if (thisContains) { OnContains.Invoke(); } else { OnContainsNot.Invoke(); } } lastContains = thisContains; }
void FixedUpdate() { foreach (var particle in manager.Around(Position, new Vector2(1, 1) * (Radius + manager.Param.Radius))) { if (Vector2.Distance(particle.particleInfo.Position, Position) <= Radius + manager.Param.Radius) { OnCollision.Invoke(particle); } } }