プレイヤーキャラクターの移動とジャンプの簡単な実装例を紹介します。2Dプロジェクト用。
クラスを適切に分割することによって、必要な部分だけを読みやすくなり、メンテナンスや再利用をしやすくすることができます。最初のうちは1個の大きなクラスにすべての処理を書いても構わないと思いますが、クラスを分割することも少しずつ覚えていくのがいいかもしれません。
1つめのスクリプトでは、プレイヤーキャラクターの移動、向きを変える、接地判定などを行っています。
2つめのスクリプトでは、プレイヤーキャラクターをジャンプさせる処理を行っています。PlayerWalk2D クラスの isGround 変数の値をチェックし、多段ジャンプさせないよう制御しています。
プレイヤーのゲームオブジェクトは Sprite から作成し、2つのスクリプトのほかに、Rigidbody2D と CircleCollider2D をアタッチしています。
Rigidbody2D では、GravityScale の値と Constraints を変更しています。GravityScale は重力の影響を受ける強さです。Constraints の FreezeRotation は、回転しないようにする設定です。
CircleCollider2D では、プレイヤーの画像にあわせて Offse と Radius を微調整しています。今回は足元の接地位置だけ気にして、おおまかに設定しています。
配置した Cube では BoxCollider を削除し、代わりに 2D 用の BoxCollider2D をアタッチしておきます。コライダーや Rigidbody は 3D 用と 2D 用とで別々のものが用意されているので注意しましょう。
今回は以上です。感想・質問・要望等、お待ちしております (´▽`)
(この記事の使用環境: Unity2018.1.0f2 (.NET4.x Equivalent)、Windows10)
動画
動画はこちら。左右への移動とジャンプができていますね。やっていること
やっていることの概要は以下のとおりです。- 左右方向の入力を受け取って、プレイヤーキャラクターを移動させる
- 左右方向の入力を受け取って、プレイヤーキャラクターの向きを変える
- スペースキーが押されたらジャンプする
- ジャンプは接地しているときのみとし、多段ジャンプはさせない
スクリプト
スクリプトは2つに分けています。クラスを適切に分割することによって、必要な部分だけを読みやすくなり、メンテナンスや再利用をしやすくすることができます。最初のうちは1個の大きなクラスにすべての処理を書いても構わないと思いますが、クラスを分割することも少しずつ覚えていくのがいいかもしれません。
PlayerWalk2D
1つめのスクリプトでは、プレイヤーキャラクターの移動、向きを変える、接地判定などを行っています。
PlayerJump2D
2つめのスクリプトでは、プレイヤーキャラクターをジャンプさせる処理を行っています。PlayerWalk2D クラスの isGround 変数の値をチェックし、多段ジャンプさせないよう制御しています。
インスペクター
インスペクターの設定はこんな感じで。プレイヤーのゲームオブジェクトは Sprite から作成し、2つのスクリプトのほかに、Rigidbody2D と CircleCollider2D をアタッチしています。
Rigidbody2D では、GravityScale の値と Constraints を変更しています。GravityScale は重力の影響を受ける強さです。Constraints の FreezeRotation は、回転しないようにする設定です。
CircleCollider2D では、プレイヤーの画像にあわせて Offse と Radius を微調整しています。今回は足元の接地位置だけ気にして、おおまかに設定しています。
フィールドをCubeで作る(テスト用)
今回のような簡単な動作確認などで見た目にこだわらない場合、足場などのフィールドは 3D オブジェクトの Cube で作成してしまうのが簡単です。配置した Cube では BoxCollider を削除し、代わりに 2D 用の BoxCollider2D をアタッチしておきます。コライダーや Rigidbody は 3D 用と 2D 用とで別々のものが用意されているので注意しましょう。
今回は以上です。感想・質問・要望等、お待ちしております (´▽`)
(この記事の使用環境: Unity2018.1.0f2 (.NET4.x Equivalent)、Windows10)
コメント
コメント一覧 (1)