实现视角平移、旋转和缩放
引言
建筑可视化项目中,视角平移、旋转和缩放是非常常见的,比如一些智慧城市、智慧园区项目中,经常用到。这里讲一下实现过程。
功能说明
W、A、S、D四个键控制镜头前后左右移动- 按住鼠标左键拖动画面实现镜头前后左右移动
- 按住鼠标右键拖动画面实现镜头旋转
- 滑动鼠标滚轮实现画面缩放
实现思路
- 新建角色、控制器、游戏模式
- 在项目设置中
input选项可以添加按键轴映射Axis mappings - 调用鼠标左键滑动和右键滑动的事件,触发修改角色位置信息或旋转信息
- 添加弹簧臂,控制弹簧臂长度来控制画面缩放
实现过程
1. 创建角色类、玩家控制器类、游戏模式类,并应用到关卡
.B91JCzKh.png)
注意,角色需要设置控制玩家0 player0,角色类中需要添加一个摄像机camera.hsZ2Qm3O.png)
2. 新建项目如果是第三人称游戏模板,会自带轴映射
如果没有相关轴映射,需要自己添加设置。
3. 开启鼠标显示事件和点击事件
.wvdtToU2.png)
4. 实现按键WASD移动
不添加Z轴的值,是为了限制不随着视角移动改变高度。
InputAxis MoveForward就是我们设置好的前后移动轴映射;AddMovementInput为添加移动距离的事件;GetActorForwardVector为获取前后方向距离的向量;
5. 实现按住鼠标左键移动
左右移动:
前后移动: .BYkBjVEr.png)
6. 实现按住右键旋转
当角色(摄像机)左右旋转的时候,Z轴会发生变化,所以我们只需要设置Z轴的旋转值就可以了。同理,上下旋转的时候,只修改Y值就可以了 .CO5farOZ.png)
注意:这里需使用
SetWorldRotation而不是AddWorldRotation,因为浮点数0.0不绝对为0,所以AddWorldRotation会使X轴不断变化。SetWorldRotation节点的Target需要是SceneRoot,不能是camera,不然会影响缩放功能,同理,也不能用SetActorRotation
7. 实现滑轮缩放画面
添加弹簧臂,并设置相机旋转完成后有个滞后效果。 .CbIx5LHg.png)
实现缩放逻辑 .Bf8Ar89N.png)