除非我在播放时关闭最大化并选择我的播放器,否则冲刺将不起作用

问题描述

我正在尝试制作 2d 平台游戏,很久以前我添加了冲刺,它运行良好。昨天它随机停止工作,我不知道为什么,所以我尝试通过关闭最大化播放并在按住 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);
        }
        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;
    }
}

(这是为了让滑块移动)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)