库洛游戏首次公开分享:《战双帕弥什》的动作打击感是怎么做出来的
在廣州市黃埔區1月6日舉辦的IGDC 2020國際游戲開發者大會上,自《戰雙帕彌什》發布后極少出現在大家視野中的庫洛游戲,首次在大型活動上出現并分享開發心得。
在當晚的 “金鉆榜”發布儀式上,還獲得最具創新力企業獎項,《戰雙帕彌什》也獲得最受歡迎網絡游戲、最佳國產游戲兩項大獎。
大會上,庫洛游戲技術總監林晨晨還親自上臺進行了《戰雙》技術開發分享,講述他們在游戲公平安全保障和動作游戲手感要素兩方面的心得和做法,以下是手游那點事帶來的演講整理,具體內容為便于閱讀有所刪改:
林晨晨:下面由我來分享一下我們《戰雙》的兩個方面的技術要點。
?
第一個方面是關于游戲安全的,第二個方面是關于我們怎么去做好一個動作類游戲。
一、7點防范措施,保證《戰雙》公平安全
在游戲公平方面,《戰雙》是一個網絡游戲,所以我們把玩家的公平和游戲的安全看得非常重要,讓《戰雙》盡可能地為玩家保持公平競爭,我們做了一系列事情來保障這個環境。
1.第一件是包體加固。
它可以非常好地杜絕一些非法的二次解包的情況,而那這些二次解包出來非法包可能會欺騙一些玩家。
?
比如說我們在某一次測試中發現,有一個群里面流出來的包,充值比較高的金額,居然只要使用一分錢,雖然這個一分錢充值不能經過我們服務器的驗證,但是這種包流出來之后,會導致玩家聽信一些傳言。
2.第二個是外掛識別。
我們有一個外掛的黑名單,這個黑名單里面羅列了比如葫蘆、燒餅等等常見的修改器,并且屏蔽了一些調試的工具。
?
這樣的做法可以防止《戰雙》在運行時的內存被修改,那樣會導致非常嚴重的戰斗不平衡、購買邏輯出錯、活動流程被打亂等等問題。
那防止被調試還有一個非常好的作用,就是可以盡可能地防護包體的整個交互過程,減少協議被探測的情況。
3.第三方面是關于協議加密的。
協議加密在這里主要是防止脫機掛,它會導致一個嚴重的問題——工作室可以通過非常廉價的成本批量的養一兩百萬個號,長期積累下來之后,形成一個黑色產業鏈,會給我們的收入造成非常大的影響。
?
4.第四個是關于我們與Unity合作獲得的Asset Bundle加密能力。
這個加密機制,主要有兩個特點,一個是片段式加密,第二個是在運行時的實時加密與解密。
?
這樣做的主要原因是,我們的活動是以6周為一個周期,在這個6周的活動期間,我們會盡可能把所有的活動資源打包在完整的母包里面,這樣會導致我們的資源提前出現在線上的包體里面。
玩家可能經過一些破解的方法,把我們后期,比如說第3周第4周甚至是第6周的活動也提前曝光出來,會比較影響我們整個運營的節奏,比如說我們后期第6周的活動比較給力,提前被泄露就會導致我們前三周的數據下跌。
5.第五方面是關于文件簽名的。
前面介紹的都是基于對稱的加密,我們還有一個最后的保險手段,就是對非常非常重要的配置表,代碼等文件,做了一個非對稱加密。
?
非對稱加密,如果是技術同行的話應該知道,是一個耗時非常久的一個算法,我們如果對完整的文件做非對稱加密跟解密,在運行時是不太可能的。
我們采取的做法就是對整個文件做一個哈希,求取它的特征,再對這個特征做一個簽名。在沒有拿到我們只在公司有的密鑰的情況下,外部人員是沒辦法修改我們的文件,簽出跟我們一樣簽名的。
這個流程我大概列了一下,我們在打包的時候會獲取這個文件的具體內容,會對這個文件的內容做一個哈希求值,然后用私鑰對這個哈希做簽名,再把我們的簽名最后的簽名段加到文件的頭部,最后生成一個資源。
解密就是一個相反的過程:加載的時候我們會加載完整的資源,再截取他的頭部簽名,再用剩下的部分算一個哈希,再用公鑰對這個哈希做一個簽名的校驗,以此來達成我們每個重要的文件都不可能被修改的目的。
6.然后最重要的一點是我們在《戰雙》里面對戰斗做了一個完全的脫離引擎的剝離。
《戰雙》里面所有的戰斗都可以在服務端復現,我們把戰斗內核和表現層完全做了脫離。基于這個東西我們做了幾件事情:
?
第一個是做了一個世界狀態碼,第二個是做了一個服務端校驗,第三個是做了一個NPC隨機出生。
?
關于第一個世界狀態碼,我們把當前世界的跡象完整留下是不太可能的。就用了一個比較取巧的方式,對游戲世界里面的相關屬性的數值做了一定的算法計算,最后形成一個值。用這個值來代表現在這個游戲世界里面的一個鏡像狀態,這個狀態上傳了服務端之后,我們把客戶端的操作包還有客戶端傳上來的每一幀的世界狀態碼,丟到我們的服務端的,計算戰斗內核里,以這個戰爭內核加上操作數據包和世界狀態碼做一個校驗,最后可以得知一場戰斗里面到底哪一幀作弊了,哪一幀的數值有可能被修改。
?
如果發現我們的世界狀態碼跟我們客戶端放上來的狀態碼不正確,那這個玩家就可以判別是一個作弊的玩家。
?
那除了以上的這個情況之外,我們還發現有一些工作室會有一些取巧的辦法,他們會拿一些相對比較簡單的關卡,然后用手動打一遍的方式,然后重復的向我們服務器提交打完的數據包。
基于這個情況,我們做了另一件事情,就是對每一個NPC的出生做了一個隨機的波動,這個波動在視覺上是非常非常小的。它是一個1萬×2 -32的一個這樣的一個范圍內的隨機數。
?
每一個NPC在出生的時候,看起來像在同一個地方出生,實際上它在內部會有一個極小的一個波動,我們視覺上看不出來,但是在數據校驗的時候,每一場戰斗都不可能一樣。
7.最后一方面是戰斗相關的數據統計。
我們把所有校驗失敗的戰斗入庫,再挑取一些隨機的場次,在后臺有一套完整的數據校驗,對這些戰斗做一個完整復算校驗,最后會形成一個定向追蹤的IP池。
?
如果某一些工作室,長期的對我們的服務器發起一些奇怪的包的攻擊,那這些IP會被定向追蹤。
最后這整套做下來,之前我們高峰的時候每天會收到接近千萬次的這種非法的戰斗包。經過我們的一系列的做法,大概維持了半年之后,現在工作室已經完全對我們失去興趣了。
二、戰雙的打擊感是怎樣被一步步打磨出來的?
下面我要稍微介紹一下我們怎么做好《戰雙》這樣一個動作類游戲的。
我把幾個主要方面做了拆分,分為攻擊方、受擊方的動作處理,還有特效對打擊感的加持,這部分的內容以展示為主。
第一個方面是攻擊方的動作處理,關于這個我們做了戰斗動作位移問題的優化,第二個是做了打擊的震屏,還有打擊的頓幀,最后做了一些鏡頭軌跡的運算。
第一方面,動作位移,我們在修正前發現一些激烈的戰斗動作會產生滑步的現象,大家可以比較明顯的看到人物某些技能特效出來的時候,它的腳會跟地面發生位移的,這個是由于我們把技能跟移動分開的做法所導致的。
?
于是我們之后就把一個動作的所有幀的骨骼移動情況全部導出,參與我們人物移動的計算,就達到了基本是每一幀都不可能出現動作跟移動脫離,與地面產生錯位的情況。
?
第二方面,我們為了增強打擊感做了震屏效果。
?
第三方面我們在打擊的受擊點的那幾幀會做時間減緩,達到一個頓幀的效果。
?
第四個是我們做了一套完整的鏡頭操作軌跡。
?
以上是攻擊方的,下面我說一下受擊方的。
受擊方主要分了5個方面,第一個方面是我們有一個受擊動作庫。受擊方到底是播哪一個受擊動作,是由攻擊者和受擊方共同來決定的。
?
在上面的基礎上我們做了一個抖動,會根據我的攻擊方真實打到我的受擊方的受擊位置,在它受擊的骨骼周圍的范圍內,做一個骨骼的波動。
?
第三方面是擊飛曲線,我們做了一套物理擊飛軌跡的計算模塊,QQ拍賣還有一套跟他相配的擊退相關的計算模塊。
最后效果是受擊方會根據攻擊方攻擊幀的時間點,做符合攻擊動作的受擊動作,所以我們有著非常精準的受擊點判定。
?
下面是關于打斗特效的。特效對我們整個打擊感的加持是非常重要的,我們的特效主要分為八個層次。
?
首先是最基礎的攻擊動作跟受擊動作;
?
然后是場景燈光,還有角色燈光;
?
第三為普通特效;
?
接下來是徑向模糊,可以在受擊的范圍內產生一定的模糊效果;
?
接下來是加入大量的GPU粒子,我們把原本基于CPU去做的粒子計算遷移到GPU去,可以達到之前做不到的粒子規模;
?
之后加入空氣扭曲,效果可以讓人物的劍好像把空氣劃開了一樣;
?
最后是在發動技能的時候會產生場景的變色。
?
大家可以看到最終效果就是外界對我們的評價是在打擊感方面做得比較好的一個原因,是因為我們做了這一系列的事情,并且這一系列的事情現在還在不斷的加強,今年還加了一些新的效果進去,往更強的打擊感方面去做。
?
今天我想分享的內容就是以上兩個方面,謝謝大家。
總結
以上是生活随笔為你收集整理的库洛游戏首次公开分享:《战双帕弥什》的动作打击感是怎么做出来的的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【三国志战略版】拆解与分析
- 下一篇: 《幽灵行者》:近期最酷炫的赛博朋克游戏之