确定硬件指针是否锁定到视图的中心、受限于窗口或者根本不受限制。
锁定时,光标位于视图的中心且无法移动。无论 Cursor.visible 的值如何,光标在此状态下均不可见。
当受限时,光标表现正常,但限制在视图中。例如,在 Confined 模式下,如果应用程序在窗口中运行,鼠标光标将无法离开窗口。
要提供良好的用户体验,建议仅支持由用户操作(例如按下按钮)来锁定或限制光标。
光标状态可以由操作系统或 Unity 更改。因此,您应该检查光标的状态,例如当应用程序重新获得焦点或游戏状态发生变化以显示 UI 时。
在 Editor 中,按下 Esc 键或切换应用程序时,光标会自动重置。
在独立平台播放器中,您可以完全控制鼠标光标,但切换应用程序仍会重置光标。
using UnityEngine; using System.Collections;
public class ExampleClass : MonoBehaviour { CursorLockMode wantedMode;
// Apply requested cursor state void SetCursorState() { Cursor.lockState = wantedMode; // Hide cursor when locking Cursor.visible = (CursorLockMode.Locked != wantedMode); }
void OnGUI() { GUILayout.BeginVertical(); // Release cursor on escape keypress if (Input.GetKeyDown(KeyCode.Escape)) Cursor.lockState = wantedMode = CursorLockMode.None;
switch (Cursor.lockState) { case CursorLockMode.None: GUILayout.Label("Cursor is normal"); if (GUILayout.Button("Lock cursor")) wantedMode = CursorLockMode.Locked; if (GUILayout.Button("Confine cursor")) wantedMode = CursorLockMode.Confined; break; case CursorLockMode.Confined: GUILayout.Label("Cursor is confined"); if (GUILayout.Button("Lock cursor")) wantedMode = CursorLockMode.Locked; if (GUILayout.Button("Release cursor")) wantedMode = CursorLockMode.None; break; case CursorLockMode.Locked: GUILayout.Label("Cursor is locked"); if (GUILayout.Button("Unlock cursor")) wantedMode = CursorLockMode.None; if (GUILayout.Button("Confine cursor")) wantedMode = CursorLockMode.Confined; break; }
GUILayout.EndVertical();
SetCursorState(); } }