Unity

【Unity】地面の上にいるときだけジャンプする方法

Unity入門#1の記事でも使用した
地面を検知した時だけ、
ジャンプができるようにする方法について、解説します。

”地面を検知した時だけ”という条件を実装しなければ、
空中ジャンプができてしまい、舞空術的アクションゲームと化してしまいます^^;

なので、アクションゲームを作りたい場合、
必須と言ってよいでしょう。

まずは、それを実装するためのコードです。

Update関数にジャンプのコードを書くことで、
ジャンプのためのSpaceキー入力をいつでも検出して、処理するようになっています。

その直前に、必ずCheckGround()という関数が
「isGround 」=となっています。

これは、CheckGroundという関数で返された値(戻り値)をisGroundedに代入するということです。

isGroundedの種別はboolであり、trueまたはfalseをとる変数です。

そして、もちろんCheckGround関数もbool CheckGroundとし、
trueかfalseを返す関数にします。

Spaceキーを押しても、CheckGroundがtrueでなければ、
そのif文の中身が読まれないので、空中ではジャンプができないようになるのです。

ちなみに、boolの値でif文を作る場合、
if(isGrounded) はtrueならば、ということなり
if(!isGrounded) でfalseならば、という風に省略した表現を取ることができます。
(丁寧に書くと、if(isGround == true))

 

それでは気になる、肝心のCheckGround関数を見てみましょう。

Rayは光線です。
2Dの画面スワイプゲームの作り方でも出てきましたね^^

var rayを宣言し、まず基本的な定義を行います。
開始地点として、オブジェクトの0.01f真上の地点を、
光線を飛ばす方向を、Vector3.downつまり真下方向にしています。

さらに、var distanceを宣言し、光線を飛ばしたときに、衝突を検出する範囲(距離)1.5fを定義してます。

returnの後には、何の結果(bool)を返すかを記述するのですが、
ここで初めて、光線の衝突を判定するPhysics.Raycastを用います。
宣言してきたrayとdistanceを引数に入れて、判定させます。

オブジェクトの真下方向に、距離1.5fの範囲で、衝突するものがあるかどうか、
trueまたはfalseで判定します。

 

と、このようにisGroundedにその結果を返す仕組みです。

なお、CheckGrounded関数の戻り値が代入されるまで、
次のコードが読み進まれないことも理解しておきましょう。

 

以上、地面の上にいるときのジャンプとその仕組みの説明でした^^

ABOUT ME
いなも@システマライフハッカー
”仙豆”を開発することを夢見て、健康食品会社で働いていたものの、2016年に出会ったロシアの武術”システマ”こそ、その糸口があると感銘し、勝手にシステマ普及活動を始める。 一方で、クリエイティブなモノ作りが好きで、DX社会で楽しみを見出せる"Unity”を活かして、”スマートかつ快適な暮らし”のヒントを発信している。

COMMENT

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA