• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    基于Unity3D的動(dòng)作角色扮演游戲戰(zhàn)斗系統(tǒng)研究與開發(fā)

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

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

    關(guān)鍵詞:動(dòng)作角色扮演;角色行為控制;戰(zhàn)斗模式;封裝優(yōu)化

    中圖分類號(hào):TP317? ? 文獻(xiàn)標(biāo)識(shí)碼:A? ? 文章編號(hào):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實(shí)時(shí)渲染生成高幀畫面,給玩家?guī)?lái)高品質(zhì)的游戲體驗(yàn),同時(shí)玩家也對(duì)戰(zhàn)斗體驗(yàn)有了更高要求,設(shè)計(jì)優(yōu)質(zhì)的戰(zhàn)斗系統(tǒng)已成為衡量角色扮演游戲優(yōu)劣的重要保證。而戰(zhàn)斗系統(tǒng)的設(shè)計(jì)與制作涉及多個(gè)重要環(huán)節(jié),各個(gè)環(huán)節(jié)之間緊密相連。

    1? 游戲戰(zhàn)斗系統(tǒng)框架設(shè)計(jì)

    本項(xiàng)目的戰(zhàn)斗系統(tǒng)框架分為戰(zhàn)斗方式、戰(zhàn)斗攻防模型和戰(zhàn)斗元素三個(gè)部分。

    1.1? 戰(zhàn)斗方式

    戰(zhàn)斗方式是戰(zhàn)斗系統(tǒng)中最直觀的環(huán)節(jié),其設(shè)計(jì)具有多樣化,可以是多種設(shè)計(jì)合理地整合在一起,以更好地呈現(xiàn)出戰(zhàn)斗的緊張感和趣味性。戰(zhàn)斗方式并非固定不變,而是根據(jù)游戲地圖環(huán)境的變化而有所變動(dòng)。

    動(dòng)作角色扮演游戲的戰(zhàn)斗方式大致分為以下4點(diǎn):

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

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

    3)刷新不同批次的怪物,后續(xù)批次怪物的戰(zhàn)斗能力比前面的怪物稍強(qiáng)。

    4)玩家可以通過武器和技能來(lái)?yè)魵⒐治?,同時(shí)以移動(dòng)、閃避的方式躲避怪物的攻擊。

    1.2? 戰(zhàn)斗攻防模型

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

    主角是主動(dòng)發(fā)起攻擊的一方,所以在攻防模型中不存在主角防御或閃避的行為。而在攻防過程中,移動(dòng)是沒有直接收益的,但它可以令攻擊行為獲得最大收益,如移動(dòng)到某個(gè)角度打擊要害,或移動(dòng)中實(shí)施攻擊。所以說移動(dòng)是戰(zhàn)斗過程中較具靈活性的行為,主要用來(lái)輔助攻擊和對(duì)抗攻擊。在圖1的攻防模型中,閃避在游戲設(shè)計(jì)中也視為防御,無(wú)論是攻擊方主動(dòng)發(fā)起攻擊行為,還是受擊方發(fā)起防御或閃避行為均形成攻防關(guān)系。

    1.3? 戰(zhàn)斗元素

    戰(zhàn)斗元素與攻擊招式相關(guān),普通攻擊和技能攻擊中均有涉及。

    1.3.1? 攻擊范圍

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

    1.3.2? 招式前搖

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

    1.3.3? 攻擊硬直

    招式在擊中敵人后,敵人會(huì)有短暫的動(dòng)作停滯而無(wú)法活動(dòng),通常不會(huì)超過一秒。在攻擊硬直時(shí)間內(nèi),受擊者無(wú)法做出任何行動(dòng),容易被攻擊者施放連招而造成更大的傷害。

    1.3.4? 招式后搖

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

    從圖2中可以看出,在攻擊范圍內(nèi),在敵人無(wú)閃避行為的前提下?lián)糁袛橙藭?huì)令敵人產(chǎn)生攻擊硬直狀態(tài),但同時(shí)也會(huì)令自身角色產(chǎn)生招式后搖,這兩者是同時(shí)發(fā)生的,只是兩種狀態(tài)依附的角色對(duì)象不同而已。

    2? 戰(zhàn)斗的多重機(jī)制

    2.1? 戰(zhàn)斗的對(duì)抗機(jī)制

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

    戰(zhàn)斗可以增加某一方的人數(shù)形成差異,如增加敵人數(shù)量,形成雙方人數(shù)不平衡的對(duì)抗關(guān)系。但雙方人數(shù)上的較大差異并非能夠形成絕對(duì)優(yōu)勢(shì),通常只是彌補(bǔ)單體敵人戰(zhàn)力的不足,從而更好地維持戰(zhàn)力平衡,這種機(jī)制通常用在對(duì)抗普通怪物的環(huán)節(jié)中。

    在對(duì)抗BOSS強(qiáng)敵的過程中,不能以增加數(shù)量的方法來(lái)加強(qiáng)怪物戰(zhàn)力,BOSS強(qiáng)敵本身的戰(zhàn)力就比玩家角色強(qiáng),但玩家不能直接依靠自身的戰(zhàn)力來(lái)戰(zhàn)勝它,因此需要設(shè)置特定的戰(zhàn)斗機(jī)制來(lái)解決這種問題。例如使用特定的技能、觸發(fā)場(chǎng)景的機(jī)關(guān)、特定時(shí)間段行動(dòng)等可以大幅度提高傷害數(shù)值或削弱強(qiáng)敵的防御力,從而在傷害輸出方面帶來(lái)更高的收益,更容易擊敗強(qiáng)敵,以弱勝?gòu)?qiáng)。玩家在通過機(jī)制戰(zhàn)勝?gòu)?qiáng)敵后會(huì)獲得更大的成就感。對(duì)抗機(jī)制關(guān)系如圖3所示。

    2.2? 戰(zhàn)斗的交互機(jī)制

    角色在發(fā)起攻擊或防御時(shí)會(huì)播放相應(yīng)的動(dòng)作動(dòng)畫,而雙方在動(dòng)作發(fā)生碰撞或進(jìn)入攻擊范圍時(shí)便產(chǎn)生了交互。攻擊或防御動(dòng)作具有空間判定性,攻擊判定和受擊判定都是針對(duì)不同的部位。如武器擊中對(duì)方身體產(chǎn)生了交互,會(huì)播放受擊者被擊中后的硬直動(dòng)畫,由于硬直時(shí)間非常短,無(wú)法做出攻擊、防御、閃避的行為,這時(shí)候攻擊者更容易發(fā)起連續(xù)攻擊。

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

    2.3? 戰(zhàn)斗關(guān)卡的運(yùn)行機(jī)制

    一個(gè)戰(zhàn)斗關(guān)卡可以存在一個(gè)或多個(gè)場(chǎng)景,而關(guān)卡運(yùn)行機(jī)制則融合了至少一個(gè)場(chǎng)景的相關(guān)元素。關(guān)卡主要元素包括時(shí)間、空間、即時(shí)道具,這三個(gè)方面均是關(guān)卡自身產(chǎn)生的元素,同時(shí)它們也會(huì)直接影響戰(zhàn)斗機(jī)制和戰(zhàn)斗結(jié)果,是游戲關(guān)卡設(shè)計(jì)的必要因素。主角和怪物都可以在關(guān)卡機(jī)制中得到相應(yīng)的強(qiáng)化或弱化,如何運(yùn)用關(guān)卡機(jī)制來(lái)取勝是玩家必須要思考的問題,這就進(jìn)一步增強(qiáng)了玩家在游戲中的互動(dòng)性。

    2.3.1? 關(guān)卡時(shí)間

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

    2.3.2? 關(guān)卡空間

    對(duì)于關(guān)卡空間,在玩家實(shí)施戰(zhàn)斗的過程中可以設(shè)定為有空間限制或無(wú)空間限制。通常在通關(guān)式的游戲中均有空間限制,在有限的空間內(nèi)與敵人戰(zhàn)斗直至其中一方獲勝。關(guān)卡地圖設(shè)定了邊界,玩家需要結(jié)合活動(dòng)范圍來(lái)制定戰(zhàn)斗策略。有限的空間會(huì)影響玩家武器的使用和技能的施放,提高了生存的難度。

    2.3.3? 關(guān)卡道具

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

    3? 角色行為模塊

    部分角色扮演游戲都會(huì)存在戰(zhàn)斗系統(tǒng),這部分游戲被列為動(dòng)作角色扮演游戲(Action Role Playing Game, ARPG)。而在ARPG游戲中,無(wú)論是玩家還是“怪物”,均可以設(shè)計(jì)一套戰(zhàn)斗行為模塊。這套行為模塊主要用來(lái)設(shè)定戰(zhàn)斗標(biāo)準(zhǔn),該模塊能夠減少游戲冗余數(shù)據(jù),降低計(jì)算量且提高游戲的運(yùn)行速度,這是游戲優(yōu)化的條件之一。

    3.1? 通用行為模塊

    功能組模主要是為了實(shí)現(xiàn)移動(dòng)、動(dòng)畫、攻擊、尋路等。

    1)移動(dòng)模塊??刂平巧囊苿?dòng)。

    2)動(dòng)畫模塊??刂平巧煌瑺顟B(tài)動(dòng)畫的無(wú)縫切換。

    3)攻擊模塊。計(jì)算攻擊產(chǎn)生的傷害與即時(shí)狀態(tài),但不計(jì)算傷害的具體數(shù)值。

    4)尋路模塊。控制角色自動(dòng)尋路或手動(dòng)尋路。

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

    3.2? AI行為模塊

    游戲中存在多種行為,玩家可以手動(dòng)操作自己的角色,而怪物則需要借助AI行為去驅(qū)動(dòng)。戰(zhàn)斗系統(tǒng)中的行為比較復(fù)雜,因此需要將行為分成多個(gè)模塊進(jìn)行管理,如圖5所示。

    1)總決策模塊。怪物在原地待機(jī)時(shí),假設(shè)玩家進(jìn)入其攻擊范圍。怪物以預(yù)設(shè)定的行為對(duì)玩家發(fā)起攻擊。

    2)指令請(qǐng)求模塊。判定請(qǐng)求的指令是否超出預(yù)置規(guī)則范圍,如怪物是否有負(fù)面狀態(tài)導(dǎo)致行為受限。如果怪物的狀態(tài)正常則向下層模塊發(fā)出攻擊行為請(qǐng)求。

    3)動(dòng)畫模塊。怪物在移動(dòng)或攻擊時(shí)播放相應(yīng)動(dòng)畫。

    4)數(shù)據(jù)模塊。用于怪物的各種狀態(tài)數(shù)據(jù)(包括怪物的坐標(biāo)數(shù)據(jù)和自身狀態(tài)數(shù)據(jù))更新。數(shù)據(jù)更新的同時(shí)請(qǐng)求相應(yīng)指令,同時(shí)向總決策模塊提供信息,決策模塊檢查數(shù)據(jù)并發(fā)出同步?jīng)Q策指令。

    3.3? 區(qū)域AI模塊

    AI可以根據(jù)不同情況進(jìn)行劃分,具體包括區(qū)域AI、隊(duì)列AI和單體AI。

    一張地圖上存在多個(gè)區(qū)域,不同區(qū)域可以單獨(dú)設(shè)置AI。區(qū)域AI容易與關(guān)卡運(yùn)行機(jī)制相混淆。關(guān)卡運(yùn)行機(jī)制主要是針對(duì)如何擊敗怪物而設(shè),而區(qū)域AI則直接作用于怪物,令怪物具有模擬人類思考的行為,因此這兩者所針對(duì)的主體有本質(zhì)上的區(qū)別。

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

    設(shè)定怪物有待機(jī)、走路[3]和死亡三種狀態(tài),現(xiàn)針對(duì)待機(jī)和走路兩種狀態(tài)進(jìn)行AI控制,實(shí)現(xiàn)單體怪物AI部分行為的C#代碼如下:

    public enum MonsterCondition

    {

    Idle,Walk,Attack,Death

    }

    public string monster_present;//怪物當(dāng)前狀態(tài)

    public string monster_idle;//怪物待機(jī)

    public string monster_walk;//怪物走路

    void RandomState()

    {

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

    {

    monster_present = monster_idle;// 當(dāng)隨機(jī)值為0時(shí)播放怪物Idle動(dòng)畫

    }

    else

    {// 當(dāng)隨機(jī)值為1時(shí)

    if (monster_present != monster_walk)

    {

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

    //怪物沿豎直方向旋轉(zhuǎn)隨機(jī)角度

    }

    monster_present = monster_walk;//播放怪物Walk動(dòng)畫

    }

    }

    通過上述代碼可實(shí)現(xiàn)游戲中的怪物在區(qū)域內(nèi)待機(jī)和隨機(jī)方向走路的AI功能。

    3.4? 狀態(tài)機(jī)和行為樹

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

    由圖6可以看出,每個(gè)狀態(tài)除了自身行為外,還需要在適當(dāng)?shù)臈l件下與其他狀態(tài)交互,因此狀態(tài)機(jī)形成一種網(wǎng)狀結(jié)構(gòu)。但若要實(shí)現(xiàn)較復(fù)雜的AI行為(如怪物的巡邏、圍攻玩家等),僅使用狀態(tài)機(jī)是無(wú)法實(shí)現(xiàn)的,這種情況需要使用AI行為樹。行為樹是樹狀分支節(jié)點(diǎn)的結(jié)構(gòu),與狀態(tài)機(jī)在結(jié)構(gòu)上有較大差別。

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

    行為樹有多個(gè)節(jié)點(diǎn)滿足條件時(shí),則會(huì)按權(quán)重做出選擇。如同時(shí)遇到普通怪物和精英怪物,會(huì)選擇權(quán)重最高的節(jié)點(diǎn)。而權(quán)重以角色存活為優(yōu)先,越容易令角色存活的節(jié)點(diǎn)權(quán)重越高[5],在滿足某些條件的前提下,容易導(dǎo)致角色死亡的節(jié)點(diǎn)不會(huì)被選擇執(zhí)行。

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

    3.4.1? 單一選擇

    對(duì)于多個(gè)下層節(jié)點(diǎn)只選擇其中一個(gè),由于不能同時(shí)執(zhí)行2個(gè)以上節(jié)點(diǎn),最終只能選擇1個(gè)末端節(jié)點(diǎn)執(zhí)行。

    3.4.2? 順序選擇

    按順序依次選擇節(jié)點(diǎn)并運(yùn)行,其中一個(gè)節(jié)點(diǎn)運(yùn)行完畢后再運(yùn)行下一個(gè)節(jié)點(diǎn)。

    3.4.3? 同步選擇

    同步選擇符合條件的節(jié)點(diǎn)并運(yùn)行。如NPC在巡邏時(shí)與其他NPC交談且進(jìn)行某些肢體動(dòng)作,即巡邏、交談、肢體動(dòng)作三個(gè)行為節(jié)點(diǎn)同時(shí)運(yùn)行。前提是無(wú)敵人,敵人一旦進(jìn)入視野區(qū)則會(huì)結(jié)束這三個(gè)節(jié)點(diǎn)的運(yùn)行,進(jìn)入另一個(gè)控制節(jié)點(diǎn)。

    三種節(jié)點(diǎn)控制類型使用哪一種要看具體情況,不同的情景有不同的選擇,有時(shí)并非單一類的運(yùn)行,也有可能是多個(gè)類型混合控制。比如單一選擇類型下面的分支使用了同步選擇。

    4? 戰(zhàn)斗系統(tǒng)模塊的整體封裝

    戰(zhàn)斗系統(tǒng)有諸多模塊,為了便于管理和減少程序漏洞,需要對(duì)各模塊實(shí)行整體封裝。封裝的主要思路是將各戰(zhàn)斗模塊歸集到基類中?;惏薪M件,具備戰(zhàn)斗對(duì)象、基礎(chǔ)字段、函數(shù)初始化的賦值等。

    4.1? 戰(zhàn)斗實(shí)時(shí)信息傳遞

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

    4.2? 戰(zhàn)斗系統(tǒng)組件的類

    戰(zhàn)斗系統(tǒng)以組件模式處理戰(zhàn)斗行為,通過基類的回調(diào)函數(shù)傳遞戰(zhàn)斗信息。只需將全部戰(zhàn)斗組件的函數(shù)與BattleCharacterObject的回調(diào)函數(shù)關(guān)聯(lián)就可以實(shí)行統(tǒng)一調(diào)用。以組件模式創(chuàng)建的戰(zhàn)斗系統(tǒng)具有高度可擴(kuò)展性,且能靈活定義各組件[6]。圖8列出了幾個(gè)重要的基類,并通過基類令所有組件泛化,使組件適用于不同類型的數(shù)據(jù)。

    其中,DamageAttackComponent(傷害攻擊)和PhysicsAttackComponent(物理碰撞)是兩個(gè)重要的基類,它們處理即時(shí)碰撞后產(chǎn)生的事件數(shù)據(jù)。而BattleCampComponent(戰(zhàn)斗陣營(yíng))是一個(gè)靜態(tài)類,它在戰(zhàn)斗發(fā)生前判別對(duì)方是否為敵人,如果是敵人則可以發(fā)起戰(zhàn)斗。其關(guān)鍵代碼如下:

    public static class BattleCampComponent {

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

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

    public const int NPC = 3;//地圖上的NPC,在某些條件觸發(fā)下也可以轉(zhuǎn)換陣營(yíng)

    }

    5? 結(jié)? 論

    對(duì)3D角色動(dòng)作游戲的戰(zhàn)斗系統(tǒng)框架、運(yùn)行機(jī)制、戰(zhàn)斗行為模塊進(jìn)行了研究與開發(fā),重點(diǎn)研究并優(yōu)化了玩家操作、AI行為、戰(zhàn)斗事件等內(nèi)容,提升了操控流暢度。充分利用類的封裝方法,將各模塊整合成為一個(gè)戰(zhàn)斗系統(tǒng),最大程度簡(jiǎn)化了編程量,減少了冗余程序,提高了執(zhí)行效率。

    參考文獻(xiàn):

    [1] 章國(guó)雁.基于Unity3D的多人在線游戲案例設(shè)計(jì)與實(shí)現(xiàn) [J].安徽水利水電職業(yè)技術(shù)學(xué)院學(xué)報(bào),2021,21(3):46-49.

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

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

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

    [5] 劉夢(mèng)穎,馬宏琳.基于Unity的冒險(xiǎn)游戲設(shè)計(jì)與實(shí)現(xiàn) [J].河南科技,2021,40(17):30-32.

    [6] 王俊.Unity引擎下多人在線網(wǎng)絡(luò)游戲設(shè)計(jì)及開發(fā) [J].電子技術(shù)與軟件工程,2022,230(12):38-41.

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

    收稿日期:2023-05-16

    基金項(xiàng)目:2022年廣州工商學(xué)院校級(jí)科研項(xiàng)目“基于Unity3D的ARPG游戲戰(zhàn)斗系統(tǒng)研究與實(shí)現(xiàn)”(KYZC202211)

    新干县| 邯郸县| 红河县| 湘阴县| 淮滨县| 公主岭市| 沙田区| 长治市| 酉阳| 浦北县| 遵义市| 青铜峡市| 方山县| 松溪县| 大冶市| 重庆市| 和田县| 奇台县| 江源县| 浙江省| 中牟县| 和政县| 秦安县| 宽城| 昌吉市| 仲巴县| 曲水县| 绿春县| 南陵县| 裕民县| 宣威市| 柳州市| 新乡市| 滕州市| 深州市| 万宁市| 宁阳县| 康保县| 百色市| 晋州市| 垫江县|