ありていに言っちゃうと、ファミコンのがんばれゴエモンみたいな見下ろし型のマップ上でジャンプをさせたいということです。
ジャンプの挙動はRigidBody2Dに任せるとして、着地判定を「元居た場所のY軸より下に行ったとき」と定めることでいい感じになりました。
// ジャンプの挙動のみ抜粋
public class CharacterController : MonoBehaviour
{
private bool jump = false;
private float jumpBasePos = 0;
void Start()
{
}
void Update() {
// ジャンプボタンの挙動(ジャンプ中は無視)
if (Input.GetKeyDown(KeyCode.Space) && !jump)
{
// キャラクターに重力を持たせる
GetComponent().gravityScale = 1;
// キャラクターを上にはね上げる
GetComponent().AddForce(transform.up * 250f);
// ジャンプ中扱いにする
jump = true;
// 落下地点のY軸を設定
jumpBasePos = transform.position.y;
}
// ジャンプ中の挙動
if (jump)
{
// 自キャラのY軸が落下地点のY軸を超えて、かつ下方向に進んでいるとき(ジャンプした後の自由落下状態の時)は重力をなくす
if (transform.position.y <= jumpBasePos && GetComponent().velocity.y < -0.5f)
{
// ジャンプ中扱いを解除
jump = false;
// ジャンプ状態時に設定した重力のかかりをカット
GetComponent().gravityScale = 0;
// 現在の進行方向を完全にリセットする
GetComponent().velocity = new Vector2();
}
}
}
}