Untitled
unknown
csharp
a year ago
2.9 kB
4
Indexable
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 maxDashYSpeed;
public float dashDuration;
[Header("CameraEffects")]
public Camera cam;
public float dashFov;
[Header("Settings")]
public bool useCameraForward = true;
public bool allowAllDirections = true;
public bool disableGravity = false;
public bool resetVel = true;
[Header("Cooldown")]
public float dashCd;
private float dashCdTimer;
[Header("Input")]
public KeyCode dashKey = KeyCode.V;
private void Start()
{
rb = GetComponent<Rigidbody>();
pm = GetComponent<PlayerMovement>();
}
private void Update()
{
if (Input.GetKeyDown(dashKey))
Dash();
if (dashCdTimer > 0)
dashCdTimer -= Time.deltaTime;
}
private void Dash()
{
if (dashCdTimer > 0) return;
else dashCdTimer = dashCd;
pm.dashing = true;
cam.fieldOfView = dashFov;
Transform forwardT;
if (useCameraForward)
forwardT = playerCam; /// where you're looking
else
forwardT = orientation; /// where you're facing (no up or down)
Vector3 direction = GetDirection(forwardT);
Vector3 forceToApply = direction * dashForce + orientation.up * dashUpwardForce;
if (disableGravity)
rb.useGravity = false;
delayedForceToApply = forceToApply;
Invoke(nameof(DelayedDashForce), 0.025f);
Invoke(nameof(ResetDash), dashDuration);
}
private Vector3 delayedForceToApply;
private void DelayedDashForce()
{
if (resetVel)
rb.linearVelocity = Vector3.zero;
rb.AddForce(delayedForceToApply, ForceMode.Impulse);
}
private void ResetDash()
{
pm.dashing = false;
cam.fieldOfView = 103;
if (disableGravity)
rb.useGravity = true;
}
private Vector3 GetDirection(Transform forwardT)
{
float horizontalInput = Input.GetAxisRaw("Horizontal");
float verticalInput = Input.GetAxisRaw("Vertical");
Vector3 direction = new Vector3();
if (allowAllDirections)
direction = forwardT.forward * verticalInput + forwardT.right * horizontalInput;
else
direction = forwardT.forward;
if (verticalInput == 0 && horizontalInput == 0)
direction = forwardT.forward;
return direction.normalized;
}
}Editor is loading...
Leave a Comment