Unity3D出现&&运算符无法应用于bool和void类型报错如何解决
错误根源
该报错的核心原因是 && 逻辑运算符要求左右两侧的表达式都必须返回布尔(bool)类型的值,但你代码中的 OpenInventory() 方法返回值为 void(无返回值),既无法和 true 做相等性判断,也无法参与布尔逻辑运算。
排查与解决方案
第一步:确认OpenInventory方法的定义
你当前的OpenInventory方法大概率是无返回值的写法,类似:
void OpenInventory() { // 背包打开逻辑,比如激活UI inventoryUI.SetActive(true); }
这种无返回值的方法调用后不会产出任何可用于判断的值,因此OpenInventory() == true的写法本身就是非法的。
第二步:根据业务需求选择对应修复方案
方案1:通过状态变量判断背包是否处于开启状态(90%以上的适用场景)
你要实现的是「按下Tab键且背包已打开时,关闭背包」的逻辑,不需要调用OpenInventory方法,而是用专门的状态变量存储背包状态即可:
- 首先在类中定义全局状态变量:
// 存储背包当前是否处于打开状态 private bool isInventoryOpen = false;
- 同步修改
OpenInventory和CloseInventory方法,更新状态变量:
void OpenInventory() { inventoryUI.SetActive(true); isInventoryOpen = true; } void CloseInventory() { inventoryUI.SetActive(false); isInventoryOpen = false; }
- 修改判断语句,直接读取状态变量即可:
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
相关产品推荐
相关产品推荐

