平台遊戲中,如何在動作操作方麵達到《Celeste》,《死亡細胞》等作品那樣的效果?本文作者將從實現原理開始解釋,讓大家了解如何在平台遊戲中實現走路與跳躍?
平台遊戲中,要想在動作操作方麵達到《Celeste》,《死亡細胞》等作品那樣的效果(手感),單純使用物理引擎是比較難做到的,因為我們需要一些反常識的運動效果,而這些效果可能是多種運動組成的,為了更精細的控製物理運動,需要對每一種動作的物理運動做特定的建模與調參。
本文會針對平台類的遊戲,針對走路和跳躍這兩個行為,從實現原理上做一些解釋,為了更清晰的表述,文中會使用偽代碼來解釋。讀完文章,你會了解走、跳的一種實現思路。話不多說,讓我們開始吧。
01 簡化
平台類遊戲,最常見的物體會有地板、牆、角色這三種,首先我們需要簡化其幾何模型,因為這會大大提高後邊物理計算的效率,也更直觀,更容易理解。

02 遊戲循環
遊戲循環,幾乎所有的遊戲都有一個叫遊戲循環的部分,這部分代碼會被一遍一遍的執行,直到遊戲結束。功能上通常包括收集用戶的輸入,更新所有物體的狀態,渲染成圖等。邏輯如圖:

每一個Update函數負責改變遊戲內所有物體的信息,後邊的Render會根據數據生成一張圖片,也就是常說的一幀。這篇文章所討論的問題就是:在Update函數中,如何計算出每一幀玩家的位置。
03 走路

從上圖中可以看出來,物體當前幀的位置可以根據上一幀的位置來計算出來。

第3行用來計算偏移距離,即:偏移距離=運動速度x時差。
第4行用來計算當前幀物體的位置,即:當前幀物體的位置=上一幀物體的位置+偏移距離。
利用上邊的實現,我們已經可以使角色運動起來了。

04 加入牆體
當加入牆體後,需要對牆體做特殊處理,以保證角色不會直接穿過牆體。

用線段A去和外圍的世界做碰撞檢測,如果有交點,那麼則代表碰撞到物體,需要修正偏移距離。線段A的一個端點可以選擇上一幀物體的中心,另一個端點可以根據當前速度,時差來計算出。那麼,代碼就變成了這樣:

使用線段與場景內的物體進行求交檢測,如果有交點,更新偏移距離。利用上述代碼,角色將會被牆壁擋住。

05 處理坑
如果用上述代碼來讓角色走過一個坑洞時,角色並不會掉落下去,而是直接走過,所以需要特殊處理有坑洞的情況。思路是,首先檢測坑洞,如果沒有檢測到,則保持水平行走,如果檢測到坑洞,則切換物體為掉落狀態。

檢測坑洞具體的方法是向下做一個線段進行碰撞檢測,如果沒有碰撞到物體,代表下邊就是一個坑了。貼出加入坑洞處理的代碼。

第3行添加了狀態檢測,角色的狀態除了走路之外,還會有跳躍,衝刺……等其它狀態,所以在此我們添加一個變量state用來追蹤當前玩家的狀態,以區分和管理角色的行為。
第10-14行:利用垂直線段向下進行碰撞檢測,如果有交點,那麼修改垂直偏移距離。
第16行:如果檢測到坑洞,則改變角色當前狀態為“下落”。
06 下落狀態
下落是從跳躍的最高點處開始向下,直到落地的這個間隔。或者是在走路時遇到坑洞後,掉落的這個過程。下落過程中,處理情況和行走是非常的相似的。

第16行,在行走的過程中,如果向下方的碰撞測試沒有檢測的地麵,這時需要改變為下落狀態。
第20-23行,在下落的過程中,檢測橫向的牆麵,如果有碰撞,需要修正偏移的距離。
第25-30行,在下落的過程中,如果向下方的碰撞測試,檢測到了地麵,需要修正垂直偏移距離。

07 起跳
起跳是從離開地麵到最高點這段過程,當收到玩家指定時,進入跳躍狀態,代碼如下:

第39-41行,在起跳的過程中,如果達到了跳躍的最高高度,那麼應該切換到下落狀態。
第43-49行,和前邊的代碼行為是類似的。

08 總結
通過上述的描述,我們已經可以實現出平台遊戲中走與跳的行為了,並且可以方便的擴展出更多的運動效果,比如:
走路的滑動
落地彈一下
just-in-time jump
碰到牆上反彈
走路時加速
加速跳
……
為了用盡量短小的篇幅說明問題,文中刪減了一些和物理實現無關的問題,比如動畫管理切換,用戶輸入采集等……文中的截圖,均是采用上述方法實現的。
感謝:文中設定和動畫由畫師AOMZER友情提供。
來源:公眾號“獨立遊戲二三事
熱門課程
專業講師指導 快速擺脫技能困惑相關文章
多種教程 總有一個適合自己專業問題谘詢
你擔心的問題,火星幫你解答騰訊遊戲美術春招已經啟動啦!25、26、27、28屆均有機會投遞,實習崗位有動畫、特效、3D場景/角色、2D場景/角色、技術美......
剛入學的同學,在第一次學到新軟件的時候,經常會被各種快捷鍵整懵。但是網上download的快捷鍵記憶圖,不一定就是合適的。這裏......
官方宣布3月共134款新遊戲版號過審,網傳68家遊戲公司超1000崗位
提前了解行業趨勢,關注熱門遊戲和新技術如AI、UE5等;或通過了解和參加線上、線下行業遊戲大賽或交流峰會,增加行業信息來源,積......
今天要分享的是武漢校區剪包專場招聘會,企業代表是曾就讀於武漢校區2210期的剪包學長,這次代表公司返校,招聘視頻拍攝剪輯崗位。
AI時代找不到工作怎麼辦?瞄準這6個常青樹行業,火星全專業可匹配!
科技在創新,社會在發展,自動化、機器人和AI人工智能的應用,讓很多重複性高、低技能要求的傳統工作崗位正在被逐步取代,這是一個無......
一般發生在下半年,如果公司上半年業績未達標,有些公司可能會在年中發起招聘需求,為團隊儲備一些新人,到年底以“試用期不通過”為理......