Thanks, I appreciate it!
Yeah I only did a little bit of performance optimization, so it definitely starts to slow down after 50 fish or so are on screen. Each fish has several raycasts and areas to update every physics frame, so it starts to become a lot of processing. I've seen some people divide the area up into tiles to help reduce the number of nodes being compared at a time, but I didn't bother doing anything that elaborate.