Ue5.2数字孪生(8)——玩家相机Pawm(自由、飞行视角)、第三人称游戏角色多视角切换控制
通过IA_Look1输入操作事件,为玩家相机添加相机旋转;Pitch值控制玩家相机左右旋转角度;Yaw值控制玩家相机赏析旋转角度; 增强输入操作和输入映射上下文:玩家相机基础设置:玩家相机输入控制蓝图:键盘WASDQE控制相机移动输入:鼠标右键控制相机上下左右旋转:鼠标左键控制相机前后左右移动:鼠标滚轮控制相机视角缩放:鼠标中键点击场景切换相机位置:玩家相机自由视角和第三人称角色视角切换:
·
5.2版本输入方式:
- 自Ue5.1起,输入方式有了比较大的革新啊,当前这个输入方式貌似更强更方便一点啊,也是接着这个做专栏的机会,我也是研究了下;
官方的描述:虚幻引擎中的增强输入 | 虚幻引擎5.1文档 (unrealengine.com)
使用增强输入时,你可以在运行时为玩家添加和删除 映射上下文(Mapping Contexts) 。这样可更轻松地管理大量 操作(Actions) 。你可以根据玩家的当前状态更改特定输入的行为。例如,如果你有一个可以行走、冲刺、俯卧的玩家角色。对于其中每种角色移动类型,你可以交换映射上下文,让CTRL键执行不同的操作。行走时按下CTRL键,角色应该蹲伏。冲刺时按下CTRL键,角色应该滑行。俯卧时按下CTRL键,角色应该重新站起来。
增强输入操作和输入映射上下文:
- 我们先创建几个常用的游戏蓝图类:游戏模式、玩家相机(角色)、玩家控制器;
- 在世界场景设置面板这里指定好我们自己创建的蓝图类;
世界场景设置面板可以在窗口中打开; - 输入操作:输入动作(Input Actions) 是增强输入系统与项目代码之间的通信链接。输入动作在概念上相当于 操作(Action) 和 轴(Axis) 映射名称,只是它们是数据资产。每个输入动作应该表示用户可以执行的某件事,例如"蹲伏"或"发射武器"。你可以在蓝图或C++中添加 输入侦听器(Input Listeners) ,侦听输入动作的状态何时发生变化。
下面让我根据第三人称模板创建两个用于响应玩家相机控制的输入动作,并且设置输入数值为Axis2D;
相机移动:IA_Move1;
相机旋转:IA_Look1; - 输入映射上下文:
输入映射上下文(Input Mapping Contexts) 是输入动作的集合,表示玩家可以处于的特定上下文。它们描述了关于什么会触发给定输入动作的规则。映射上下文可以动态地为每个用户添加、移除或优先安排次序。
我们在切换自由相机和第三人角色控制的时候,就可以通过使用不同的输入映射上下文进行切换;
下面我们创建一个用于控制自由相机的输入映射上下文:IMC_CameraPawn,并添加我们创建好的两个输入操作; - 在输入映射上下文中为输入操作添加具体的操作按键;
相机移动:IA_Move1
W、S:控制相机前后平移
A、D:控制相机左右平移
Q、E:控制相机上下移动 - 相机旋转:IA_Look1
添加鼠标XY 2D轴输入控制;
玩家相机基础设置:
- 在玩家相机:BP_CameraPawn添加弹簧臂组件、摄像机组件和移动组件;
- 在弹簧臂细节面板中,取消摄像机的碰撞检测并设置使用Pawn控制旋转;
摄像机碰撞检测主要是为了防止玩家角色模型被场景中的墙体、石头等物体阻挡,我们的玩家自由相机相机弹簧臂一般都会设置很长,摄像机距离弹簧臂起始点(BP_Camerapawn的根节点)会很远,并且自由相机要观察的是整个游戏场景而非第三人称游戏视角的基于角色模型进行观察;
使用Pawn控制旋转主要是为了后期的通过鼠标控制相机视角的旋转; - 将玩家相机BP_CameraPawn蓝图类拖拽到场景中,并在细节面板中设置自动控制玩家为玩家0;这样游戏一开始运行就会使用我们设置玩家相机进行游戏;
玩家相机输入控制蓝图:
- 游戏开始运行时启用我们创建玩家相机输入映射上下文;
- 先简单了解摄像机旋转Pitch、Yaw、Roll三个轴向的关系:
Pitch对应Y轴:上下旋转,又叫俯仰角;
Yaw对应Z轴:左右旋转,又叫偏航角;
Roll对应X轴:咸鱼翻身,又叫翻滚叫;
键盘WASDQE控制相机移动输入:
- 通过IA_move1输入操作事件,为玩家相机添加移动输入;
由于前后和上下两组移动输入用的是同一个值,需要添加按键输入判断; - 为方便观察相机在场景中的移动状态,可以启用相机延迟,相机延迟也可让相机在移动时有一个类似缓入缓出的效果视觉效果;
在相机弹簧臂细节面板中开启;
鼠标右键控制相机上下左右旋转:
-
通过IA_Look1输入操作事件,为玩家相机添加相机旋转;
Pitch值控制玩家相机左右旋转角度;
Yaw值控制玩家相机赏析旋转角度;
鼠标左键控制相机前后左右移动:
- 通过IA_Look1输入操作事件,为玩家相机添加移动输入;
鼠标滚轮控制相机视角缩放:
- 鼠标滚轮轴事件:
通过屏幕打印字符串调试节点可以看到:鼠标滚轮上滚时输出的浮点数值为正数,鼠标滚轮下滚时输出浮点数值为负数;
分别设置视角缩放固定的系数,每次鼠标滚轮滚动时获取当前的玩家相机的弹簧臂长度乘以对应的缩放系数并且重新设置相机弹簧臂的长度,从而达到鼠标滚轮滚动控制视角缩放的效果;另外还需要限制相机弹簧臂长度值范围;
鼠标中键点击场景切换相机位置:
- 使用Line Trace By Channel通道检测线条节点,获取到鼠标中键点击时鼠标在场景空间中的位置信息;将位置向量信息设置给玩家相机位置,继而切换相机位置;
- 由于鼠标中键还控制着相机的上下移动(鼠标中键按住拖动相机上下移动);
由此可以通过判断鼠标中键弹起时玩家相机的位置和按下时玩家相机的位置是否发生变化,来区分玩家相机是上下移动还是点击切换位置; - 到这玩家玩家相机基本的控制方式就完成了;
玩家相机自由视角和第三人称角色视角切换:
- 添加第三人称游戏模板,将游戏角色蓝图BP_ThirdPersonCharacter拖拽到游戏场景中;
- 在玩家控制中游戏开始运行时通过类获取两个玩家角色类的引用,并存为变量方便后续调用;
- 在玩家控制器中,可通过键盘或者Umg用户控件(UI)作为切换游戏角色的触发事件;
通过Possess控制节点切换控制玩家角色,
通过Add Mapping Context添加映射上下文切换对应角色操作映射;
第三人称角色视角缩放:
- 和玩家相机BP_CameraPawn同样的原理设置第三人称角色视角缩放;
- 需要注意的问题:
1.在弹簧臂长度数值越小,乘以缩放系数之后,得到的数值变化也会很小;
换句话说就是:锁着弹簧臂越来越短,视角缩放幅度会越来越小;
我将相机弹簧臂放在了角色头部的位置(第一人称、人眼的高度); - 解决弹簧臂长度小于50时的缩放幅度过小问题:
设置弹簧臂长度基于50的判断,设置两组缩放系数; - 避免弹簧臂长度为0时,相机和角色模型重叠问题:
同样基于弹簧臂长度50进行判断,设置角色模型的可视性; - 还有一个需要注意的点,就是弹簧臂长度最小值的问题:
我们都知道0乘以任何数都等于0;
当然,浮点数会记录多个小数位;也不会出现弹簧臂长度绝对等于0,从而无法在进行视角缩放的情况;
但是,无异于增加了鼠标滚轮的转动次数;
为此设置最小值为1,可以有效的避免问题; - 最后,关于玩家飞行相机和第三人称游戏角色的切换控制到这就结束了;好用记得给我点赞呀!!!~~~
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
已为社区贡献3条内容
所有评论(0)