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

Unity新手遇CS0019错误:运算符'<'无法应用于bool与int类型

修复Unity中CS0019错误的方法

错误原因

C#不支持a < b < c这类连续比较语法。当你写1065 < mouseY < 1265时,编译器会先计算1065 < mouseY得到布尔值(true/false),再尝试用这个布尔值和1265比较,而<运算符无法作用于bool和int类型,因此触发error CS0019。

修复步骤

  1. 替换连续比较逻辑
    将所有x < value < y的写法,改成用逻辑与(&&)连接的两个独立比较:x < value && value < y。

  2. 修正鼠标位置更新问题
    原代码在Input.GetMouseButtonDown(0)分支里,重新声明了局部变量mouseX和mouseY,导致全局变量始终使用Start方法初始化的旧值。需要去掉局部变量的float声明,直接赋值给全局变量。

修复后的完整代码

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

public class isDragging : MonoBehaviour
{
    private GameObject playerObj = null;
    private bool mouseDown = false;
    private string chooseNumber = "";
    private float mouseX;
    private float mouseY;

    private void Start()
    {
        if (playerObj == null)
            playerObj = GameObject.Find("screen");
        mouseX = Input.mousePosition.x;
        mouseY = Input.mousePosition.y;
    }

    private void Update()
    {
        Debug.Log("Player Position: X = " + playerObj.transform.position.x + " --- Y = " + playerObj.transform.position.y + " --- Z = " +
        playerObj.transform.position.z);
        
        if (!mouseDown && Input.GetMouseButtonDown(0))
        {
            mouseDown = true;
            // 直接更新全局变量,不再声明局部变量
            mouseX = Input.mousePosition.x;
            mouseY = Input.mousePosition.y;
        }
        else if (mouseDown)
        {
            if (playerObj.transform.position.x > 727)
            {
                transform.position = new Vector3(1271.0f, transform.position.y, transform.position.z);
                chooseNumber = "";
            }
            else
            {
                transform.position = new Vector3(178.0f, transform.position.y, transform.position.z);
                // 替换连续比较为&&连接的条件
                if (1065 < mouseY && mouseY < 1265)
                {
                    if (318 < mouseX && mouseX < 500)
                        chooseNumber += "1";
                    else if (575 < mouseX && mouseX < 768)
                        chooseNumber += "2";
                    else if (840 < mouseX && mouseX < 1018)
                        chooseNumber += "3";
                }
                else if (765 < mouseY && mouseY < 965)
                {
                    if (318 < mouseX && mouseX < 500)
                        chooseNumber += "4";
                    else if (575 < mouseX && mouseX < 768)
                        chooseNumber += "5";
                    else if (840 < mouseX && mouseX < 1018)
                        chooseNumber += "6";
                }
                else if (450 < mouseY && mouseY < 650)
                {
                    if (318 < mouseX && mouseX < 500)
                        chooseNumber += "7";
                    else if (575 < mouseX && mouseX < 768)
                        chooseNumber += "8";
                    else if (840 < mouseX && mouseX < 1018)
                        chooseNumber += "9";
                }
            }
        }

        Debug.Log(chooseNumber);
    }
}

额外优化建议

  • 可以把坐标范围定义为常量(比如private const int Y_TOP_START = 1065;),提升代码可读性,后期修改也更便捷。
  • 如果需要在拖拽过程中持续跟踪鼠标位置,要在mouseDown为true的分支里同步更新mouseX和mouseY,否则只会记录按下瞬间的位置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 01:50:25