如何開發一款老陰逼射擊遊戲?

這學期選了一門遊戲設計與開發課程,於是就花了一禮拜做了個多人射擊遊戲作為期末大程。

雖然開發射擊與砍殺過程中已經積累了不少好用的插件,但出於多種原因還是沒捨得用,選擇了從零開始重寫一遍。

由於篇幅有限,僅對幾個常見的問題進行討論。

1.人稱切換與開鏡的實現

一三人稱切換我的做法是將第一人稱相機綁定在頭部插槽,且每幀將WorldRotation設為與ControlRotation一致(不然會眩暈)

至於右鍵開鏡,自然是將第一人稱相機綁定在武器模型上的插槽,使得機械準星/光學瞄具中心恰好與視野中心重合。

2.QE側身,我的做法就是用"完全Q"和"完全E"兩個Pose根據當前傾角進行Blend,當前傾角受當前qe鍵按下狀態與轉速驅動,當然做一下必要的骨骼旋轉微調也是有必要的

3.後坐力的實現,這個算是老生常談的問題了,在傳統fps中子彈實際射出方向和準星並不一致,而寫實類fps通過」幫玩家移準星「的方式實現後坐力,因而「只要瞄的准就能壓好槍」。

這個遊戲簡單起見,我的後坐力幅度只直接受一個叫Unstability的變數影響,這個變數每次開火會增大,隨著時間流逝又會自行減小。

而Unstability也受到是否完全下蹲的影響。

除了豎直方向恆定後坐力,我根據當前後坐力幅度的一定比例產生了另一個隨機方向的後坐力,從而產生左右偏移以及每次上抬幅度的不確定性。

說到後坐力,自然也要談一談擴散,考慮到玩家體驗問題,非移動狀態開鏡沒有精度損失,也就意味著只要站穩了對準刻度線/調好歸零一定是指哪打哪,不過移動狀態會導致一個叫SpreadNow的變數(單位為角度)增大,最簡單的公式就是SpreadNow=SpeedNow*SpreadEverySpeed*CrouchRatioNow

SpeedNow就是當前速度大小

SpreadEverySpeed就是單位速度帶來的不穩定性

CrouchRatioNow就是完全下蹲造成的精度增加

而實際擴散大小簡單起見沒有服從正態分布,就是RandomFloat(0,1)*SpreadNow,方向隨機。

4.移動相關的動畫狀態機

這個遊戲中有兩種移動方式,按住Shift時進行「後退就是轉身向後跑」的傳統主機動作類遊戲移動方式,且體現為快跑,反之進行傳統Fps遊戲的八向移動。

前者Ue4自帶了就不贅述,後者我的做法是用了狀態機進行切換,看起來有點複雜,如果你有更方便的方法可以來討論討論

5.攻擊判定,為了方便起見,我採用了伺服器/主機上產生子彈,根據碰撞情況判定,這也是網路狀況好時最公平的做法了。

如果碰撞結果的BoneName為頭或者脖子則Damage*3,為什麼沒有四肢的情況呢因為懶。。。

而如果要做大型對戰遊戲,本地判定很有必要,本地檢測到碰撞並發送判定結果到伺服器,伺服器需要根據此次開火是否發生在此人死亡之前判斷是否有效。

6.地圖和羅盤,我的地圖實現方法有點Low,就是在編輯器俯視視角截圖,嚴格按照1:1長寬比,然後根據玩家坐標和定好的地圖邊界就能算出玩家小圓點應該畫在地圖圖片的哪裡了。

羅盤其實實現起來並不簡單,簡單地說就是定一系列的基準參考項,我定了東南西北,對應0到270度四個方向,然後根據玩家當前Yaw和基準向角度插值可以算出東南西北這四條線繪製的位置和代表玩家朝向的線的距離(玩家朝向的線總是在正中間的),再捨去(隱藏)超出太遠的角度就行啦

先寫這麼多,第一次寫專欄還不太會用這個網頁版編輯器。

PS有想玩我正在開發的冷兵器大逃殺遊戲的看這裡

射擊與砍殺 | 中國獨立遊戲 | indienova 獨立遊戲www.indienova.com圖標

或者加Q群:546927310


推薦閱讀:

【Unity】UGUI系列教程————UGUI基礎!界面拼接!
爐石製作人主講 - 以《爐石戰記》為例,探討跨平台遊戲的製作思維與設計
偏激地推薦一本書:《DOOM啟示錄》
(譯)GDC13 Summary Animation Bootcamp Part 3
基於 Unity 引擎的遊戲開發進階之 著色器(Shader)入門 & 圖形特效

TAG:游戏开发 | 独立游戏 | 虚幻引擎 |