Unity2D“ Input.GetKeyDown不再起作用

问题描述

我是Unity编程和游戏开发的初学者,所以请耐心等待。

我试图在按下按钮时向玩家施加力量。其背后的主要概念是,如果玩家面对左侧或右侧,则应该朝该方向发射。

我一直在尝试使用“ InputGetKeyDown(KeyCode.A / D)”命令,根据我最后按下的按钮(“ A”或“ D”)来检测玩家是向左还是向右。 / p>

我制作了两个私人bool(IsFacingRight和IsFacingLeft)。 IsFacingRight认情况下为true,Left开始为false,但是如果玩家切换方向,则布尔值将相应更改。当我按下左移键时,发射就会发生,但是也没有注册

我尝试使用“ Debug.Log”来查看代码是否检测到输入,并且按我的预期没有。当我按“ A”或“ D”或“ LeftShift”时,调试控制台中将不会出现任何内容。因此,现在我确认团结不会检测到输入。

代码要大得多,但是所有可以正常工作的代码都应该在下面列出。我还应该提到,除了上面提到的所有内容之外,代码没有任何错误,并且模拟运行完美。这是代码

    private bool IsFacingR = true;
    private bool IsFacingL = false;
    public Rigidbody2D RB;
    private float thrust = 20f;
    void Sliding()

    {
        if (Input.GetKeyDown(KeyCode.D))
        {
            Debug.Log("Im R");
            IsFacingR = true;
            IsFacingL = false;
        }
        if (Input.GetKeyDown(KeyCode.A))
        {
            Debug.Log("Im L");
            IsFacingR = false;
            IsFacingL = true;
        }
        if (Input.GetButtonDown("Crouch")) ;
        {
            Slide();
        }
    }



    void Slide()
    {
        
        if (IsFacingR = true) ;
        {
            RB.AddForce(Vector2.right * thrust);
        }
        if (IsFacingL = true) ;
        {
            RB.AddForce(-Vector2.right * thrust);
        }
    }

解决方法

您没有调用Sliding()方法。 将此方法重命名为Update(),确保您的类继承了MonoBehaviour,并且该类作为组件在场景中处于活动状态的GameObject上。

,

您应该将此添加到您的单行为中;

void Update(){
    Sliding();
}

您还可以像这样处理isFacingL;

private bool IsFacingL => !IsFacingR;

,

根据您提供的代码,从未更新IsFacingRIsFacingL的原因是因为从未调用过函数Slide()Sliding()

如果您的课程从MonoBehaviour扩展,则可以使用Update()函数,该函数每帧都被调用。

void Update() {
    this.Sliding();
}