Вот скрипт:
Синтаксис:
Используется csharp
using UnityEngine;
public class Run : MonoBehaviour
{
public float MaxMoveSpeed = 6;
private CharacterController controllerComponent;
private Vector3 moveSpeed;
private float dashingTimeLeft;
private void Start()
{
controllerComponent = GetComponent<CharacterController>();
}
private void Update()
{
UpdateWalk();
if (Input.GetKeyDown(KeyCode.LeftShift) || Input.GetKeyDown(KeyCode.RightShift) || Input.GetKeyDown(KeyCode.X)) Dash(false);
else if (Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift) || Input.GetKey(KeyCode.X)) Dash(true);
}
private void Dash(bool holding)
{
if (dashingTimeLeft < (holding ? -.4f : -.2f))
{
dashingTimeLeft = .3f;
}
}
private void UpdateWalk()
{
float ySpeed = moveSpeed.y;
moveSpeed.y = 0;
if (dashingTimeLeft <= 0)
{
Vector3 target = MaxMoveSpeed *
new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical")).normalized;
moveSpeed = Vector3.MoveTowards(moveSpeed, target, Time.deltaTime * 300);
if (moveSpeed.magnitude > 0.1f)
{
transform.rotation = Quaternion.RotateTowards(transform.rotation, Quaternion.LookRotation(moveSpeed),
Time.deltaTime * 720);
}
}
else
{
moveSpeed = MaxMoveSpeed * 3 * moveSpeed.normalized;
}
dashingTimeLeft -= Time.deltaTime;
moveSpeed.y = ySpeed + Physics.gravity.y * Time.deltaTime;
controllerComponent.Move(moveSpeed * Time.deltaTime);
}
public class Run : MonoBehaviour
{
public float MaxMoveSpeed = 6;
private CharacterController controllerComponent;
private Vector3 moveSpeed;
private float dashingTimeLeft;
private void Start()
{
controllerComponent = GetComponent<CharacterController>();
}
private void Update()
{
UpdateWalk();
if (Input.GetKeyDown(KeyCode.LeftShift) || Input.GetKeyDown(KeyCode.RightShift) || Input.GetKeyDown(KeyCode.X)) Dash(false);
else if (Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift) || Input.GetKey(KeyCode.X)) Dash(true);
}
private void Dash(bool holding)
{
if (dashingTimeLeft < (holding ? -.4f : -.2f))
{
dashingTimeLeft = .3f;
}
}
private void UpdateWalk()
{
float ySpeed = moveSpeed.y;
moveSpeed.y = 0;
if (dashingTimeLeft <= 0)
{
Vector3 target = MaxMoveSpeed *
new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical")).normalized;
moveSpeed = Vector3.MoveTowards(moveSpeed, target, Time.deltaTime * 300);
if (moveSpeed.magnitude > 0.1f)
{
transform.rotation = Quaternion.RotateTowards(transform.rotation, Quaternion.LookRotation(moveSpeed),
Time.deltaTime * 720);
}
}
else
{
moveSpeed = MaxMoveSpeed * 3 * moveSpeed.normalized;
}
dashingTimeLeft -= Time.deltaTime;
moveSpeed.y = ySpeed + Physics.gravity.y * Time.deltaTime;
controllerComponent.Move(moveSpeed * Time.deltaTime);
}