見出し画像

Unity 2Dにおける簡単に壁を認識して自動でジャンプさせるための準備

どうも、マカロンです。

本当に久しぶりの投稿になってしまいました。。。

以前書いた2Dゲームを題材にした記事が人気だったので、その第二弾として今回は壁を認識して自動でジャンプしてくれる機能つけていきたいと思います!

この記事にはTileMapに関する説明は含まれていません!

その内容につきましてはこちらの記事に
掲載していますのでご確認ください。


余談ですがこの機能は現在僕が開発中のガンアクションゲームのオトモにも同じ機能をつけています。

それではさっそく行きましょう!

まずはジャンプさせてみよう

画像1

まずはその場でジャンプさせてみましょう

ジャンプの処理は簡単で上向きに力を加えるだけです。

private Rigidbody2D rb; //rigidbodyを取得 
private bool jump = false; //ジャンプ中かどうか
private float flap = 1500.0f; //ジャンプ力

まずは準備としてこの3つ変数を用意します。

自身のRigidbody2Dを取得
ジャンプ中かの判定
1回のジャンプにかかる力

です。

次に好きなタイミングでジャンプできるようにキー入力でjumpフラグをオンにして、rb.AddForceで上方向へ力を加えます。
また一度の入力で複数回飛ばないようにInput.GetKeyではなくInput.GetKeyDownを使用しています。

また地面に着地するとjumpフラグをオフにします。

       //ジャンプの処理
       if (!jump && Input.GetKeyDown(KeyCode.Space))
       {
           jump = true;
           rb.AddForce(Vector2.up * flap);
       }
       else if (jump && rb.velocity == new Vector2(0.0f, 0.0f))
       {
           jump = false;
       }

これでジャンプするだけの処理は完了です。




移動の処理を追加

ジャンプが出来たので次は移動させてみましょう

       if (Input.GetKey(KeyCode.D))
       {
           transform.localScale = new Vector3(-2, 2, 1);//向きを移動方向に合わせる
           transform.Translate(0.05f, 0, 0);//移動
       }
       else if (Input.GetKey(KeyCode.A))
       {
           transform.localScale = new Vector3(2, 2, 1);//向きを移動方向に合わせる
           transform.Translate(-0.05f, 0, 0);//移動
       }

移動に関してもまずはキー入力で操作を確認します。
先ほどはInput.GetKeyDownを使用しましたが、今回は長押しで移動してほしいのでInput.GetKeyを使用します。

これでジャンプと移動が可能になったかと思います。




理想の動き

画像3

手動でジャンプと移動ができるようになったので次はいよいよ壁を認識して自動でジャンプしてくれる機能を実装していきたいと思います。

が、ここから先は有料記事とさせていただきます。

もし下記の記事を購入している方がおられましたら、処理としてはやっていることは同じなので合わせて確認していただいてから上記の記事を購入するか検討していただけたらと思います。




最後に

もう10月も終わりですね。

気温も寒くなってきたのでお互い体には気を付けていきましょう!

ではまた!!

ゲームを作るにはやはりお金がないとできることが限られてしまいます。なのでよろしければどうか支援してくださるとうれしいです