C#中的条件多个布尔值#

时间:2016-10-19 05:51:43

标签: c# unity3d 2d unity5

用简单的语言 - 如果脚本的这部分检测到方向是“正确的”并且两个布尔“Wallright”和“WallsLeftOrRight”都是假的,那么播放标准步行动画并移动精灵...

这部分工作正常,这是我遇到问题的下一部分。

在我看来,逻辑听起来是可行的 - 如果方向是正确的,任何一个布尔都是真的,而不是播放空闲动画。

在实践中,游戏要求两个布尔都是真的,这意味着|运营商要求他们都是真的。我试过切换到逻辑||运营商自|似乎不是出于这种性质的条件,但没有做任何事情。我也尝试从他们自己的括号封装中删除两个OR值,但这也不起作用。

    if ((direction == "right") && ((WallRight == false) | (WallsLeftOrRight == false)))
    {
        var newanim = character.GetComponent<Animator>();
        newanim.Play("right_walking");
        character.transform.position += Vector3.right * 0.6f * Time.deltaTime;
        charDirection = PlayerFacing.Right;
    }
    else if ((direction == "right") && ((WallRight == true) | (WallsLeftOrRight == true)))
    {
        var newanim = character.GetComponent<Animator>();
        newanim.Play("right_idle");
        charDirection = PlayerFacing.Right;
    }

2 个答案:

答案 0 :(得分:0)

首先,简化您的代码。

if(WallRight == false)if(!WallRight)

相同

if(WallRight == true)if(WallRight)

相同

回答你的问题:

  

如果脚本的这一部分检测到方向是“正确的”   然后两个布尔“Wallright”和“WallsLeftOrRight”都是假的   播放标准的步行动画

if (direction == "right" && !WallRight && !WallsLeftOrRight)
  

如果方向正确并且任何一个布尔都是真的   播放空闲动画。

if ((direction == "right") && (WallRight || WallsLeftOrRight))

首先,检查方向,然后||用于检查WallRightWallsLeftOrRight是否为真。如您所见,WallRightWallsLeftOrRight放在同一个括号中。检查将为他们完成一次。

if (direction == "right" && !WallRight && !WallsLeftOrRight)
{
    var newanim = character.GetComponent<Animator>();
    newanim.Play("right_walking");
    character.transform.position += Vector3.right * 0.6f * Time.deltaTime;
    charDirection = PlayerFacing.Right;
}
else if ((direction == "right") && (WallRight || WallsLeftOrRight))
{
    var newanim = character.GetComponent<Animator>();
    newanim.Play("right_idle");
    charDirection = PlayerFacing.Right;
}

答案 1 :(得分:0)

第一个条件:

(direction == "right") && ((WallRight == false) | (WallsLeftOrRight == false))

第二个条件:

(direction == "right") && ((WallRight == true) | (WallsLeftOrRight == true))


在第一个条件中,您检查WallRightWallsLeftOrRight是否为假 这种情况可以为这三种情况带来真正的结果:
WallRight = falseWallsLeftOrRight = false
WallRight = falseWallsLeftOrRight = true
WallRight = trueWallsLeftOrRight = false

然后在else if子句中检查的唯一剩余情况是:
WallRight = trueWallsLeftOrRight = true

您正在使用else if子句来检查第二个条件,因此当第一个条件为真时,无法检查第二个条件。