【问题标题】:why isn't my code reacting to this if statement (Global Variables)为什么我的代码没有对此 if 语句做出反应(全局变量)
【发布时间】:2019-05-10 16:11:42
【问题描述】:

我正在创建一个游戏,我在画布上的按钮连接到公共“GameVar”,当按下前进按钮或按下 W 按钮时,我希望它更改“runaxis”vector2 的 x 并显示“在公共字符串上转发”以显示它。

我已经尝试添加诸如 '== true' 之类的东西,但似乎都不起作用

public class ClassName : MonoBehaviour
{
    public string GoingFB;

    void Update()
    {
        if (GameVar.ForwardArrow || Input.GetKey(KeyCode.W))
        {
            FPS.runAxis.x = 2f;
            GoingFB = "Forward"; 
        }

        if (GameVar.BackArrow || Input.GetKey(KeyCode.S))
        {
            FPS.runAxis.x = -2f;
            GoingFB = "Backward";
        }

        if (GameVar.ForwardArrow == GameVar.BackArrow || Input.GetKey(KeyCode.S) == Input.GetKey(KeyCode.W))
        {
            FPS.runAxis.x = 0f;
            GoingFB = "Null";
        }
    }
}

当我按下前进箭头时,我希望它在检查器中说“前进”。我已经测试了箭头,它们确实改变了 GameVar。

【问题讨论】:

  • 当您在if 语句上设置断点然后逐行执行代码时,您观察到了什么?

标签: c# unity3d


【解决方案1】:

我认为您的问题不在于代码未达到 if 语句。问题是您最后一个 if 语句中的表达式始终为真,因此 GoingFB 值始终设置为 null 在每次帧更新时调用的 Update 方法的末尾。如果同时按下 S 和 BackArrow,或者同时按下 W 和 FormardArrow,则最后一个 if 中的表达式将仅为 false。例如,如果只按下 W:GameVar.ForwardArrow == GameVar.BackArrow 这个表达式将是 true,因为在这种情况下 GameVar.ForwardArrowGameVar.BackArrow 都是假的。因此在第一个 if 语句中将字符串值设置为“Forward”后,在第三个 if 语句之后将立即重置为“Null”。

【讨论】:

    【解决方案2】:

    不妨试试:

        if (GameVar.BackArrow || (Input.GetKey(KeyCode.S) == True))
    

    您应该使用 Giorgi 提到的 if else 语句。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-12
      • 2018-12-18
      • 2023-02-25
      相关资源
      最近更新 更多