虚幻4入门 第三人称状态下的自由视角(ControllerRotation+tick+interp)

模仿绝地求生按住Alt自由视角,本篇文章使用RInterp(插值)实现视角的线性回弹效果。
Demo下载

完整蓝图节点预览

只需要创建一个变量


虚幻4入门 第三人称状态下的自由视角(ControllerRotation+tick+interp)_第1张图片
完整蓝图

说明

最主要的是一个继承自Pawn的bool值bUseControllerRotationYaw,这个值在Pawn中默认为false,而在Character中默认为true。


虚幻4入门 第三人称状态下的自由视角(ControllerRotation+tick+interp)_第2张图片
Self的细节面板

这个值的C++定义如下:


虚幻4入门 第三人称状态下的自由视角(ControllerRotation+tick+interp)_第3张图片
Pawn.h

不管它的类型为uint32(为什么使用uint32替代bool),我们只需要把它看成bool类型就可以了。
这个值将会确定是否由PlayerController掌控所控制Pawn的旋转Yaw轴(Roll,Pitch同理)。

在USpringArmComponent或UCameraComponent中也有类似的值,


虚幻4入门 第三人称状态下的自由视角(ControllerRotation+tick+interp)_第4张图片
UspringArmComponent

虚幻4入门 第三人称状态下的自由视角(ControllerRotation+tick+interp)_第5张图片
UCameraCpmponent

如果为真将交给PlayerController掌控,并且手动设置旋转值将无效(你打印出来是成功了的,但是会在稍后由Controller的Tick所更新为ControllerRotation的值),但是如果Character的一个或多个轴被掌控(bUseControllerRotationYaw或其他),那么这个轴将不会下放至控制USpringArmComponent或UCameraComponent,将由自己(self)所控制。

我们将使用AddControllerRotation实现鼠标的输入


虚幻4入门 第三人称状态下的自由视角(ControllerRotation+tick+interp)_第6张图片
蓝图节点

---------------------------------------

我们在左Alt被按下时取消由Controller掌控Character的旋转,下放至SpringArmComponent(摄像机摇臂)被Controller控制。鼠标的输入事件由SpringArm响应,实现摄像机旋转而Character不跟着旋转。并在最后重设Reset为false,避免在Alt快速连按时,Tick事件未及时更新。


虚幻4入门 第三人称状态下的自由视角(ControllerRotation+tick+interp)_第7张图片
输入事件

在Alt松开时将Reset设为真,其作用是在Tick中是否将摄像机重置为角色的正前方的判断。

虚幻4入门 第三人称状态下的自由视角(ControllerRotation+tick+interp)_第8张图片

在Reset为true的时候我们判断摄像机是否已经朝向角色的正前方了(那根从图片外面连接进来的红线),
· 如果已经朝向正前方了,那我们将Reset设为false(下一帧Tick将不会再执行了),并把Character旋转的Yaw轴交由Controller掌控更新。
·如果没有朝向正前方,那我们更新设置ControllerRotation的值(当前Controller掌控更新的是SpringArm,实则设置的是SpringArm的旋转值)。在这里我们将使用 插值 来实现线性的回弹效果。


虚幻4入门 第三人称状态下的自由视角(ControllerRotation+tick+interp)_第9张图片
RInterp

DeltaTime是上次Tick耗时。

判断摄像机是否与角色的朝向一致:


虚幻4入门 第三人称状态下的自由视角(ControllerRotation+tick+interp)_第10张图片
判断摄像机是否与角色的朝向一致

接下来就是鼠标事件的输入:


虚幻4入门 第三人称状态下的自由视角(ControllerRotation+tick+interp)_第11张图片
Mouse Event

End

你可能感兴趣的:(虚幻4入门 第三人称状态下的自由视角(ControllerRotation+tick+interp))