Quick answer: BoxCollider2D with Used by Effector + Is Trigger. BuoyancyEffector2D Surface Level matches collider top. Density > 1. Floating bodies: Use Auto Mass off, mass set explicitly.
Drop a coin into your water. Sinks. The effector exists but its surface level is at world zero, not the actual water surface.
The Symptom
Rigidbodies fall through water effector untouched, or oscillate violently around an arbitrary height.
The Fix
Water GameObject:
BoxCollider2D:
Is Trigger: true
Used By Effector: true
Size: (10, 4) // pool dimensions
BuoyancyEffector2D:
Surface Level: 2.0 // top of pool in world-Y
Density: 2 // 1 = neutral; >1 = lifts
Linear Drag: 2
Angular Drag: 1
Floating Rigidbody2D:
Use Auto Mass: false
Mass: 1
Gravity Scale: 1
Density > 1 lifts mass-1 body. Linear drag damps the bob. Surface Level dictates where buoyancy stops applying upward force.
Verifying
Drop bodies of varying mass: heavy ones partially submerge, light ones bob at surface, all damped to rest.
“Surface at top. Density > 1. Auto mass off. Bodies float.”
Related Issues
For Rigidbody2D mass tipping, see mass tipping. For Cinemachine impulse, see impulse.
Surface up. Density up. Bodies float.