Input.GetKeyDown命令在Unity2D中无法正常运行

问题描述

我对编程和游戏开发非常陌生,因此请耐心等待。我一直在尝试制作一个脚本,该脚本会根据他在Unity2D中所面对的方向向左或向右添加一个力。

我将使脚本根据上次按下的按钮(A / D)来检测他所面对的方向。为此,我制作了两个布尔值(IsFacingRightIsFacingLeft),如果玩家按下“ A”或“ D”,它们会相应地改变。

IsFacingRight认情况下以true开头,而Left以false开头。如果我按下“ S”按钮,力将沿正确的方向施加。我的问题是,当我按下“ S”按钮时,什么也没有发生。我决定将两个布尔型都公开,以随时查看它们的状态,并且我注意到当我按下“ S”按钮时,两个布尔型都变为true。我的猜测是,力是左右施加的,因此力会互相抵消。这是代码

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

    {
        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.GetKeyDown(KeyCode.S))
        {
            Slider();
        }
    }

    

    void Slider()
    {

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

解决方法

您有错字:

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

如果Is IsingR为true,则您不是在“询问”,而是将IsFacingR设置为true,我什至不知道它是如何编译的(无论如何,它都会导致bool)

c#的=不是比较器,它设置了一个变量来比较两件事,请使用==

我希望这可以解决您的问题,但除此之外,请不要每天问同样的问题。问候。