忍者ブログ
とりあえずオキュラス発売までにunityであれこれ作れるようになることを目標として日記とする所存。その他には大学で学んだこと、勉強会でのあれこれなど。

Unityで2D横スクロールゲー作る_Part3

前回左右に動けるようになったということで、今回はジャンプさせていきます。

ジャンプさせる


 
とりあえず何も考えずスクリプトを書きます。
この状態で動作させるとジャンプしない。
「GetKey」はキーを「押し続けているか」判定しているので。
「GetKeyDown」に変えます。





こう



飛びました。しかし挙動がおかしいです。上に瞬間移動している印象。
おまけに空中ジャンプが何度もできてしまいます。

・自然なジャンプをさせる
・空中でジャンプできないようにする

というわけで、上の二つを解決していきます

自然なジャンプをさせる


まずは自然なジャンプから、というわけで、Rgitbodyに作用するAddForceを利用します
こう

すると瞬間移動ではない自然なジャンプになりました。このAddForceは物理に作用して文字通り力を与えてくれます。ですがまだ2段3段いくらでもジャンプができてしまいます。

次に空中でジャンプができないようにする


仮に地面に足がついている状態をFeetOnTheGroundとします(長い)

if (Input.GetKeyDown("space")&& FeetOnTheGround)

条件はこの二つ、問題は地に足がついている状態をどう表すかです。
今回はPhysics2DのLinecastを利用します、これがどういうものかといいますと、



指定したオブジェクトの中心から線を引いて、



その線と別に指定したオブジェクトのコライダーに接触すると



ジャンプすることができます。
判定の対象となるコライダーかどうかは、Layerを使って区別します。



何もしなければみんなDefaultになっているはずですので、カチッとしてAddLayerを選びましょう。

 

ジャンプ用に「road」というレイヤーを用意します。



床のチップに指定します。



スクリプトをこう!!
しかしジャンプできない!!

 

レイヤー指定が必要だった様子。
改めで実行するとジャンプ出来るようになりました。複数指定できるのでオブジェクトごとにレイヤーがいっぱいあっても安心です。


やっと自由に飛び跳ね回れるようになったところで今回はここまで。
プレイヤーの動きについてはいったんおいて、次回からはステージギミックに入っていきたいとおもいます。
PR