Ursina FirstPersonController鼠标低速移动时rotation_X异常上移求助
Ursina FirstPersonController视角异常(Linux Mint 21下鼠标缓慢移动自动上移)
问题现象
- 在Linux Mint 21系统中使用Ursina的
FirstPersonController时,缓慢移动鼠标或触摸板,视角除跟随鼠标方向转动外,会额外沿X轴上移;无论缓慢向哪个方向移动鼠标,角色都会抬头。 - 鼠标移动越快,问题越不明显:快速下移鼠标角色会低头,但缓慢下移时,
rotation_x值下降,角色反而抬头。 - 同一设备在Win10系统下无此异常,重装VS Code、Anaconda、Ursina均未解决。
复现代码:
from ursina import * from ursina.prefabs.first_person_controller import FirstPersonController app = Ursina() player = FirstPersonController() Sky() def input(key): if key == 'escape': quit() app.run()
解决方法
1. 调整Ursina内置视角参数
修改FirstPersonController的鼠标灵敏度或禁用视角平滑,适配Linux下的输入逻辑:
player = FirstPersonController( mouse_sensitivity=(15, 15), # 降低灵敏度,可根据实际情况调整 smooth_look=False # 关闭视角平滑,避免输入处理异常 )
2. 修复系统输入设备设置与驱动
- 打开系统设置的鼠标和触摸板面板,关闭以下功能:
- 鼠标加速度
- 触摸板自然滚动
- 触摸板智能手势(如三指拖动、缩放)
- 若为Synaptics触摸板,安装官方驱动并重启:
sudo apt install xserver-xorg-input-synaptics sudo systemctl restart display-manager
3. 自定义鼠标输入控制逻辑
绕过Ursina默认的视角处理,手动实现鼠标旋转逻辑:
from ursina import * from ursina.prefabs.first_person_controller import FirstPersonController app = Ursina() player = FirstPersonController() Sky() # 关闭默认视角控制 player.look_enabled = False def update(): if mouse.locked: # 直接映射鼠标移动到视角旋转 player.rotation_y += mouse.velocity[0] * 20 player.camera_pivot.rotation_x -= mouse.velocity[1] * 20 # 限制上下视角范围,防止过度旋转 player.camera_pivot.rotation_x = clamp(player.camera_pivot.rotation_x, -90, 90) def input(key): if key == 'escape': quit() if key == 'right mouse down': mouse.locked = True if key == 'right mouse up': mouse.locked = False app.run()
4. 切换Ursina渲染后端
尝试使用Vulkan后端(需系统支持),解决输入处理兼容性问题:
app = Ursina(backend='vulkan')
内容的提问来源于stack exchange,提问作者siriustop
相关产品推荐
相关产品推荐

