【Unity】マリオのような2Dゲームを作る〜ジャンプアクション編〜

【Unity】プレイヤー作成

前回はプレイヤーのジャンプアクションに必要な接地判定を作りました。
前回の記事はこちら⇨【Unity】マリオのような2Dゲームを作る〜接地判定編〜

ジャンプアクションを作ろう

 マリオといえばジャンプですよね、マリオのようにジャンプで敵を倒すことができるようにするため、
今回はジャンプアクションとアニメーションを作っていきます。

プレイヤーの重力を0にする

 プレイヤーを選択し、インスペクターのGravity Scaleを0にすることで重力を0にすることができます
この状態でプレイヤーを動かすと徐々にプレイヤーが上がっていくと思います。これでプレイヤーに重力が掛かっていないことが分かります。

しかしこのままでは無重力状態でゲームにはならないので、スクリプトで重力をコントロールし、ゲームに近づけていきます。

スクリプトで制御しよう

マーカーで引いてあるところが新しく追加したコードです!

public float speed;
public float jumpSpeed;//ジャンプ速度
public float gravity;//重力
public float jumpHeight;//ジャンプの高さ
public CheckGround ground;

private Animator anim = null;
private Rigidbody2D rb = null;
private bool isGround = false;
private bool isJump = false;
private float jumpPos = 0.0f;

// Start is called before the first frame update
void Start()
{
    anim = GetComponent<Animator>();
    rb = GetComponent<Rigidbody2D>();
}

// Update is called once per frame
void Update()
{
    isGround = ground.IsGround();

    float ySpeed = -gravity;
    float xSpeed = 0.0f;
    float horizotalKey = Input.GetAxis("Horizontal");
    float verticalKey = Input.GetAxis("Vertical");

    if (isGround)
    {
        if (verticalKey > 0)
        {
            ySpeed = jumpSpeed;
            jumpPos = transform.position.y;
            isJump = true;
        }
        else
        {
            isJump = false;
        }
    }else if (isJump)
    {
        if (verticalKey > 0 && jumpPos + jumpHeight > transform.position.y)
        {
            ySpeed = jumpSpeed;
        }
        else
        {
            isJump = false;
        }
    }

    if (horizotalKey > 0)
    {
        transform.localScale = new Vector3(1, 1, 1);
        anim.SetBool("run", true);
        xSpeed = speed;
    }
    else if (horizotalKey < 0)
    {
        transform.localScale = new Vector3(-1, 1, 1);
        anim.SetBool("run", true);
        xSpeed = -speed;
    }
    else
    {
        anim.SetBool("run", false);
        xSpeed = 0.0f;
    }
    rb.velocity = new Vector2(xSpeed, ySpeed);
}

実際に動かしてみる

ジャンプができるようになったんですけど、ステージに頭がぶつかると無限にジャンプができてしまいます。
これは指定したジャンプの高さに到達していないため、到達するまではジャンプできてしまうのです。
これを改善するために次回は、頭上の判定を作り無限ジャンプを防ぎます!!

次回の記事はこちら⇨マリオのような2Dゲームを作る〜頭上判定編〜

コメント

タイトルとURLをコピーしました