Помогите сделать замедление объекта при значении stamina = 0. C#
решил создать 2d игру в Unity, не могу понять как сделать чтобы если значение Stamina = 0, то игрок перестаёт бегать.
вот код:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
[RequireComponent(typeof(Rigidbody2D))]
public class Player2DControl : MonoBehaviour
{
public enum ProjectAxis { onlyX = 0, xAndY = 1 };
public ProjectAxis projectAxis = ProjectAxis.onlyX;
public float speed = 100;
public float addForce = 100;
public bool lookAtCursor;
public KeyCode leftButton = KeyCode.A;
public KeyCode rightButton = KeyCode.D;
public KeyCode upButton = KeyCode.W;
public KeyCode downButton = KeyCode.S;
public KeyCode addForceButton = KeyCode.Space;
public bool isFacingRight = true;
private Vector3 direction;
private float vertical;
private float horizontal;
private Rigidbody2D body;
private float rotationY;
private bool jump;
public float stamina = 100.0f;
public float MaxStamina = 100.0f;
private float StaminaRegenTimer = 0.0f;
private const float StaminaDecreasePerFrame = 2.0f;
private const float StaminaIncreasePerFrame = 1.0f;
private const float StaminaTimeToRegen = 1.0f;
void Start()
{
body = GetComponent<Rigidbody2D>();
body.fixedAngle = true;
if (projectAxis == ProjectAxis.xAndY)
{
body.gravityScale = 0;
body.drag = 10;
}
}
void OnCollisionStay2D(Collision2D coll)
{
if (coll.transform.tag == "Ground")
{
body.drag = 10;
jump = true;
}
}
void OnCollisionExit2D(Collision2D coll)
{
if (coll.transform.tag == "Ground")
{
body.drag = 0;
jump = false;
}
}
void FixedUpdate()
{
body.AddForce(direction * body.mass * speed);
if (Mathf.Abs(body.velocity.x) > speed / 100f)
{
body.velocity = new Vector2(Mathf.Sign(body.velocity.x) * speed / 100f, body.velocity.y);
}
if (projectAxis == ProjectAxis.xAndY)
{
if (Mathf.Abs(body.velocity.y) > speed / 100f)
{
body.velocity = new Vector2(body.velocity.x, Mathf.Sign(body.velocity.y) * speed / 100f);
}
}
else
{
if (Input.GetKey(addForceButton) && jump)
{
body.velocity = new Vector2(0, addForce);
}
}
}
void Flip()
{
if (projectAxis == ProjectAxis.onlyX)
{
isFacingRight = !isFacingRight;
Vector3 theScale = transform.localScale;
theScale.x *= -1;
transform.localScale = theScale;
}
}
void Update()
{
if (lookAtCursor)
{
Vector3 lookPos = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, Camera.main.transform.position.z));
lookPos = lookPos - transform.position;
float angle = Mathf.Atan2(lookPos.y, lookPos.x) * Mathf.Rad2Deg;
transform.rotation = Quaternion.AngleAxis(angle, Vector3.forward);
}
if (Input.GetKey(upButton)) vertical = 1;
else if (Input.GetKey(downButton)) vertical = -1; else vertical = 0;
if (Input.GetKey(leftButton)) horizontal = -1;
else if (Input.GetKey(rightButton)) horizontal = 1; else horizontal = 0;
if (projectAxis == ProjectAxis.onlyX)
{
direction = new Vector2(horizontal, 0);
}
else
{
if (Input.GetKeyDown(addForceButton)) speed += addForce; else if (Input.GetKeyUp(addForceButton)) speed -= addForce;
direction = new Vector2(horizontal, vertical);
}
if (horizontal > 0 && !isFacingRight) Flip(); else if (horizontal < 0 && isFacingRight) Flip();
bool isRunning = Input.GetKey(KeyCode.LeftShift);
if (isRunning)
{
stamina = Mathf.Clamp(stamina - (StaminaDecreasePerFrame * Time.deltaTime), 0.0f, MaxStamina);
StaminaRegenTimer = 0.0f;
}
else if (stamina < MaxStamina)
{
if (StaminaRegenTimer >= StaminaTimeToRegen)
stamina = Mathf.Clamp(stamina + (StaminaIncreasePerFrame * Time.deltaTime), 0.0f, MaxStamina);
else
StaminaRegenTimer += Time.deltaTime;
}
}
}
Источник: Stack Overflow на русском