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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.07 07:19:37