UE4学习笔记:游戏视口中的“锁定(Lock)”和“捕获(Capture)”对玩家鼠标的影响
本随笔用于记录学习UE4过程中在设置“鼠标锁定模式(Mouse Lock Mode)”和“鼠标捕获模式(Mouse Capture Mode)”时遇到的问题以及自己测试出来的一些结果。使用的引擎版本是UE4.27
随笔作者还在学习阶段,难免遇到一些技术上和书面上的问题,如果你发现了这些类问题,欢迎在评论区或私信与我讨论。
目录
涉及的功能
鼠标锁定模式(Mouse Lock Mode)
鼠标锁定模式(Mouse Lock Mode)指的是玩家在游戏过程中限制鼠标移动到视口外的方法,该模式最大的作用就是当玩家频繁移动鼠标时不会让鼠标因为移动到视口外点击到了其他窗口从而让游戏失去响应。
引擎提供的鼠标锁定模式有如下几种:
UENUM()
enum class EMouseLockMode : uint8
{
/** Do not lock the mouse cursor to the viewport */
DoNotLock,
/** Only lock the mouse cursor to the viewport when the mouse is captured */
LockOnCapture,
/** Always lock the mouse cursor to the viewport */
LockAlways,
/** Lock the cursor if we're in fullscreen */
LockInFullscreen,
};
- 不锁定(Do Not Lock):不会锁定鼠标,玩家可以任意移动到视口外面。
- 捕获时锁定(Lock On Capture):当视口捕获到玩家鼠标时锁定。关于“捕获(Capture)”会在下一小节描述。
- 总是锁定(Lock Always):一直鼠标锁定在视口内,无论视口有没有捕获到玩家鼠标。需要注意的是这里并不包括类似“按下Win徽标键”这类外部影响鼠标的操作,使用Win徽标键依然能让游戏视口不再捕获鼠标。
- 全屏时捕获(Lock In Fullscreen):和“总是捕获”类似,但是仅在全屏窗口时才会捕获,即是在“无边框全屏”模式下也不会捕获。
鼠标捕获模式(Mouse Capture Mode)
鼠标捕获模式(Capture Mode)指的是游戏视口在什么状态下会捕获鼠标并用于响应鼠标事件。“捕获鼠标”说明的是一种状态,当项目处于这种状态的时候鼠标不再响应UI,但是能够响应到系统对鼠标的调用。例如持续获取鼠标X轴或Y轴上的值。
引擎提供的捕获模式如下:
UENUM()
enum class EMouseCaptureMode : uint8
{
/** Do not capture the mouse at all */
NoCapture,
/** Capture the mouse permanently when the viewport is clicked, and consume the initial mouse down that caused the capture so it isn't processed by player input */
CapturePermanently,
/** Capture the mouse permanently when the viewport is clicked, and allow player input to process the mouse down that caused the capture */
CapturePermanently_IncludingInitialMouseDown,
/** Capture the mouse during a mouse down, releases on mouse up */
CaptureDuringMouseDown,
/** Capture only when the right mouse button is down, not any of the other mouse buttons */
CaptureDuringRightMouseDown,
};
- 不捕获(No Capture):无论鼠标是否在视口内都不会响应鼠标的事件。
- 永久捕获(Capture Permanently):当视口被点击后将会持续捕获鼠标事件,但是需要注意第一下点击造成的鼠标操作并不会传递给项目用于响应鼠标事件。也就是说项目有一个点击鼠标左键开火事件,用户从未捕获状态用鼠标左键点击了游戏视口之后并不会触发开火事件。
- 永久捕获包括初次按下鼠标(Capture Permanently Including Initial Mouse Down):该模式和“永久捕获”类似,但是当用户从未捕获状态用鼠标左键点击了游戏视口之后同时也会触发开火事件。
- 当鼠标按下时捕获(Capture During Mouse Down):当鼠标上的任意按键被按下时进行捕获,松开按键后会释放。
- 当鼠标右键按下时捕获(Capture During Right Mouse Down):当鼠标右键被按下时进行捕获,松开后释放。个人猜测该模式用于实现编辑器窗口按下右键可以在场景里导航的功能。
捕获时隐藏鼠标(Hide Cursor During Capture)
该选项表明项目在捕获鼠标后是否要隐藏鼠标,一般情况下是在启用了“显示鼠标”后需要额外控制才需要开启该选项。需要注意的是隐藏后的鼠标虽然是不可见的,但是如果玩家没有启用锁定鼠标的话鼠标会在不可见的状态下移动到窗口在造成游戏视口接收不到响应的问题。但是搭配“显示鼠标”选项可以实现时捕获鼠标时产生鼠标事件但是不改变鼠标的位置,释放鼠标后可以让鼠标不被锁定在视口的功能。
显示鼠标(Show Mouse Cursor)
该选项用于是否显示玩家鼠标。搭配“捕获时隐藏鼠标”功能可以实现捕获鼠标时产生鼠标事件但是不改变鼠标的位置,释放鼠标后可以让鼠标不被锁定在视口的功能。
在“永久捕获”模式下开启“捕获时隐藏鼠标”和“显示鼠标”功能可能导致鼠标位置异常
在测试过程中发现如果使用上述组合捕获鼠标时移动鼠标会让鼠标位置偶尔出现在异常的位置。
结合后可以实现的功能
虚幻编辑器在视口内点击鼠标右键后可以移动鼠标来移动视角,松开右键后固定视角,同时并不影响鼠标移动到视口外的按钮
- 不锁定+当鼠标右键按下时捕获+开启捕获时隐藏鼠标+显示鼠标
在一个窗口UI里浏览模型并且需要能够无限旋转模型
- 不锁定+当鼠标按下时捕获+开启捕获时隐藏鼠标+不开启显示鼠标
无交互UI的游戏视口
- 总是锁定+永久捕获+不开启捕获时隐藏鼠标+不开启显示鼠标。
打开菜单之类的交互UI后
- 不锁定+不捕获+不开启捕获时隐藏鼠标+开启显示鼠标。

浙公网安备 33010602011771号