Unity设置targetFrameRate后Input.GetMouseButtonDown(0)异常触发求助
当设置Application.targetFrameRate = 60;时,Input.GetMouseButtonDown(0)会在鼠标按下和释放时均返回True,但Input.GetMouseButtonUp(0)功能正常。测试代码如下:
void Update() { if(Input.GetMouseButtonDown(0)) { Debug.Log("Down"); } }
运行后点击和释放鼠标都会打印"Down",以下是几种可行的解决方法:
- 改用
Time.captureFramerate控制帧率:该方法通过捕获帧来限制帧率,不会干扰输入事件的检测,设置方式为:void Start() { Time.captureFramerate = 60; } - 手动过滤重复触发:记录上一帧的鼠标状态,确保只在真正按下的帧触发逻辑:
private bool _lastMouseDown; void Update() { bool isMouseDown = Input.GetMouseButtonDown(0); if (isMouseDown && !_lastMouseDown) { Debug.Log("Down"); } _lastMouseDown = isMouseDown; } - 检查并升级Unity版本:部分旧版本Unity存在
Application.targetFrameRate与输入事件冲突的bug,建议升级到LTS稳定版本(如2021.3及以上) - 规范
targetFrameRate的设置时机:确保仅在初始化阶段(如Awake或Start)设置一次Application.targetFrameRate = 60;,不要在Update等循环方法中重复设置
内容的提问来源于stack exchange,提问作者BenjaminSimon
相关产品推荐
相关产品推荐

