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

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

完整蓝图节点预览

只需要创建一个变量


完整蓝图

说明

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


Self的细节面板

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


Pawn.h

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

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


UspringArmComponent

UCameraCpmponent

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

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


蓝图节点

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

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


输入事件

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

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


RInterp

DeltaTime是上次Tick耗时。

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


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

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


Mouse Event

End

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容