麻桑
2 years ago
本周進度 跟
被遺忘ㄉ上週進度
latest #38
麻桑
2 years ago
上禮拜因為打鬥陣跟去朋友家進度很可憐 我反省(砍遊戲
麻桑
2 years ago
今天盤點了月初列的bug還剩多少,看起來勉強在進度內,也想到大概的解決方式,就看下禮拜實做會不會出現其他問題ㄌ
麻桑
2 years ago
十一月初要解決完的bug:
1.面對牆執行牆跳會迅速迴轉導致失效
2.陡坡急轉彎容易不小心觸發陡坡飛越
3.跑牆時反方向前進導致trace失效,造成上下短暫漂浮
4.跑牆時遇到90度轉角會卡頓
5.跑牆時背對牆面下牆會卡頓
6.自動上牆時偶爾卡頓
立即下載
麻桑
2 years ago
下面大致紀錄一下各個bug的處理方式
麻桑
2 years ago
牆跳迅速迴轉的問題困擾了好一陣子,因為照理來說,launch character會直接朝velocity指定的方向位移,而且就算角色會迅速迴轉,那也只會影響yaw的方向,不太可能影響location的變化
麻桑
2 years ago
上禮拜陸陸續續試了很多節點順序跟功能觸發方式,後來才發現,因為爬牆沒有把movement mode切換成flying的模式,所以加速度跟重力的計算方式就跟平地一樣,重力會不停疊加以外,角色在前進的加速度也會一直增加,儘管角色貼在牆上看不出來,但是檢查起跳前的velocity就會發現了
麻桑
2 years ago
後來是直接在起跳前先重置velocity解決這個問題,而不是用movement mode的切換,所以會造成角色起跳的加速度感跟起跳前稍微不同,動態勢能有些突兀的感覺,這部分應該會等未來調整動態勢能時一併解決
麻桑
2 years ago
再來是跑牆時下牆會造成卡頓的問題
麻桑
2 years ago
原本的跑牆機制有兩層ray trace,一層是line trace負責偵測角色正前方的牆面,另一層sphere trace是用在第一層失效的情況,可以用第一層的trace end展開sphere,偵測更大的範圍
麻桑
2 years ago
不過也因為第二層的範圍較大,導致角色在牆上向後旋轉時,依然可以偵測到左右兩側的牆面,造成下牆過程多一段左右位移的情形發生
麻桑
2 years ago
想要避免這種情形,就得根據鏡頭與牆面的夾角,針對特定角度禁用爬牆的位移
麻桑
2 years ago
差別有點難以觀察,但左邊會在轉圈下牆過程中有左右的偏移,而右邊則可以順暢的轉圈,在沒有過多左右偏移的情形下牆
https://images.plurk.com/4fbx2vTlk9W8sn3YuHIfT5.gif https://images.plurk.com/1S4JClBqLnYrSzlbNRrsjU.gif
麻桑
2 years ago
實際的修改方式,是在跑牆位移的timeline區塊後方增加branch判定,或是在跑牆第一層line trace後方增加brach也行,目的都是為了避免位移產生
麻桑
2 years ago
https://images.plurk.com/6RcC3SyPjSvEZ2mHsILqEK.png
麻桑
2 years ago
https://images.plurk.com/1Fp6SM1XrImYQYpPEz9NDC.png
麻桑
2 years ago
底層的架構是偵測牆面與鏡頭呈現特定夾角時,按下不同input會觸發禁止位移的boolean
麻桑
2 years ago
以上圖中的兩個區塊來說,就是當鏡頭與牆面的夾角呈現135-180之間時,如果按下S鍵( input F = -1 ),就會禁止位移
麻桑
2 years ago
下面兩個區塊同樣道理,只是需要多一個邏輯先判斷牆位於角色的左邊還是右邊,再根據左右邊觸發不同鍵位的boolean
麻桑
2 years ago
不過今天下牆卡很久其實不是邏輯的問題,而是我他媽的不知道function功能串就算設定成pure模式,還是需要將頭尾串接在一塊才會運作,搞了老半天邏輯其實都沒問題,就是這個小地方要接上(沙ㄌ我
https://images.plurk.com/7H8sMcLmmpBgDKn0ykO1DZ.png
麻桑
2 years ago
另外還有一個特別值得提的節點觀念,就是三軸向量的XY值normalize後並不等於二軸向量的XY值
麻桑
2 years ago
意思是,取三維空間空間中的兩個XYZ軸皆不相等座標做向量,即便在做完後扣掉Z軸的向量normalize,XY軸的值也並不等於直接取兩座標的XY軸做向量並normalize,所以想只取XY軸的向量(或說是角色的Yaw),還是得先將XY值取出做向量再normalize
麻桑
2 years ago
https://images.plurk.com/12v8DjnyWMadCzWwfKD6yl.png
麻桑
2 years ago
會發現這個點是因為在做夾角計算時,發現鏡頭高低居然也有影響出來的值,間接導致跑牆時用不同高低觀看會產生不同速度
麻桑
2 years ago
總得來說從跑牆第一次做完後還是剩下不少問題,斷斷續續也修了好幾個禮拜,目前算是比較堪用了
麻桑
2 years ago
這禮拜還順便改了跑牆跳的角度計算,當初為了方便直接讓跑牆跳沿著牆面法線彈出去,但更理想的方式應該是根據牆面法線水平鏡射的角度更合理,視覺上也更舒服
麻桑
2 years ago
https://images.plurk.com/6eohMMCNuhjjuc5ujS6zCP.png
麻桑
2 years ago
這部分的計算一樣要用到上述的夾角跟物體之間的關係做特定觸發boolean
麻桑
2 years ago
https://images.plurk.com/5HSVeBSO994BGKF7JohGIz.png
麻桑
2 years ago
首先一樣先取角色的朝前向量乘上-1後和牆面法線做夾角計算,出來的值如果大於50,代表角色和牆面幾乎要平行,由於不希望角色牆跳時是平行前進,因此在大於50度之後,都取50度的旋轉值用來做世界旋轉座標的計算
麻桑
2 years ago
在取到夾角後,就需要知道角色的世界旋轉值(yaw軸)需要多少,由於牆跳只會用到yaw,因此可以直接取牆面normal的XY向量後加上前面得到的夾角算出yaw值
麻桑
2 years ago
需要留意的地方是,牆面如果在角色的不同側,那麼就要視情形使用和值或是差值,根據引擎預設的座標計算方式,順時針是正,逆時針是負,所以牆面若是在角色右手邊時,牆面normal得到的yaw值必須加上夾角,反之牆面若是在角色左手邊時,牆面normal得到的yaw值必須減去夾角
麻桑
2 years ago
https://images.plurk.com/69P1W4eF4cPdL75gbX1nyp.png
麻桑
2 years ago
計算完會得到一個新的yaw值,在角色launch之前,先重設角色世界旋轉座標,再以角色的朝前向量launch character就能根據角度做出適當的牆跳方向了
麻桑
2 years ago
https://images.plurk.com/4RmGrbSzidSHZ81Gu1c4UZ.png
麻桑
2 years ago
中間的wall jump rotation是用來抑制角色牆跳後的input量,如果太快恢復會導致玩家可以不停跑牆跳,所以需要多一個緩衝時間減緩input的值,並在一小段時間後恢復正常的input方式
麻桑
2 years ago
https://images.plurk.com/2pk56YkjTpXwHMcQSauHTX.png
麻桑
2 years ago
這樣下禮拜就只剩下跑牆時左右轉會卡頓的問題了,目前打算用movement mode的切換試看看,畢竟原本會卡頓下降應該是重力的問題,如果先切成fly mode應該就不會有狀況了(理想上
麻桑
2 years ago
都處理好十一月就能來更新模型跟骨架,十二月準備可以key動畫了!
back to top