首页 > 解决方案 > 我有锁定光标(Unity)的问题?

问题描述

以下代码仅在按下 Escape 键后左键单击鼠标时锁定光标。谁能建议我克服这个问题的方法?

public class lockCursor : MonoBehaviour
{
    public bool locked = true;
    // Start is called before the first frame update
    void Start()
    {
        Cursor.lockState = CursorLockMode.Locked; 
    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Escape))
        {

            if (locked == false)
            {
                Debug.Log("locked");
                Cursor.lockState = CursorLockMode.Locked;
                locked = true;
            }
            else
            {
                Debug.Log("Unlocked");
                Cursor.lockState = CursorLockMode.None;
                locked = false;
            }
        }
    }
}

标签: c#unity3d

解决方案


正如API中所说Cursor.lockState

在编辑器中,当按下退出键或切换应用程序时,光标会自动重置

由于逃生在 Unity 编辑器中具有特殊作用,因此 GameView 在按下它时会失去焦点。

解决这个问题并没有真正的(微不足道的)方法,因为它需要在 Unity 编辑器本身有机会处理该转义键之前拦截他们的按键。(这总是会在传递给播放器之前发生 -> 您的代码。)


但是,您可以做的只是仅对编辑器使用不同的 KeyCode 并仅在诸如之类的构建中转义

#if UNITY_EDITOR
    if(Input.GetKeyDown(KeyCode.E))
#else
    if(Input.GetKeyDown(KeyCode.Escape))
#endif
    {
        ...

您可以E仅在 Unity 编辑器本身内将 替换为您希望用于“模拟转义键”的任何其他 KeyCode。(另见平台相关编译


推荐阅读