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.