Unity新手遇CS0019错误:运算符'<'无法应用于bool与int类型
修复Unity中CS0019错误的方法
错误原因
C#不支持a < b < c这类连续比较语法。当你写1065 < mouseY < 1265时,编译器会先计算1065 < mouseY得到布尔值(true/false),再尝试用这个布尔值和1265比较,而<运算符无法作用于bool和int类型,因此触发error CS0019。
修复步骤
替换连续比较逻辑
将所有x < value < y的写法,改成用逻辑与(&&)连接的两个独立比较:x < value && value < y。修正鼠标位置更新问题
原代码在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
相关产品推荐
相关产品推荐

