|
|
3 năm trước cách đây | |
|---|---|---|
| .. | ||
| ALSV4 | 3 năm trước cách đây | |
| Image | 3 năm trước cách đây | |
| README.md | 3 năm trước cách đây | |
右上角的UI菜单,使用tab键进行打开关闭,该UI菜单显示了ALS的一些基本操作
该UI显示了键位及其对应操作
| 键位 | 控制操作 |
|---|---|
| WASD | 角色前后左右 |
| Mouse(鼠标) | 控制相机旋转移动 |
| Space | 角色跳跃 |
| LAlt(左Alt键) | 角色蹲(再次点击站起) |
| 2 * LAlt(连续两次左Alt) | 角色翻滚 |
| LShift(左Shift) | 角色冲刺 |
| LCtrl(左Ctrl) | 角色慢走 |
| 鼠标右键 | 瞄准 |
| Q | 覆盖菜单,切换角色状态,使用滚轮切换 |
| MW(mouse while 鼠标滑轮) | 切换覆盖菜单的选项 |
| 1, 2 | 切换旋转模式(1:速度方向 2:注视模式) |
| 单击C | 左肩、右肩视角切换 |
| 长按C | 切换角色视角(第一人称、第三人称) |
| X | 布娃娃系统 |
| M | 切换角色模型 |
| 键位 | Debug操作 |
|---|---|
| Z | 时间膨胀,这里一般是让动作变慢,观察角色动作是否符合预期 |
| V | 调试视角 |
| T | 显示射线(角色脚步的两条射线做IK计算,翻墙时做IK和是否可以攀爬的计算) |
| Y | 显示形状(箭头、视角、摄像机锚点等) |
| U | 显示层的颜色,中立姿势为红色,被覆盖的位置变为其他颜色 |
| I | 显示角色信息 |
ALS中摄像机会根据角色的运动状态的变换进行调整
走路时根据脚步来进行左右晃动
根据运动速度调整晃动幅度
即:角色不同的状态,会对应不同的配置参数
摄像机的管理交给摄像机控制器,摄像机控制器交给玩家控制器来操作
新建ALS_PlayerCameraManager继承自PlayerCameraManager,并将其指定给玩家控制器
而在ALS_PlayerCameraManager控制器中,需要重写Blueprint Update Camera方法
Blueprint Update Camera方法
bool类型变量 Return Value:表示该返回值是否生效(false不生效,true生效)Real类型变量 New Camera FOV:表示视角,默认为0,设置为90查看效果Vector3类型变量 New Camera Location:表示相机坐标PlayerController在程序运行时,会捕获到可操作的角色对象,此时会触发On Posses事件,同时PlayerController中又设置了CameraController,因此在CameraController新建函数提供接口,让PlayerController将被控制的角色设置给CameraController即可
为了方便Debug,可以使用Draw Debug Sphere节点绘制Debug用的球体
为了减少各个模块之间的耦合情况,可以使用Interface接口来进行数据传递,比如这里的摄像机的坐标就需要依赖角色的位置和角度来设置
因此定义接口BPI_Get_3P_PivotTarget,由角色基类实现,由角色类重写
这样CameraController就可以通过PlayerController设置过来的Player变量,获得锚点信息
此处具体操作是定义在
Custom Camera Behaviour方法中的,该方法由Blueprint Update Camera方法调用,只是把计算换了个函数罢了
参数记一下
因为角色的控制大部分是可以公用的,所以这些输入事件的接收就放在角色基类中
调用Character Movement的AddMovementInput、AddControllerYawInput和AddControllerPitchInput函数控制角色的移动和旋转
因为控制角色前后左右移动都是相对世界而言的,所以需要Get Control Rotation的Yaw属性,来获得角色的旋转角度,从而计算角色的前后、左右移动的世界坐标
此处涉及到插值计算RInterpTo,RInterp To这个节点实际上就是Rotation的一个插值的表述,该节点有四个参数,Current和Target分别表示当前角度和目的角度,DeltaTime为间隔时间,一般设置为我们计算机计算每帧的时间,Interp speed为调整的速度,越小速度越慢
这里Get Owning Player Controller获得的就是设置了该Camera Controller的Player Controller;Get World Delta Seconds获得每帧间隔