射擊遊戲裡的子彈是如何飛行的
△ 第一款FPS遊戲《德軍總部3D》
但是你知道遊戲裡的子彈是怎麼飛行的嗎?
早期,它和現實世界中的子彈完全不一樣,很多玩家合理地利用了這個bug,比如CS裡的甩狙。
隨著PC運算能力的提高,子彈的演算法也在不斷進步,彈道的效果越來越真實。
最近一位軟體工程師Tristan Jung在遊戲論壇上總結了FPS遊戲的一些子彈軌跡演算法。讓我們一起來看看FPS遊戲這二十多年來發生的變化。
擋住射線的都會死
早期的FPS遊戲都採用一種“光線投射”(ray casting)的技術,用槍口發射出去的射線來確定子彈的軌跡。光線投射可以確定與光線相交的第一個物件。
在FPS裡,這種演算法叫做“命中掃描”(hitscan),當你扣下扳機時,物理引擎會計算下面幾件事:
槍口所指的方向;
從槍口射出一束射線,直到達到規定的範圍,比如碰到牆;
確定光線投射的路徑上是否光線是否撞擊物體。
如果引擎發現你有物體擋住了子彈的路徑,就是通知系統該物體被擊中。
△ 方塊擋在了子彈A射向B的路徑,引擎告知方塊已被擊中
hitscan的核心很簡單,至於物體被子彈擊中後的下一步邏輯是什麼,可以根據遊戲要求定義:
1、如果允許子彈穿透,那麼它將穿透路線上的所有物體;
2、消除最大的射線範圍,就可以一直髮射出鐳射,直到命中物體為止;
3、將某些表面設定為具有反射性,可以將子彈彈開。
使用hitscan演算法,最大的好處是計算簡單快速,不需要額外的記憶體或處理時間即可構建新的物理物件。這也意味著在多人遊戲時,所需的網路資源也最少。
因此,行業中的許多遊戲都將hitscan用作射擊演算法也就不足為奇了。
不僅《德軍總部3D》和《毀滅戰士》這些經典遊戲採用,連近年來的一些熱門遊戲也是。比如《守望先鋒》、《使命召喚》裡的一些武器即是採用hitscan演算法。
但是hitscan還是存在著一些缺陷。
首先,子彈的速度是無限的,比光速還快,瞬間到達被擊中的物體。即使你離目標很遠,只要你開槍的一瞬間,對手在準星上,就必死無疑。
△ 扣動扳機和目標上的火光同時出現,說明子彈是瞬間擊中
其次,子彈的路徑是直線,沒有考慮風向、重力等因素,即使在建模的時候把路徑改成曲線,但是在子彈射出後也無法更改路徑。
為了讓射擊遊戲更真實,就需要使用另一種方法。
給子彈加上彈道
這個演算法聽起來很花哨,其實很簡單。
武器射出的每顆子彈,都會在環境中建立一個新的物理物件,有著自己的質量、速度和引擎要計算的命中框。
由於每個彈丸都是獨立存在的,因此可以考慮風力、摩擦、重力和溫度等因素。任何作用在子彈上的力都會改變其方向。
而且在這種演算法下,子彈不會瞬間移動,還可以實現以下功能:
1、在一些遊戲中有“子彈時間”特效;
2、如果長距離狙擊移動目標,需要提前目標的估計移動量;
3、實現榴彈等爆炸物的延遲爆炸。
但是在進行多人遊戲時,伺服器將需要做更多的計算,來確保所有物件都同步,並且必須解決不同客玩家之間的差異或衝突,以免在同一臺伺服器上給玩家帶來不一致的體驗。
一個方法是,在遊戲時間之前載入物件的“池”,並在需要時“彎曲並啟用”它們。一旦撞擊到物體表面,就回收這個物件,將其儲存以備後用。
這種方法將減少反覆建立和銷燬物件的計算和記憶體成本。
至於遊戲時間的同步,存在著多種計算方法:
1、時間是與渲染分開計算,即使存在跳幀,遊戲也能精確地表示物件。這種方法需要計算自上次渲染之後經過的確切時間。
2、計算每一幀的時間,將物理引擎繫結到幀速率。如果禁用幀速率上限,或開始丟幀,則會看到加速或卡頓的效果。
而且,這種演算法在子彈速度足夠快時,可能會遇到物件彼此“互穿”的情況,儘管它們在引擎中從未重疊。
混合系統
有沒有辦法結合了以上兩種方法的優點呢?答案是有的。
最簡單的辦法就是不同武器使用不同的引擎。
大多數FPS遊戲引擎可以處理兩種型別的子彈模擬。這樣就可以選擇擁有各種各樣的武器。《俠盜獵車手》和《半條命》等遊戲都具有可以支援兩種物理型別的武器。
比如《光環》中的突擊步槍使用命中掃描引擎,而刺針槍使用子彈彈道模型。
遊戲開發人員還可以混合使用兩種技術來彌補每個系統的弱點,從而提供更加逼真的體驗。
例如,要解決物體從彈道互穿的問題,可以在引擎的每個時刻上繪製子彈射線,檢視射線是否會相交。
也可以混合兩種演算法以增強遊戲的功能。
《狙擊精英》系列就是一個很好的例子。扣動扳機後,引擎將使用hitscan來確定子彈是否足夠靠近目標以觸發慢動作。如果結果為true,引擎將在子彈時間內計算彈道。
參考連結:
https://www.gamasutra.com/blogs/TristanJung/20191206/355250/How_Do_Bullets_Work_in_Video_Games.php
來源:量子位
原地址:https://www.toutiao.com/a6822865446291636747/
相關文章
- 重組Reassembly for Mac(太空飛行射擊遊戲)Mac遊戲
- 永不過時的品類——飛行射擊遊戲的40年遊戲
- 在這個射擊遊戲裡,你的隊友是上一局的自己遊戲
- 突破3D飛行射擊遊戲的視野?《斯露德》的野心與遺憾3D遊戲
- “追逐戲”是如何在電子遊戲裡發揮作用的?遊戲
- 玩家角色——攻擊刀光和發射子彈
- Unity射擊例項講解—子彈建立Unity
- 戰鬥,射擊!探尋射擊遊戲發展的這些年遊戲
- 分析“英雄射擊遊戲”的角色設計遊戲
- 射擊遊戲的原始模型——牛仔決鬥遊戲模型
- python 打飛機專案 ( 讓敵機發射子彈 )Python
- 電子遊戲文化是如何形成的?遊戲
- 讓前端的子彈飛-TypeScript前端TypeScript
- 乾貨:射擊遊戲中強烈的手感如何營造出來?遊戲
- 硬核的橫版平臺射擊遊戲如何煉成,看看《碳酸危機》製作人是如何說遊戲
- 從STG射擊遊戲歷史看遊戲設計的演化遊戲設計
- 讓子彈再飛一會:遊戲中關於碰撞體積的趣聞遊戲
- 《彈射世界》設計拆解: 這款TapTap9.0分的遊戲是如何讓玩家感覺到“爽”的?APT遊戲
- 與“延遲”抗爭,射擊遊戲如何做到更好的體驗?遊戲
- Unity射擊遊戲例項—物理碰撞的實現Unity遊戲
- 自由的皮、乏味的心,開放世界射擊遊戲還能如何進化?遊戲
- 射擊遊戲是美國第六大手遊型別遊戲型別
- 好玩的橫版射擊遊戲:Broforce武裝原型 for mac遊戲原型Mac
- 把驗證碼做成射擊遊戲,這還是第一個!遊戲
- 十年了,《求生之路2》依舊是喪屍類射擊遊戲的“爸爸”!遊戲
- 如何為射擊遊戲設計令人難忘的戰術戰鬥區域?遊戲設計
- 從《Apex Legends》看FPS遊戲手感的塑造(二):射擊篇遊戲
- 遊戲是如何有序執行的? 聊聊遊戲規則的基本框架遊戲框架
- 淺談遊戲中槍械:什麼因素影響射擊遊戲中的槍?遊戲
- DDoS攻擊是什麼?是如何進行攻擊的?
- 《Valorant》IGN 評測 :極富深度、趣味無窮的射擊遊戲遊戲
- 從槍支配件出發談硬核射擊遊戲的法則遊戲
- 地獄級彈幕射擊遊戲《阿徹威爾奇妙冒險-Archvale》正版手遊已上線!遊戲
- JuicyRealm 惡果之地for mac(Q版射擊遊戲)UIMac遊戲
- 風靡全球的射擊遊戲有很多,但流行20年的,只有CS遊戲
- 國產橫版飛行射擊遊戲《哞哩的長夢》於1月23日發售,由作者一人開發完成遊戲
- 挖掘3D飛行射擊的完美邏輯,《斯露德》能在內卷的二遊市場出奇制勝嗎?3D
- 《太空羅賓遜》:標準過頭的 Roguelike 射擊冒險遊戲遊戲