Unity 2D横スクロールアクションゲームの作り方3 ジャンプ・長押しジャンプ・アニメーションの実装 | Unity入門の森 ゲームの作り方

Unity 2D横スクロールアクションゲームの作り方3 ジャンプ・長押しジャンプ・アニメーションの実装

Unity 2Dアクションの作り方 ロックマン風横スクロールアクションゲームを作る


Unity入門の森オリジナル本格ゲーム制作講座はこちら
11種類の本格ゲームの全ソースコード公開・画像&動画による解説付き

この記事はロックマン風2D横スクロールアクションゲームの作り方講座の第3回です。

前回の記事ではプレイヤーキャラクターであるActorオブジェクトを横移動させる処理を実装しました。今回も前回に引き続きの基本的な動作を実装していきます。

前回の記事:

Unity 2D横スクロールアクションゲームの作り方2 キャラクターを左右に移動させる 当たり判定も実装
この記事はロックマン風2D横スクロールアクションゲームの作り方講座の第2回です。 前回はプロジェクトの作成と画像素材、そしてDoTweenアセットのインポート等の開発準備を行いました。 前回の記事: いよいよゲームの中心となる要素を作り始め...

今回は物理演算機能を活かしてジャンプする機能から作成してみましょう。

また、スーパーマリオなどでも実装されている長押しジャンプ機能をここで開発し、よりアクション性を高めるための工夫も同時に行っていきます。


【Line登録者限定のプレゼントもあるよ!】

Unityでプレイヤーキャラクターのジャンプ操作を実装しよう

全開搭載したRigidbody2Dにより、重力によって自動で下方向にキャラクターが落下する動作は実装済みです。

ジャンプに関しても、ジャンプキーが押されたタイミングで上方向の速度をRigidbodyに与えるようにすればとりあえずは実現できます。ジャンプボタンは上矢印キーとします。

まずはシンプルなジャンプ動作をActorControllerクラスに実装してみましょう。

  • 物理演算を行うオブジェクトの移動速度はRigidbody2D.velocityがベクトルで管理しています。
  • ジャンプ力の数値は今回スクリプト内に直接記入しています。このような数字はマジックナンバーと呼ばれ、あちこちに書いてしまうとスクリプトを管理しにくくなるため非推奨です。
    今回の講座では今後も解説とコード短縮のためにマジックナンバーを多用しますが、余裕があれば各自で定数を定義して置き換えたり、Inspectorから入力できるようにしたり、外部ファイルから読み込むような形式の実装にチャレンジしてみてください。

 

これでジャンプ入力を判定し、入力があれば上方向に速度をセットする処理が出来ました。

しかしジャンプ力は均一であり、更に空中でも何度でもジャンプが出来てしまう問題が発生しています。

 

キャラクターの接地判定を実装して空中ジャンプを制限しよう

まずは空中で何度もジャンプできてしまう問題を解決しましょう。

空中でジャンプできなくするためには、今プレイヤーキャラクターが地上にいるかどうかの判定を毎フレーム行えるようにする必要があります。

 

接地判定の手段はいくつかあり、例えばActorオブジェクトの真下にあるオブジェクトの情報を直接取得する(Raycast)方法などもありますが、今回はよりシンプルにBoxCollider2Dを使用した方法で実装します。

 

ではまず接地判定用のオブジェクトから作成します。

Actorオブジェクトの子オブジェクトとしてGroundSensorオブジェクトを作成しましょう。このオブジェクトが持つBoxCollider2Dによる当たり判定で地面との接触を調べます。

子オブジェクトを作成する時はHierarchyビューでの操作が手っ取り早いです。まずは親であるActorオブジェクトを選択して右クリック→[Create Empty]を選択します。

このCreate Emptyは空オブジェクトを作成するコマンドであり、Spriteオブジェクトと違ってSpriteRendererコンポーネントを初期で持ちません。(よってゲーム画面に表示されません)

表示はされませんが、Actorオブジェクトの子にあるためActorオブジェクトが移動を行えばそれに合わせてGroundSensorもついてくる形になります。

  • オブジェクトやコンポーネントへの編集はテストプレイ実行中に行ってしまうとテストプレイ終了時に全て元に戻ってしまいます。注意しましょう

 

それではGroundSensorオブジェクトに地面との接触を判定するBoxCollider2Dをアタッチしましょう。Inspector画面でAdd Componentを押してBoxCollider2Dを選択します。

判定範囲としてはアクターよりも少し下側にはみ出すくらいが良いです。左右の幅もアクターより少し細いくらいが好ましいです。(幅が大きすぎると壁に触れただけでも接地判定になります)

今回はOffsetを(0.16, -1.835)、Sizeを(2, 0.1)にセットしました。もしActor側の当たり判定の大きさを独自に変えているのならこちらの大きさも調整しなおす必要があります。

さらに、この判定はあくまで地面との接触を検知する判定ですので、GroundSensorオブジェクト自体が他のオブジェクトとぶつかったりする必要がありません。物理演算を行わないようにするため「Is Trigger」パラメータはオンにしておきましょう。

 

接地判定クラスとなるC#スクリプトを作成

まだTrigger状態のBoxCollider2Dが存在するだけの状態なので、地面との接触のみを検出するために新規クラスとしてScripts > Actorフォルダの中にActorGroundSensorを作成します。

続きを読む

このコンテンツはパスワードで保護されています。 コンテンツを読みたい方はUnity入門の森ショップ(https://unityforest.shop/)で講座閲覧権を取得してね。

これによってActorSpriteクラスが正常に動作するようになり、テストプレイをすれば歩行時にスプライトが更新されるアニメーションが実現できていることがわかります。

 

まとめ

これでプレイヤーキャラクターに最低限必要な移動操作の実装が完了しました。今後も細かい機能追加をしていくこともありますが今回までに開発した機能がベースとなっていきます。

次回からはついにアクションゲームのマップステージ制作に入っていきます。一気に画面がアクションゲームらしくなっていくので楽しんでやっていきましょう!

次の記事:

Unity 2D横スクロールアクションゲームの作り方4 タイルマップで坂道ありゲームステージを作成 レイヤーを使いこなそう
この記事はロックマン風2D横スクロールアクションゲームの作り方講座の第4回です。 前回まででプレイヤーキャラの移動とジャンプの機能を最低限ですが実装できました。 前回の記事: 今回からはこのゲームを本格的な2D横スクロールアクションゲームら...

Unity 2Dアクションゲームの作り方講座に戻る>>



Unity入門の森オリジナル本格ゲーム制作講座はこちら
11種類の本格ゲームの全ソースコード公開・画像&動画による解説付き

コメント

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