按之前的步驟做下來,有乙個小bug,當我們上下移動視角的時候,只是攝像機在旋轉,所以我們可能會看到一些奇怪的東西,比如發現自己沒腦袋
我們想要的效果是能夠讓 手臂跟隨著攝像機一起移動,也就是讓我們的模型「彎腰」。
首先在動畫藍圖的動畫圖表中右鍵輸入transform bone,
在骨骼中找到有關彎腰的三個關節。
用get control rotation來獲得我們控制器的旋轉值。
執行一下大概是這樣的。
p指的是我們上下的幅度,最高是90,最低是270.(平視時是0,當向下看時會從360開始減,一直減到270)
y指的是我們左右的幅度。r表示的是我們的順時針或逆時針的旋轉值(第一人稱中一直是0)
複製三份transform bone,分別指向spine_01,spine_02,spine_03,並且把rotation的rotationmode改成add to existing,表示將輸入的值新增到原有旋轉值上。
(translation 和 scale 用不到,可以先關掉。)
用乙個變數spine rotation表示旋轉值。
在動畫藍圖的事件圖表中新增乙個改變spine rotation值的方法。
說明,因為彎腰只改變乙個軸,所以其餘兩個軸設為與之前的一樣。
注意點一,在動畫藍圖中經過測試,當改變x(roll)時才會改變人物的彎腰狀態。而get control rotation中,通過第一次的列印測試,發現y(pitch)才是控制器中控制彎腰的軸。
所以要把control的y(pitch)賦值給 spine rotation的x(roll)。
注意點二,經過列印測試,當我們抬頭時,控制器的y(pitch)是從0到90的,低頭時是從360到270的。而在動畫藍圖中,x填為正值時是彎腰,負值時是抬頭。這又是不一樣的地方。
所以做乙個判斷,如果》180說明我們正在低頭,獲得(360-當前y值)。<180說明我們在抬頭,直接乘乙個負一。
注意點三,因為我們是同時旋轉了三個關節才實現的彎腰抬頭,所以我們處理後的值必須/3才能賦給spinerotation。比如說我們抬頭抬到最大90,也就是每個關節最大30。
新增腳部動畫
首先建立乙個2d的混合空間(乙個軸表示速度,乙個軸表示方向)
速度設為20個格仔,方向設為8個格仔
在速度為360的數軸上新增run的各個方向的動畫。這裡還新增了乙個衝刺動畫和乙個靜止動畫。
把這個混合空間拖到unarmed_idel/run中。
因為我們只想讓腿動,所以我們需要乙個骨骼的分層混合。
注意左面的設定,從spine_01開始混合(作為區分上下身的標誌),還要把mesh space rotation開啟。
複製上半部分到每個狀態中( jump可以不做,因為跳起的時候腳是不動的)
用乙個封裝好的函式,calculate direction獲得-180到180的方向值。並傳入相應的引數。
視角限制
學習UE4 將視角設定到相機
在公司做了三個月前端,幫忙做c 去了,剛做1周,負責人出差,這事就落我頭上,大半年過去了,專案也差不多了,老闆讓我學ue4,剛學1周,唯一會ue4的人被勸退了,專案又落我頭上,我好難。學的時候發現學了就忘,所以寫部落格主要是加深自己的理解,有的地方可能有錯誤,不過我應該寫不了幾篇,因為老闆有讓我再去...
UE4 VR學習筆記3
今天嘗試了乙個無限空間玩法,傳統的遊戲一般都是用空氣牆在邊界阻擋玩家,這種方式會讓玩家覺得有一點限制,不夠自由,另外一種是使用隨機地圖生成的功能,這樣也能做到無限自由空間,不過這有點費電腦。大家都知道vr是非常注重空間自由度體驗的,用空氣牆的方式,阻擋玩家顯然有點不合適。而vr本來就對電腦配置要求很...
UE4 C 網路聯機基礎(3)
如果伺服器需要對客戶端廣播執行乙個函式可以使用ufunction netmulticast 因為gamemode只在伺服器中執行,所以通常這種廣播執行可以在gamemode中指定gamestate來呼叫該函式 實現伺服器廣播客戶端執行。gamemode中獲取gamestate方法 amygamest...