標籤:

《Monsterologist》開發日誌(十四)角色行走的實現方式

好久沒給大伙兒寫文章了。

這次給大家寫咱們角色行走的實現方式,這一般是我做遊戲第一件實現的功能,我還記得我當年學Unity的時候就是嘎嘣弄了個在走的人之後覺得自己能征服這個世界興奮不已。當然那時是簡單的按上鍵增加Z軸值,按下鍵減少Z軸值,按右鍵增加X軸值,按左鍵減少X軸值。這對於一般的固定視角角色移動當然是不帶半點問題的,空格跳躍增加Y軸值就可以說完美實現了最簡單的角色移動代碼了。

不過我們的遊戲需要轉動攝像頭來秀我們那麼好看的畫面,而且我們是有追求的開發者,當然不會止步於此,首先一個最簡單的改動就是可以把Z軸和X軸映射到攝像頭本地坐標在地面上的投映上,這樣子無論玩家將攝像頭轉到什麼角度,上鍵永遠是往屏幕的上方行走。

現在我們的角色就可以在平地走路了,如果我們的地圖沒有小山坡沒有小拱橋的話,那到這兒世界基本上就太平了,可是我們的世界是個三維的空間,這就意味著我們要考慮上下坡的問題,再加之模型都是體素形式製造的,坡這種東西基本就是梯,如果直接往前走要麼因為碰撞盒的關係卡著沒法前進,要麼就是像幽靈一樣飄過山河湖海。那麼如何讓人物按地勢平滑地上下移動呢?我的解決方案就是在玩家的正前方從頂上往下射出一條碰撞射線判斷前方地勢和地貌,通過得到的地勢高低以相應的速率增加或減少角色的Y值來實現上橋和下橋的動作,最後如果判斷出前方地勢高於或低於能行走的高度或者沒有碰撞到任何東西或者碰撞到標籤為障礙物的物體時,禁止玩家走動即可。

解決到這兒,基本的行走功能要求就完成了,接下來要實現的一個功能,是可以判斷出你是否是專業人員的重要指標。這個功能就是令角色在撞牆的時候能夠如絲般地滑向想去的方向。這一點很多人一開始都注意不到,因為這個功能在平常玩遊戲的時候太自然而然,但實際開發遊戲的時候,就發現,假如行走的方向有一堵牆,按照引擎自然的解決辦法,就只是卡在牆邊無法前行,這種時候要往後退一步才能繼續行走,非常的不便。處理方式就是根據玩家按鍵前進的方向和牆面碰撞的垂直方向的夾角來判斷滑動方向,知道滑動方向之後往該方向施加相應的行走速度就可以了。

其他的跑跑跳跳啥的實現起來就不是什麼大問題了,有人會說為什麼不用Unity自帶的CharacterController,它能調玩家行走樓梯的高度,行走跑路實現地也是相當專業,不過我們不用的主要原因還是Unity自帶的Script改動起來不太方便,我相信每個遊戲對行走都有特殊的要求,不過CharacterController在快速做prototype的時候還是很方便的。


推薦閱讀:

遊戲是什麼?這個問題真的很重要嗎?
基於Cocos2d-x的手機遊戲性能監控
從零開始手敲次世代遊戲引擎(二十一)
GameJam48小時遊戲SEDs開發總結

TAG:游戏开发 |