基于Unity3D的角色扮演類游戲設(shè)計(jì)_第1頁(yè)
基于Unity3D的角色扮演類游戲設(shè)計(jì)_第2頁(yè)
基于Unity3D的角色扮演類游戲設(shè)計(jì)_第3頁(yè)
基于Unity3D的角色扮演類游戲設(shè)計(jì)_第4頁(yè)
基于Unity3D的角色扮演類游戲設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩25頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

基于Unity3D的角色扮演類游戲設(shè)計(jì)專業(yè):數(shù)字媒體技術(shù)【摘要】游戲開(kāi)發(fā)行業(yè),隨著移動(dòng)領(lǐng)域的崛起,近年來(lái)變得越加火熱,各游戲開(kāi)發(fā)公司紛紛投入移動(dòng)游戲的研究開(kāi)發(fā),其中Unity3D和Cocos2D兩款引擎受到了各公司的青睞,游戲開(kāi)發(fā)人員供不應(yīng)求。本文將介紹如何用Unity3D引擎開(kāi)發(fā)一款角色扮演類游戲的全過(guò)程,其中包含了Unity3D引擎使用的介紹、游戲策劃及游戲各大功能模塊的實(shí)現(xiàn)。在游戲策劃中將規(guī)劃整個(gè)游戲項(xiàng)目的背景故事,游戲場(chǎng)景,游戲系統(tǒng)等,為后面實(shí)現(xiàn)游戲功能代碼打好基石。在游戲程序開(kāi)發(fā)中,將使用Unity3D提供的編輯器結(jié)合C#先實(shí)現(xiàn)游戲流程整個(gè)程序框架,然后按照框架流程完成游戲各個(gè)模塊的功能,最后將游戲進(jìn)行Windows和Android雙平臺(tái)打包調(diào)試。1 前言1.1 項(xiàng)目背景與設(shè)計(jì)理念隨便國(guó)家的富強(qiáng),科技的發(fā)展,越來(lái)越多的人們需要在工作閑時(shí)進(jìn)行娛樂(lè)休閑,游戲產(chǎn)業(yè)也隨之誕生。在21世紀(jì)的互聯(lián)網(wǎng)高速發(fā)展之期,游戲行業(yè)不斷壯大,從最早的紅白機(jī)時(shí)代,再到主機(jī)時(shí)代,隨后PC計(jì)算機(jī)的崛起讓游戲行業(yè)大放光彩,直到近年來(lái)移動(dòng)領(lǐng)域的熱潮又將手機(jī)游戲推向了頂峰。在這樣的背景下,也越來(lái)越多的公司投入的游戲研發(fā)中,不過(guò)由于每次開(kāi)發(fā)一款游戲都得重頭開(kāi)始編碼,效率低,成本高,所以游戲設(shè)計(jì)者想如何去復(fù)用之前的東西從而進(jìn)行快速發(fā)開(kāi)。慢慢的,游戲引擎(GameEngine) 問(wèn)世了,它集成了圖形引擎、物理引擎、碰撞檢測(cè)系統(tǒng)、音效、腳本引擎、電腦動(dòng)畫(huà)、人工智能、網(wǎng)絡(luò)引擎以及場(chǎng)景管理等,為游戲設(shè)計(jì)者提供各種編寫游戲所需的各種工具,大大提高了游戲設(shè)計(jì)者開(kāi)發(fā)游戲的時(shí)間和成本。1.2 游戲設(shè)計(jì)方法與實(shí)現(xiàn)技術(shù)角色扮演類游戲(Role-Playing Game),提供虛擬的計(jì)算機(jī)游戲世界,該游戲世界提供虛擬的游戲角色供玩家選擇并操作,最終使得玩家在該世界實(shí)現(xiàn)自己的第二人生為目標(biāo)。RPG框架的設(shè)計(jì)和研究自RPG誕生以來(lái)不斷進(jìn)步,至今發(fā)展到由引擎技術(shù)制作的時(shí)代。RPG游戲設(shè)計(jì)較為復(fù)雜,系統(tǒng)主要以戰(zhàn)斗、劇情、任務(wù),交互、裝備等系統(tǒng)為主,其中戰(zhàn)斗系統(tǒng)為RPG游戲設(shè)計(jì)的核心部分。戰(zhàn)斗系統(tǒng)主要包含:1、 屬性系統(tǒng):這是游戲中最簡(jiǎn)單的系統(tǒng),包括了主角、物品、NPC、技能、怪物等各自的屬性值,通過(guò)屬性值可計(jì)算出戰(zhàn)斗中各種邏輯交互數(shù)值。2、 狀態(tài)機(jī)系統(tǒng):該系統(tǒng)標(biāo)志著一個(gè)人物或者怪物現(xiàn)處于什么狀態(tài),相對(duì)于動(dòng)作而言,人物是站立中?還是跑動(dòng)中?還是與敵人打斗中?當(dāng)然有些狀態(tài)還是可以同時(shí)擁有的,這些狀態(tài)需要在程序中利用不同的變量值來(lái)區(qū)分。所以戰(zhàn)斗規(guī)則越多,狀態(tài)機(jī)邏輯也就越復(fù)雜,所以在開(kāi)發(fā)過(guò)程中需要預(yù)先制定好一套方案,否則在后續(xù)開(kāi)發(fā)中將越加難以維護(hù)。3、 行為系統(tǒng):該系統(tǒng)決定了游戲的表演方式,每一個(gè)動(dòng)作或者聲音的表現(xiàn)都由行為系統(tǒng)來(lái)管理。4、 人工智能(AI):該系統(tǒng)主要為了人機(jī)交互而生,在戰(zhàn)斗過(guò)程中,敵人將以怎樣的表現(xiàn)和玩家對(duì)戰(zhàn),越是強(qiáng)大的敵人,其AI設(shè)計(jì)過(guò)程也就越復(fù)雜,需要通過(guò)不一樣的算法結(jié)合起來(lái)推導(dǎo)出一套怪物的AI指令。1.3 本項(xiàng)目的設(shè)計(jì)思路與實(shí)現(xiàn)技術(shù)本項(xiàng)目將設(shè)計(jì)一款角色扮演類游戲,游戲?qū)⒉捎肬nity引擎進(jìn)行制作,游戲中將實(shí)現(xiàn)游戲登錄、交互、戰(zhàn)斗、保存等幾大功能,各功能間還包含了許多與之相依賴的小功能。項(xiàng)目利用.net下mono的跨平臺(tái)編譯技術(shù),使用C#在windows環(huán)境下進(jìn)行跨平臺(tái)開(kāi)發(fā),再結(jié)合Unity引擎提供了強(qiáng)大的API函數(shù)庫(kù)和渲染引擎技術(shù)來(lái)實(shí)現(xiàn)整個(gè)RPG游戲的技術(shù)實(shí)現(xiàn)。1.4 本項(xiàng)目的主要工作任務(wù)本項(xiàng)目的的主要設(shè)計(jì)工作包括:(1) 設(shè)計(jì)一款基于移動(dòng)平臺(tái)的RPG游戲(2) 策劃RPG游戲各模塊玩法及系統(tǒng)功能(3) 利用Unity3D引擎完整的實(shí)現(xiàn)游戲所有功能(4) 對(duì)最終實(shí)現(xiàn)游戲進(jìn)行打包調(diào)試本項(xiàng)目通過(guò)對(duì)Unity3D引擎的一年的學(xué)習(xí),實(shí)驗(yàn)了許多的小項(xiàng)目,最后總結(jié)了如何利用它來(lái)快速開(kāi)發(fā)一款RPG游戲,從前期的游戲策劃,游戲功能布局,再到游戲的程序框架、功能開(kāi)發(fā),到最后的打包調(diào)式,本文都將通過(guò)該實(shí)例一一描述。2 項(xiàng)目介紹2.1游戲引擎介紹Unity3D是一款由Unity Technologies開(kāi)發(fā)的跨平臺(tái)游戲引擎,該引擎集成了強(qiáng)大的可視化用戶編輯器,采用了組件式開(kāi)發(fā),使開(kāi)發(fā)者能快速的開(kāi)發(fā)出自己的游戲。該引擎由于可進(jìn)行跨平臺(tái)發(fā)開(kāi),在移動(dòng)領(lǐng)域崛起時(shí),受到了很多開(kāi)發(fā)者的青睞,現(xiàn)已越來(lái)越多的開(kāi)發(fā)者投入其中,已成為目前世界上使用最廣泛的游戲引擎。在圖形方面,Untiy3D采用了主流的實(shí)時(shí)光照,Lightmapping,全局光照GI等技術(shù),使游戲界面更加逼真。在程序方面,該引擎支持用C#和原生的UntiyScript進(jìn)行開(kāi)發(fā),大大加快了用戶開(kāi)發(fā)進(jìn)度,而且還提供了AssetStore商店,讓開(kāi)發(fā)者能在里面找到想要的插件,能快速實(shí)現(xiàn)想要的功能及效果。2.2 游戲介紹本文將以中國(guó)古代唐朝做為歷史背景,利用Unity3D開(kāi)發(fā)一款基于移動(dòng)端的ARPG手游。游戲類型:ARPG游戲平臺(tái):Win、Android游戲風(fēng)格:中國(guó)古代游戲玩法:玩家通過(guò)副本戰(zhàn)斗消滅敵人獲得獎(jiǎng)勵(lì),還可以通過(guò)商店購(gòu)買等不斷強(qiáng)大自己。2.3 游戲故事背景在開(kāi)發(fā)游戲前,制定一個(gè)好的背景題材將決定了游戲后期的發(fā)展。如何定一個(gè)好的故事背景,需要針對(duì)玩家的喜好而決定,好的題材將更喜歡玩家的關(guān)注,所以好的故事題材將為游戲奠定基石。本文中,制定了近期較為火熱的中國(guó)古代唐朝題材為背景故事,打造一款即時(shí)戰(zhàn)斗的ARPG游戲,讓玩家在游戲中體驗(yàn)打斗的快感和古典韻味。2.4 游戲場(chǎng)景游戲場(chǎng)景作為游戲主要的交互區(qū),它承載了玩家在游戲中的大部分交互,其對(duì)游戲的重要性不言而喻。游戲場(chǎng)景可分為2D和3D,2D場(chǎng)景都是由一張張圖片拼成,效果相比3D稍差一些,3D給人感覺(jué)更真實(shí),仿佛身臨其境的感覺(jué)。游戲場(chǎng)景還分為很多種風(fēng)格,有古風(fēng),韓風(fēng),歐美風(fēng),日漫風(fēng),水墨風(fēng)格等等,該如何去選擇這就需要根據(jù)題材來(lái)決定了。本文中由于題材定位中國(guó)古代,所以場(chǎng)景也為中國(guó)古代風(fēng)格的場(chǎng)景, 其風(fēng)格華麗,渾厚莊重,線條平直硬拐,裝飾豐富,令人感覺(jué)心曠神怡。 圖2.4 (1)華麗的長(zhǎng)安城圖2.4 (2)華麗的長(zhǎng)安城2.5 游戲角色一款好玩的游戲、受歡迎的游戲,其中必定有幾位受人歡迎的角色,每個(gè)角色有著自己獨(dú)特的性格和能力,更加能被玩家們記住。那么要?jiǎng)?chuàng)作一些好的角色也不容易,其中有一點(diǎn)很重要,那就是每個(gè)角色都要有自己存在的價(jià)值,形成鮮明的對(duì)比,要與其他角色與眾不同,因?yàn)橥婕覀兛偸菚?huì)喜歡獨(dú)特的那位。本文中的游戲主角為一位初出茅廬的道士,道士途中遇到了各種磨難,消滅敵人,一步步的成長(zhǎng)起來(lái)。道士的武功主要以劍術(shù)為主,因?yàn)樾愿褫^為外向,相信頗受玩家喜愛(ài)。本作中還有另外兩位角色,后續(xù)還可以繼續(xù)為游戲添加新角色,從而豐富游戲哦。圖2.5 帥氣的道士2.6 游戲系統(tǒng)本文中的游戲功能系統(tǒng)主要為分以下幾類u 游戲登錄u 創(chuàng)建角色u 背包系統(tǒng)u 裝備系統(tǒng)u 戰(zhàn)斗系統(tǒng)u 副本系統(tǒng)u 商店系統(tǒng)u NPC系統(tǒng)u 數(shù)值系統(tǒng)以上幾類為本游戲大致的游戲功能,這些功能在RPG類型的游戲中必備的幾項(xiàng),通過(guò)這些功能系統(tǒng),能夠展示出一款RPG游戲的核心玩法。其中數(shù)值系統(tǒng)最為重要,一款好的RPG游戲不僅要滿足玩家對(duì)畫(huà)面以及功能上的需求,還要滿足玩家的虛榮心。一款RPG游戲是不是好玩,和數(shù)值的相關(guān)性不是特別大,但是游戲是不是不好玩以及能玩的多深入,和數(shù)值的關(guān)系就很大了。數(shù)值做的不好,在表現(xiàn)層面上是讓游戲流程的體驗(yàn)不好,比較容易出現(xiàn)的兩個(gè)極端是過(guò)度的挫折感(練功十年,出門就被小兵秒)和茫然所失的成就感(玩家還沒(méi)發(fā)力,Boss就撲街了?)!所以說(shuō),如何巧妙的運(yùn)用這些數(shù)值來(lái)構(gòu)建起整個(gè)游戲的可玩性是至關(guān)重要的,得學(xué)會(huì)如何去根據(jù)玩家的需求來(lái)構(gòu)建不一樣的數(shù)值系統(tǒng)。3 游戲程序框架設(shè)計(jì)3.1 游戲核心本游戲?qū)⒉捎媒M件式的模式進(jìn)行開(kāi)發(fā),不同組件維護(hù)著自己相關(guān)的功能,不與其他組件進(jìn)行直接交互,降低層與層之間的耦合(俗稱:解耦),便于后期維護(hù)。本作還將根據(jù)MVC模式,即數(shù)據(jù)模型(游戲數(shù)據(jù))、視圖(UI)和控制器(管理器)來(lái)編寫整套邏輯程序。MVC模式所帶來(lái)的優(yōu)點(diǎn):1、開(kāi)發(fā)人員可以只關(guān)注整個(gè)結(jié)構(gòu)中的其中某一層;2、可以很容易的用新的實(shí)現(xiàn)來(lái)替換原有層次的實(shí)現(xiàn);3、可以降低層與層之間的依賴;4、有利于標(biāo)準(zhǔn)化;5、利于各層邏輯的復(fù)用。數(shù)據(jù):管理游戲程序中各種數(shù)值數(shù)據(jù)。視圖:Unity中的控件都必須繼承于Monobehaviour。管理器:對(duì)數(shù)據(jù)和UI進(jìn)行操作和管理。本文中的管理器都將繼承于Graduation.Component,這個(gè)類是本作者自己寫的一個(gè)組件管理,利用組件容器將每個(gè)管理器加入容器中,便于對(duì)各模塊的管理器進(jìn)行管理和交互。游戲核心架構(gòu):游戲核心(GameCore)(單例)游戲管理器(GameManager):場(chǎng)景管理器(SceneManager)數(shù)據(jù)管理器(DataManager)資源管理器(ResourceManager)UI管理器(UIManager)游戲組件(Component):音效管理器(SoundManager)網(wǎng)絡(luò)管理器(NetManager)配置管理器(ConfigManager)邏輯管理器(LogicManager)動(dòng)畫(huà)管理器(AnimationManager)游戲啟動(dòng)流程:/ 啟動(dòng)游戲./ 1.加載配置表InitConfig();/ 2.加載組件InitComponent();/ 3.加載游戲資源InitResource();/ 4.初始化網(wǎng)絡(luò)模塊InitNetwork();/ 5.進(jìn)入游戲EnterGame();圖3.1 游戲核心框架流程圖為了游戲開(kāi)發(fā)中的方便使用,作者在開(kāi)發(fā)前已經(jīng)封裝好了一整套常用工具庫(kù),工具庫(kù)大致包含:文件讀寫工具類,數(shù)值計(jì)算工具類,UI工具類,序列化工具類等。有了這些工具庫(kù),在開(kāi)發(fā)中可以更快速編碼,省去了頻繁寫一些常用邏輯的時(shí)間。3.2 游戲UI框架在Unity3D早起的版本里,UI系統(tǒng)在引擎中是較為薄弱的,只能通過(guò)Unity提供的一些API來(lái)實(shí)現(xiàn)UI的搭建,但這種方式效率實(shí)在太差,改起來(lái)也非常麻煩。由于Untiy越加的火熱,Unity 的Asset Store 商店的插件也越來(lái)越多,其中Next-GUI插件(下文簡(jiǎn)稱:NGUI)最受開(kāi)發(fā)者歡迎,因?yàn)槠鋸浹a(bǔ)了Unity本身的弱點(diǎn),把UI系統(tǒng)變得非常的強(qiáng)大,甚至用完美來(lái)形容。使用NGUI插件可以讓用戶通過(guò)可視化界面的方式,只要在界面上拖入各種控件、腳本,再結(jié)合自己的一些邏輯代碼即可完成游戲所需的界面。在Unity4.6版本中,Unity開(kāi)發(fā)組認(rèn)識(shí)到了UI系統(tǒng)的薄弱,隨即也在該版本發(fā)布了新版UI系統(tǒng)(簡(jiǎn)稱;UGUI)。它僅吸取了NGUI的各種優(yōu)點(diǎn),由于UGUI屬于原生系統(tǒng),所以性能上會(huì)比NGUI好很多,漸漸的也被開(kāi)發(fā)者所接納。在本游戲中,將采用Unity最新的UGUI系統(tǒng)來(lái)完成整套游戲UI界面的開(kāi)發(fā),并講述如何來(lái)搭建游戲的UI框架,一套好的UI框架將使后期開(kāi)發(fā)起來(lái)更加便捷。圖3.2 游戲UI框架流程圖UIBase:該類為所有UI腳本都繼承的基類,該類重載了大多數(shù)MonoBehaviour函數(shù),方便在后期資源管理以及界面動(dòng)畫(huà)等進(jìn)行統(tǒng)一管理。UIManager:該類將統(tǒng)一管理所有UI界面的顯示、隱藏、動(dòng)畫(huà)、音效,所以需要顯示的UI界面都需要通過(guò)該類進(jìn)行注冊(cè)才能使用,該類還提供各種通用UI界面,例如消息框,提示框,輸入框,確認(rèn)選擇框等等。UIUtils:該類為靜態(tài)類,是UI工具庫(kù),將提供大量功能型函數(shù)供UI界面使用,例如一些UI對(duì)齊,UI的各種位置算法等。有了以上三大類,在后續(xù)的界面設(shè)計(jì)中就能輕松的利用他們實(shí)現(xiàn)一套完整的UI框架,實(shí)現(xiàn)每一個(gè)功能界面的需求。3.3 Lightmapping光照烘焙光照烘焙,該技術(shù)是指通過(guò)計(jì)算機(jī)計(jì)算模擬得到的燈光效果,省去了采用實(shí)時(shí)燈光所帶來(lái)的高消耗。簡(jiǎn)單來(lái)說(shuō)就是實(shí)時(shí)燈光計(jì)算十分耗時(shí),隨著光源越多會(huì)倍增計(jì)算耗時(shí)。使用Lightmap模擬燈光帶來(lái)的效果,便不用去計(jì)算燈光,會(huì)帶來(lái)性能上的大大提升。當(dāng)然你不用燈光效果也是沒(méi)問(wèn)題的,具體還是看項(xiàng)目需求。最簡(jiǎn)單的直接在3dmas或maya里面烘培完貼圖頂點(diǎn)色也行。對(duì)于移動(dòng)手機(jī)游戲來(lái)說(shuō),由于硬件的原因,如果在3D游戲中大量的采用實(shí)時(shí)光照手機(jī)的性能是吃不消的,但如果不用實(shí)時(shí)光照效果又非常差。所以本文的游戲中將采用Untiy Pro版本自帶的Lightmap技術(shù),大大減輕了游戲本身對(duì)手機(jī)性能帶來(lái)的開(kāi)銷,而且使用Lightmap的畫(huà)面效果又非常不錯(cuò)。首先,先在場(chǎng)景內(nèi),在合適的位置打好大量的點(diǎn)光源(Point Light),方向、位置、亮度這些都需要經(jīng)過(guò)細(xì)心的調(diào)整。圖3.3 (1)Lightmapping的使用其次,打開(kāi)Lightmapping面板調(diào)節(jié)具體的參數(shù)。圖3.3 (2)Lightmapping的使用由于手游中并不需要太高的畫(huà)質(zhì),所以這里作者調(diào)節(jié)的光照品質(zhì)較為一般。最后,點(diǎn)擊Bake Scene即可開(kāi)始場(chǎng)景的烘焙,烘焙需要等待一段時(shí)間。看看烘焙后的效果是不是感覺(jué)好震撼?效果絲毫不遜于實(shí)時(shí)光照。圖3.3 (3)Lightmapping的使用3.4 序列化與反序化3.4.1 序列化介紹序列化 (Serialization):將數(shù)據(jù)結(jié)構(gòu)或?qū)ο筠D(zhuǎn)換成二進(jìn)制串的過(guò)程反序列化(Deserialize):將在序列化過(guò)程中所生成的二進(jìn)制串轉(zhuǎn)換成數(shù)據(jù)結(jié)構(gòu)或者對(duì)象的過(guò)程這兩個(gè)過(guò)程在游戲開(kāi)發(fā)中被廣泛的使用,因?yàn)槠淇梢宰層螒蛟诳缙脚_(tái)上方便的進(jìn)行通訊傳遞,把一個(gè)完整的對(duì)象通過(guò)網(wǎng)絡(luò)發(fā)送到終端。序列化還能將一個(gè)對(duì)象永久的保存在硬盤上,可以用于存儲(chǔ)玩家的游戲數(shù)據(jù)。本文中將采用序列化方式來(lái)進(jìn)行玩家數(shù)據(jù)存儲(chǔ),并在序列化過(guò)程中加入了加密解密技術(shù),使得游戲數(shù)據(jù)不會(huì)輕易的被玩家所破壞?,F(xiàn)在主流的序列化方式大致分為二進(jìn)制序列化:二進(jìn)制序列化的優(yōu)點(diǎn)是可以精確地控制序列化及反序列化的過(guò)程,并可以序列化對(duì)象的非公共成員。其序列化過(guò)程的速度非常之快,而且序列化后的體積小,非常適合用來(lái)傳輸實(shí)時(shí)性較高的應(yīng)用。但因?yàn)槿狈?biāo)準(zhǔn)的協(xié)議,裝拆箱比較麻煩。Json序列化:JSON起源于弱類型語(yǔ)言Javascript,與xml相比,這種序列化簡(jiǎn)直是太簡(jiǎn)單了,其只需要通過(guò)將變量用一個(gè)key對(duì)應(yīng)一個(gè)value即可完成序列化,而且序列化速度比較快,僅次于Binary方式。Xml序列化:Xml序列化歷史較為悠久了,其缺點(diǎn)太明顯了,冗余太大,但擁有的非常高的安全性與可擴(kuò)展性,所以至今仍被廣泛的使用著。序列化方案的選擇:每種序列化協(xié)議都有優(yōu)點(diǎn)和缺點(diǎn),它們?cè)谠O(shè)計(jì)之初有自己獨(dú)特的應(yīng)用場(chǎng)景。在系統(tǒng)設(shè)計(jì)的過(guò)程中,需要考慮序列化需求的方方面面,綜合對(duì)比各種序列化協(xié)議的特性,最終給出一個(gè)折衷的方案。3.5.2 序列化應(yīng)用本文中的游戲?yàn)榱烁?jié)省空間和解析效率,采用二進(jìn)制序列化方式,并對(duì)二進(jìn)制序列化方案進(jìn)行了二次封裝,可更方便的在游戲中使用。本文中所有需要序列化的對(duì)象都將繼承與SerializeData類,在該類利用.net自帶的ISerializable接口通過(guò)BinaryFormatter對(duì)所有需要序列化的變量進(jìn)行序列化并存儲(chǔ)。附:序列化與反序列化代碼(見(jiàn)附錄)3.5表格配置數(shù)據(jù)讀取在游戲開(kāi)發(fā)中,數(shù)值模型起到了很大的作用,它將很大程度上決定了游戲的可玩性。那么如何在游戲開(kāi)發(fā)中方便的配置數(shù)值使游戲更具可玩性呢?由于Unity自身有著強(qiáng)大的編輯器,開(kāi)發(fā)者可以直接在編輯器上修改變量的數(shù)值從而修改數(shù)據(jù)模型。但這樣的作法看起來(lái)很方便,其實(shí)還是有很多弊端的。首先策劃并不見(jiàn)得能很好的使用Unity進(jìn)行數(shù)值編輯,其次這種方式需要程序事先把所有變量都布局好供策劃調(diào)整,而且中間經(jīng)常會(huì)因?yàn)橐恍┨厥獾男枨蠖鰡?wèn)題。所以如果在團(tuán)隊(duì)開(kāi)發(fā)中,配置表格讓策劃自己填寫無(wú)非是最好的方式了,策劃只需要關(guān)心表中的字段和數(shù)值,然后根據(jù)游戲?qū)嶋H運(yùn)行情況調(diào)整就行了。本文將介紹如何用csv表格(逗號(hào)分隔表)進(jìn)行數(shù)值的讀取,然后將它配置到游戲中去。(一)、用Excel制作csv表格圖3.5(1)制作csv表格為了方便程序中開(kāi)發(fā)使用,本作者自己制定了一套讀取方案。打開(kāi)Excel表格,填入數(shù)值字段及數(shù)值。數(shù)據(jù)行介紹:第一行:對(duì)應(yīng)程序代碼中的表類型第二行:數(shù)據(jù)字段,字段名對(duì)應(yīng)程序中的表類型成員變量,后綴:s 結(jié)尾代表字符串,:a 結(jié)尾代表整型數(shù)組,如果沒(méi)有帶后綴的則默認(rèn)為整型數(shù)值。第三行:以 # 號(hào)開(kāi)頭的行代表這正行的數(shù)據(jù)作為解釋行,不進(jìn)行數(shù)據(jù)讀取。第四行至結(jié)尾:這些行每行的數(shù)據(jù)都代表著一行數(shù)據(jù)記錄,讀取后寫入內(nèi)存中方便調(diào)用。(二)、保存csv配置表選擇另存為,選擇CSV(逗號(hào)分隔)類型的文件,修改文件名為item.csv,然后保存至文檔中。圖3.5(2)保存csv表格(三)、解析csv配置表解析前需要先為該表定義指定數(shù)據(jù)類及成員變量。圖3.5(3)解析csv配置表如圖3.5(3),建立了兩個(gè)類型,一個(gè)是CsvBase,該類為所有Csv類型的基類,因?yàn)槊總€(gè)表的第一個(gè)字段必須是tid。第二個(gè)是CsvItem類,也就是我們上文的Csv表對(duì)應(yīng)的類型,注意這里的變量名必須與表里填寫的字段相同。由于這些字段是不可變的,所以為了防止開(kāi)發(fā)中意外將數(shù)值覆蓋,所以這里變量加了readonly修飾符,表示只讀。但是如果設(shè)為只讀,那在解析表數(shù)據(jù)的時(shí)候要怎么賦值呢?這里又要提到另外一項(xiàng)技術(shù)“反射”,利用反射可以給字符串對(duì)應(yīng)的變量進(jìn)行賦值,并且在反射中是不受readonly所限制的,這樣就能快速的將字段與變量配對(duì),不需要一個(gè)一個(gè)去判斷那么繁瑣了。解析csv表關(guān)鍵點(diǎn)主要是對(duì)字符串進(jìn)行操作,先用File.ReadAllText()將item.csv讀取進(jìn)來(lái),然后利用string.split對(duì)讀取后的字符串進(jìn)行拆分,先對(duì)行進(jìn)行分割,把數(shù)據(jù)分割為n行,然后對(duì)行進(jìn)行解析,分析出每一行的作用,將其進(jìn)行相應(yīng)的賦值操作。接著對(duì)數(shù)據(jù)行進(jìn)行逗號(hào)拆分,分為每一個(gè)數(shù)據(jù)項(xiàng),然后利用反射賦值給對(duì)應(yīng)的類型變量中。最后新建一個(gè)Dictionary將這些數(shù)據(jù)存起來(lái)供程序中使用。附:Csv配置表解析代碼(見(jiàn)附錄)4 游戲功能模塊實(shí)現(xiàn)4.2 創(chuàng)建角色本游戲初始將提供玩家自由創(chuàng)建想要的角色,玩家根據(jù)需求創(chuàng)建角色,每個(gè)角色都有不一樣的職業(yè)。編寫CreateRoleManager類,該類用于管理玩家創(chuàng)建角色,完成確認(rèn)選擇后將選定的角色數(shù)據(jù)記錄到UserInfo類用戶數(shù)據(jù)中并進(jìn)行存盤,下次玩家再次登錄將可繼續(xù)使用該角色。功能需求:1、 創(chuàng)建角色2、 隨機(jī)角色名字3、 切換角色4、 選擇角色/ 創(chuàng)建角色public void CreateRole(int roleIndex);/ 切換角色public void ChangeRole(int roleIndex);/ 選擇角色public void SelectRole(int roleIndex);/ 隨機(jī)角色名字public string RandomRoleName();/ 進(jìn)入游戲public void EnterGame();圖4.2(1)創(chuàng)建角色界面圖4.2(2)角色選擇界面4.3 背包系統(tǒng)背包系統(tǒng)將用于存放玩家中打怪掉落的物品,實(shí)現(xiàn)該系統(tǒng)我們首先需要為創(chuàng)建一個(gè)背包管理器(InventoryManager),利用該管理器根據(jù)用戶的背包數(shù)據(jù)來(lái)操作UI控件來(lái)實(shí)現(xiàn)整個(gè)背包系統(tǒng)的邏輯操作以及數(shù)據(jù)控制。第一步:首先我們需要先分析背包系統(tǒng)在邏輯功能上有幾種基礎(chǔ)操作功能1、 查看物品詳細(xì)信息2、 交換背包物品位置,3、 添加物品4、 刪除物品5、 整理背包了解了功能需求,就可以開(kāi)始功能的實(shí)現(xiàn)了,在InventoryManager類下新建幾個(gè)功能函數(shù),利用這些函數(shù)對(duì)界面UI進(jìn)行操作,實(shí)現(xiàn)背包系統(tǒng)的基本功能。/ 查看物品public void LookItemInfo(ItemBase _item);/ 交互物品public void ChangeItem(InventoryItem _item1, InventoryItem _item2);/ 添加物品public void AddItem(ItemBase _item);/ 添加物品到指定位置public void AddItem(ItemBase _item,int _index);/ 整理背包public void SortOutInventory();第二步:實(shí)現(xiàn)了背包的基本操作功能,下面就開(kāi)始對(duì)背包數(shù)據(jù)進(jìn)行讀取,將這些背包里的數(shù)據(jù)展現(xiàn)在背包界面中供玩家查看。在角色信息UserInfo里將InventoryList列表里的背包物品信息一一讀取,然后分配給每個(gè)物品格子進(jìn)行顯示和操作。圖4.3(1) 背包系統(tǒng)界面圖4.3(2) 背包物品查看4.4裝備系統(tǒng)裝備系統(tǒng)是基于物品系統(tǒng)下的一種,但是它更特殊一些,它能夠給玩家提供一定量的屬性使得玩家變得更強(qiáng),并且裝備可能還可能有強(qiáng)化等一系列的附加功能。裝備系統(tǒng)功能需求:1、 屬性變更2、 穿上裝備3、 卸下裝備/ 穿上裝備public void FitOnEquip(ItemEquip _equip);/ 卸下裝備public void PutOffEquip(InventoryEquip _equip);/ 穿上裝備對(duì)角色的屬性變更public void FitOnToRole(RoleInfo _role);/ 卸下裝備對(duì)角色屬性的變更public void PutOffFromRole(RoleInfo _role);圖4.4 裝備系統(tǒng)界面4.5戰(zhàn)斗系統(tǒng)戰(zhàn)斗系統(tǒng)是本游戲最核心的系統(tǒng),游戲是一種體驗(yàn)過(guò)程,在這個(gè)體驗(yàn)過(guò)程中,戰(zhàn)斗通常是游戲中最強(qiáng)的交互要素,它對(duì)玩家的感覺(jué)刺激也是最大的。因此戰(zhàn)斗系統(tǒng)的設(shè)計(jì)通常是MMORPG中的重中之重,且在設(shè)計(jì)過(guò)程中處于核心地位,其他絕大部分的游戲子系統(tǒng)都將服務(wù)于戰(zhàn)斗系統(tǒng),或者衍生于戰(zhàn)斗系統(tǒng)。本游戲的戰(zhàn)斗系統(tǒng)主要分為:角色控制、角色狀態(tài)機(jī)、怪物狀態(tài)機(jī)以及怪物AI四大功能模塊,再配合上角色和怪物的屬性,一個(gè)簡(jiǎn)單的戰(zhàn)斗系統(tǒng)就形成了。4.5.1 角色控制角色的控制分為兩種:鼠標(biāo)點(diǎn)擊和搖桿操作,通過(guò)以上操作可以控制角色在游戲中任意移動(dòng)攻擊敵人等。鼠標(biāo)點(diǎn)擊移動(dòng):首先需要先將游戲場(chǎng)景中的地面進(jìn)行分層,將地面設(shè)為Ground層,然后通過(guò)UnityAPI函數(shù)ScreenPointToRay向鼠標(biāo)點(diǎn)擊屏幕的地方發(fā)射一條只射向Ground層的射線,射向只會(huì)射在游戲中的地面上,射線映射到3D世界中的點(diǎn)坐標(biāo)即為玩家點(diǎn)擊需要移動(dòng)的點(diǎn)。然后調(diào)用作者事先編寫的移動(dòng)函數(shù)MoveTo(Vector3 position)移動(dòng)到該點(diǎn)即可實(shí)現(xiàn)角色移動(dòng)。鍵盤移動(dòng):鍵盤移動(dòng)相對(duì)鼠標(biāo)移動(dòng)較為麻煩先,我們需要先獲取角色跟隨相機(jī)的正前方方向,然后再通過(guò) / 水平方向float horizontal = Input.GetAxisRaw(Horizontal);/ 垂直方向float vertical = Input.GetAxisRaw(Vertical);這兩個(gè)函數(shù)取得當(dāng)前鍵盤按下的方向,根據(jù)鍵盤按下的移動(dòng)方向再與角色相機(jī)正前方向量相乘則可得到角色移動(dòng)到的方向。/ 移動(dòng)方向 = 水平偏移值 * 相機(jī)向右向量 + 垂直偏移值 * 相機(jī)前方向量(horizontal和vertical為-11之間的數(shù))moveDirection = horizontal * cameraRight + vertical * cameraForward;4.5.2 角色狀態(tài)機(jī)角色狀態(tài)機(jī)將管理角色整套操作和動(dòng)畫(huà)之間的切換,能有效的管理狀態(tài)轉(zhuǎn)換之間的邏輯。第一步:需要根據(jù)需求編寫角色的狀態(tài)類型/ 角色狀態(tài)public enum PlayerState Idle, / 待機(jī) BattleIdle, / 戰(zhàn)斗待機(jī) Move, / 移動(dòng) Attack, / 攻擊 Magic, / 法術(shù)攻擊 Die / 死亡第二步:我們需要根據(jù)角色狀態(tài)利用Unity自帶的AnimatorControllter動(dòng)畫(huà)控制器來(lái)規(guī)劃角色的動(dòng)作流程。圖4.5.2角色動(dòng)畫(huà)狀態(tài)機(jī)第三步:編寫FSM有限狀態(tài)機(jī)對(duì)角色進(jìn)行狀態(tài)管理/ 通過(guò)一個(gè)Switch case語(yǔ)句來(lái)管理角色狀態(tài)的轉(zhuǎn)換switch (playState) case PlayerState.Idle: PlayerIdle(); break; case PlayerState.Move: PlayerMove(); break; case PlayerState.Attack: PlayerAttack(); break; case PlayerState.Magic: PlayerMagic(); break; case PlayerState.Die: PlayerDie(); break;4.5.3 怪物狀態(tài)機(jī)及怪物AI這里由于本作游戲怪物AI較為簡(jiǎn)單,所以便直接將怪物AI邏輯直接寫在狀態(tài)機(jī)中,其實(shí)狀態(tài)機(jī)與怪物AI本來(lái)就互相有著依賴關(guān)系,AI將操縱狀態(tài)機(jī)才可以實(shí)現(xiàn)不同的怪物AI邏輯,就好比人腦控制人體四肢在運(yùn)動(dòng)一樣。1、怪物的狀態(tài)/ 怪物狀態(tài)public enum EnemyState Respawn,/ 重生 Idle, / 待命 Attack, / 攻擊 RunAway,/ 逃跑 Die, / 死亡 Homing, / 歸位 BeAttck / 被擊2、怪物動(dòng)畫(huà)狀態(tài)機(jī)圖4.5.3 怪物動(dòng)畫(huà)狀態(tài)機(jī)3、本作怪物AI主要分為:攻擊、追逐、死亡、重生、回到起始點(diǎn)怪物AI流程:首先怪物將執(zhí)行等待狀態(tài),直接角色進(jìn)入怪物的視野范圍時(shí),怪物將朝著角色的位置進(jìn)行視線追逐,直接玩家離開(kāi)了怪物的視野范圍時(shí)怪物將回到起始點(diǎn),若角色達(dá)到了怪物的攻擊范圍之內(nèi)時(shí)怪物將對(duì)角色進(jìn)行攻擊,角色若將怪物殺死,怪物將會(huì)在指定重生時(shí)間復(fù)活。這整個(gè)AI流程實(shí)現(xiàn)了玩家與敵人的簡(jiǎn)單戰(zhàn)斗交互,再配合上角色和怪物的數(shù)值屬性,整個(gè)戰(zhàn)斗系統(tǒng)就這樣誕生了。/ 怪物等待EnemyIdle();/ 怪物攻擊EnemyAttack();/ 怪物死亡EnemyDie();/ 怪物歸位EnemyHoming();/ 怪物追逐EnemyRunTo();/ 怪物受擊EnemyBeAttack();4.7商店系統(tǒng)商店系統(tǒng)可以購(gòu)買一些玩家必備的裝備和補(bǔ)給品,首先我們需要為商店配置表格,游戲中所有的物品都由金幣購(gòu)買,所以該商店也稱為金幣商店,可以點(diǎn)擊城鎮(zhèn)里的部分NPC打開(kāi)商店界面進(jìn)行購(gòu)買。功能需求:1、 配置商店物品信息2、 顯示商店界面并載入商店物品信息3、 購(gòu)買物品4、 切換商店物品類型第一步:需要先配置商店的Csv表格,由于我們已經(jīng)配置好了物品信息表,所以只需要根據(jù)物品表里的tid號(hào)來(lái)配置物品即可。第二步:創(chuàng)建StoreManager和StoreUI腳本,前者用來(lái)管理商店的邏輯管理,后者用來(lái)驅(qū)動(dòng)UI界面實(shí)現(xiàn)各種操作功能的需求。/ 加載商店數(shù)據(jù)public void LoadPanelData();/ 顯示商品信息public void ShowGoodsInfo(ItemBase _item);/ 購(gòu)買商品public void BuyGoods(ItemBase _item);/ 切換物品類型分組public void OnGroupClick();圖4.7 商店系統(tǒng)界面4.8 NPC系統(tǒng)NPC是指“非玩家控制角色”,這些NPC一般分為劇情NPC和功能性NPC,劇情NPC用于子跟玩家進(jìn)行一些人機(jī)交互,增加玩家在游戲世界中的真實(shí)感,還有一些功能性NPC可供玩家買賣物品,任務(wù)等功能。本項(xiàng)目里的NPC較為簡(jiǎn)單,主要提供一些劇情對(duì)話和商店功能,NPC分布在主城各個(gè)位置中,需求開(kāi)發(fā)者自行擺放。功能需求:1、 配置NPC劇情對(duì)話2、 點(diǎn)擊NPC進(jìn)行交互3、 NPC頭頂名字第一步:NPC的劇情對(duì)話由于是可換行或者帶特殊符號(hào),所以不配置CSV表格里,將它配置成txt文本,使得解析效率更高,還可以方便支持換行等特殊操作。第二步:通過(guò)鼠標(biāo)點(diǎn)擊事件OnNpcClick()對(duì)NPC進(jìn)行點(diǎn)擊操作,然后按事先配置的NPC功能觸發(fā)指定事件,NPC事件分為對(duì)話事件和商店事件。第三步:NPC頭頂名字,通過(guò)WorldToScreenPoint函數(shù)將NPC的世界坐標(biāo)點(diǎn)轉(zhuǎn)換成2D屏幕上的坐標(biāo)點(diǎn),然后每次調(diào)用,將2D的名字標(biāo)簽綁定在NPC頭上,讓標(biāo)簽跟隨著NPC,實(shí)現(xiàn)NPC頭頂名字。/ 加載NPC數(shù)據(jù)public void LoadNpcData();/ 點(diǎn)擊NPC事件public void OnClickNpc();/ 設(shè)置NPC名字跟隨public void SetNameFollow();圖4.8 NPC劇情對(duì)話5 發(fā)布調(diào)試完成游戲內(nèi)容后,我們需要打包進(jìn)行測(cè)試,Unity3D是一款強(qiáng)大的跨平臺(tái)引擎,所以可以打出多平臺(tái)的安裝包,并且其兼容率非常高,打包過(guò)程非常簡(jiǎn)單,下面我們就打Windows和Android平臺(tái)進(jìn)行測(cè)試。1、 Windows平臺(tái)打包測(cè)試:首先,我們需要打開(kāi)BuildSetting先設(shè)置Windows平臺(tái)發(fā)布相關(guān)設(shè)置,圖5.1(1) Windows平臺(tái)發(fā)布設(shè)置圖這里我們需要選好需要打包的場(chǎng)景,然后設(shè)置相關(guān)屬性以及選擇X86_64位的包。最后,點(diǎn)擊Build選擇保存路徑即可完成Windows平臺(tái)的打包流程,下面讓我們來(lái)看看最終效果圖吧。圖5.1(2) Windows平臺(tái)調(diào)試2、 Android平臺(tái)打包測(cè)試:Android平臺(tái)打包相比Windows平臺(tái)稍微復(fù)雜些,首先需要安裝Java并在Windows上配置Java環(huán)境,然后還需要下載AndroidSDK,在Unity中選擇指定AndroidSDK路徑,接著在BuildSetting中設(shè)置Android平臺(tái)發(fā)布相關(guān)設(shè)置,最后插上Android手機(jī)直接Build即可在Android系統(tǒng)的手機(jī)上進(jìn)行真機(jī)調(diào)試了??纯丛谑謾C(jī)上的運(yùn)氣效果是不是也非常棒呢!6 工作總結(jié)與未來(lái)展望6.1 工作總結(jié)6.1.1 游戲開(kāi)發(fā)問(wèn)題(1)遇到技術(shù)難點(diǎn)該如何解決作為技術(shù)行業(yè),遇到技術(shù)難題是在所難免的事,但如何有效的解決這些技術(shù)難題尤為重要。以下為筆者個(gè)人觀點(diǎn):1、 盡可能的使用最簡(jiǎn)單的方式解決問(wèn)題,采用復(fù)雜的方法或許會(huì)使得代碼越加累贅不堪,非常容易出Bug。2、 通過(guò)博客論壇、詢問(wèn)前輩等方式尋得解決答案,前輩們經(jīng)驗(yàn)豐富,通過(guò)詢問(wèn)他們能夠更快的獲得解決問(wèn)題的辦法,加快項(xiàng)目進(jìn)度。3、 如果短時(shí)間內(nèi)并無(wú)法解決問(wèn)題,建議先更改方案,采用簡(jiǎn)單的方法,預(yù)留接口待后期再繼續(xù)修改。(2)先思考后編碼在項(xiàng)目開(kāi)發(fā)中,我們需要根據(jù)策劃制定的規(guī)則去完成指定的功能,因此在決定開(kāi)始編碼之前一定要理清思路,否則如果遇到功能邏輯較為復(fù)雜的系統(tǒng)可能由于一開(kāi)始邏輯框架等問(wèn)題,導(dǎo)致后續(xù)開(kāi)發(fā)異常困難。這一點(diǎn)筆者親身經(jīng)歷過(guò)數(shù)次,每次都是想到拿寫到哪,毫無(wú)框架可言,導(dǎo)致后續(xù)無(wú)法正常的完成該功能。(3)游戲程序框架很重要在游戲項(xiàng)目開(kāi)發(fā)之前,應(yīng)對(duì)游戲類型及最終完成內(nèi)容進(jìn)行規(guī)劃思考,總結(jié)所有系統(tǒng)功能,然后依此制定良好的游戲框架。特別是在項(xiàng)目開(kāi)發(fā)前期,不應(yīng)該為了節(jié)約時(shí)間而省去了大多數(shù)的框架代碼,應(yīng)保證游戲在沒(méi)有功能內(nèi)容的情況下該程序也是可以正常運(yùn)行的。適當(dāng)?shù)闹谱鞲黝惞ぞ?,以及工具代碼,可以更便于我們開(kāi)發(fā)使用。6.1.2 良好的編碼習(xí)慣在游戲編碼中,我們應(yīng)該擁有良好的編碼習(xí)慣,應(yīng)按照項(xiàng)目預(yù)先規(guī)定的方案進(jìn)行編碼,整潔清晰的代碼將在團(tuán)隊(duì)開(kāi)發(fā)中起到重要作用。它會(huì)讓你更容易的維護(hù)自己的代碼,從中發(fā)現(xiàn)錯(cuò)誤進(jìn)行修改,而且規(guī)范的代碼會(huì)使得其他人更容易理解,促進(jìn)項(xiàng)目進(jìn)度。筆者以前參與項(xiàng)目開(kāi)發(fā)時(shí),總是忽視了這點(diǎn),導(dǎo)致游戲后期維護(hù)極難,所以在本項(xiàng)目中吸取了以往的教訓(xùn),在項(xiàng)目開(kāi)發(fā)前對(duì)整個(gè)代碼命名規(guī)則,注釋等等都做了詳細(xì)的規(guī)則,使得代碼看起來(lái)相當(dāng)清晰易維護(hù)。6.2 未來(lái)展望隨著游戲玩家數(shù)量不斷上升,市面上的游戲也越來(lái)越多了,但游戲的品質(zhì)卻參差不齊。作為一名游戲愛(ài)好者,開(kāi)發(fā)一款受人歡迎的游戲是我最大的目標(biāo),但距離實(shí)現(xiàn)這個(gè)目前筆者僅僅邁出了第一步,未來(lái)還將繼續(xù)對(duì)游戲程序開(kāi)發(fā)進(jìn)行更深入的研究,要相信當(dāng)技術(shù)水平達(dá)到一定境界時(shí)也就離這個(gè)目標(biāo)越來(lái)越近了。參考文獻(xiàn):1 金璽曾. Unity 3D手機(jī)游戲開(kāi)發(fā)M. 北京:清華大學(xué)出版社,2013:318-3472 (美)David M.Bourg & Glenn Seemann.游戲開(kāi)發(fā)中的人工智能M. 東南大學(xué)出版社, 2006:14-963 (美)Phll Co.游戲關(guān)卡設(shè)計(jì)M. 機(jī)械工業(yè)出版社, 2006:28-344 (美)Michelle Menard. Game Development with UnityM. 機(jī)械工業(yè)出版社,2012:101-1025 (美)Fletcher Dunnlan Parberry.3d數(shù)學(xué)基礎(chǔ)圖形與游戲開(kāi)發(fā)M. 北京:清華大學(xué)出版社, 2005: 133-1586 優(yōu)美締軟件(上海)有限公司. Unity4.X從入門到精通M. 北京:中國(guó)鐵道出版社, 2013:80-917 佚名.基于Unity3D的角色扮演游戲D 2013:14-208 gavinchengshubo博客. C#序列化(Serialize)與反序列化(Deserialize)J, /gavinchengshubo/article/details/83784419 百度百科.角色扮演游戲N ,/link?url=EETfbUlR1Iz7JV_PHDgJGaWsDVmokeiFVQ4jDNfsJcGcC9TD38pN2LPDkD5d_6YhFaUIMwSSAmXKhWz_QQmeRr9oqEDGUYOP1Q55l2RxKIpHfAvLWkKtaWh_T93EKpv2XpCsF6MpCZGMgTsUeLazfAog4-r5MrZKx4_gdnpdn-K10 wuzhang博客. Unity 讀取CSV與ExcelJ,/wuzhang/p/wuzhang20150511.html?utm_source=tuicool&utm_medium=referral致謝:本論文是由王大昕老師精心指導(dǎo)和督促之下設(shè)計(jì)完成,從選題到設(shè)計(jì)再到論文編寫,每一步老師都給予我很大的指導(dǎo)與支持,非常感謝老師在我大四一年的學(xué)習(xí)中對(duì)我的教誨讓我受益匪淺。在實(shí)習(xí)工作中,要感謝廈門吉比特網(wǎng)絡(luò)技術(shù)股份有限公司給與了我學(xué)習(xí)的機(jī)會(huì),這公司這段時(shí)間里,公司的前輩們對(duì)我非常的照顧,細(xì)心的指導(dǎo)我工作中的點(diǎn)滴,使我的技術(shù)有了很大的進(jìn)步,感謝他們對(duì)我的幫助。最后,感謝家人和學(xué)校對(duì)我的培養(yǎng),正是有了你們的支持使我更加努力學(xué)習(xí),為理想奮斗。附錄:游戲部分核心代碼:1、 序列化與反序列化 public abstract class SerializeData : ISerialize public SerializeData() private int m_intData = null; private ulong m_ulongData = null; private string m_strData = null; protected int intData get return m_intData; set m_intData = value; protected ulong ulongData get return m_ulongData; set m_ulongData = value; protected string strData get return m_strData; set m_strData = value; public virtual void Serialize(IWriteBuffer w) for (int i = 0; i intData.Length; i

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論