Unity2D“Input.GetKeyDown 不再工作

Unity2D "Input.GetKeyDown isn't working anymore

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

我试图在按下按钮时为播放器添加一个力。这背后的主要概念是,如果玩家面向左侧或右侧,那么玩家应该朝那个方向发射。

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

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

我尝试使用“Debug.Log”来查看代码是否检测到输入,正如我所料,它没有。当我按下“A”或“D”或“LeftShift”时,调试控制台中不会出现任何内容。所以现在我确认 unity 没有检测到输入。

该代码要大得多,但它的所有功能都适用于我将在下面列出的部分。我还应该提到,除了上面提到的所有内容之外,代码没有任何错误并且模拟运行完美。这是代码:

    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(),确保您的 class 继承了 MonoBehaviour 并且此 class 作为组件在场景中的活动 GameObject 上。

你应该把这个添加到你的单一行为中;

void Update(){
    Sliding();
}

你也可以这样处理 isFacingL;

private bool IsFacingL => !IsFacingR;

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

如果您的 class 扩展自 MonoBehaviour,您可以使用 Update() 函数,它会在每一帧调用。

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