在橫版動作遊戲中,怪物的碰撞體積該如何處理?
問題1:橫版動作遊戲中(類似惡魔城那種只能左右移動的,並非DNF、恐龍快打那種可以上下移動的),如果怪物存在碰撞體積判定,那麼當一個近戰怪物正在與玩家戰鬥時,該怪物身後的其他近戰怪物會如何處理?是在第一個怪物身後排隊待機?還是做進行其他行為?
如果是排隊待機,會不會看上去有點傻?如何處理才能讓它們更自然一些?
如下圖,怪物A、B、C都是近戰怪物,發現玩家後,一起朝玩家移動,A先接近玩家,並與玩家發生戰鬥,怪物B、C受到A的碰撞體阻擋,此時B、C應該做出什麼行為?
問題2:如下圖,假設玩家使用一個挑空技能,將怪物A挑飛至高空,A原本所站的地面空出,此時B是否會上前一步?如果會上前,那麼當A落下來後,如何處理與B的碰撞體積?
問題3:如下圖,怪物A、B、C同時向玩家移動,假設C的移動速度高於B,在移動過程中,C跑到B身後,被B擋住,此時該如何處理?C是否要做出一跑一停的鬼畜移動?
??????首先感謝各位的回答,回答中許多朋友提出了很多有趣味性的方案,給了我不少啟發。不過回答中有很多朋友建議不要做碰撞體,這裡想說明一下,我們這個遊戲的核心機制需要建立在怪物存在碰撞的基礎上,就像那位匿名朋友回答中提到的《死亡細胞》這款遊戲,同樣是玩法建立在怪物碰撞上,只不過這款遊戲的處理方式不適用於我們,我們的遊戲可能比較接近《鹽和避難所》這款遊戲,但是這款遊戲怪物碰撞處理有些缺陷,比如上面提到的怪物原地傻站,走路鬼畜等問題。所以來這裡請教各位
通常2D遊戲怪物之間不做碰撞判定,放任怪物疊在一起。好處有很多:
1,玩家一個攻擊可以同時攻擊到複數的怪,爆出一大片數字那種,玩家看著就很爽。
2,基於上面一點可以做同時傷害幾個目標的設定,來做出數值成長的空間
3,碰撞消耗性能,玩家也普遍接受怪物之間沒有碰撞的設定,沒有特別的理由,一般是沒必要付出額外開銷去做這件事情
但是如果這麼做了
問題1,我們假設你和一般2D遊戲一樣,不會做只有玩家上的去,怪物走不到的障礙物。那麼你可以在尋路夠不到目標的時候,播放特定的待機動作,嘲諷怒吼之類的,播完再嘗試移動。可能會沒那麼傻。
那麼問題3也一樣解決了,尋路夠不著播動作,你的移動就是按待機動作頻率和長度決定的,並不是障礙物移走了,這個節奏要長的多,所以就沒有鬼畜的事情了。
問題2,你會發現通常擊飛過程中,很少有遊戲會做再次被擊中的設定,即便做,也是在擊飛下落時對擊飛前空出的位置做攻擊,而不是對空中的對象做攻擊。因為擊飛一般不視作位移,僅僅是播放了一個飛起的動畫,實體和碰撞都還在原位沒有移動。
謝邀
但是不客氣的回答:橫版動作遊戲角色還有碰撞,只有2個可能:
1,外行做的,根本不懂怎麼做橫版動作遊戲
2,宗師級的,玩出新的搞笑花樣來
因此,恕我經歷過的遊戲太少,真沒見過怪物之間有碰撞的橫版動作遊戲(題主說的這種橫版動作遊戲)。惡魔城怪物之間是沒有題主所說的碰撞的,至少我寫代碼的那一代肯定是沒有的。當然因為怪物之間沒有碰撞,題主後面的問題也就沒有意義了。
至於說碰撞開銷大,甚至還說用物理碰撞的,我只能呵呵了。你說碰撞開銷大,我真不知道開銷大在哪兒了,動作遊戲本來每一幀都必須重算碰撞,通常有2層碰撞要做:
1,攻擊、受擊、格擋框之間的碰撞判定,這其實是為了戰鬥系統服務的,每一幀每一個角色的攻擊、受擊、格擋框的位置和大小都會發生變化,所以每一幀都跑不了要計算,這就是動作遊戲和回合遊戲最本質的區別。
2,角色體型框和地形的碰撞,任何行走於這個世界的角色都必須去做,不管他看起來是不是飛的(而且這根看到的沒關係,seeing is NOT believing,這就是遊戲開發最基礎的根基思想),這是與角色移動系統(移動不僅僅是走路,被推開也會移動)相關的碰撞檢測。
所以根本沒有什麼額外開銷可言,因為你本來就跑不了「開銷」,只是在於優化的時候演算法不同而已。至於用什麼物理碰撞的什麼box2d之類的就更荒唐了,物理引擎在遊戲界如果不是開發搞笑遊戲(比如憤怒小鳥),那就只能做做周邊細節,但是真的周邊小細節,又沒什麼人做得好,比如一個瓶罐被搶打爆粉碎的效果,你看看國內有團隊能做好?不過可悲的是,甚至有做遊戲的還覺得馬里奧都是用物理引擎的,那還有什麼好說呢?
所以結論就是,怪物與怪物之間沒有體型碰撞,才是內行的做法。
看了評論發現,覺得馬里奧系列和惡魔城系列是一類遊戲的外行還真不少,嘖嘖嘖,難怪只要類wow的遊戲普攻改AOE都能被說是動作遊戲。專業水平如此欠缺,不知道哪來的自信評論。什麼是體形碰撞都看不懂還要來談遊戲開發,玩家還是就安心玩就行了
題主要的東西應該是"群體AI",這個在:
RTS:編隊尋路時,對每個小兵都執行一次尋路會非常廢(走的路勁都非常相似);保持列隊前進,單位間有碰撞,如果自由移動會導致內部相互阻擋。
ARPG:防止被玩家兜圈子遛狗(放風箏),怪物不帶腦子的直接往主角沖,主角繞著圈跑,重複幾圈,怪物就會集中在圈子中心,一個AOE過去,N殺。
3D ACT:早幾年因為機能的限制,一個場景中出現不了幾個敵兵。讓敵兵無腦沖的結果就是遛狗(無雙系列)。要麼就是增加敵兵攻防,弱化主角攻防來控制難度(鬼泣,魔女)。忍者龍劍傳則用了群體AI,一次出場的敵兵就4-6個,遠近搭配,類似於英雄式片子里,一群人圍著主角,每次1-2個敵兵接近主角肉搏,其他的繞著主角跑待機,或在主角身後或玩家視野盲區時出黑刀,或當近身敵兵被主角毆打時打斷主角動作,或乘機強力輸出(蓄力攻擊,或抓取主角自爆)
這類演算法的文章不少,主要針對RTS討論的比較多(比較典型也比較有代表性)。
基本思路就是把群體也當成一個實體來考慮,有集體狀態,有自己的戰術考量(AI),能根據戰場情況對群體內的各個小兵實體進行調度(粗粒度的,待機,出擊,援助,支援)。小兵實體自己的AI就是細化,待機時是完全呆著不懂還是繞著主角跑;出擊時,近身出什麼招,遠身出什麼招,有沒有大招等等。
這樣的話,所謂的橫板,就是y軸移動需要「跳躍」才能實現的2維平面;而怪物之間的碰撞,就是個對走位和出招多了個要考慮的約束條件而以。
並不是部分答主認為的難以解決或存在過多副作用的問題(部分答主答偏的方向)。
針對物理引擎簡單聊聊:
物理引擎往複雜了整,就是物理大專業,實現個量子力學,相對論都在其範圍。
往簡單了整,碰撞,重力,牛頓一二三四五律就算。
所以,題主自己實現個簡單的也好,有大量效果實現資料,以及各種加速結構;使用現成的也好,有不少開源的,免費的,強大的,易用的等等也好。都是物理引擎(物理模塊),能達到你要的效果就成,這種問題就不要被部分答主帶著跑偏了。
正好做了兩款橫版act,回答一下樓主說的問題:
1,玩家打怪物,如果玩家受擊框與怪物受擊框重疊,則,打擊到怪物時,會把怪物強制瞬間拉到前方指定位置。再執行擊退邏輯,以便保持打擊表現的一致性。2,橫版act,尤其是手游,人物較大戰鬥空間相對端游較小,所以,怪物雖然有碰撞框,但怪物與怪物之間是穿透的。而且,大多數手游act,玩家與怪物之間也是穿透的。碰撞框僅用於打擊判定。一般做物理移動碰撞的遊戲,通常是像戰神等,有足夠操作縱深的遊戲,否則,你就需要給玩家足夠的脫離困境的手段。
比如起身無敵穿透,以防止被怪物包圍後,玩家缺乏應對手段。另外,即使是做怪物移動碰撞,怪物與怪物之間也是大多檔半個身位,而不是用嚴謹的體積判定。
以便讓玩家可以享受到一人群毆一群怪的爽快感。在做的時候,其實應該先考慮一下,為什麼的做移動碰撞。
移動碰撞應用最廣的是橫版動作過關類遊戲,追求的不是極致的打擊爽快感。而是關卡配合戰鬥機制的挑戰的樂趣。所以,從遊戲核心機制出發來判定你需不需要移動碰撞機制,而不是,別人的遊戲有沒有移動碰撞。比如一個大體型的怪物擠開小怪物,也很有趣。碰撞體積極其消耗性能,而且並沒有帶來用戶體驗的提升。大多數玩家要的是爽而不是真實,碰撞體積的存在影響用戶體驗(或者說影響爽度),尤其是對於網遊來說面臨的問題很多。所以一般是不這麼做的。
但如果僅限單機的話,性能一般不是問題,你還是可以處理碰撞體積的。
如果npc有碰撞體積,那玩家也需要有的,如果玩家有,那麼撞擊理應不分敵我,也就是說npc對npc造成的碰撞會存在傷害。
那麼第三點實質是 npc ai 的問題,如果一個遊戲存在碰撞體積,則被挑飛的怪物下落時會砸傷下方物體。對你的情況,一般可以設計為C怪物繼續前進,然後B怪物掉下來砸暈C怪物。C怪物倒地躺一小段時間,而B怪物會站在C怪物旁邊。
當然你可以設定更聰明的ai,讓C怪物試圖避免被砸。不過這沒有必要,所謂萌萌的,可愛的,本質上的意思都是傻。你見過哪個絕頂聰明的物種能用可愛來形容的?怪物必須夠傻,它才可愛。
用同樣的道理去考慮第二點,那就容易了,如果B怪物前進時撞到A怪物身上,那就播放一個滑稽的倒地動作,然後坐下來休息一下,以及播放一個艱難的爬起來動作。這樣當起身的時候,與A的距離就已經拉開了。
如果按照你第一圖上畫的那樣,C怪物的武器撞到了B怪物的後腦勺,也可以設計讓B怪物一腳先把C怪物向後踹飛,讓C怪物沒有接近B怪物的可能。
當然也可以讓被碰撞體積擋住的怪物有兩腿交替的動作但沒有向前的位移,這也算是很省事的處理方法,不過相對沒那麼有趣。
以上的設計,用萌萌的怪物性格,降低了因設計碰撞給玩家帶來的不適,僅供參考。從舉例的問題來看,你是想要個怪物碰撞機制吧?然後卻拿傳統的橫版2d做示例,但是,傳統的橫版2d並沒有你要的這個機制。
也就是說,從問題一開始,你就把答案限制在一個奇怪的範圍內,導致大家都在討論橫版2d是否有怪物碰撞。
實際上,把問題拆開來,你要做的其實是並不是傳統橫版2d遊戲吧?
你舉例說類似傳統2d遊戲(惡魔城而不是dnf),意思應該是指只能存在一個平面內,然而實際上就算只能左右移動的橫版2d也是有縱深的,只是這個縱深只存在在意識里。
你要做的其實是一個純2維空間的遊戲吧?
基於以上的前提,我來提供個思路:
問題一:怪物排隊待機
先把碰撞體積這種事情放一邊。
你是希望怪物可以排隊待機,但是不知道怎樣表現比較好?
因為傳統2d遊戲,就算只能控制一個平面,但是在玩家的意識里,怪物與怪物之間其實還是有第3緯度的空間,所以他們不會因為前面的人堵住而無法前進。
而你既然是純2維空間,其實最好的方法就是把整個畫面設計出純2維風格。
不過你給的示例圖又是平面截圖的3d角色……
那麼只要在玩家與第一個怪物接觸後,設定一個『牢籠』,這樣就能很好的解釋為什麼後面的怪無法向前了。
這個時候只要在這個空間加入一個『牢籠』作為視覺引導,後面的行為就變的自然了。
問題二:怪物起跳後,下方出現空白
這個問題又分成兩部分,你希望B怪物不能進入空白區 以及 你希望B怪物可以進入空白區。
首先,如果你希望B怪物不能進入空白區,那麼只要在條件滿足的情況,給牢籠加上碰撞限制即可。
當然,如果是希望B怪物能夠進入空白區,那麼直接用一些視覺上的引導,把A怪物移到牢籠外就好。
比如主角在挑起A怪物後,會把A怪物擊飛出牢籠,把B怪物勾進牢籠等等。
問題三,排位靠後的怪物,速度較快
這個按照正常的碰撞思路就好了,同樣依然是視覺上的引導,後面的怪如果撞到前面的怪,會出現一些『聖光』來讓他們停頓一下。
最後,這個是基於『你想做一個與傳統橫版2d不同的純2維空間遊戲』為前提做出的回答。因為這是一種比較少見的類型,所以他的重點其實並不在該不該有碰撞體積上,更多的是如何讓玩家明白,這個是一種不一樣的類型,以及遊戲里的角色為什麼這樣行動。
不過如果你本意其實是模仿傳統橫版2d,然後奇怪為什麼他們沒有怪物碰撞的話,那這個答案沒有參考價值。
公眾號:SignACG
這其實是個核心機制的設計問題,在決定要不要有行走阻擋(題主說的碰撞體)前題主應該先考慮好技能系統怎麼做。有阻擋一般有閃避,且關卡布怪,敵人AI都與此有關…如果想要有阻擋,可以參考一下《死亡細胞》的做法,私以為死亡細胞已經處理的很好了…
建議題主在動手做自己的遊戲之前,儘管可能多體驗已經發售的遊戲,避免閉門造車,也遠比來知乎提這樣的問題有效率。
如果題主真的認真體驗了相關遊戲,我相信是不需要圖文並茂地在知乎提這個問題的。
很認真的建議。授人以漁。
橫版一般默認屏幕方向的z軸是有一定深度的,所以可以放下幾個怪物並排吧……如果一定要碰撞檢測,就把同屏的怪設計成有近戰有遠程有奶媽,近戰還可以跳躍到達玩家另一側,可以在一個人後撤的同時另一個人跳上來攻擊,但你覺得這是玩家在刷怪還是怪在刷玩家……
…我大學做的第一款遊戲就是2D 橫版遊戲……也是傳統ACT……
這個問題也是我當時思考很久的後來參考了許多fc遊戲就明白了……其實很簡單 敵人之間不需要有碰撞體積就好了敵人疊起來一起消滅 也是遊戲的樂趣所在啊~(當年遊戲圖片 所有東西都是自己畫還是挺費勁的…不過這些樹木好像是素材來著…)在我看來題主的問題是在考慮多個怪重疊怎麼處理而不會看起來很奇怪。
一般來說2D橫版遊戲怪物是會重疊的,比如馬里奧裡面的板栗仔就重疊了,同時也沒處理,所以當有多個板栗仔疊在一起時看起來就像一個怪物。後來很多橫版遊戲對怪物重疊有做過處理,最後玩的一款橫版動作遊戲 shank 中對重疊的情況就做過處理,建議題主可以先在同類型的遊戲參考下,而不是一來就上知乎提問。
另外,當時我們項目組在做原型時遇到這個問題我們處理方式是加入了一些隨機值,防止動作「完全一致」的重疊情況發生。
我從玩家的角度考慮,我覺得可以做成怪物跳起攻擊玩家,怪物空中無碰撞,就不會像是排隊送死了啊...怪物滿屏亂跳,砍起來還是挺爽的。
首先,命題是普通的橫版動作遊戲。根本核心是遊戲,所以規則設計上,體積判斷是否有必要,得由玩法設計者定義,也就是策劃同學。然後再付諸實現。在遊戲性角度考慮,橫版過關一般不需要做到「面積」判斷,多用距離判斷。怪物之間,甚至怪物和豬腳之間,都可以堆疊。不要為了模擬而做遊戲,而是為了趣味而做遊戲。
推薦閱讀:
※如果你作為爐石傳說的設計師,你會如何對遊戲進行改動?
※如何增加策略遊戲的策略性?
※遊戲機禁令對我國的經濟發展有哪些正面影響?
※遊戲策劃如何科學地描述自己的遊戲感受?
※從《植物大戰殭屍 2·中文版》的內購模式看,為什麼這麼多人罵,但收入還是非常好?