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

Unreal Engine中如何居中鼠标光标并检测游戏窗口焦点状态

窗口焦点检测方案(解决切窗后鼠标仍强制居中问题)

实现鼠标居中时不要无脑逐帧强制设置鼠标坐标,必须绑定窗口焦点状态判断逻辑,仅在游戏窗口为前台激活状态时才触发居中逻辑,不同开发场景可直接用对应方案:

  • 原生Win32开发
    1. 优先在窗口消息循环中监听WM_ACTIVATE消息:当wParam低位值为WA_INACTIVE时,立即暂停鼠标居中逻辑,如果你之前调用ClipCursor限制了鼠标移动范围,此时要传空指针调用该接口解除限制;当收到WA_ACTIVE/WA_CLICKACTIVE状态值时,再恢复居中逻辑、重新施加鼠标移动限制。
    2. 可加一层兜底校验:逐帧调用GetForegroundWindow()获取当前系统前台窗口句柄,和自身游戏窗口句柄做比对,二者完全一致时才执行鼠标居中操作。
  • Unity开发
    直接挂载脚本监听OnApplicationFocus(bool hasFocus)生命周期回调:当传入的hasFocus值为false时,关闭自定义鼠标居中的逻辑开关,同时将Cursor.lockState设置为CursorLockMode.None释放鼠标锁定;当hasFocus为true时,直接把Cursor.lockState切为CursorLockMode.Locked即可,该模式会自动将鼠标锁定在窗口中心,切窗时会自动释放锁,不需要手动计算坐标移动鼠标,稳定性远高于自定义居中逻辑。
  • Unreal Engine开发
    绑定FSlateApplication::Get().OnApplicationActivationStateChanged()全局委托,在回调中判断窗口激活状态:失活时关闭鼠标居中逻辑、解除鼠标锁定,激活时恢复逻辑即可。也可以直接调用SetInputMode(FInputModeGameOnly())使用引擎自带的游戏输入模式,该模式原生适配窗口切出/切入的鼠标锁定、释放逻辑,不需要额外手写焦点判断。

踩坑提醒:如果完全不做焦点判断,逐帧强制把鼠标坐标拉到屏幕中心,不光Alt+Tab切窗会出现鼠标被抢的问题,系统弹窗、通知弹出时也会被强制拽回游戏窗口,会严重影响使用体验。

当前实现效果参考

内容的提问来源于stack exchange,提问作者Amazing User

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 20:42:19