UE Animation Note8
一、
攝像機震動可以添加為自定義的動畫通知,需要在通知中為playercontroller添加Clent Start Camera Shake節(jié)點并選擇繼承Camera Shake Base Class的藍圖類。
二、關(guān)于ALS_PlayerCameraManager藍圖中CalculateAxisIndependentLag函數(shù)Unrotate節(jié)點的使用:

起初看到這里有些疑惑:有了CurrentLocation和TargetLocation,直接插值不就行了,為什么要先Unrotate再Rotate,這不是有些多余嗎?
其實不然,函數(shù)名稱其實說明了這樣做的原因:Calculate Axis Independent Lag,直譯為軸獨立的延遲計算。好吧,還是有點難懂,但是如果注意到使用Lag Speeds的xyz分量分別對位置的xyz分量進行插值,而不是直接使用一個Lag Speed直接對位置向量插值。那么可以看出,這樣做可以對Lag的xyz上的速度分別控制。
等等,好像偏題了,這和Unrotate、Rotate有什么關(guān)系嗎?
當然有了,不信的話先把Unrotate、Rotate去掉看看效果(后面解釋兩個節(jié)點的作用):

為了直觀效果,將x分量的Lag Speed改成較小值0.5。
效果一:

攝像機在世界坐標系的x軸方向上果然Lag Speed很小(被角色甩在后面),這不對嗎?
當然不對了,請看效果二:

呀!當角色向世界坐標系y軸正方向奔跑時,延遲效果不起作用了,也就是說我們對Lag Speed分量的修改是在世界坐標系上!這就導(dǎo)致了一個問題:玩家的攝像機轉(zhuǎn)向時,玩家仍然希望攝像機的延遲是向前的,而不是向左的(世界坐標系的x軸)。換言之,就是玩家希望對Lag Speed分量的修改是基于攝像機局部坐標系而不是世界坐標系,也就是說如果修改了Lag Speed的x分量,那么無論攝像機如何旋轉(zhuǎn),影響的都是玩家視野前方(攝像機局部坐標系的x軸)。
此時,Unrotate抵消了攝像機的旋轉(zhuǎn)后Rotate再旋轉(zhuǎn)回去恢復(fù)原樣,這樣就等效于從局部空間變換到世界空間,插值后,再變換回局部空間。這樣,在插值的那一步,無論攝像機如何旋轉(zhuǎn),xyz分量都是一致的(旋轉(zhuǎn)效果已抵消)。
數(shù)學(xué)推導(dǎo)很簡單(證個全等三角形就行了,這里就不寫了)。
值得一提的是,可以使用這個原理制作始終指向角色前方(局部坐標系的x軸正方向)的箭頭:

Unrotate的實質(zhì)就是抵消角色在世界下的旋轉(zhuǎn),從而使向量的處理基于角色的局部坐標系。

如侵刪,歡迎評論指正。
參考來源:
https://blog.csdn.net/t1370620378/article/details/121540493