在電子遊戲發展的漫長曆史中,總有一些令人耳熟能詳的遊戲機制和良性惡性Bug在遊戲玩家中津津樂道,比如利用內存溢出機制在《沙羅曼蛇》中卡出255條命,又比如說一些因爲遊戲引擎老舊導致的一些遊戲的手感問題,被續作保留併成爲手感的一部分,就像《dota2》中一些技能對轉身速度的影響,這最初是因爲war3的侷限性,而dota2卻選擇這一塊機制選擇保留。
我們這次就來探討一個有意思的問題,那就是:打斷後搖(也就是玩家們說的“硬直”)這個機制是如何作用且爲何被保留的?它和遊戲內的平衡以及開發之間都有怎樣的關係?由於筆者只會虛幻引擎,接下來只會拿虛幻引擎舉例,但是大多數的商業引擎在釋放技能的代碼邏輯上都是差不多的。
動畫融合和狀態機以及動畫蒙太奇的關係
在虛幻引擎中,角色可以通過骨骼綁定大量的動畫,但是動畫藍圖只有一個,那就需要一個節點來判斷角色的狀態,這個節點在動畫藍圖中就叫狀態機。舉個例子,比如你的角色當前的最大行走速度變量是100-300,則觸發行走狀態,並且可以通過混合實現慢慢抬腿到快速行走,當最大速度變成600,角色開始跑步並逐漸從300加速到600。
但是遊戲中的技能千奇百怪,而狀態機通常只能用於普遍存在且能被提取成函數的通用變量,如果你把大量的技能也寫進狀態機,就會出現大量的Bug。因爲你需要做大量的判斷來讓狀態機精準生效,這即低效也難以優化,比如你判斷角色的速度屬性用於切換行走和奔跑,但是你做了一個衝鋒技能也會提高角色的速度,那他們在狀態機裏就會衝突。
於是我們只需要根據按鍵判斷角色的CD時間和資源(血量,藍量,能量等),按下按鍵第一順位優先強制播放角色的施法動畫,並判斷施法動畫播放完成後觸發技能效果進行actor之間的數值交互,那麼就需要一個強制性和優先級都很高的動畫播放系統,它就是動畫蒙太奇。
狀態機獲取速度變量的
這裏也不得不指出,狀態機的執行結果是沒有返回值的,他只能通過變量的變化來觸發,但是動畫蒙太奇有返回值。因此動畫蒙太奇在虛幻引擎中,天生就是爲技能系統服務的,而播放蒙太奇的節點,在播放中和播放結束都可以對流程進行控制或者對輸入進行許可,像魔獸世界中一邊滑步一邊釋放技能的動作就是在播放技能動畫的同時開放了移動輸入。
如果你給角色綁定了多個按鍵的蒙太奇,當你不對正在播放的蒙太奇做任何限制的時候,你播放另一個蒙太奇就會打斷當前播放的蒙太奇,如果你一直重複播放一個蒙太奇,就會在這個動畫的前幾幀瘋狂抽搐。這就是很多老遊戲的表情系統和打斷後搖的核心機制,而一般當需要強制播放結束才能操作的動畫則會用一個節點來控制,也就是Delay。
蒙太奇播放
但是Delay作爲時間軸控制節點,對性能的開銷往往會非常大,所以一般在做CD的時候會用一個int或者float變量,來儲存CD時間,然後通過tick事件來在一個統一的時間軸上,只對浮點和整型變量進行判斷,而不是每次動作都生成一個新的時間軸,這就導致一些CD的攻擊動作會很容易達成打斷後搖的效果,因爲數值判斷和系統級的延遲的優先級是不一樣的。
是一直存在的BUG還是刻意爲之
既然解釋了早期遊戲開發者整出來的打斷後搖和重複鬼畜表情的代碼邏輯,那麼爲什麼現在很多遊戲仍然保留了這些機制呢,難道真的是開發者沒有能力優化嗎?我們以格鬥遊戲舉例,儘管格鬥遊戲一般都是在2D平面上進行的,但是表現層只是前級,後級的代碼上邏輯也是通用的。
在早期FC的格鬥遊戲中,角色都是一板一眼的,而現代的格鬥遊戲中,有些攻擊動作會嚴格播放完每一幀才能行動,但是又可以通過爆氣等手段來打斷,形成新的戰略深度。可以說在對判定要求極其苛刻的格鬥遊戲中,後搖的可打斷與否,以及破綻是否成立都是開發者有意進行嚴格限制的,打斷後搖是戰略深度的一環,也就是說如果性能開銷不大,且要求精確的環境下,開發者是能夠優化好這些問題的。
不過在一些對判定要求不那麼嚴格的遊戲中,比如moba,很多大家耳熟能詳的機制其實一開始就是bug。比如技能接閃現、動作重置普攻這些操作,在英雄聯盟早期版本里,都是玩家摸索出來的,儘管像許多比較imba的效果或者可以利用外部程序在人類無法完成的操作中獲得質變的一般也被修復了,但是像主動物品重置普攻這些效果一開始並不是寫在裝備描述裏的。
比如我們熟悉的早期版本的破敗、提亞馬特,都是一開始作爲Bug出現,直接提升了一大波上單英雄的對線強度,但是在官方發現問題後,保留了其機制並削弱了數值,讓其成爲遊戲內戰略深度構成的一種。
因此,我們可以得出一個結論:打斷後搖在現在的遊戲中,更多的是開發者爲了遊戲趣味性做出的彩蛋式設計,而不是無法修復的bug了,不過在早期這些問題的確是引擎技術限制或者是開發者沒有注意到而留下的問題,然而現在打斷後搖已經成爲玩家和開發者的一種習慣性設計了。
更多遊戲資訊請關註:電玩幫遊戲資訊專區
電玩幫圖文攻略 www.vgover.com