You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

问题解决与代码优化

核心错误修复

你的OpenDoor方法里的if语句存在两个关键错误:

  1. 使用**赋值运算符=**替代了判断逻辑:trigger_1 = true是将true赋值给变量,而非判断变量是否为true。布尔变量可直接作为条件,无需额外写== true。
  2. 使用逗号运算符导致逻辑失效:C#中逗号会依次执行表达式,最终仅返回最后一个表达式的结果,这使得你的条件实际只判断trigger_2 = true的结果,完全忽略了trigger_1的状态。

正确的条件写法应使用逻辑与运算符&&,表示两个条件必须同时满足:

public void OpenDoor()
{
    if (trigger_1 && trigger_2) 
    {
        UsedButton();
    }
}

后续扩展更多trigger时,直接用&&拼接即可:

if (trigger_1 && trigger_2 && trigger_3 && trigger_4 && trigger_5 && trigger_6)

代码优化建议

1. 用数据结构消除重复代码

当前每个按钮和巨石都是单独变量,后续扩展会非常繁琐。可以用自定义结构体+列表来管理配对,大幅简化代码:

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

public class TriggerAllButtons : UsedOnceFieldButton
{
    // 定义配对结构体,存储标签与触发状态
    [System.Serializable]
    public class BoulderButtonPair
    {
        public string buttonTag;
        public string boulderTag;
        public bool isTriggered;
    }

    // 在Unity编辑器中直接添加/编辑配对
    public List<BoulderButtonPair> boulderButtonPairs = new List<BoulderButtonPair>();

    public void OnTriggerEnter(Collider other)
    {
        foreach (var pair in boulderButtonPairs)
        {
            // 修正原逻辑漏洞:一个物体不能同时有两个标签,需根据挂载对象调整
            // 例:脚本挂在按钮上时,判断碰撞的是对应巨石
            if (other.CompareTag(pair.boulderTag))
            {
                pair.isTriggered = true;
            }
        }
    }

    public void OpenDoor()
    {
        bool allTriggered = true;
        foreach (var pair in boulderButtonPairs)
        {
            if (!pair.isTriggered)
            {
                allTriggered = false;
                break;
            }
        }

        if (allTriggered)
        {
            UsedButton();
        }
    }
}

2. 修复OnTriggerEnter的逻辑漏洞

原代码中other.CompareTag(button_1) && other.CompareTag(boulder_1)不成立,因为Unity中一个物体只能有一个标签。需根据脚本挂载对象调整逻辑:

  • 若脚本挂在按钮上:判断碰撞进来的是对应巨石,即other.CompareTag(pair.boulderTag)
  • 若脚本挂在巨石上:判断碰撞的是对应按钮,即other.CompareTag(pair.buttonTag)

3. 用编辑器配置替代硬编码

通过结构体列表,你可以直接在Unity Inspector面板中添加按钮与巨石的配对,无需修改代码,扩展性和维护性更强。

内容的提问来源于stack exchange,提问作者Kenny Yuhan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 09:55:23