前往
大廳
主題

遊戲開發日誌 #8 系統移轉、Coyote Time、轉角補正 etc.

サンエックス | 2021-04-17 20:10:01 | 巴幣 4364 | 人氣 1415

同樣是在重鑄角色系統中,預估未來還會再寫上個 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以及特定功能需要完善,接下來還是得繼續和程式碼對看,
很抱歉尚無法拿出更多視覺上的可見成果,像是人設、故事背景、場景或是動畫特效之類的。

感謝您的閱覽
這次沒動畫瘋序號了,越來越難抽。

創作回應

五夜的午日❀いつよ
好厲害
2021-04-17 20:11:35
サンエックス
感謝您的肯定 [e12]
2021-04-18 00:14:43
樂小呈
平台遊戲要顧的東西好多[e21]
2021-04-17 20:29:01
サンエックス
每種遊戲類型應該都有專屬的細節是開發者才懂的,真的只有親自體驗下才知道 [e42]
2021-04-18 00:14:46
サンエックス
等等 熟悉的熊頭去哪了
2021-04-18 00:14:51
樂小呈
回來ㄌ
無職ㄌㄌ太香忍不住買了勇造[e5]
2021-04-18 10:29:38
サンエックス
原乃
2021-04-18 15:18:10
Jervey
GMTK是翻成郊狼時間
2021-04-19 11:43:10
サンエックス
哦 這聽起來不錯 [e19]
2021-04-19 15:31:44
空幻@藤ちょこ廚
3X好猛
2021-04-21 01:53:33
サンエックス
完了 隔快3天我才看到留言[e28]
2021-04-24 14:41:08
サンエックス
謝空幻大姊[e36]
2021-04-24 14:41:20

更多創作