Problem with mathf.clamp on rigid body without gravity

I have a rigid body game object (boat) with gravity turned off. When the object collides, it shoots off into space. I wanted to use mathf.clamp to create a ceiling where the boat will not leave the water on collision . So far I’ve been unsuccessful making this happen referring to the C# documentation. Does anyone have a sample code snippet showing how this may be done. Thanks.

If you need instantly stop moving boat upside after collision you can check positive velocity on y axis and make it zero instantly or slow down to zero by some time passed with coroutine:

  1. Instant zero:

    void FixedUpdate()
    {
    if (rigidbody.velocity.y > 0)
    rigidbody.velocity.y = 0
    }

  2. Gradual lowering to zero:

    bool slow_down_in_progress;
    float speed;
    void FixedUpdate()
    {
    if (rigidbody.velocity.y > 0 && !slow_down_in_progress)
    {
    slow_down_in_progress = true;
    StartCoroutine(Slow_Down_Upward())
    }

    IEnumerator Slow_Down_Upward()
    {
    while (rigidbody.velocity.y > 0)
    {
    Mathf.Clamp(rigidbody.velocity.y -= Time.deltaTime * speed, 0, rigidbody.velocity.y);
    yield return new WaitForFixedUpdate;
    }
    slow_down_in_progress = false;
    }
    }