unity3d 如何在一个if语句中使用多个布尔条件?

ecfdbz9o  于 2023-01-26  发布在  其他
关注(0)|答案(2)|浏览(182)

我正在做一个游戏,玩家必须把石头推到相应的按钮/压板上。我在原型的硬代码中使用了布尔值,但发现自己在布尔值之间应该使用什么标点符号方面遇到了困难?&&,和||没有用。
谢谢你愿意帮忙。
请忽略这些混乱,我需要帮助的是'if'语句中的底部public void OpenDoor,trigger_1和trigger_2之间的那个(用什么来替换逗号)。任何改进代码的建议也很感激。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TriggerAllButtons : UsedOnceFieldButton
{
    bool trigger_1 = false;
    bool trigger_2 = false;
    //bool trigger_3 = false;
    //bool trigger_4 = false;
    //bool trigger_5 = false;
    //bool trigger_6 = false;

    public string button_1 = "Button 1";
    public string button_2 = "Button 2";
    //public string button_3 = "Button 3";
    //public string button_4 = "Button 4";
    //public string button_5 = "Button 5";
    //public string button_6 = "Button 6";

    public string boulder_1 = "Boulder 1";
    public string boulder_2 = "Boulder 2";
    //public string boulder_3 = "Boulder 3";
    //public string boulder_4 = "Boulder 4";
    //public string boulder_5 = "Boulder 5";
    //public string boulder_6 = "Boulder 6";

    public void OnTriggerEnter(Collider other)
    {
        if (other.CompareTag(button_1) && other.CompareTag(boulder_1))
        {
            trigger_1 = true;
        }
        if (other.CompareTag(button_2) && other.CompareTag(boulder_2))
        {
            trigger_2 = true;
        }
    //    if (other.CompareTag(button_3) && other.CompareTag(boulder_3))
    //    {
    //        trigger_3 = true;
    //    }
    //    if (other.CompareTag(button_4) && other.CompareTag(boulder_4))
    //    {
    //        trigger_4 = true;
    //    }
    //    if (other.CompareTag(button_5) && other.CompareTag(boulder_5))
    //    {
    //        trigger_5 = true;
    //    }
    //    if (other.CompareTag(button_6) && other.CompareTag(boulder_6))
    //    {
    //        trigger_6 = true;
    //    }
    }

    public void OpenDoor()
    {
        if (trigger_1 = true, trigger_2 = true) //&& (trigger_3 = true) && (trigger_4 = true) && (trigger_5 = true) && (trigger_6 = true))
        {
            UsedButton();
        }
    }
}
gab6jxml

gab6jxml1#

您混淆了赋值运算符=和比较运算符==。这就是您认为布尔运算符&&||不起作用的原因。

// this is wrong
// trigger_1 and trigger_2 get true ->assigned<- before && is evaluated
// thus the "if" is always true
if (trigger_1 = true && trigger_2 = true)  

// should be like this
// trigger_1 and trigger_2 are only ->compared<- to true before && is evaluated
// this can give "if (false && true)" for example
if (trigger_1 == true && trigger_2 == true)

同样的逻辑也适用于其他布尔运算符(如||)。在错误的if语句中,您意外地更改了bool的值。写if (trigger_1 && trigger_2)就足够了,反正它们是bool

kq0g1dla

kq0g1dla2#

据我所知,你需要用适当的操作符替换开门的逗号,有两个常用的操作符或||,AND &&与OR运算符如果只有一个布尔值为真,条件将返回真,它只返回假时,两个布尔值都为假与运算符两个布尔值都需要为真在其他条件返回真。

相关问题