999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于Unity3D的動作角色扮演游戲戰斗系統研究與開發

2024-01-27 13:41:08何柳青
現代信息科技 2023年24期

摘? 要:游戲開發已成為數字媒體技術專業的重要課程內容之一,其中動作角色扮演類游戲在游戲市場中所占比重較大。以Unity3D游戲引擎開發第三人稱動作角色扮演游戲為例,結合3ds Max和Visual Studio進行游戲開發。使用C#進行場景編程實現角色行為(包括行走、攻擊、怪物AI等)控制,調整適合玩家的戰斗模式,并對游戲戰斗模塊進行封裝優化,有效降低游戲運行的功耗,增加整體流暢度,提升游戲玩家體驗。

關鍵詞:動作角色扮演;角色行為控制;戰斗模式;封裝優化

中圖分類號:TP317? ? 文獻標識碼:A? ? 文章編號:2096-4706(2023)24-0001-05

Research and Development of Action Role-Playing Game Battle System Based on Unity3D

HE Liuqing

(Guangzhou College of Technology and Business, Guangzhou? 510850, China)

Abstract: Game development has become one of the important course contents for digital media technology majors, in which, action role-playing games accounting for a large proportion in the game market. This paper takes Unity3D game engine development of third person action role-playing games as an example, and combines 3ds Max and Visual Studio for game development. By using C # to program scenes to control character behavior, including behaviors such as walking, attacking, and monster AI, adjusting the combat mode suitable for players, and encapsulating and optimizing game combat modules, the power consumption of game operation is effectively reduced, the overall smoothness is increased, and the game player experience is enhanced.

Keywords: action role-playing; role behavior control; combat mode; packaging optimization

0? 引? 言

隨著硬件性能的提高,Unity3D游戲引擎以GPU實時渲染生成高幀畫面,給玩家帶來高品質的游戲體驗,同時玩家也對戰斗體驗有了更高要求,設計優質的戰斗系統已成為衡量角色扮演游戲優劣的重要保證。而戰斗系統的設計與制作涉及多個重要環節,各個環節之間緊密相連。

1? 游戲戰斗系統框架設計

本項目的戰斗系統框架分為戰斗方式、戰斗攻防模型和戰斗元素三個部分。

1.1? 戰斗方式

戰斗方式是戰斗系統中最直觀的環節,其設計具有多樣化,可以是多種設計合理地整合在一起,以更好地呈現出戰斗的緊張感和趣味性。戰斗方式并非固定不變,而是根據游戲地圖環境的變化而有所變動。

動作角色扮演游戲的戰斗方式大致分為以下4點:

1)玩家需要在怪物的攻擊群中生存,或者是擊殺一定數量的普通怪物和擊殺少數的首腦怪物。

2)通過孵化器孵化出一定數量的怪物,并通過體積碰撞或投擲物來攻擊玩家。

3)刷新不同批次的怪物,后續批次怪物的戰斗能力比前面的怪物稍強。

4)玩家可以通過武器和技能來擊殺怪物,同時以移動、閃避的方式躲避怪物的攻擊。

1.2? 戰斗攻防模型

游戲中的我方或敵對角色在戰斗系統中只有四種狀態:移動、攻擊、防御、閃避。當主角遇到怪物時,通過空間位置移動讓怪物進入攻擊范圍。在這個過程中,雙方均沒有發起攻擊行為,處于備戰狀態,可以實施移動和防御兩種行為。假設主角實施攻擊行為,則雙方進入攻防狀態[1]。當主角對受擊方發起攻擊時,怪物有三種可選行為:不防御且同時進攻、防御、閃避。攻擊方發起且完成一次攻擊后,即完成了一次攻防流程,雙方再度進入備戰狀態。處于備戰狀態的雙方可計劃下一步的策略是進攻、防御還是閃避,如其中一方受到嚴重傷害——死亡則結束戰斗。攻防模型如圖1所示。

主角是主動發起攻擊的一方,所以在攻防模型中不存在主角防御或閃避的行為。而在攻防過程中,移動是沒有直接收益的,但它可以令攻擊行為獲得最大收益,如移動到某個角度打擊要害,或移動中實施攻擊。所以說移動是戰斗過程中較具靈活性的行為,主要用來輔助攻擊和對抗攻擊。在圖1的攻防模型中,閃避在游戲設計中也視為防御,無論是攻擊方主動發起攻擊行為,還是受擊方發起防御或閃避行為均形成攻防關系。

1.3? 戰斗元素

戰斗元素與攻擊招式相關,普通攻擊和技能攻擊中均有涉及。

1.3.1? 攻擊范圍

包含普通攻擊范圍和技能攻擊范圍,因技能需要消耗角色自身部分能量,故技能攻擊范圍必定大于等于普通攻擊范圍,這樣才能確保收益平衡。

1.3.2? 招式前搖

招式包括普通攻擊和技能攻擊的動作,無論何種攻擊,在受擊對象被判定受到攻擊前的時間均屬于前搖耗時,即產生攻擊收益前的時間。這段時間是無法產生收益的,但卻是獲得攻擊收益必不可少的步驟。前搖時間越短,越早對敵方發起攻擊,反之越晚對敵方發起攻擊。通常情況下,攻擊力強的招式前搖時間較長,反之則前搖時間較短。因此,玩家在即時戰斗前就需要考慮如何合理組合攻擊招式以獲得最大收益。

1.3.3? 攻擊硬直

招式在擊中敵人后,敵人會有短暫的動作停滯而無法活動,通常不會超過一秒。在攻擊硬直時間內,受擊者無法做出任何行動,容易被攻擊者施放連招而造成更大的傷害。

1.3.4? 招式后搖

玩家角色在施放完攻擊動作后,如沒有繼續輸入攻擊指命則會產生收招動作,而收招動作屬于后搖。后搖所需的時間會直接影響整體攻擊的頻率。如果后搖時間較短,則下一次攻擊會更早,從而提高攻擊頻率。

從圖2中可以看出,在攻擊范圍內,在敵人無閃避行為的前提下擊中敵人會令敵人產生攻擊硬直狀態,但同時也會令自身角色產生招式后搖,這兩者是同時發生的,只是兩種狀態依附的角色對象不同而已。

2? 戰斗的多重機制

2.1? 戰斗的對抗機制

在常規的戰斗環境中,怪物不會比主角強太多,玩家只需采取一些策略便可以通過關卡。一般情況下,平衡的對抗關系是使玩家持續玩下去的動力之一,也是戰斗對抗機制的一個要素。然而平衡的對抗關系不能給游戲帶來更多的刺激性和挑戰性,因此在某些環境下打破這個平衡關系能給游戲增添更多的可玩性。游戲中的不同角色、武器、技能具有不同的作用,角色與角色之間有所差異,角色與怪物之間更是迥然不同。對付同一種怪物,不同的角色有不同的戰斗機制。這樣可避免單一角色的同質化,使得每一個角色都能專精本職業的玩法策略,獲得差異化的戰斗體驗[2]。然而,實現這種對抗機制的前提條件是保證角色的戰斗能力綜合評價不能遠低于敵人,避免任何一方以絕對強勢的戰力破壞對抗機制。

戰斗可以增加某一方的人數形成差異,如增加敵人數量,形成雙方人數不平衡的對抗關系。但雙方人數上的較大差異并非能夠形成絕對優勢,通常只是彌補單體敵人戰力的不足,從而更好地維持戰力平衡,這種機制通常用在對抗普通怪物的環節中。

在對抗BOSS強敵的過程中,不能以增加數量的方法來加強怪物戰力,BOSS強敵本身的戰力就比玩家角色強,但玩家不能直接依靠自身的戰力來戰勝它,因此需要設置特定的戰斗機制來解決這種問題。例如使用特定的技能、觸發場景的機關、特定時間段行動等可以大幅度提高傷害數值或削弱強敵的防御力,從而在傷害輸出方面帶來更高的收益,更容易擊敗強敵,以弱勝強。玩家在通過機制戰勝強敵后會獲得更大的成就感。對抗機制關系如圖3所示。

2.2? 戰斗的交互機制

角色在發起攻擊或防御時會播放相應的動作動畫,而雙方在動作發生碰撞或進入攻擊范圍時便產生了交互。攻擊或防御動作具有空間判定性,攻擊判定和受擊判定都是針對不同的部位。如武器擊中對方身體產生了交互,會播放受擊者被擊中后的硬直動畫,由于硬直時間非常短,無法做出攻擊、防御、閃避的行為,這時候攻擊者更容易發起連續攻擊。

交互機制也遵循對抗機制,但它卻有不確定性,決策過程完全取決于玩家選擇何種行為。玩家采取何種策略,會帶來不同的對抗過程和對抗結果,這一點無法通過游戲規則來限制其發展。例如玩家在遇到敵人時可以利用地形優勢發起遠程攻擊,或直接遠離敵人的攻擊范圍令其暫時無法攻擊,等待夜晚怪物入睡后再進行突襲。交互機制存在多種可能性,玩家可以將技能、武器、道具、環境等因素納入對抗策略中,而交互機制的設計思想是只提供對抗條件和任務目標但不限制策略,如圖4所示。

2.3? 戰斗關卡的運行機制

一個戰斗關卡可以存在一個或多個場景,而關卡運行機制則融合了至少一個場景的相關元素。關卡主要元素包括時間、空間、即時道具,這三個方面均是關卡自身產生的元素,同時它們也會直接影響戰斗機制和戰斗結果,是游戲關卡設計的必要因素。主角和怪物都可以在關卡機制中得到相應的強化或弱化,如何運用關卡機制來取勝是玩家必須要思考的問題,這就進一步增強了玩家在游戲中的互動性。

2.3.1? 關卡時間

游戲戰斗關卡的通關條件之一是戰勝怪物敵人的時間不超過關卡的規定時限,反之則判定為通關失敗。不同場景(地圖)的關卡時限不同,與普通怪物和BOSS怪物戰斗的時限也不同。在規定的時限內,需要基于關卡時間來計算玩家時間的消耗,以方便玩家即時了解時間消耗而實施相應的戰斗策略。

2.3.2? 關卡空間

對于關卡空間,在玩家實施戰斗的過程中可以設定為有空間限制或無空間限制。通常在通關式的游戲中均有空間限制,在有限的空間內與敵人戰斗直至其中一方獲勝。關卡地圖設定了邊界,玩家需要結合活動范圍來制定戰斗策略。有限的空間會影響玩家武器的使用和技能的施放,提高了生存的難度。

2.3.3? 關卡道具

關卡道具特指關卡里掉落的物品,只對關卡本身起到提升作用,而它需要玩家角色拾取才能產生效果,如玩家沒有拾取到相應道具則不會產生效果,且在限定時間內玩家未拾取到相應的關卡道具,其可能會消失。關卡道具可以在短時間內令玩家角色的戰力得到一定幅度的提升,從而影響游戲難度曲線,降低戰斗難度且可選擇采用更多可行性的戰斗策略。

3? 角色行為模塊

部分角色扮演游戲都會存在戰斗系統,這部分游戲被列為動作角色扮演游戲(Action Role Playing Game, ARPG)。而在ARPG游戲中,無論是玩家還是“怪物”,均可以設計一套戰斗行為模塊。這套行為模塊主要用來設定戰斗標準,該模塊能夠減少游戲冗余數據,降低計算量且提高游戲的運行速度,這是游戲優化的條件之一。

3.1? 通用行為模塊

功能組模主要是為了實現移動、動畫、攻擊、尋路等。

1)移動模塊。控制角色的移動。

2)動畫模塊。控制角色不同狀態動畫的無縫切換。

3)攻擊模塊。計算攻擊產生的傷害與即時狀態,但不計算傷害的具體數值。

4)尋路模塊。控制角色自動尋路或手動尋路。

這部分組模代碼在游戲里基本通用,只提供機制但不提供具體計算方法和數值。

3.2? AI行為模塊

游戲中存在多種行為,玩家可以手動操作自己的角色,而怪物則需要借助AI行為去驅動。戰斗系統中的行為比較復雜,因此需要將行為分成多個模塊進行管理,如圖5所示。

1)總決策模塊。怪物在原地待機時,假設玩家進入其攻擊范圍。怪物以預設定的行為對玩家發起攻擊。

2)指令請求模塊。判定請求的指令是否超出預置規則范圍,如怪物是否有負面狀態導致行為受限。如果怪物的狀態正常則向下層模塊發出攻擊行為請求。

3)動畫模塊。怪物在移動或攻擊時播放相應動畫。

4)數據模塊。用于怪物的各種狀態數據(包括怪物的坐標數據和自身狀態數據)更新。數據更新的同時請求相應指令,同時向總決策模塊提供信息,決策模塊檢查數據并發出同步決策指令。

3.3? 區域AI模塊

AI可以根據不同情況進行劃分,具體包括區域AI、隊列AI和單體AI。

一張地圖上存在多個區域,不同區域可以單獨設置AI。區域AI容易與關卡運行機制相混淆。關卡運行機制主要是針對如何擊敗怪物而設,而區域AI則直接作用于怪物,令怪物具有模擬人類思考的行為,因此這兩者所針對的主體有本質上的區別。

隊列AI主要控制整隊怪物的行為策略,單體AI則控制單個怪物的行為策略。例如,玩家進入到地圖的某一區域,該區域有一隊共5個怪物,區域AI則會檢測哪一個怪物離玩家最近,單體AI此時發出攻擊玩家的指令,同時由隊列AI發起信號讓全隊怪物進攻玩家。而其他4個怪物具體如何進攻則可以由隊列AI和單體AI同時控制,比如隊列AI會發出圍攻玩家的指令,攻擊則由單體AI控制。由此說明這三種AI并不沖突,是可以并存的。

設定怪物有待機、走路[3]和死亡三種狀態,現針對待機和走路兩種狀態進行AI控制,實現單體怪物AI部分行為的C#代碼如下:

public enum MonsterCondition

{

Idle,Walk,Attack,Death

}

public string monster_present;//怪物當前狀態

public string monster_idle;//怪物待機

public string monster_walk;//怪物走路

void RandomState()

{

int value = Random.Range(0, 2);//定義一個隨機整數,取0和1? ? ? ? ? ? if (value == 0)

{

monster_present = monster_idle;// 當隨機值為0時播放怪物Idle動畫

}

else

{// 當隨機值為1時

if (monster_present != monster_walk)

{

transform.Rotate(transform.up * Random.Range(0, 360));

//怪物沿豎直方向旋轉隨機角度

}

monster_present = monster_walk;//播放怪物Walk動畫

}

}

通過上述代碼可實現游戲中的怪物在區域內待機和隨機方向走路的AI功能。

3.4? 狀態機和行為樹

游戲中玩家控制自己的角色可以用狀態機來實現,而怪物則可以用狀態機和行為樹來控制其AI行為。除了無須移動的NPC,游戲中的角色動作通常由狀態機來控制。狀態機就是多種狀態的集合,狀態之間只要滿足一定條件即可切換。如怪物的狀態機包含行走、奔跑、攻擊1、攻擊2、受傷、死亡倒地等狀態,行走可以切換到跳躍,奔跑可以切換到攻擊1和攻擊2,這里的攻擊1和攻擊2并非連招,而是獨立的攻擊行為,如圖6所示。

由圖6可以看出,每個狀態除了自身行為外,還需要在適當的條件下與其他狀態交互,因此狀態機形成一種網狀結構。但若要實現較復雜的AI行為(如怪物的巡邏、圍攻玩家等),僅使用狀態機是無法實現的,這種情況需要使用AI行為樹。行為樹是樹狀分支節點的結構,與狀態機在結構上有較大差別。

怪物或NPC角色在通常情況不會發生戰斗,只有在觸發適當條件時才會進入戰斗狀態。而所有的行為都是在行為樹的范圍內實現,以此來實現AI控制。行為樹包含控制節點和行為節點,將所涉及的行為寫成節點,再把這些節點連成樹。每次決定選擇哪一種行為時,會從根節點的各個分支節點去判定是否進入下一層節點,找出與當前狀態相符的行為。戰斗型NPC在沒有敵人來襲時巡邏,在視野范圍內出現普通敵人時則發起攻擊,遇到精英怪物時則逃跑,該行為樹會即時判定符合的條件,從而做出相應的行為,其邏輯關系與AI行為模塊相同[4]。這是一個簡單的行為樹,如圖7所示。

行為樹有多個節點滿足條件時,則會按權重做出選擇。如同時遇到普通怪物和精英怪物,會選擇權重最高的節點。而權重以角色存活為優先,越容易令角色存活的節點權重越高[5],在滿足某些條件的前提下,容易導致角色死亡的節點不會被選擇執行。

圖5的例子是行為樹的行為節點,除此之外還有控制節點,具有以下三種類型。

3.4.1? 單一選擇

對于多個下層節點只選擇其中一個,由于不能同時執行2個以上節點,最終只能選擇1個末端節點執行。

3.4.2? 順序選擇

按順序依次選擇節點并運行,其中一個節點運行完畢后再運行下一個節點。

3.4.3? 同步選擇

同步選擇符合條件的節點并運行。如NPC在巡邏時與其他NPC交談且進行某些肢體動作,即巡邏、交談、肢體動作三個行為節點同時運行。前提是無敵人,敵人一旦進入視野區則會結束這三個節點的運行,進入另一個控制節點。

三種節點控制類型使用哪一種要看具體情況,不同的情景有不同的選擇,有時并非單一類的運行,也有可能是多個類型混合控制。比如單一選擇類型下面的分支使用了同步選擇。

4? 戰斗系統模塊的整體封裝

戰斗系統有諸多模塊,為了便于管理和減少程序漏洞,需要對各模塊實行整體封裝。封裝的主要思路是將各戰斗模塊歸集到基類中。基類包含所有組件,具備戰斗對象、基礎字段、函數初始化的賦值等。

4.1? 戰斗實時信息傳遞

通常,玩家或怪物發出的攻擊傷害和判定都會被封裝在類里,在觸發戰斗行為事件后將信息傳達給受擊者。在Unity里可以先通過攻擊碰撞觸發事件,在事件發生后處理相應信息,并非是直接將戰斗信息傳達給受擊者,這樣可方便后期調試受擊信息,更好地進行全局信息控制,從而減少程序漏洞的產生。

4.2? 戰斗系統組件的類

戰斗系統以組件模式處理戰斗行為,通過基類的回調函數傳遞戰斗信息。只需將全部戰斗組件的函數與BattleCharacterObject的回調函數關聯就可以實行統一調用。以組件模式創建的戰斗系統具有高度可擴展性,且能靈活定義各組件[6]。圖8列出了幾個重要的基類,并通過基類令所有組件泛化,使組件適用于不同類型的數據。

其中,DamageAttackComponent(傷害攻擊)和PhysicsAttackComponent(物理碰撞)是兩個重要的基類,它們處理即時碰撞后產生的事件數據。而BattleCampComponent(戰斗陣營)是一個靜態類,它在戰斗發生前判別對方是否為敵人,如果是敵人則可以發起戰斗。其關鍵代碼如下:

public static class BattleCampComponent {

public const int PLAYER = 1;//判別玩家

public const int MONSTER = 2;//判別敵方怪物

public const int NPC = 3;//地圖上的NPC,在某些條件觸發下也可以轉換陣營

}

5? 結? 論

對3D角色動作游戲的戰斗系統框架、運行機制、戰斗行為模塊進行了研究與開發,重點研究并優化了玩家操作、AI行為、戰斗事件等內容,提升了操控流暢度。充分利用類的封裝方法,將各模塊整合成為一個戰斗系統,最大程度簡化了編程量,減少了冗余程序,提高了執行效率。

參考文獻:

[1] 章國雁.基于Unity3D的多人在線游戲案例設計與實現 [J].安徽水利水電職業技術學院學報,2021,21(3):46-49.

[2] 張華振.基于Unity3D技術的塔防游戲虛擬人物動作控制方法 [J].智能計算機與應用,2022,12(8):187-189+195.

[3] 史寶明,賀元香,李嵐.Unity3D隨機尋路算法設計 [J].吉林師范大學學報:自然科學版,2022,43(1):128-133.

[4] 張華振.基于Unity3D技術的塔防游戲虛擬人物動作控制方法 [J].智能計算機與應用,2022,12(8):187-189.

[5] 劉夢穎,馬宏琳.基于Unity的冒險游戲設計與實現 [J].河南科技,2021,40(17):30-32.

[6] 王俊.Unity引擎下多人在線網絡游戲設計及開發 [J].電子技術與軟件工程,2022,230(12):38-41.

作者簡介:何柳青(1976.12—),男,漢族,廣西北海人,講師,碩士,研究方向:虛擬現實、游戲開發。

收稿日期:2023-05-16

基金項目:2022年廣州工商學院校級科研項目“基于Unity3D的ARPG游戲戰斗系統研究與實現”(KYZC202211)

主站蜘蛛池模板: 国产成人av一区二区三区| 91精品国产丝袜| 午夜国产大片免费观看| 色成人亚洲| 亚洲无码视频喷水| 国产在线观看成人91| a毛片基地免费大全| 日本在线亚洲| www亚洲天堂| 91丝袜乱伦| 久久国产精品波多野结衣| 亚洲av无码专区久久蜜芽| 亚洲精品无码高潮喷水A| 亚洲人妖在线| 一区二区三区在线不卡免费| 国产欧美日韩18| 欧美精品成人一区二区视频一| 夜夜拍夜夜爽| 国产女人水多毛片18| 精品久久久久久中文字幕女| 在线视频97| 亚洲欧洲日韩久久狠狠爱| 午夜福利免费视频| 丰满人妻一区二区三区视频| 亚洲无码熟妇人妻AV在线| 亚洲精品爱草草视频在线| 毛片一级在线| 丝袜无码一区二区三区| 无套av在线| 手机在线看片不卡中文字幕| 国产香蕉国产精品偷在线观看 | 制服丝袜一区| 精品国产一区二区三区在线观看| 国产成人综合网| 午夜久久影院| 国产欧美日韩18| 亚洲视频欧美不卡| 亚洲人成在线精品| 国产精品xxx| 风韵丰满熟妇啪啪区老熟熟女| 天天综合网色| 国产成+人+综合+亚洲欧美| 中国一级特黄大片在线观看| 97超爽成人免费视频在线播放| 日韩精品成人在线| 成年午夜精品久久精品| 欧美日韩国产成人在线观看| 国产一区二区丝袜高跟鞋| 国产女人爽到高潮的免费视频 | 亚洲欧美成人在线视频| 六月婷婷激情综合| 国产欧美一区二区三区视频在线观看| 在线日本国产成人免费的| 色播五月婷婷| 国产精品欧美激情| 国产va在线观看| 97色伦色在线综合视频| 国产区91| 国产成人无码Av在线播放无广告| 亚洲国产综合自在线另类| 波多野结衣久久精品| 久久99精品国产麻豆宅宅| 亚洲Aⅴ无码专区在线观看q| 国产美女在线观看| 免费一级毛片| 免费无码网站| 97精品国产高清久久久久蜜芽 | www.99精品视频在线播放| 国产精品午夜福利麻豆| 狠狠色狠狠综合久久| 黄色网页在线播放| 国产成人AV男人的天堂| 日韩性网站| 日韩欧美视频第一区在线观看| 黄色片中文字幕| 国产区福利小视频在线观看尤物| 国产欧美专区在线观看| yjizz视频最新网站在线| 国产91视频免费观看| 日本成人福利视频| 欧美一区二区三区国产精品| 国产毛片高清一级国语 |