我正在尝试制作一个 2d 平台游戏,很久以前我添加了 sprinting,它运行良好。昨天它随机停止工作,我不知道为什么,所以我尝试通过关闭最大化播放并在按住 shift 时选择我的播放器来测试我的速度和当前耐力值是否在按住 shift 时发生变化。当我对其进行测试时,值正在发生变化并且由于某种原因我的冲刺正在工作,但是当我停止选择我的播放器并选择其他东西时,它停止让我冲刺。我不认为这是我的代码的错误我只是认为这是一个统一的故障,但无论如何我都会包含我的代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class PlayerContoller : MonoBehaviour
{
private Rigidbody2D rb;
public float speed = 7.34f;
public float jumpForce;
private float moveInput;
private bool isGrounded;
public Transform feetPos;
public float checkRadius;
public LayerMask whatIsGround;
public LayerMask Slow;
private float jumpTimeCounter;
public float jumpTime;
private bool isJumping;
public int maxStamina = 163;
public int currentStamina;
public bool canSprint;
public Stamina stamina;
private Animator anim;
void Start()
{
anim = GetComponent<Animator>();
rb = GetComponent<Rigidbody2D>();
currentStamina = maxStamina;
stamina.SetMaxStamina(maxStamina);
}
private void FixedUpdate()
{
moveInput = Input.GetAxisRaw("Horizontal");
rb.velocity = new Vector2(moveInput * speed, rb.velocity.y);
if(moveInput == 0)
{
anim.SetBool("isRunning", false);
} else
{
anim.SetBool("isRunning", true);
}
if (currentStamina > 0)
{
canSprint = true;
} else if (currentStamina < 0)
{
canSprint = false;
}
if (currentStamina < maxStamina)
{
RegenStamina(2);
}
if (canSprint == true)
{
if (Input.GetKey(KeyCode.LeftControl) || Input.GetKey(KeyCode.LeftShift))
{
LoseStamina(5);
speed = 14f;
}
} else
{
speed = 7.34f;
}
if (canSprint == false)
{
speed = 7.34f;
}
}
private void Update()
{
isGrounded = Physics2D.OverlapCircle(feetPos.position, checkRadius, whatIsGround);
if (moveInput > 0)
{
transform.eulerAngles = new Vector3(0, 0, 0);
}
else if (moveInput < 0)
{
transform.eulerAngles = new Vector3(0, 180, 0);
}
if (isGrounded == true && Input.GetKeyDown(KeyCode.Space))
{
anim.SetTrigger("takeOff");
isJumping = true;
jumpTimeCounter = jumpTime;
rb.velocity = Vector2.up * jumpForce;
}
if (isGrounded == true)
{
anim.SetBool("isJumping", false);
}
else
{
anim.SetBool("isJumping", true);
}
if(Input.GetKey(KeyCode.Space) && isJumping == true)
{
if(jumpTimeCounter > 0)
{
rb.velocity = Vector2.up * jumpForce;
jumpTimeCounter -= Time.deltaTime;
}
else
{
isJumping = false;
}
}
if (Input.GetKeyUp(KeyCode.Space))
{
isJumping = false;
}
}
void LoseStamina(int StaminaGone)
{
currentStamina -= StaminaGone;
stamina.SetStamina(currentStamina);
}
void RegenStamina(int AddStamina)
{
currentStamina += AddStamina;
stamina.SetStamina(currentStamina);
}
}
在另一个脚本中我有
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Stamina : MonoBehaviour
{
public Slider slider;
public void SetMaxStamina(int Stamina)
{
slider.maxValue = Stamina;
slider.value = Stamina;
}
public void SetStamina(int Stamina)
{
slider.value = Stamina;
}
}
(这是为了让滑块移动)