麻桑
本周進度吔
麻桑
這禮拜本來打算先優化一下衝刺跟跳躍的加速度,但考慮到功能還沒做完,於是就先擱置,等幾個禮拜後基礎功能做完了一起調整
麻桑
後來試做自動上牆的功能,主要應用在角色爬牆到懸崖邊或是跳躍接近懸崖時,人物可以自己判斷高低差決定要不要自動攀上懸崖
麻桑
這樣做的好處是玩家不會因為一點點的視覺誤差,而產生''明明我已經踩到邊緣了,怎麼還是摔下來''的挫敗感
麻桑
當然判定範圍還是得在未來細修,畢竟判定太寬鬆會導致動不動就自動上牆,搞得角色的控制感被剝奪,無法精準操控角色落點位置的情形發生
麻桑
https://images.plurk.com/Q6KdMTZUQd3DaZ55VkVOg.gif https://images.plurk.com/iZidi2mrqqhhQymJLuI8n.gif

左圖是沒有自動上牆功能的狀況,角色就算很靠近邊緣了依然會落地,像是有道看不見的牆阻止玩家行動,控制上反直覺,且對於地形跟角色相對位置的判斷也過於嚴苛,無法達成順暢移動的視覺感受
麻桑
右邊則是在角色靠近懸崖之前,紀錄角色與懸崖的高度差距離,如果角色重心與懸崖位置的高度差在一定數值內,則會在靠近邊緣時觸發自動上牆
麻桑
https://images.plurk.com/7dhvqhoeGJCZ3ahf24lMhJ.jpg
偵測方式需要設定兩組trace:
1.角色重心往前伸(探測牆面位置與法線)
2.角色頭頂前方往下深(探測懸崖高度)
麻桑
(1)的用處是為了在自動上牆前,紀錄角色所處位置同時確認前方是否有牆,若沒有牆,則不會觸發自動上牆;反之前方有牆,則紀錄牆面的法線,讓角色可以依照法線的方向稍微後推,防止上牆過程中角色穿進牆內
麻桑
(2)則是記錄懸崖邊的高度,需要注意的是往前伸的幅度,過長會導致判定過於寬鬆,就算距離懸崖有段距離,還是會莫名其妙上牆,因此得根據角色造型跟移動速度拿捏適當的數值,才不至於人物像被磁鐵吸走般產生奇怪的位移
麻桑
https://images.plurk.com/3n4Kuro6ZtuiBLosaAYFDA.jpg
有了懸崖邊的高度,就能判斷角色重心位置與懸崖的高度差,以圖中的例子來看,就是角色重心與懸崖相差-60單位時,允許觸發自動上牆( 60前方的負值代表懸崖位置一定要高於角色重心,否則會出現明明懸崖在下方,角色卻觸發自動上牆的情形 )
麻桑
https://images.plurk.com/6fwfrBm9HgxZOWowElISFC.jpg
最後就是在允許上牆後,先讓角色根據高度差,將角色位移到懸崖的高度後,觸發launch使角色增加上蹬的加速度與動勢,並在落地後重置自動上牆功能
麻桑
上面差不多就是自動上牆的大致邏輯,中間其實有遇到一些奇怪的問題,像是角色launch後又飛回上牆起始點不停loop,或是下落時觸發則只會在邊緣上下跳,很多莫名其妙的bug都不曉得怎麼發生的wwww
麻桑
後來還是得一塊一塊功能區單獨拆解,看從哪個部分開始出狀況,有時候是順序接錯,有時是沒有注意到功能執行的時間差,總之串功能時還是要好好整理圖面,否則節點一多起來鐵定會想殺ㄌ自己(
麻桑
https://images.plurk.com/1HPNcByed8YnTJuac9o2Xo.jpg
不得不提的是這個串法,目的是讓timeline可以根據不同的數值比例改變撥放速度
麻桑
比方說有三個座標
A(角色世界座標)
B(角色前方50單位)
C(角色前方100單位)
麻桑
如果用timeline預設的撥放速率執行功能,那A-B還有A-C都會在相同的時間內達成,造成A-C的路徑移動速度過快,如果套用在這次的自動上牆功能,就會造成上牆速度不一致的結果,距離懸崖較遠角色就會爬特別快,距離懸崖較近角色就會爬稍微慢
麻桑
所以這個串法得先輸入一個值代表高度差的範圍,並以這個值和trace獲得的其他位置資訊做插植,
麻桑
做到現在功能已經差不多做完ㄌ,剩下一兩個額外的機制還不確定需不需要加上,再來每個禮拜就是修正三四個bug就好,角色模型跟rig也可以花個兩個禮拜更新一下,就可以做角色動畫ㄌ!!!
麻桑
現在比較大的bug還有:
1.面對牆執行牆跳會迅速迴轉導致失效
2.陡坡急轉彎容易不小心觸發陡坡飛越
3.跑牆時反方向前進導致trace失效,造成上下短暫漂浮
4.跑牆時遇到90度轉角會卡頓
5.跑牆時背對牆面下牆會卡頓
6.自動上牆時偶爾卡頓
麻桑
其實都是小細節,但就是視覺上看ㄌ很不爽www,還是希望玩家控制角色時可以順順暢暢的移動,不要動不動就卡一下頓一下的,再剩下就只有功能之間銜接的順暢度,跟加速度累積需不需要保持動態勢能這點了
麻桑
理想狀態是11月前可以把動態以外的內容都做完,12月就做做動態,偶爾設計一下大概15-20分鐘的關卡流程,想在明年4月前給人試玩看看
利米茲
期待w
麻桑
我也好期待(自己講
載入新的回覆