Unity报错:无法对bool与Vector2类型应用||运算符,求解决方案
问题解决
首先,你的报错核心原因是:box.size是Vector2类型,而逻辑运算符||的两侧必须都是布尔值(true/false),不能直接把Vector2放在判断条件里。另外,你的代码还缺少「检测鼠标是否点击到当前物体」的逻辑——现在的写法是只要鼠标左键按下,不管点没点到这个物体,都会执行销毁判断,这不符合你的需求。
以下是修正后的完整代码:
using UnityEngine; public class DestroyOnClick : MonoBehaviour { private BoxCollider2D boxCollider; // 定义你要检测的目标尺寸,方便后续修改 private Vector2 targetSize = new Vector2(1, 1); void Start() { boxCollider = GetComponent<BoxCollider2D>(); boxCollider.isTrigger = true; boxCollider.size = targetSize; } void Update() { if (Input.GetMouseButtonDown(0)) { // 从鼠标位置发射2D射线,检测是否点击到当前物体 Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit2D hit = Physics2D.Raycast(ray.origin, ray.direction, Mathf.Infinity); if (hit) { // 判断点击到的物体是否是当前物体,且碰撞器尺寸符合目标值 if (hit.collider.gameObject == gameObject && boxCollider.size == targetSize) { Destroy(gameObject); } } } } }
关键修改点:
- 修复逻辑判断错误:把
box.size改成明确的尺寸对比boxCollider.size == targetSize,确保判断条件是布尔值 - 添加鼠标点击检测逻辑:用
Physics2D.Raycast检测鼠标是否实际点击到了当前物体,避免误触其他物体 - 规范类名:改成
DestroyOnClick,Unity脚本类名必须和文件名一致且遵循大驼峰命名规范,原类名destroy不符合规范可能引发问题 - 抽离目标尺寸变量:把
targetSize单独定义,后续修改尺寸时无需调整多处代码
额外注意事项:
- 如果你的物体是UI元素,应该使用
EventSystem的点击检测(比如实现IPointerClickHandler接口),而非射线检测 - 浮点数对比可能存在精度问题,如果尺寸是动态调整的,建议用
Vector2.Distance(boxCollider.size, targetSize) < 0.01f判断是否接近目标尺寸
内容的提问来源于stack exchange,提问作者kaski fx
相关产品推荐
相关产品推荐

