UE5 鼠标操控实现

810 阅读2分钟

UE 虚幻引擎里的默认的操控方式是键盘的 WASD 键控制前后左右,鼠标控制方向,滚轮改变速率。在 GIS 地图或者数字孪生场景中通常只需要鼠标操控,左键平移、中键滚轮缩放、右键旋转。UE 默认的操作方式是不满足传统的地图操作方式的,因此需要自定义 Pawn 来实现鼠标控制的逻辑。

网上已经有一些简单的教程或者插件实现了上述需求,但是都不是很完美。大概的思路都是用监听鼠标的XY位置,换算成距离,改变改变Pawn的位置;监听鼠标的XY位置,换算成角度,设置Pawn的旋转;通过改变摄像机弹簧臂长度实现缩放效果。这种简单的实现存在以下几个问题:

  • 平移的尺度在不同缩放层级下不一致,导致鼠标移动相同的位置,场景平移的距离不一致,会使场景平移过快或者过慢;
  • 通过摄像机弹簧臂的方式进行缩放只是改变了相机参数,并没有改变Pawn的位置,不能准确计算相机的位置和姿态参数;
  • 利用鼠标XY变化值简单的改变相机旋转参数,虽然能旋转场景,但是无法实现“定点旋转”,当靠近物旋转的时候场景会发生平移(因为这种旋转方式的参考点一直是坐标原点);

在用UE构建地理场景的时候,通常会使用 Ceisum for UE,可惜Cesium的DynamicPawn也没有完美实现鼠标操作地图。本位受到B站Up主的启发,通过改造DynamicPawn,让其既具备原有的飞行定位等功能,又具备完美的鼠标操控。

蓝图代码在这里:

qrcode_for_gh_3695c3ae18f4_258.jpg关注公众号交流知识哇😄