今回は、プレイヤーが回避するときによく使う「ダッシュ」の実装方法を記述していきたいと思います。
今回のスクリプトでは、前の記事で記述したプレイヤーの「動作スクリプト」を利用するので、そちらを使っていただければと思います。
動作スクリプトの記事↓
スクリプト
まずは、プレイヤーの動作スクリプトにダッシュのステートを追加しないといけないので、プレイヤーの動作スクリプトを開きましょう。
これらの変数を追加します。
ステートを管理する関数の中にダッシュのスクリプトを追加。
プレイヤーの動作スクリプトの変更は以上です。
ダッシュスクリプトを書いていきましょう。
新しいスクリプトを作り、名前を「Dashing」とします。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Dashing : MonoBehaviour
{
[Header("References")]
public Transform orientation;
public Transform playerCam;
private Rigidbody rb;
private PlayerMovement pm;
[Header("Dashing")]
public float dashForce; //ダッシュ時に加える力
public float dashUpwardForce; //上方向に加える力
public float dashDuration; //ダッシュの持続時間
private Vector3 delayedForceToApply;
[Header("CoolDown")]
public float dashCd; //ダッシュのクールダウン
private float dashCdTimer;
void Start()
{
rb = GetComponent<Rigidbody>();
pm = GetComponent<PlayerMovement>();
}
void Update()
{
if (Input.GetMouseButtonDown(1))
{
Dash();
}
if (dashCdTimer > 0)
{
dashCdTimer -= Time.deltaTime;
}
}
//ダッシュ
private void Dash()
{
//ダッシュのクールダウン中ならダッシュをしない
if (dashCdTimer > 0)
{
return;
}
else
{
dashCdTimer = dashCd;
}
pm.dashing = true;
Vector3 direction = DashDirection();
Vector3 forceToApply = direction * dashForce + orientation.up * dashUpwardForce;
rb.useGravity = false;
delayedForceToApply = forceToApply;
Invoke(nameof(DelayedDashForce), 0.025f);//ステートが完全にdashingに切り替わるのを待つ
Invoke(nameof(ResetDash), dashDuration);//ダッシュを終了
}
//ステートが完全にdashingに切り替わるのを待つ
private void DelayedDashForce()
{
rb.AddForce(delayedForceToApply, ForceMode.Impulse);
}
//ダッシュが終了したときの処理
private void ResetDash()
{
pm.dashing = false;
rb.useGravity = true;
}
//ダッシュをする方向を決める
private Vector3 DashDirection()
{
float horizontalInput = Input.GetAxisRaw("Horizontal");
float verticalInput = Input.GetAxisRaw("Vertical");
Vector3 direction;
//どの方向でもダッシュができるかをチェック
direction = orientation.forward * verticalInput + orientation.right * horizontalInput;
//どの方向にも入力がなければ前方にダッシュ
if (horizontalInput == 0 && verticalInput == 0)
direction = orientation.forward;
return direction.normalized;
}
}
このスクリプトをプレイヤーにアタッチし、数値を入力していきます。
動作スクリプトの「Dash Speed」をこのぐらいに。
「Dashing」はこのように入れていきます。
これで実行をしてみると
ダッシュを実装することができました!
まとめ
久々のFPS関連の記事でしたがお役に立てればと思います。
コメント