当前位置: 首页 > news >正文

Unity的Cursor.lockState

2025年8月24日,周日晚上


Cursor.lockState = CursorLockMode.Locked;这行代码在Unity中是​​将鼠标光标锁定到游戏窗口的中心,并隐藏鼠标光标​​。这是第一人称射击(FPS)、第三人称等类型游戏中实现视角控制的常用核心代码。

下面这个表格能帮你快速了解三种不同鼠标锁定模式的区别:

锁定模式 (CursorLockMode)

光标行为

可见性

典型应用场景

​Locked​

锁定在游戏窗口中心,无法移动。鼠标移动数据仍可通过 Input.GetAxis("Mouse X/Y")获取。

​强制隐藏​​,无论 Cursor.visible设置为何值。

FPS游戏、第一/第三人称视角控制

​Confined​

光标可以自由移动,但被限制在游戏窗口的边界内,无法移出窗口。

正常显示,或由 Cursor.visible控制。

策略游戏、模拟经营游戏、有鼠标交互的UI

​None​

无任何限制,光标可以自由移动到屏幕的任何位置,包括游戏窗口之外。

正常显示,或由 Cursor.visible控制。

游戏暂停菜单、主界面、系统设置

🔧 如何使用与注意事项

基本用法

通常,你会在玩家控制脚本的 Update()Start()方法中设置这些状态。

using UnityEngine;public class MouseControl : MonoBehaviour
{void Start(){// 锁定并隐藏鼠标Cursor.lockState = CursorLockMode.Locked;Cursor.visible = false; // 在Locked模式下,此行可省略,但明确设置是好习惯}void Update(){// 通常用ESC键来解锁鼠标,方便玩家操作if (Input.GetKeyDown(KeyCode.Escape)){Cursor.lockState = CursorLockMode.None;Cursor.visible = true;}// 再次点击鼠标时重新锁定(可选)if (Input.GetMouseButtonDown(0) && Cursor.lockState == CursorLockMode.None){Cursor.lockState = CursorLockMode.Locked;Cursor.visible = false;}}
}
重要注意事项
  1. ​版本差异​​:在较旧的Unity版本(如Unity4.x)中,使用的是 Screen.lockCursor属性。从Unity5.x开始,官方推荐使用 Cursor.lockStateCursor.visible来替代。

  2. Locked模式优先级最高​​:在 CursorLockMode.Locked模式下,无论 Cursor.visible的值设置为 true还是 false,硬件光标都会被强制隐藏。 因此,若需要光标可见,需先将锁定模式设为 NoneConfined

  3. ​引擎自动处理​​:在编辑器中进行游戏测试时,Unity编辑器通常会自动处理鼠标锁定和解锁的切换。但当游戏获得焦点时,设定的状态会生效。

  4. ​平台差异​​:这些功能在绝大多数平台上都得到支持,但个别平台的具体行为可能存在细微差异,进行多平台发布时需进行测试。

💡 实战技巧:实现平滑的鼠标视角控制

当你锁定鼠标后,通常需要获取鼠标的移动输入来控制摄像机旋转。这里有一个简单的示例:

public class FPSCameraLook : MonoBehaviour
{public float mouseSensitivity = 100.0f;public Transform playerBody; // 玩家的父物体,用于左右旋转private float xRotation = 0f;void Update(){// 只有当鼠标被锁定时才处理视角旋转if (Cursor.lockState == CursorLockMode.Locked){float mouseX = Input.GetAxis("Mouse X") * mouseSensitivity * Time.deltaTime;float mouseY = Input.GetAxis("Mouse Y") * mouseSensitivity * Time.deltaTime;xRotation -= mouseY;xRotation = Mathf.Clamp(xRotation, -90f, 90f); // 限制上下抬头幅度transform.localRotation = Quaternion.Euler(xRotation, 0f, 0f);playerBody.Rotate(Vector3.up * mouseX);}}
}

⚠️ 常见问题排查

如果遇到鼠标行为异常,可以检查以下几点:

  • ​状态不同步​​:确保在所有需要改变光标状态的场景(如暂停游戏、打开菜单、切换场景)中都正确地更新了 Cursor.lockStateCursor.visible

  • ​UI冲突​​:如果使用了复杂的UI系统(如Unity的UGUI或第三方插件),确保在打开UI界面时没有忘记解锁鼠标(设置为 CursorLockMode.None)。

  • ​帧率影响​​:极低的帧率可能会影响鼠标输入采样的平滑度,但这通常不影响锁定状态本身。

希望这些信息能帮助你更好地理解和使用Unity的鼠标锁定功能。

http://www.dtcms.com/a/348799.html

相关文章:

  • 油雾环境下漏检率↓79%!陌讯多模态检测算法在加油站智能巡检的落地实践
  • VMware Workstation 不可恢复错误:(vcpu-0)
  • 强反射场景漏检率↓89%!陌讯动态感知算法在护目镜合规检测的实战解析
  • 二叉树学习笔记
  • MyBatis 和 MyBatis-Plus对比
  • 【GEE+Python 实战】用 Sentinel-2 监测 2024 年研究区 NDVI 变化(附完整源码与避坑指南)
  • 深入解析十大经典排序算法原理与实现
  • 理想汽车智驾方案介绍 2|MindVLA 方案详解
  • Java 编译器的世界:前端、JIT 与 AOT 的秘密:详解 Java 的编译过程与编译器生态
  • 秦始皇在位时的重要贡献
  • 室联人形机器人:家政服务任务结构化、技术要点、深入应用FPGA的控制系统框架设计(整合版A)
  • Redis 启动的三种方式:从基础到实战配置指南
  • WSL-linux部署IndexTTS 记录(含本地 CUDA/cuDNN 编译依赖说明)
  • 深度剖析Spring AI源码(二):Model抽象层 - “驯服”天下AI的“紧箍咒”
  • 《Linux 网络编程二:UDP 与 TCP 的差异、应用及问题应对》
  • Grafana k6 性能测试
  • golang5字符串
  • Linux驱动之DMA(三)
  • 强光干扰下漏检率↓78%!陌讯动态决策算法在智慧交通违停检测的实战优化
  • 自动化运维之k8s——Kubernetes集群部署、pod、service微服务、kubernetes网络通信
  • SSRF的学习笔记
  • MATLAB 入门:从变量定义到基础绘图的完整上手指南
  • 学习Java25天
  • 杭电oj第2061题:Treasure the new start, freshmen!
  • 今天学习计算机网格技术的TCP,UDP以及OSPF
  • 南科大C++ 第四章(数组,结构体,联合体,枚举)
  • odoo 工作台
  • Microsoft .NET Packages AIO:全面的.NET开发框架
  • 强光干扰下检出率↑93%!陌讯多模态融合算法在充电桩车位占用检测的实战解析
  • DDR3入门系列(一)——初识DDR3