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

Unity3D出现&&运算符无法应用于bool和void类型报错如何解决

错误根源

该报错的核心原因是 && 逻辑运算符要求左右两侧的表达式都必须返回布尔(bool)类型的值,但你代码中的 OpenInventory() 方法返回值为 void(无返回值),既无法和 true 做相等性判断,也无法参与布尔逻辑运算。

排查与解决方案

第一步:确认OpenInventory方法的定义

你当前的OpenInventory方法大概率是无返回值的写法,类似:

void OpenInventory()
{
    // 背包打开逻辑,比如激活UI
    inventoryUI.SetActive(true);
}

这种无返回值的方法调用后不会产出任何可用于判断的值,因此OpenInventory() == true的写法本身就是非法的。

第二步:根据业务需求选择对应修复方案

方案1:通过状态变量判断背包是否处于开启状态(90%以上的适用场景)

你要实现的是「按下Tab键且背包已打开时,关闭背包」的逻辑,不需要调用OpenInventory方法,而是用专门的状态变量存储背包状态即可:

  1. 首先在类中定义全局状态变量:
// 存储背包当前是否处于打开状态
private bool isInventoryOpen = false;
  1. 同步修改OpenInventory和CloseInventory方法,更新状态变量:
void OpenInventory()
{
    inventoryUI.SetActive(true);
    isInventoryOpen = true;
}

void CloseInventory()
{
    inventoryUI.SetActive(false);
    isInventoryOpen = false;
}
  1. 修改判断语句,直接读取状态变量即可:
if (Input.GetKey(KeyCode.Tab) && isInventoryOpen)
{
    CloseInventory();
}

注:布尔类型判断不需要额外写== true,直接写变量名即可,更简洁也能避免误写为赋值符号=的问题

方案2:修改OpenInventory方法的返回值为bool(适用于需要判断打开操作是否成功的场景)

如果你的业务逻辑需要判断OpenInventory执行是否成功(比如战斗状态下不允许打开背包,打开失败返回false),可以直接修改方法返回值类型:

bool OpenInventory()
{
    // 前置校验:战斗状态下无法打开背包
    if (isInCombat)
    {
        return false;
    }
    inventoryUI.SetActive(true);
    isInventoryOpen = true;
    return true;
}

修改后OpenInventory() == true的写法就可以正常运行。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 17:09:04