ジャンプは移動処理と結びつきが強いため、Movementのコンポーネントを修正して対応します。どちらかと言うとCharacterControllerの使い方に近い内容になります。
目次
作れるもの
今回もスプリント同様に、Movementに依存する形で作成します。
完成品
実装にあたりInputManagerのJumpに対応したキー入力でジャンプします。入力判定を変更したい場合はスプリント時のようにキーをカスタマイズできるように変更することも可能です!
身につくもの
実はMovementでは今回のジャンプを見越した判定処理なんかが入っていますが、実際にはジャンプ処理実装時に少し手を加える、という変更は少なくないです。今回はあらかじめ作ったものを分割してますので作業自体は少なく抑えられています
- 指定した高さまでジャンプ
- InputManagerのジャンプ入力
実装方法
これまでの実装ができていれば、ジャンプ機能の追加はスクリプト1つを作成してくっつけるだけで機能します。
FPJumpコンポーネントを作成
今回はMovementのコンポーネントは変更せずに対応できるように進められます。まずは下記スクリプトを作成しましょう!
- JumpHeightではジャンプで到達できる高さを指定します
- Input.GetButtonDown(“Jump”)
- プロジェクトセッティングのInputManagerの中にセットされているJumpを利用
- キーボードだとスペースキーがセットされています
using UnityEngine;
[RequireComponent(typeof(FPMovement))]
public class FPJump : FPComponentBase
{
private FPMovement movement;
[Header("Jump")]
public float jumpHeight = 2.0f;
private void Awake()
{
movement = GetComponent<FPMovement>();
}
private void Update()
{
if (Controller.CharacterController.isGrounded && Input.GetButtonDown("Jump"))
{
movement.Velocity += new Vector3(0, Mathf.Sqrt(jumpHeight * -2f * movement.Gravity), 0);
}
}
}
コンポーネントを追加してジャンプ!
スクリプトの準備が出来たらPlayerにコンポーネントをアタッチして動かしてみてください。
デフォルトの設定だと、キーボードのスペースキーを押すことでジャンプ可能になります。
コメント
コメント一覧 (1件)
シリーズを実装途中に、FPMovement.csがC#スクリプトのコンポーネントとしてありますが、
こちらの記事のVerticalVelocityという変数名が参照元のどこを探しても見つからず、変数velocityで代替えしました。そうしたところジャンプが動作確認できたのでお時間あるときに修正お願いします。