Unity 3D中如何实现隐藏光标且仅在按下Shift+Escape组合键时显示?
Unity 3D中如何实现隐藏光标且仅在按下Shift+Escape组合键时显示?
这个问题我之前踩过坑!Unity默认会把Escape键和光标解锁操作绑定在一起,所以你单独按Escape才会直接触发光标显示,完全绕开了你的代码逻辑。咱们一步步来解决:
1. 先关闭Unity的默认Escape解锁行为
打开顶部菜单的Edit → Project Settings,在弹出的窗口里找到Input Manager。在Axes列表里定位到“Cancel”这一项,把它的Positive Button从“escape”清空(或者直接删除这个轴也可以)。这样Unity就不会自作主张,用Escape键解锁光标了。
2. 编写正确的光标控制代码
根据你的实际需求,这里分两种情况给你适配代码:
情况一:按住Shift+Escape时显示光标,松开就隐藏
如果你的需求是「只有同时按住两个键时光标才显示,松开任意一个就隐藏」,用这个代码:
void Update() { // 检测是否同时按住左Shift和Escape bool isComboPressed = Input.GetKey(KeyCode.LeftShift) && Input.GetKey(KeyCode.Escape); if (isComboPressed) { Cursor.lockState = CursorLockMode.None; Cursor.visible = true; } else { Cursor.lockState = CursorLockMode.Locked; Cursor.visible = false; } }
情况二:按下Shift+Escape组合键切换光标显示/隐藏状态
如果你是想按一次组合键显示光标,再按一次隐藏,那用这个代码(用GetKeyDown确保只在按下瞬间触发一次状态切换):
private bool _isCursorVisible = false; void Update() { // 仅在组合键同时按下的瞬间切换状态 if (Input.GetKeyDown(KeyCode.LeftShift) && Input.GetKeyDown(KeyCode.Escape)) { _isCursorVisible = !_isCursorVisible; UpdateCursorState(); } // 额外兜底:确保光标隐藏时始终保持锁定状态 if (!_isCursorVisible) { UpdateCursorState(); } } private void UpdateCursorState() { Cursor.lockState = _isCursorVisible ? CursorLockMode.None : CursorLockMode.Locked; Cursor.visible = _isCursorVisible; }
这样处理后,就完全按照你的需求运行:平时光标保持隐藏,只有触发Shift+Escape的组合操作时才会显示啦。
内容来源于stack exchange
相关产品推荐
相关产品推荐

