前回の記事では、FPSプレイヤーの動作クリプトの基礎を作りましたね。
今回は、そこにジャンプを実装していきたいと思います。
今回のジャンプスクリプトは、前回の動作スクリプトをもとに作っていきますので、まずは前回の動作スクリプトを作っていただいてから本記事を読んでいただいた方がおすすめです。
前回の記事↓
ジャンプスクリプト
では、これらを動作スクリプトに追加してください
これらのグローバル変数を追加します。
public float JumpForce; //ジャンプ力の値
public float JumpCoolDown; //ジャンプのクールダウン
public float airMultiplier; //空中での操作性を少し悪くするための値
bool ReadyToJump; //ジャンプができるかできないかのための真偽値
start関数にこれを追加
ReadyToJump = true;
新しくジャンプをするための関数を下の方で作ります。
private void Jump()
{
rb.velocity = new Vector3(rb.velocity.x, 0f, rb.velocity.z);
rb.AddForce(transform.up * JumpForce, ForceMode.Impulse);
}
ジャンプがまたできるように真偽値を変える関数も下の方でつくっておきます。
private void resetJump()
{
ReadyToJump = true;
}
ProcessInput関数の中にこのスクリプトを追加
if (Input.GetKeyDown(KeyCode.Space) && grounded && ReadyToJump)
{
ReadyToJump = false;
Jump();
Invoke(nameof(resetJump), JumpCoolDown); //JumpCoolDownで設定した秒数後にresetJump関数を呼び出す。
}
空中での操作性を下げるためにmovePlayer関数をこのように変更しましょう。
private void movePlayer()
{
//向いている方向に進む
moveDirection = orientation.forward * VerticalInput + orientation.right * HorizontalInput;
if (grounded)
rb.AddForce(moveDirection.normalized * moveSpeed * 10f, ForceMode.Force);
else if (!grounded)
rb.AddForce(moveDirection.normalized * moveSpeed * 10f * airMultiplier, ForceMode.Force);
}
これらのスクリプトを追加できたらプレイヤーのインスペクターでスクリプトを確認するとこんな感じで項目が増えています。
値を適当に入れて、ゲームを実行してみます。
完成です!
値を変えて細かい調整をすれば自分好みのジャンプができます。
まとめ
次回は走り(ダッシュ)を実装していきたいと思います。
コメント