确定硬件指针是否锁定到视图的中心、受限于窗口或者根本不受限制。
锁定时,光标位于视图的中心且无法移动。无论 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();
}
}