亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于Unity3D游戲客戶端開發(fā)框架的設(shè)計(jì)與應(yīng)用

        2016-10-18 11:20:28桑琪葉德建
        微型電腦應(yīng)用 2016年6期
        關(guān)鍵詞:管理器消息客戶端

        桑琪,葉德建

        基于Unity3D游戲客戶端開發(fā)框架的設(shè)計(jì)與應(yīng)用

        桑琪,葉德建

        游戲行業(yè)競(jìng)爭(zhēng)日益激烈,從現(xiàn)有的游戲開發(fā)中汲取經(jīng)驗(yàn)形成框架是應(yīng)對(duì)殘酷市場(chǎng)的必由之路。從實(shí)踐出發(fā),從長(zhǎng)期的游戲開發(fā)經(jīng)驗(yàn)中總結(jié)了一套通用的Unity3D游戲客戶端開發(fā)框架,采用通用管理器的方式有效組織管理場(chǎng)景中的游戲?qū)ο笠约翱刂朴螒驅(qū)ο蟮哪_本,以通用組件的形式支持整個(gè)游戲功能系統(tǒng)的開發(fā)。簡(jiǎn)述了UI框架、消息管理器、游戲?qū)ο缶彺娉?個(gè)框架層基礎(chǔ)組件的設(shè)計(jì)與實(shí)現(xiàn),并以一款即時(shí)戰(zhàn)略游戲?yàn)槔v解了如何利用該框架進(jìn)行客戶端開發(fā)。

        Unity3D;游戲客戶端框架;通用管理器

        章編號(hào):1007-757X(2016)06-0066-04

        0 引言

        游戲作為近年來(lái)國(guó)家大力支持的文化創(chuàng)意產(chǎn)業(yè),一直呈高速發(fā)展的趨勢(shì)。就《2015年中國(guó)游戲產(chǎn)業(yè)報(bào)告》顯示,中國(guó)游戲市場(chǎng)2015年收入達(dá)1407億,同比增長(zhǎng)22.9%[1]。隨著游戲行業(yè)膨脹式的發(fā)展,中國(guó)游戲行業(yè)競(jìng)爭(zhēng)越來(lái)越激烈。在這樣的市場(chǎng)環(huán)境下,如何利用更短的時(shí)間開發(fā)出高質(zhì)量的游戲成為游戲開發(fā)人員關(guān)注的焦點(diǎn)。伴隨著游戲開發(fā)技術(shù)的成熟,游戲引擎不斷進(jìn)化發(fā)展,極大提高了游戲開發(fā)的效率,Unity3D作為游戲引擎中的翹楚成為各大游戲尤其是3D游戲開發(fā)商們的首選。

        Unity3D擁有著多個(gè)子系統(tǒng),如渲染引擎、物理引擎、動(dòng)畫系統(tǒng)、粒子特效等等,它們以組件的形式支持著游戲開發(fā)人員們的開發(fā)工作[2]。使用Unity3D開發(fā)游戲的基本原理是通過(guò)編寫腳本調(diào)用這些組件,生成并控制場(chǎng)景中的各類游戲?qū)ο髲亩纬梢粋€(gè)完整的游戲。然而如何更加有效地組織管理場(chǎng)景中的游戲?qū)ο笠约翱刂朴螒驅(qū)ο蟮哪_本,需要在游戲開發(fā)中有一定的技術(shù)及經(jīng)驗(yàn)積累。

        Kim, Ae Hyun 、De Macedo等人針對(duì)應(yīng)用Unity3D引擎進(jìn)行游戲開發(fā)中的常用技術(shù)以及開發(fā)流程做了簡(jiǎn)單介紹[3-6],于Unity3D引擎的理解僅僅停留于使用層面。王超明、呂林軒、郭一晶等都曾經(jīng)介紹過(guò)某Unity3D游戲具體功能系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[7-9],但并沒(méi)有提取出通用的游戲客戶端開發(fā)框架。本文在實(shí)踐的基礎(chǔ)上,總結(jié)出一套通用的Unity3D游戲客戶端開發(fā)框架,將游戲開發(fā)中最常用的組件、功能整合起來(lái),利用軟件復(fù)用的思想進(jìn)一步提升了游戲開發(fā)的效率,同時(shí)還可形成技術(shù)上的沉淀。

        1 通用管理器

        Unity3D功能異常強(qiáng)大,它提供了各種API讓游戲開發(fā)者通過(guò)給游戲?qū)ο筇砑咏M件以及編寫腳本的方式實(shí)現(xiàn)各種游戲功能,如角色動(dòng)畫、碰撞檢測(cè)、播放音樂(lè)音效等等。但如果整個(gè)游戲開發(fā)僅僅以疊加腳本添加組件的方式完成,不但無(wú)法實(shí)現(xiàn)復(fù)雜的游戲邏輯甚至還會(huì)讓整個(gè)項(xiàng)目混亂不堪難以維護(hù)[10]。因此我們要學(xué)會(huì)以通用管理器的方式統(tǒng)一組織管理同類的功能系統(tǒng)。以管理音效播放的管理器AudioManager為例,在Unity3D中,播放音樂(lè)音效需要在游戲場(chǎng)景的聲源處添加AudioSource組件用以掛載音頻源文件,在實(shí)際的游戲中我們往往需要在不同的時(shí)間播放不同的音效,因此需要實(shí)現(xiàn)一個(gè)AudioManager來(lái)管理游戲中的所有音樂(lè)音效的播放而非頻繁得掛載音頻文件。首先在AudioManager中維護(hù)一個(gè)音效字典,以key為標(biāo)記,在管理器初始化時(shí)統(tǒng)一掛載好所有所需的音頻文件,當(dāng)需要播放音頻的時(shí)候調(diào)用AudioManager對(duì)應(yīng)的函數(shù)同時(shí)傳入所需音頻的key即可。

        在整個(gè)游戲開發(fā)中,通用管理器的思想貫穿了從基本游戲框架到客戶端功能系統(tǒng)的設(shè)計(jì)實(shí)現(xiàn),這種思想也與面向?qū)ο缶幊痰乃枷胂嘟y(tǒng)一。整個(gè)游戲通常以組件式進(jìn)行開發(fā),一個(gè)組件往往是一個(gè)大的管理器,其中可能包含許多小的管理器。

        2 基本游戲框架

        同其他軟件開發(fā)一樣,游戲開發(fā)也遵循類似MVC框架的模型視圖分離的準(zhǔn)則。沿用Unity3d本身的層級(jí)思想,本文的游戲框架也采用分層設(shè)計(jì)。整個(gè)游戲從下到上依次為系統(tǒng)層、框架層、數(shù)據(jù)層、控制層、視圖層,如圖1所示:

        圖1 游戲分層設(shè)計(jì)示意圖

        系統(tǒng)層,即游戲最終運(yùn)行在什么平臺(tái)上。眾所周知,Unity3D可進(jìn)行跨平臺(tái)發(fā)布,可發(fā)布游戲至IOS、Android、Windows phone 8等多種平臺(tái)。

        框架層,顧名思義,游戲開發(fā)的通用底層支持,可輕松復(fù)用于不同游戲的開發(fā),包括UI框架、消息管理器、游戲?qū)ο缶彺娉氐然A(chǔ)組件。

        上面3層為大家所熟悉的MVC框架,即模型(model)-視圖(view)-控制器(controller)。

        模型(Model)層用于處理游戲數(shù)據(jù)邏輯,負(fù)責(zé)在數(shù)據(jù)庫(kù)中存取數(shù)據(jù)或序列化與反序列化本地?cái)?shù)據(jù)。我們將游戲數(shù)據(jù)劃分為兩大類:持久化數(shù)據(jù)和運(yùn)行時(shí)數(shù)據(jù)。持久化數(shù)據(jù)包括游戲本身的配置表和用戶持久化信息,運(yùn)行時(shí)數(shù)據(jù)是游戲運(yùn)行時(shí)的臨時(shí)數(shù)據(jù)。

        視圖(View)層包括UI層和各類游戲?qū)ο蟮男袨楸憩F(xiàn)。UI層即用戶看到的游戲界面,用以顯示相應(yīng)的游戲數(shù)據(jù)。

        控制(Controller)層是游戲開發(fā)中各類管理器的合集,從View層讀取數(shù)據(jù),控制用戶輸入,并向Model層發(fā)送數(shù)據(jù)。集中表現(xiàn)在游戲?qū)ο蟮纳膳c控制。

        采用此種劃分層次可以讓數(shù)據(jù)與邏輯分離,使游戲開發(fā)更具條理和效率。下文中我們先依次介紹框架層三個(gè)重要基礎(chǔ)組件的設(shè)計(jì)與實(shí)現(xiàn),然后以ARPG游戲的游戲角色為例詳細(xì)解釋游戲?qū)ο蟮纳膳c控制。

        3 框架層的設(shè)計(jì)與實(shí)現(xiàn)

        游戲框架對(duì)于后期游戲功能系統(tǒng)的開發(fā)影響深遠(yuǎn),合理的游戲框架應(yīng)該在提高游戲開發(fā)效率的前提下同時(shí)兼顧游戲項(xiàng)目的穩(wěn)定性以及可擴(kuò)展性,組件式的開發(fā)成為各游戲開發(fā)項(xiàng)目的首選。在這一部分,我們將介紹框架層三個(gè)非常重要基礎(chǔ)組件:基于NGUI的UI框架、消息管理器、游戲?qū)ο缶彺娉亍?/p>

        3.1基于NGUI的UI框架

        NGUI是目前Unity3D游戲開發(fā)團(tuán)隊(duì)最常用的UI插件,提供了強(qiáng)大的UI系統(tǒng)和事件通知框架。NGUI基于組件化、模塊化的原則,可以使開發(fā)者們使用非常少的代碼以及操作便可實(shí)現(xiàn)各類UI控件。

        我們基于NGUI插件設(shè)計(jì)實(shí)現(xiàn)了一個(gè)UI框架,它具備以下功能特點(diǎn):由UIManager統(tǒng)一管理游戲各UI界面的顯示、關(guān)閉、隱藏;提供插入界面動(dòng)畫的接口;通過(guò)3個(gè)按鈕與相應(yīng)回調(diào)函數(shù)的隱藏與顯示實(shí)現(xiàn)通用對(duì)話框;同時(shí)管理各UI界面的上下文Context,Context保存著UI界面的數(shù)據(jù)信息,我們通過(guò)棧的方式管理Context,從而實(shí)現(xiàn)界面的有序跳轉(zhuǎn);用Mask遮罩提供插入新手教程的功能。應(yīng)用此框架可以讓開發(fā)人員專注實(shí)現(xiàn)單個(gè)UI界面的邏輯而不用擔(dān)心界面的顯示關(guān)閉以及跳轉(zhuǎn)的實(shí)現(xiàn),極大提高了游戲界面的開發(fā)效率。

        3.2消息管理器

        游戲通常要涉及各類游戲?qū)ο箝g的交互以及各個(gè)模塊的交互,為了實(shí)現(xiàn)模塊間的松耦合,我們一般采用消息驅(qū)動(dòng)的方法來(lái)達(dá)到交互的目的。我們借鑒觀察者模式開發(fā)消息管理器模塊。模塊主要包括消息中心MessageCenter,消息觀察者Observer,消息發(fā)送者M(jìn)essageSender,消息Message4部分,四者的交互活動(dòng)圖如圖2所示:

        圖2 消息管理器活動(dòng)圖

        MessageCenter是整個(gè)消息管理器的消息中樞,起著一個(gè)消息中介的作用,它維護(hù)一個(gè)消息隊(duì)列,負(fù)責(zé)接收以及轉(zhuǎn)發(fā)游戲的所有消息。Observer把自己以及自己感興趣的消息對(duì)應(yīng)得注冊(cè)到MessageCenter中的消息隊(duì)列中,相對(duì)的當(dāng)Observer對(duì)消息不再感興趣時(shí),也可以隨時(shí)向MessageCenter取消注冊(cè)。EventSender產(chǎn)生并發(fā)送相應(yīng)的Message到MessageCenter,MessageCenter會(huì)遍歷自己的消息隊(duì)列,找到監(jiān)聽該消息的Observers并把Message轉(zhuǎn)發(fā)給它們。

        我們舉個(gè)例子來(lái)說(shuō)明消息管理器的應(yīng)用。在游戲戰(zhàn)斗過(guò)程中,如果主角死亡往往會(huì)結(jié)束戰(zhàn)斗并跳出結(jié)算界面,但戰(zhàn)斗流程控制與角色行為管理是兩個(gè)不相關(guān)的模塊,如果角色行為管理器直接調(diào)用戰(zhàn)斗流程控制器的結(jié)算接口會(huì)增加兩個(gè)模塊的耦合性,這個(gè)時(shí)候我們便可以借助消息管理器。我們封裝一個(gè)MainPlayer_Dead的Message加入MessageCenter的消息隊(duì)列中供戰(zhàn)斗流程控制器注冊(cè)監(jiān)控,當(dāng)主角死亡時(shí)由角色行為管理器發(fā)送該消息即可。

        消息管理器的應(yīng)用讓我們避免了模塊間或游戲?qū)ο箝g交互時(shí)的顯示調(diào)用,讓游戲模塊間保持低耦合,非常方便游戲開發(fā)后期功能的擴(kuò)展。

        3.3游戲?qū)ο缶彺娉?/p>

        前文中提到游戲由大量不同種類的游戲?qū)ο蠼M成,這些游戲?qū)ο笤谟螒蜻\(yùn)行過(guò)程中需要不停地創(chuàng)建、銷毀,如果頻繁調(diào)用Unity3D游戲?qū)ο髮?shí)例化API (GameObject.Ins -tiante())與對(duì)象銷毀API(GameObject.Destroy() )會(huì)造成游戲頻繁卡頓同時(shí)會(huì)產(chǎn)生很多內(nèi)存碎片。游戲?qū)ο缶彺娉睾芎玫亟鉀Q了這一問(wèn)題,它在合理利用設(shè)備內(nèi)存的同時(shí)還能保證游戲畫面的流暢。游戲場(chǎng)景開始加載的時(shí)候我們預(yù)先實(shí)例化一定數(shù)量的接下來(lái)要用到的游戲?qū)ο?,將游戲?qū)ο笾脼榉羌せ顮顟B(tài)放入緩存池,對(duì)象實(shí)例化的數(shù)量根據(jù)需求決定,例如金幣同屏最多30個(gè),則可以在最開始時(shí)實(shí)例化30個(gè)金幣。如圖3所示:

        圖3 對(duì)象池設(shè)計(jì)圖

        當(dāng)外部需要某種游戲?qū)ο髸r(shí)可直接從緩存池獲取,然后把游戲?qū)ο笾脼榧せ顮顟B(tài),外部用完該游戲?qū)ο蠛蠓颠€給緩存池并置回為非激活狀態(tài)。當(dāng)切換游戲場(chǎng)景或終止游戲的時(shí)候,我們會(huì)對(duì)緩存池進(jìn)行一次性清理。采用此種方式管理游戲?qū)ο蠓浅S行У毓芾砹藘?nèi)存并避免了內(nèi)存泄漏。

        4 客戶端設(shè)計(jì)與實(shí)現(xiàn)

        為了驗(yàn)證該客戶端框架的可用性,我們采用此框架實(shí)現(xiàn)了一款動(dòng)作類即時(shí)戰(zhàn)略游戲,游戲場(chǎng)景、人物為全3D設(shè)計(jì),以戰(zhàn)斗中控制大招點(diǎn)放,聚焦各人物特色技能為亮點(diǎn)。我們把該游戲的開發(fā)分為兩塊,戰(zhàn)斗系統(tǒng)和除戰(zhàn)斗系統(tǒng)之外的系統(tǒng)(簡(jiǎn)稱外圍系統(tǒng))。外圍系統(tǒng)通常包括人物養(yǎng)成系統(tǒng)、副本系統(tǒng)、商城系統(tǒng)、郵件系統(tǒng)等等,由于篇幅的限制,本文將主要介紹體現(xiàn)游戲核心玩法的戰(zhàn)斗系統(tǒng)。

        我們將戰(zhàn)斗場(chǎng)景中的游戲?qū)ο蠓譃閮纱蟛糠郑呵胺経I界面與后方的場(chǎng)景對(duì)象。UI界面是2D的,后方場(chǎng)景對(duì)象則為3D。后方的場(chǎng)景對(duì)象一般包括角色對(duì)象、地圖資源、武器對(duì)象以及各類特效等等,體現(xiàn)了游戲的核心玩法。作為游戲的重要一部分,大量游戲界面用來(lái)顯示玩家與游戲內(nèi)各類信息。上文我們已經(jīng)介紹了基于NGUI的UI框架用來(lái)生成與控制大量的UI界面,這里我們將針對(duì)后方場(chǎng)景游戲?qū)ο蟮纳膳c控制進(jìn)行簡(jiǎn)單的介紹,并以戰(zhàn)斗中角色對(duì)象的管理器為例進(jìn)行詳細(xì)的說(shuō)明。

        4.1游戲?qū)ο蟮纳膳c控制

        一方面在戰(zhàn)斗場(chǎng)景中每個(gè)動(dòng)態(tài)的游戲?qū)ο蠖际且粋€(gè)單獨(dú)的線程,不斷根據(jù)用戶的操作或者事件的進(jìn)行自我更新并改變自身的行為,復(fù)雜的游戲?qū)ο笸枰獛讉€(gè)組件來(lái)控制自身的行為,如場(chǎng)景中的人物角色,需要?jiǎng)赢嫴シ沤M件、位置管理組件、行為狀態(tài)機(jī)以及碰撞處理器等等,每個(gè)組件獨(dú)立負(fù)責(zé)自己的功能邏輯,在需要通信的時(shí)候利用上文介紹的消息管理器,這些組件采用組合模式,構(gòu)成整個(gè)人物角色的控制器。游戲?qū)ο蟮姆N類多種多樣,因此我們一般采用Factory模式生成對(duì)象,將游戲?qū)ο蟾鱾€(gè)組件的創(chuàng)建與初始化工作統(tǒng)一封裝起來(lái)。這里對(duì)應(yīng)上文游戲?qū)ο缶彺娉氐膽?yīng)用,實(shí)例化對(duì)象采用抽象工廠模式,不同的游戲?qū)ο笞?cè)不同的工廠方法到對(duì)象池,以key為標(biāo)記,非常方便后期新對(duì)象的擴(kuò)展。游戲?qū)ο缶彺娉爻跏蓟瘯r(shí),根據(jù)工廠字典用不同的構(gòu)造方法生成各類游戲?qū)ο蠹尤刖彺娉氐木彺骊?duì)列中,供上層隨時(shí)獲取對(duì)象。

        另一方面游戲戰(zhàn)斗中一般都有暫停、恢復(fù)功能,甚至有幾倍速播放的需求,因此要求我們實(shí)現(xiàn)一個(gè)對(duì)象控制中心來(lái)統(tǒng)一管理所有的動(dòng)態(tài)游戲?qū)ο?。所有的游戲?qū)ο蠖夹枰獙?shí)現(xiàn)IUpdate接口的Update方法,在該方法中更新所有的相關(guān)組件。當(dāng)加載戰(zhàn)斗場(chǎng)景時(shí),所有的對(duì)象從緩存池中獲取后便加入對(duì)象控制中心的更新隊(duì)列中,戰(zhàn)斗進(jìn)行時(shí)通過(guò)對(duì)象控制中心統(tǒng)一調(diào)用Update方法來(lái)定時(shí)更新所有游戲?qū)ο?,這樣我們便可以通過(guò)控制Update方法的調(diào)用頻率來(lái)實(shí)現(xiàn)所有游戲?qū)ο蠼y(tǒng)一暫停、恢復(fù)以及變速播放的目的。

        4.2角色管理器

        角色對(duì)象是游戲戰(zhàn)斗中最重要的組成元素,要想充分地吸引并留住玩家除了精致的角色美術(shù)模型還要有合理流暢的管理器,因此角色管理器的設(shè)計(jì)在游戲總體設(shè)計(jì)中處于核心地位。它需要的主要組件如圖4所示:

        圖4 游戲角色管理組件圖

        我們將依次介紹組件的設(shè)計(jì)與實(shí)現(xiàn)。

        4.2.1動(dòng)畫管理器

        任何游戲都離不開動(dòng)畫,尤其在突出人物角色的游戲中,角色動(dòng)畫是否逼真、流暢直接關(guān)系到游戲的直接體驗(yàn)。動(dòng)畫的逼真程度往往取決于美術(shù)工作人員,但動(dòng)畫是否能自然融合和過(guò)度以及跟周圍環(huán)境進(jìn)行交互還是程序開發(fā)人員的工作。

        Unity3本身提供了動(dòng)畫播放組件Animation和Animator,它支持動(dòng)畫播放、停止、改變速度以及動(dòng)畫融合。但這些并不足以滿足我們復(fù)雜的系統(tǒng)需求,Unity3D本身的動(dòng)畫播放組件是基于時(shí)間自動(dòng)播放動(dòng)畫的,但我們需要?jiǎng)赢嫿M件服從對(duì)象控制中心的統(tǒng)一調(diào)用進(jìn)行幀更新,于是我們編寫了動(dòng)畫管理器組件,它實(shí)現(xiàn)了以下功能:提供一個(gè)適配層讓動(dòng)畫根據(jù)幀來(lái)進(jìn)行播放,從而實(shí)現(xiàn)動(dòng)畫的暫停、恢復(fù)以及變速播放;加入伴隨角色動(dòng)畫的特效動(dòng)畫,讓特效動(dòng)畫與角色動(dòng)畫保持同步播放;同時(shí)加入動(dòng)畫事件系統(tǒng),實(shí)現(xiàn)動(dòng)畫依賴的事件回調(diào),如角色攻擊的傷害判定。

        應(yīng)用此動(dòng)畫管理器組件可以方便得控制角色動(dòng)作的播放,添加動(dòng)畫事件與周圍環(huán)境進(jìn)行流暢交互,增加角色運(yùn)動(dòng)的多樣性,給玩家?guī)?lái)強(qiáng)烈的視覺(jué)感受。

        4.2.2行為管理器

        游戲角色在游戲運(yùn)行時(shí)往往有著不同的行為狀態(tài),如待機(jī)、攻擊、奔跑等等。游戲角色在不同的行為狀態(tài)下會(huì)產(chǎn)生不一樣的行為,并會(huì)在達(dá)到一定條件時(shí)切換行為狀態(tài),這便構(gòu)成了角色的行為狀態(tài)機(jī)。我們采用了狀態(tài)機(jī)模式實(shí)現(xiàn)了行為管理器,所有行為實(shí)現(xiàn)三個(gè)接口供行為管理器調(diào)用,分別為:狀態(tài)更新Update,進(jìn)入狀態(tài)OnEnter,離開狀態(tài)OnExit。行為管理器作為角色行為狀態(tài)的控制中心,它維護(hù)該角色所有會(huì)產(chǎn)生行為的字典,以行為枚舉類為key,同時(shí)維護(hù)角色當(dāng)前唯一的行為狀態(tài)currentBehavior,行為管理器每幀的更新操作會(huì)調(diào)用currentBehavior的更新操作,當(dāng)達(dá)到一定條件時(shí)調(diào)用設(shè)置行為的函數(shù)并傳入枚舉類值來(lái)切換行為狀態(tài),此時(shí)會(huì)自動(dòng)調(diào)用老行為狀態(tài)的OnExit操作,同時(shí)調(diào)用新行為狀態(tài)的OnEnter操作。

        采用行為管理器控制角色行為邏輯,可以讓開發(fā)者更加關(guān)注每個(gè)行為的具體邏輯而不用擔(dān)心狀態(tài)的切換。

        4.2.3碰撞處理器

        游戲尤其動(dòng)作類游戲中避免不了對(duì)碰撞事件的處理,例如子彈碰到角色需要處理角色受擊,NPC角色在行走模式時(shí)碰到敵方角色或塔防需要切換至攻擊模式,碰到友方角色或塔防等障礙物需要改變行進(jìn)路線。Unity3D提供了碰撞檢測(cè)的API,需要給游戲?qū)ο筇砑优鲎财鰿ollider跟剛體Rigidbody組件。碰撞器有各種形狀,Box Collider、Sphere Collider、Mesh Collider等等,我們可以根據(jù)具體需求來(lái)進(jìn)行選擇。剛體用來(lái)描繪游戲?qū)ο蟮母鞣N物理屬性,可以讓游戲?qū)ο笤谂鲎埠髧?yán)格遵照物理規(guī)則來(lái)運(yùn)動(dòng)。兩個(gè)游戲?qū)ο螽a(chǎn)生碰撞的前提是,兩個(gè)對(duì)象都帶有碰撞體同時(shí)至少其中一個(gè)對(duì)象帶有剛體。

        Unity3D內(nèi)的碰撞處理的方式有兩種,一種是利用碰撞器,游戲?qū)ο笈鲎睬昂髸?huì)調(diào)用碰撞函數(shù)OnCollisionEnter/ Stay/Exit,同時(shí)根據(jù)物理規(guī)則產(chǎn)生碰撞效果。另一種是利用觸發(fā)器,即把對(duì)象身上碰撞器的IsTrigger屬性置為True,這種情況下僅調(diào)用碰撞函數(shù)OnTriggerEnter/Stay/Exit,而不產(chǎn)生任何碰撞效果。

        游戲開發(fā)過(guò)程中,為了保證對(duì)所有游戲?qū)ο蟮目煽匦?,我們一般采用后者?lái)處理碰撞。我們的角色碰撞處理器便是為了處理游戲?qū)ο箝g的碰撞事件,它繼承于MonoBehavior腳本覆寫以下幾個(gè)函數(shù):

        MonoBehaviour.OnTriggerEnter(Collider other)當(dāng)進(jìn)入觸發(fā)器MonoBehaviour.OnTriggerExit(Collider other)當(dāng)退出觸發(fā)器MonoBehaviour.OnTriggerStay(Collider other)當(dāng)逗留觸發(fā)器我們可以通過(guò)傳入的Collider獲取相應(yīng)的游戲?qū)ο髲亩幚硪幌盗械呐鲎彩录?/p>

        5 實(shí)驗(yàn)結(jié)果

        我們應(yīng)用上文描述的客戶端開發(fā)框架開發(fā)了一個(gè)全3D即時(shí)戰(zhàn)略游戲,該游戲項(xiàng)目實(shí)現(xiàn)了多種復(fù)雜的游戲系統(tǒng),穩(wěn)定并具有很強(qiáng)的擴(kuò)展性。目前該項(xiàng)目已經(jīng)上線運(yùn)營(yíng),精細(xì)的畫風(fēng)配合流暢多樣的玩法得到玩家的一致好評(píng),如圖5所示:

        圖5 游戲效果圖

        圖5(a)為游戲的主界面,中間部分展示的人物角色可以通過(guò)碰撞與玩家進(jìn)行交互,周圍的UI部分展示了游戲的個(gè)功能入口。圖5(b)為抽獎(jiǎng)界面,得意于功能強(qiáng)大的UI框架,抽獎(jiǎng)面板可來(lái)回翻轉(zhuǎn)。圖5(c)為炫酷的戰(zhàn)斗場(chǎng)景,玩家可通過(guò)點(diǎn)擊下方人物頭像釋放對(duì)應(yīng)人物技能。

        6 總結(jié)

        本文闡述了一套通用的Unity3D游戲客戶端開發(fā)框架,并利用此框架開發(fā)了一個(gè)全3D即時(shí)戰(zhàn)略游戲。實(shí)踐證明,好的Unity3D程序員不僅要熟練使用引擎本身,還要學(xué)會(huì)在開發(fā)過(guò)程中吸取經(jīng)驗(yàn)教訓(xùn),總結(jié)出好的游戲開發(fā)框架,將通用常用的功能組件提取整理,如此可以很大程度上減少開發(fā)下一個(gè)游戲的工作量。除此之外我們還要學(xué)會(huì)與團(tuán)隊(duì)其他成員保持良好的溝通。

        [1] 中國(guó)游戲產(chǎn)業(yè)報(bào)告[Z]. 2016.

        [2] 謝文斌. 基于游戲引擎的沉浸式立體顯示游戲框架設(shè)計(jì)與實(shí)現(xiàn)[D]. 復(fù)旦大學(xué), 2013.

        [3] Kim A H, Bae J H. Development of Mobile Game Using Multiplatform (Unity3D) Game Engine[J]. International Journal of Intelligent Information Processing. 2014.

        [4] De Macedo D V, Formico Rodrigues M A. Experiences with rapid mobile game development using unity engine[J]. Computers in Entertainment. 2011, 9(3): 1-12.

        [5] Xie J. Research on key technologies base Unity3D game engine[C]. 2012.

        [6] Jie J, Yang K, Haihui S. Research on the 3D Game Scene Optimization of Mobile Phone Based on the Unity 3D Engine[C]. 2011.

        [7] 王超明. 基于 Unity3D 引擎的賽車手機(jī)游戲的設(shè)計(jì)與實(shí)現(xiàn)[D]. 北京交通大學(xué), 2015.

        [8] 呂林軒. 基于 Unity3D 的 “全民快跑” 客戶端的設(shè)計(jì)與實(shí)現(xiàn)[D]. 北京交通大學(xué), 2015.

        [9] 郭一晶, 吳文樹. 基于 Android 的飛行射擊游戲的設(shè)計(jì)與實(shí)現(xiàn)[J]. 微型電腦應(yīng)用, 2014, 30(6): 13-15.

        [10] 左強(qiáng). 設(shè)計(jì)模式與游戲開發(fā)[J]. 程序員:游戲創(chuàng)造. 2006(3): 56-62.

        Design and Application of Mobile Game Client Development Framework Based on Unity3D

        Sang Qi1,2, Ye Dejian1,2
        (1. Software School, Fudan University, Shanghai 201203, China;2. Engineering Research Center of Cyber Security Auditing and Monitoring, Ministry of Education, Shanghai 201203, China))

        Along with the increasingly fierce competition in the game industry, forming a framework from the experience of existing game development is the only way to deal with the brutal market. This paper sums up a general framework for the development of the Unity3D game client based on the long-term game development experience, which uses the method of general manager to effectively organize the game objects in the scene as well as the control scripts of the game objects. In this paper, it first briefly describes three basic components in the frame layer including UI framework, message manager and buffer pool of game objects. Then it explains how to use the framework for client development with a real-time strategy game as an example.

        Unity3D; Game Client Framework; General Manager

        TP311

        A

        2016.02.20)

        桑 琪(1990-),女,復(fù)旦大學(xué),軟件學(xué)院,網(wǎng)路信息安全審計(jì)監(jiān)控教育部工程科研中心,碩士,研究方向:網(wǎng)絡(luò)多媒體,上海,201203

        葉德建(1976-),男,復(fù)旦大學(xué),軟件學(xué)院,網(wǎng)路信息安全審計(jì)監(jiān)控教育部工程科研中心,副教授,博士,研究方向:寬帶網(wǎng)絡(luò)與互動(dòng)媒體,上海,201203

        猜你喜歡
        管理器消息客戶端
        應(yīng)急狀態(tài)啟動(dòng)磁盤管理器
        一張圖看5G消息
        Windows文件緩沖處理技術(shù)概述
        縣級(jí)臺(tái)在突發(fā)事件報(bào)道中如何應(yīng)用手機(jī)客戶端
        孵化垂直頻道:新聞客戶端新策略
        基于Vanconnect的智能家居瘦客戶端的設(shè)計(jì)與實(shí)現(xiàn)
        高集成度2.5A備份電源管理器簡(jiǎn)化鋰離子電池備份系統(tǒng)
        消息
        消息
        消息
        亚洲一区二区三区激情在线观看| 天天躁日日操狠狠操欧美老妇 | 蜜乳一区二区三区亚洲国产| 麻豆国产精品va在线观看不卡| 国产成人av性色在线影院色戒| YW亚洲AV无码乱码在线观看| 激情乱码一区二区三区| 手机在线观看日韩不卡av| 无码国产伦一区二区三区视频| 日韩精品电影在线观看| 色婷婷亚洲一区二区在线| 日本在线精品一区二区三区| 国产精品无码午夜福利| 超碰Av一区=区三区| 中文字幕一区二区网址| 国产大屁股喷水视频在线观看| 国内精品伊人久久久久影院对白| 成人在线免费视频亚洲| 亚洲一区中文字幕一区| 国产va免费精品观看精品| 精品无码国产污污污免费网站| 青青草免费激情自拍视频| 五月婷婷六月丁香久久综合| 国产人妻丰满熟妇嗷嗷叫| 欧美精品一级| 麻豆av毛片在线观看| 日日噜噜夜夜狠狠va视频v| 无码人妻精品一区二区三18禁 | 最新手机国产在线小视频| av中文字幕一区人妻| 玩中年熟妇让你爽视频| 精品国产一区二区三区AV小说| 久久久人妻丰满熟妇av蜜臀| 婷婷色综合视频在线观看| 亚洲色自偷自拍另类小说| 国产熟女自拍视频网站| 日韩精品一区二区三区在线视频| 日本人与黑人做爰视频网站| 国产精品三级在线专区1| 女同恋性吃奶舌吻完整版| 国产精品久久久久9999小说|