すいません、ジャンプについて質問です。

下記のコードをWebで見つけて、ジャンプさせることはできたのですが

if (controller.isGrounded) {
moveDirection.y = 0;
}

if (Input.GetButtonDown ("Jump")) {
moveDirection.y = jumpSpeed;
}

controller.Move (transform.TransformDirection (moveDirection) * Time.deltaTime);

あまりに簡潔なコードすぎてなんでこれだけで、ジャンプ→落下、となるのかがよくわかりません。

降りてくるのはCharacterContorollerが重力が適用されてるんでしょう、
また昇るのもボタンを押した時に値を変更してるのでそれが理由なのもわかります、
でも、「頂点から落下」へのトリガーがどこにあるのかわからないので、
「頂点まできたら落下中アニメーションに変更」という処理を加えられないんですよね。

デバッグで値を見ても、各処理のリファレンスを見ても結局は「何でちゃんとジャンプできてるのか」が理解できないので、
応用できなくて困ってます

どなたか簡単に解説していただけないでしょうか