There's a physics based example out there that works pretty well, you can probably find it if you search for it.
If you study vampire survivors closely though, you'll realize that enemies actually do overlap. They just decollide, or push each other out, every few seconds. You can use multiple bullet behaviors to do this. One to head towards the player (slow, steady), and another one that moves away from whatever it is overlapping (fast, with high deceleration). This approach is much less resource intensive than physics, but generally speaking devices are powerful enough to handle the physics method just fine anyways.