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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 11:42:21