同樣是在重鑄角色系統中,預估未來還會再寫上個 1~2 篇吧。
繼前篇弄編輯器的窗口後,開始把舊的系統進行移植,
過程還挺順利的,還連帶修復掉一些舊版本中會出現的 glitch,
大多是程式架構上的東西,也沒什麼圖能放的,頂多就條列出來當記錄。
◆【角色狀態機】
每個 動畫片段 (AnimationClip) 視為一個狀態,片段彼此之間還另有合併、同步等關係。
每個片段的存續週期之中,約略分3種執行區段:「開始時」、「整個片段」、「結束時」,
如字面上意思,就是當片段到達該區段時,所執行的內容們。
以前有稍微試著摸索 Animator 本身的一些功能來實現,但它能達到的效果都不太理想,
舊角色系統中,折衷使用片段本身播放進度 normalizedTime 的值,來判定一個片段是開始或是結束,
像是當該值為 0 時,表示片段開始;≥1 時,表示片段結束。(非循環片段的場合)
但仍然有許多弊端,比如說以 Animator 替片段之間處理過渡,其進入點的 normalizedTime 值,
並不會從整數的 0 開始播放,這和透過 Play() 來從頭播放一個片段所得到的結果是有所差異的。
又像是,當一個片段在途中被打斷,其進度還未到 ≥1,這又導致上述的判斷將無法準確得知一個片段的結束。
到新系統上,無論是 Animator 處理的過渡,或是透過 Play() 來切換的場合也罷,
可以在 LateUpdate(),判斷與上一幀的片段有所差異,就依序執行
「舊片段結束時」及「新片段開始時」的觸發內容。
● 片段合併
即指定的片段們,所執行的觸發內容相同,
像是角色在待機、行走兩個狀態,可以進行的操作內容兩者一致,只是差在本身的移動狀態不同。
合併後,確保它們能夠執行相同內容,避免不必要的參數再製。
● 片段同步
合併的片段們,在彼此切換之間,仍會觸發各執行區段的內容。
同步功能則是讓那些執行內容,不會在同步片段間切換時,出現重複觸發的問題。
主角的普攻能夠附帶移動,移動有無的動畫片段是不同的,
在此案例中,只需要達成動畫的切換,而不去重複執行它們的內容,
普攻開頭的速度賦予、期間產生的攻擊判定及音效、結束時的煙塵動畫等,都只要一次。
Δ 彼此同步 Attack 和 Attack_Walk 的一系列片段
其它還實裝了不少東西,全打上來會花上個好幾天,大概精簡一下:
● 條件判定 - 特定項目的執行次數、循環間隔、最後執行時間,跟其他一大堆…
● AI多指令執行基準、延遲指令、指令撤銷
● 轉向片段、其他中間過渡補足片段:已實裝,但圖還沒畫
● 片段屬性:著地/浮空與否
● 其他大部分原有的角色操作系統搬遷,並變得更加可讀、易維護
● Velocity 實際位移量配合地形 Tiles 的換算
像是對角色 AddForce 值的大小,配合自身的一些物理設置,可以跳到需求的高度這樣。
● 可臨時註冊的片段區間執行內容
編輯器上角色基準數據庫的內容是唯讀的,即時執行期間,需要臨時穿插新的觸發內容會用到。
還有幾個針對地形互動處理的玩家體驗優化,
去年在推特看到 Celeste 開發者其關於平台遊戲的開發細節參考,
結果拖到今年才有空實裝,有興趣的人可以參閱一下。
◆【Coyote Time】
遊戲開發上還算常見(?)的用語,不過我找不太到適合的中文翻譯。
當玩家自地形邊界走出,發生離地的瞬間,此時角色已經底部浮空,但玩家仍可以進行跳躍的指令。
透過這個緩衝時間,可以避免玩家想在接近地形邊緣進行跳躍時,卻發生跳躍失敗的情形,
這種案例在當初請組員進行測試的期間,真的是相當常發生。
Δ 離地瞬間仍判定為地面跳躍,其後所接的是二段跳。
但也不是限定於2D平台遊戲才有這個機制,
像是玩《隻狼》時,想做個鬼形部或是怨鬼逃課的應該不陌生,
當初英高沒想到這個機制反而製造出了意料之外的漏洞吧。
◆【轉角補正】
角色欲經過一地形轉角處時,視覺上應當能夠穿過該處,但卻與碰撞體的邊角發生相撞,而導致無法穿過。
Δ 因為角色碰撞體底部的一小部分無法高過地形,
而導致整個角色無法跳上該地形邊界。
如果此時給予角色碰撞體一定的容許值的話,
在該值的範圍內,視為角色可穿過該轉角,玩家在遊戲的體驗上也會更良好。
比較常見的實際例子,像是在《超級瑪利歐兄弟》中,玩家要跳上一個方塊時,
不需要完全錯開該方塊,就能夠跳上去而不被阻擋。
實作的方法可能較為複雜,這邊直接放上成果。
Δ 水平轉角補正,可以解決先前那張圖裡的問題。
Δ 垂直向上補正,和瑪利歐跳上方塊的用意相同。
Δ 垂直向下補正
角色跳下平台時,卻處於平台與一般地形之間,
於容許值範圍內,透過補正使角色能夠順利跳下該平台。
轉角補正的機制也另外延伸出「平台補正」,
原先角色要跳上一個平台地形,需要碰撞體完全超出該平台的上側,
現在同樣於容許值範圍內的話,角色會直接補正到平台上方。
∇ 無平台補正 | ∇ 有平台補正 |
以上
角色系統的部分還有AI以及特定功能需要完善,接下來還是得繼續和程式碼對看,
很抱歉尚無法拿出更多視覺上的可見成果,像是人設、故事背景、場景或是動畫特效之類的。
感謝您的閱覽
這次沒動畫瘋序號了,越來越難抽。