欢迎光临散文网 会员登陆 & 注册

UE Animation Note8

2023-09-10 16:34 作者:中专人  | 我要投稿

一、

摄像机震动可以添加为自定义的动画通知,需要在通知中为playercontroller添加Clent Start Camera Shake节点并选择继承Camera Shake Base Class的蓝图类。

二、关于ALS_PlayerCameraManager蓝图中CalculateAxisIndependentLag函数Unrotate节点的使用:

起初看到这里有些疑惑:有了CurrentLocation和TargetLocation,直接插值不就行了,为什么要先Unrotate再Rotate,这不是有些多余吗?

其实不然,函数名称其实说明了这样做的原因:Calculate Axis Independent Lag,直译为轴独立的延迟计算。好吧,还是有点难懂,但是如果注意到使用Lag Speeds的xyz分量分别对位置的xyz分量进行插值,而不是直接使用一个Lag Speed直接对位置向量插值。那么可以看出,这样做可以对Lag的xyz上的速度分别控制。

等等,好像偏题了,这和Unrotate、Rotate有什么关系吗?

当然有了,不信的话先把Unrotate、Rotate去掉看看效果(后面解释两个节点的作用):

为了直观效果,将x分量的Lag Speed改成较小值0.5。

效果一:

图中正前方为世界坐标系下x轴正方向

摄像机在世界坐标系的x轴方向上果然Lag Speed很小(被角色甩在后面),这不对吗?

当然不对了,请看效果二:

图中正前方为世界坐标系y轴正方向,左方为世界坐标系x轴正方向

呀!当角色向世界坐标系y轴正方向奔跑时,延迟效果不起作用了,也就是说我们对Lag Speed分量的修改是在世界坐标系上!这就导致了一个问题:玩家的摄像机转向时,玩家仍然希望摄像机的延迟是向前的,而不是向左的(世界坐标系的x轴)。换言之,就是玩家希望对Lag Speed分量的修改是基于摄像机局部坐标系而不是世界坐标系,也就是说如果修改了Lag Speed的x分量,那么无论摄像机如何旋转,影响的都是玩家视野前方(摄像机局部坐标系的x轴)。

此时,Unrotate抵消了摄像机的旋转后Rotate再旋转回去恢复原样,这样就等效于从局部空间变换到世界空间,插值后,再变换回局部空间。这样,在插值的那一步,无论摄像机如何旋转,xyz分量都是一致的(旋转效果已抵消)。

数学推导很简单(证个全等三角形就行了,这里就不写了)。

值得一提的是,可以使用这个原理制作始终指向角色前方(局部坐标系的x轴正方向)的箭头:

Unrotate的实质就是抵消角色在世界下的旋转,从而使向量的处理基于角色的局部坐标系。

计算角色在空中时身体是否倾斜

如侵删,欢迎评论指正。

参考来源:

https://blog.csdn.net/t1370620378/article/details/121540493

UE Animation Note8的评论 (共 条)

分享到微博请遵守国家法律