基于Unity引擎的多人合作休閑類游戲的設(shè)計與實現(xiàn)_第1頁
基于Unity引擎的多人合作休閑類游戲的設(shè)計與實現(xiàn)_第2頁
基于Unity引擎的多人合作休閑類游戲的設(shè)計與實現(xiàn)_第3頁
基于Unity引擎的多人合作休閑類游戲的設(shè)計與實現(xiàn)_第4頁
基于Unity引擎的多人合作休閑類游戲的設(shè)計與實現(xiàn)_第5頁
已閱讀5頁,還剩59頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

摘要□□本文使用了Unity3D引擎對一個多人合作休閑類游戲進行了設(shè)計和實現(xiàn),游戲使用了第三人稱俯視視角。文章中主要包含了游戲的系統(tǒng)分析和整體設(shè)計部分,各個模塊的實現(xiàn)方法,以及最終的游戲測試部分。完全實現(xiàn)了游戲的聯(lián)機功能與多人合作休閑類游戲的基本架構(gòu)。該游戲采用了角色控制狀態(tài)機與交互取值算法、移動策略和人工智能交互等關(guān)鍵技術(shù).針對如何改善游戲運行時的工作效率問題,提出了使用協(xié)同程序技術(shù)實現(xiàn)預(yù)先式同步數(shù)據(jù)讀取.將協(xié)同程序技術(shù)應(yīng)用在地圖預(yù)讀取中,使漫長的地圖讀取過程可以在運行期的“閑時”進行處理.效能分析實驗證明了該優(yōu)化方法有效降低了程序時間復(fù)雜度,有效解決了游戲運行時的實效性問題?!酢蹶P(guān)鍵詞:網(wǎng)絡(luò)游戲多人游戲休閑類游戲Unity3D引擎地圖預(yù)讀取交互取值算法協(xié)同程序技術(shù)Abstract□Inthispaper,theunity3Dengineisusedtodesignandimplementamultiplayercooperativeleisuregame.Thegameusesthethirdpersonperspective.Thispapermainlyincludesthesystemanalysisandoveralldesignofthegame,theimplementationofeachmodule,andthefinalgametestpart.Ithasfullyrealizedtheonlinefunctionofthegameandthebasicstructureofmultipersoncooperativeleisuregames.Thekeytechnologiesofthegame,suchasrolecontrolstatemachineandinteractivevaluealgorithm,mobilestrategyandartificialintelligenceinteraction,areadopted.Aimingathowtoimprovetheworkingefficiencyofthegame,thecollaborativeprogramtechnologyisproposedtorealizethepresynchronousdatareading.Thecollaborativeprogramtechnologyisappliedinthemapprereading,Thelongprocessofmapreadingcanbeprocessedinthe"idletime"oftherunningperiod.Theefficiencyanalysisexperimentprovesthattheoptimizationmethodeffectivelyreducesthecomplexityoftheprogramtimeandeffectivelysolvestheeffectivenessproblemofthegamerunningtime.□□Keywords:NetworkgameMultiplayergameLeisuregamesUnity3DengineMapprereadingInteractivevaluealgorithmCollaborativeprogrammingtechnology目錄1.緒論 11.1開發(fā)背景及意義 11.2論文架構(gòu) 12.游戲開發(fā)技術(shù) 32.1游戲引擎介紹 32.2C#介紹 32.3系統(tǒng)開發(fā)運行環(huán)境 33.游戲系統(tǒng)與技術(shù)分析 43.1游戲基本介紹 43.2系統(tǒng)與技術(shù)分析 53.3場景模型的搭建 83.4地圖以及人物說明 84.游戲設(shè)計與實現(xiàn) 104.1游戲界面設(shè)計 104.2游戲人物設(shè)計 124.3游戲功能設(shè)計 134.4游戲場景搭建 344.5游戲服務(wù)器搭建 354.6游戲的導(dǎo)出和安裝 415.游戲測試 476.結(jié)論 51參考文獻 52致謝 53緒論1.1開發(fā)背景及意義近些年來,人們的生活節(jié)奏變得飛快,工作壓力也隨之增大,為了能更好地從事工作生產(chǎn),他們迫切需要一些既輕松又能解壓的方式來緩解不斷產(chǎn)生的焦慮和躁動。這些方式有很多,有的人聽歌,有的人做運動,有的人看視頻,還有的人玩游戲等等。然而游戲的前景卻可以說是最好的,因為它完全可以包容前面三種方式,諸如主打音樂節(jié)奏的音樂游戲,鍛煉身體的VR/AR體感游戲,代入感極強的視覺小說類游戲。而這些游戲根據(jù)其較為輕松的操作強度及寬泛的適用場景,通常都?xì)w屬于休閑類游戲的范疇。另外由于移動網(wǎng)絡(luò)的發(fā)展和WIFI的大量普及,強調(diào)多人合作的移動端手游的發(fā)展使得休閑類游戲的便攜性和可玩性大大提高。當(dāng)然,移動端的多人合作休閑類手游的發(fā)展帶來大量可觀的利潤的同時,也帶動了常用的游戲開發(fā)引擎之一Unity3D的插件庫和素材庫的日益完善,開發(fā)游戲的時間成本和金錢成本也大大降低。Unity3D是隨著近些年虛擬現(xiàn)實技術(shù)和第三代互聯(lián)網(wǎng)技術(shù)的逐漸成熟而流行起來的一個游戲開發(fā)引擎,而且Unity3D的游戲開發(fā)成本低,并且周期短,市場需求大,業(yè)界對Unity3D引擎開發(fā)游戲的前景也是普遍看好。盡管已經(jīng)有不少高科技人才選擇從事Unity3D游戲行業(yè),Unity3D移動游戲市場的需求量的爆發(fā)式增長還是造成了Unity3D游戲開發(fā)人才的大量不足,因此Unity3D游戲開發(fā)的高級人才是非常受各大公司青睞的。樂觀積極的前景,源源不斷的投資以及高薪高福利且極富挑戰(zhàn)性的工作,使得Unity3D游戲開發(fā)的發(fā)展走向了一個良性循環(huán)。運用Unity3D開發(fā)的多人合作休閑類游戲,多名玩家通過網(wǎng)絡(luò)在虛擬的環(huán)境下對人物角色進行操作,以達到多人在線游戲娛樂。由于玩的時間不受限制,游戲種類多,游戲設(shè)置簡單易懂,深受玩家的喜愛,并且由于手機的普及以及人們?yōu)榱讼綍r工作和生活的乏累,玩這類游戲的玩家越來越多。多人合作休閑類游戲可以讓玩家在閑暇之余與朋友一起游玩的方式得到身心上的放松,拉近朋友之間的距離,讓人保持身心愉悅。此類游戲上手快,操作簡單,不需要長時間進行,有較高的娛樂性,符合大眾的游戲?qū)徝琅c放松身心的需求。因此,多人合作休閑類游戲是一個不錯的切入點。1.2論文架構(gòu)本課題通過C++架設(shè)服務(wù)器以實現(xiàn)多人同時在線,基于Unity3D引擎進行游戲客戶端的設(shè)計與開發(fā)。游戲主打的是多人聯(lián)機完成游戲任務(wù)(對戰(zhàn)或合作)的模式。為了改善程序運行時效率,提出了預(yù)先式讀取策略,該策略主要用于解決漫長的地圖讀取過程的問題.通過在程序運行的空閑狀態(tài)中,預(yù)先讀取接下來可能到達的地圖數(shù)據(jù),從而降低了程序的時間復(fù)雜度,以增強游戲體驗中的實效性。論文將從開發(fā)原理,游戲需求分析,游戲設(shè)計與實現(xiàn)以及游戲功能測試四個維度來完整描述該游戲。2游戲開發(fā)技術(shù)2.1游戲引擎介紹Unity3D是由UnityTechnologies開發(fā)的一個讓玩家輕松創(chuàng)建諸如三維視頻游戲、建筑可視化、實時三維動畫等類型互動內(nèi)容的多平臺的綜合型游戲開發(fā)工具,是一個全面整合的專業(yè)游戲引擎。Unity3D類似于Director,Blendergameengine,Virtools或TorqueGameBuilder等利用交互的圖型化開發(fā)環(huán)境為首要方式的軟件。其編輯器可運行在Windows、Linux(目前僅支持Ubuntu和Centos發(fā)行版)、MacOSX下,可發(fā)布游戲至Windows、Mac、Wii、iPhone、WebGL(需要HTML5)、Windowsphone8和Android平臺。也可以利用Unitywebplayer插件發(fā)布網(wǎng)頁游戲,支持Mac和Windows的網(wǎng)頁瀏覽。它的網(wǎng)頁播放器也被Mac所支持。2.2C#介紹C#是微軟公司發(fā)布的一種面向?qū)ο蟮?、運行于.NETFramework和.NETCore(完全開源,跨平臺)之上的高級程序設(shè)計語言。并定于在微軟職業(yè)開發(fā)者論壇(PDC)上登臺亮相。C#是微軟公司研究員AndersHejlsberg的最新成果。C#看起來與Java有著驚人的相似;它包括了諸如單一繼承、接口、與Java幾乎同樣的語法和編譯成中間代碼再運行的過程。但是C#與Java有著明顯的不同,它借鑒了Delphi的一個特點,與COM(組件對象模型)是直接集成的,而且它是微軟公司.NETwindows網(wǎng)絡(luò)框架的主角。2.3系統(tǒng)開發(fā)運行環(huán)境服務(wù)器:阿里云學(xué)生服務(wù)器(1核CPU、2GB內(nèi)存、CentOS7.364位、1Mbps帶寬)操作系統(tǒng):Windows10Professionalx641909CPU:i5-6300HQ顯卡:GTX960M固態(tài)硬盤:三星PM981PCIENVME(256GB)機械硬盤:HGST7K10001TB7200轉(zhuǎn)32MBSATA3內(nèi)存:DDR416GB2133mhz顯示器分辨率:1920*1080所需軟件:Unity3D2018.4.13c1(64-bit)、VisualStudio2017Personal、MySQL5.7.28、NavicatPremium12、WinSCP、PuTTY(64-bit)、Notepad++3游戲系統(tǒng)與技術(shù)分析3.1游戲基本介紹游戲定義為多人在線RPG競技休閑類手游。游戲分為劇情闖關(guān)模式(可單機或多人合作)多人競技模式。劇情闖關(guān)模式:玩家通過完成設(shè)定好的任務(wù)條件,通關(guān)關(guān)卡,獲得經(jīng)驗金幣道具等,并開啟下一個關(guān)卡。多人競技模式:目前制定2個玩家互相作戰(zhàn),游戲中每15秒地圖上將會出現(xiàn)道具,互相攻擊到只剩下一個人即可完成任務(wù),獲得經(jīng)驗和金幣。劇情闖關(guān)模式游戲連接采用簡單交互(弱連接)的方式。多人競技模式游戲連接采用幀同步的方式。多人競技模式連接方式采用TCP連接。關(guān)于劇情闖關(guān)模式主線的梗概:故事發(fā)生很久很久以前在一個與世隔絕的小島,島上險象環(huán)生,有各種強力怪物出沒,島上還有以擁有制作泡泡炸彈聞名的部落,名叫泡彈聯(lián)萌。怪物們懾于強大的泡彈威力,雙方長期以來處于互不侵犯的友好局面。然而這個部落隨著時代的推移,一些重要的技藝漸漸失傳,泡彈的威力也是與日俱減。到了主角這一代,部落對愈發(fā)強大且蠢蠢欲動的怪物顯得力不從心,部落存亡出現(xiàn)前所未有的危機。一天,部落里天賦異稟的主角外出使用自制的泡彈挖礦時,意外炸開了一個藏有藏寶圖的隱藏山洞。主角將其交由族長查驗后,才發(fā)現(xiàn)這是一份藏有失傳多年的鎮(zhèn)族之寶——泡泡龍的藏寶圖。在得到族長的授意后,勇敢機敏的主角便迫不及待地叫上同族鄉(xiāng)親組織一場聲勢浩大的尋寶探險,于是在這場分頭行動的尋寶探險中,到底誰能最先在怪物的重重包圍中突圍,順利拿回失傳多年的鎮(zhèn)族之寶,重振泡彈聯(lián)萌的輝煌呢?圖1劇情3.2系統(tǒng)與技術(shù)分析本文提出的游戲系統(tǒng)結(jié)構(gòu)如圖所示,服務(wù)端使用的是阿里云服務(wù)器,通過C++腳本在Unity3D客戶端和云服務(wù)器MySQL中架橋,需要速度的地方均用純C編寫,部分地圖/日志處理工具用Perl語言編寫,客戶端使用Unity_C#編寫。最早使用客戶端服務(wù)端狀態(tài)同步的方式(由服務(wù)端虛擬構(gòu)建游戲場景防作弊),后改用幀同步方式優(yōu)化體驗。地圖早期編寫地圖編輯器,后使用Tilemap來提升效率,將生成的文件直接讀取tmx文件內(nèi)數(shù)字的方式來生成地圖。由于編寫期間有以上大幅度改動,服務(wù)端大量代碼冗余,冗余部分已經(jīng)切到app/bin/backup中保存,為以后寫代碼供提取和參考。圖2系統(tǒng)結(jié)構(gòu)游戲功能點大致分配如下:1、賬號服務(wù)功能游戲提供最基本的賬號注冊和賬號登錄功能,不同的客戶端玩家可以通過服務(wù)器發(fā)送或獲取玩家基礎(chǔ)信息2、音樂音效功能游戲開始音樂就自動播放,游戲暫停與結(jié)束時音樂相應(yīng)消除。游戲音效隨著游戲進程來觸發(fā)相應(yīng)播放停止邏輯。3、我的物品功能游戲提供道具欄,人物基礎(chǔ)信息的查詢,玩家可查詢自己所擁有的道具及人物等級等信息4、退出/返回功能游戲可在左上角或右上角點擊按鈕觸發(fā)退出游戲或返回上一頁的功能5、單人游戲難度選擇功能單人游戲難度選擇界面設(shè)置在程序運行開始時,一共有三種難度供玩家選擇,每選一級難度,都會相應(yīng)地顯示出代表該難度的圖片。開始時不設(shè)置任何默認(rèn)的難度6、單人游戲選關(guān)功能單人游戲開啟選關(guān)功能,最初只能選擇第一關(guān),其余關(guān)卡為鎖定狀態(tài),玩家只有達成指定條件才能解鎖下一關(guān)7、單人游戲計時功能單人游戲需要達成指定條件才能解鎖下一關(guān),其中時間限制是重要一環(huán),因此需要時刻提醒玩家剩余時間8、游戲?qū)傩詸谟螒蛑袝欢〞r不定位刷新各種強化資源,如增強火焰強度,擴大火焰范圍,提高玩家速度,增多炸彈個數(shù),恢復(fù)當(dāng)前生命等,因此需要屬性面板來統(tǒng)計當(dāng)前角色能力9、游戲強化資源刷新和獲取游戲中會不定時不定位刷新各種強化資源,如增強火焰強度,擴大火焰范圍,提高玩家速度,增多炸彈個數(shù),恢復(fù)當(dāng)前生命等,因此需要對資源刷新位置,刷新頻率等進行設(shè)置,另外我們獲取強化資源時,還需要銷毀該資源,并把屬性加成效果變更到屬性欄中10、游戲加載地圖游戲需要將制作好的地圖進行讀取和加載進游戲中,包括但不限于地圖層級,地圖定位,地圖塊切割,地圖塊選取等11、玩家控制器玩家控制器用于在游戲中操縱角色進行選擇、移動、投放炸彈、拾取道具等操作,這是游戲的核心功能之一12、怪物生成及走路AI怪物生成用于在游戲場景內(nèi)部定量不定點生成怪物實例,而怪物走路AI用于單人游戲模式,分為直行路,二岔路和三岔路三種情況。此處為游戲設(shè)計的重點,越高級的AI越智能13、碰撞邏輯碰撞邏輯基于玩家與物體,玩家與玩家之間的碰撞交互上,這是游戲的核心功能之一。如觸碰怪物會掉血,觸碰磚塊會無法前進,炸彈不可破壞墻體,炸彈可破壞脆弱的箱子,炸彈可傷害怪物,炸彈可傷害玩家等等14、對局結(jié)算每完成一次單機/多人模式游戲,均需要更新玩家的一些數(shù)據(jù),如對局獎勵金幣,對局經(jīng)驗值,對局所獲道具,單機解鎖關(guān)卡條件判斷等15、多人游戲創(chuàng)建房間多人游戲需要創(chuàng)建房間,創(chuàng)建房間包括房間名,房間人數(shù),房間地圖,房間模式等等16、多人游戲加入房間多人游戲需要加入房間,加入房間在玩家選擇合適條件房間的基礎(chǔ)上進行玩家與玩家間的數(shù)據(jù)連接17、網(wǎng)絡(luò)服務(wù)網(wǎng)絡(luò)服務(wù)解決的是玩家數(shù)據(jù)的上傳和獲取的問題,這些數(shù)據(jù)主要有玩家注冊/登錄,玩家道具欄,玩家基礎(chǔ)信息,玩家屬性欄,實時刷新的玩家位置,玩家創(chuàng)建房間,玩家加入房間,玩家聯(lián)機對戰(zhàn),玩家對局結(jié)算等3.3場景模型的搭建Unity3D引擎是搭建虛擬漫游世界的一個平臺,此平臺可以完成對場景元素的編輯、匯總和整合,但對于場景模型、貼圖、動畫等元素的基礎(chǔ)和細(xì)節(jié)卻無能為力,同時虛擬漫游時也就存在一些兼容問題、比如模型不符合規(guī)范不可用、加載場景需要過多時間、場景變換滯后、出現(xiàn)閃爍現(xiàn)象等等,因此必須借助于三維軟件。場景模型的構(gòu)建技術(shù),可以歸為以下幾種情況:(一)基于模型軟件生成技術(shù)目前市場上有很多建模軟件,例如3DMax、Maya、C4D等等,在虛擬場景漫游中屬3DMax最為常用,該軟件提供了多種建模技術(shù)與建模指令,可以展現(xiàn)復(fù)雜精細(xì)的模型。(二)基于圖像的構(gòu)建技術(shù)該技術(shù)核心就是運用圖像來代替幾何模型。通過圖像的圖形繪制技術(shù)預(yù)置一些圖像來生成不同視點處的場景畫面。這些圖像的來源既可以是軟件合成,也可以是航拍等實際拍攝的畫面。對資源要求不高可以在個人PC,與拍攝設(shè)備的基礎(chǔ)上實現(xiàn),真實感較強。(三)基于三維幾何圖形的技術(shù)利用編程語言運用三維圖形繪制的函數(shù),通過這些函數(shù)可以很方便的實現(xiàn)三維圖形的繪制,包含倆個部分,分別是圖形建模與實時的圖形渲染。本游戲使用的素材資源大部分來自于網(wǎng)上共享資源,一部分采用建模軟件,制圖軟件等工具制作。3.4地圖以及人物說明本游戲地圖早期編寫地圖編輯器,后使用Tilemap來提升效率,將生成的文件直接讀取tmx文件內(nèi)數(shù)字的方式來生成地圖。單人/多人模式地圖均為模板,可擴展,擴展一個關(guān)卡僅需幾分鐘,地圖繪畫簡單,使用Tilemap直接繪畫。生成地圖分為以下幾個步驟:1.用Tilemap畫地圖,放到指定文件夾中2.去文件夾中拷貝level_1.scene->level_2.scene3.在build中加載level_2.scene4.設(shè)置map中的地圖屬性,注意總寬高設(shè)置各+15.放置物品怪物人物,注意高度+16.更改音樂7.測試運行關(guān)于人物,目前游戲開放了兩個角色小藍人和小紅人,后期還會在商城上架綠胖墩和紅胖墩等高級角色。小藍人和小紅人各項屬性一致。4游戲設(shè)計與實現(xiàn)4.1游戲界面設(shè)計游戲主要界面如下:Scene1圖3登錄/注冊界面,游戲開始時的界面Scene2圖4場景選擇界面choose_persional_game圖5選擇關(guān)卡界面。room_list圖6房間列表界面in_room圖7房間內(nèi)部界面4.2游戲人物設(shè)計游戲人物取自于網(wǎng)上搜集的素材,目前設(shè)計了兩個角色小藍人和小紅人,怪物分為水果怪和鱷魚怪兩種,關(guān)于實際效果如下圖所示,怪物屬性主要有怪物名稱,動畫名稱,生命值,移動速度,傷害,經(jīng)驗和金幣。圖8小藍人圖9小紅人圖10怪物1圖11怪物24.3游戲功能設(shè)計1、賬號服務(wù)功能登錄頁面主要用到了五個腳本:登錄腳本,注冊腳本,彈窗腳本,啟動發(fā)送——接收線程腳本和全局變量表腳本。彈窗腳本負(fù)責(zé)在需要處理請求和接收通知的時候把窗口的位置挪到原點(0,0,0),即主相機中心點上,而不需要的時候?qū)⒋翱诜胖玫街飨鄼C不可見的地方。全局變量表腳本需要注意全局變量的數(shù)量,尤其是地圖數(shù)據(jù),子彈數(shù)據(jù),一旦放到全局變量里,手機內(nèi)存會爆滿。啟動發(fā)送——接收線程腳本最為重要,會在下面說明。以首頁登錄場景下的一個提示框為例,這個提示框掛載了Pthread腳本進行網(wǎng)絡(luò)連接收發(fā),該腳本包含一個收線程和發(fā)線程。主線程負(fù)責(zé)處理點擊按鈕,游戲暫停,播放動畫的工作,而剩下這兩個線程組成這個網(wǎng)絡(luò)游戲通信的布局。目前市面上的網(wǎng)絡(luò)游戲基本也是采用兩個線程來處理信息,如果我們不使用兩個線程,收這個地方會一直等待,也就無法完成正常登錄了。圖12網(wǎng)絡(luò)連接網(wǎng)絡(luò)工程里稱呼實現(xiàn)與服務(wù)端的應(yīng)用程序進行通信的網(wǎng)絡(luò)接口為socket(套接字),socket又分為TCP和UDP,我的游戲采用的是TCP通信。我們需要先在客戶端與服務(wù)端進行一個連接,成功建立連接之后,客戶端給服務(wù)端發(fā)送信息并等待服務(wù)器反饋。比如我登錄一個賬號,我需要把賬號密碼發(fā)過去,再等服務(wù)端返回賬號是否存在的信息,所以在服務(wù)器返回信息之前,我們需要等待,這個等待的過程就是線程的阻塞。圖13TCP連接以首頁登錄場景下的登錄操作為例,建立連接,發(fā)送信息和接收信息的部分代碼如下,玩家在輸入賬號密碼并點擊登錄按鈕,主線程的登錄腳本開始工作。我們在全局變量表腳本中定義好當(dāng)前連接狀態(tài),發(fā)送狀態(tài),服務(wù)端IP,服務(wù)端端口,要發(fā)送的網(wǎng)絡(luò)報文,網(wǎng)絡(luò)延遲,網(wǎng)絡(luò)套接字對象等變量后,主線程創(chuàng)建預(yù)先定義好的發(fā)線程和收線程,收線程和發(fā)線程屬于異步處理,可以同時進行。發(fā)線程將要發(fā)送的登錄信息報文進行utf-8的二進制編碼打包,然后發(fā)送到服務(wù)端并開始計算網(wǎng)絡(luò)延遲。服務(wù)端接收報文后將結(jié)果發(fā)送到收線程,收線程先設(shè)置socket連接為Blocking,即阻塞狀態(tài),也就是說當(dāng)占用資源的線程沒有釋放資源,那么阻塞在這個臨界區(qū)的線程將不能工作。然后收線程清空發(fā)送報文,停止網(wǎng)絡(luò)延遲計算,報文解碼,根據(jù)報文信息創(chuàng)建玩家對象的實例,玩家登錄操作完成。圖14開啟線程圖15發(fā)送消息圖16接收消息圖17接收消息(續(xù))圖18接收消息(續(xù))2、音樂音效功能游戲的背景音樂只需要在加載場景的時候進行播放即可,我主要提及一下音效的插入點:炸彈爆炸,人物受傷,撿到道具,游戲失敗,游戲勝利。以游戲勝利為例,先要獲取游戲勝利的音效對象,然后再獲取這個對象下面的音頻組件,在觸發(fā)游戲勝利條件后,調(diào)用該組件的播放方法,即可完成一次游戲勝利音效的播放。下面是相關(guān)代碼:圖19音樂音效初始化圖20音樂音效邏輯3、我的物品功能游戲提供道具欄,人物基礎(chǔ)信息的查詢,腳本部分我們還需要先向服務(wù)端發(fā)一條查詢的申請報文,服務(wù)端再從數(shù)據(jù)庫中讀取我們想要的數(shù)據(jù),打包好后發(fā)回數(shù)據(jù)到客戶端,客戶端的玩家對象實例進行接收并把這些數(shù)據(jù)按照標(biāo)準(zhǔn)的格式填充到場景預(yù)設(shè)的位置上。關(guān)于界面部分,我希望實現(xiàn)面板會緩慢平移以及點擊后放大縮小的動畫效果,還需要在腳本上編寫縮放和定點移動的代碼。下面是相關(guān)代碼:圖21動畫效果圖22動畫效果(續(xù))圖23人物屬性獲取和輸出4、退出/返回功能關(guān)于退出功能,游戲應(yīng)考慮兩種退出游戲的情況的解決方案:①游戲在Unity3D編輯器上運行,即游戲在電腦端的開發(fā)測試平臺上運行②游戲在安卓真機或安卓虛擬機上運行無論屬于哪種情況,我們都應(yīng)該主動關(guān)閉游戲服務(wù),銷毀正在運行中的線程,清理玩家占用的內(nèi)存和玩家的信息,并與服務(wù)端斷開連接。只有這樣,我們才能保證服務(wù)器能夠長久高效地運行。圖24客戶端退出游戲圖25服務(wù)端退出游戲關(guān)于返回功能,我將其統(tǒng)一編寫在一個腳本里,設(shè)置一個場景名變量。我們只需要將這個腳本掛載到你需要的按鈕上,在按鈕的組件面板上修改變量值為你所需要跳轉(zhuǎn)的場景名即可成功跳轉(zhuǎn),這樣節(jié)省了很多編寫重復(fù)代碼的時間,提高了代碼的復(fù)用性。圖26返回場景圖27返回場景面板5、單人游戲難度選擇功能我們在選擇完關(guān)卡后,會彈出一個難度選擇框,玩家選擇任意一個難度,都會更新全局變量表中的難度系數(shù),在地圖腳本里,我們可以通過這個難度系數(shù)改變怪物的當(dāng)前生命,總生命,速度,傷害,經(jīng)驗和金幣。難度越高,獲得的獎勵越豐厚,相對的容錯率也會大大降低,這樣的設(shè)計使得游戲富有挑戰(zhàn)性和區(qū)分度,滿足了保守型和激進型兩種風(fēng)格玩家人群的需求。圖28難度選擇6、單人游戲選關(guān)功能我們在進入選擇關(guān)卡的場景后,我們會看到我們目前能夠進入的關(guān)卡和尚未解鎖的關(guān)卡。尚未解鎖的關(guān)卡是由于我們沒有滿足前面關(guān)卡的解鎖條件而無法進入,這時候我們只需要完成前一關(guān)的通關(guān)條件即可解鎖下一關(guān)了。這種設(shè)計也是為了激發(fā)玩家的挑戰(zhàn)欲和探險精神。在代碼中,我們會從服務(wù)器中查詢我們目前的通關(guān)關(guān)卡數(shù),用數(shù)組將它們保存起來再輸出到場景上以實現(xiàn)頁面的已解鎖和未解鎖圖標(biāo)更替效果。圖29關(guān)卡選擇7、單人游戲計時功能時間限制通常因為它帶來的危機感和緊迫感能讓玩家有強烈的代入感,這個設(shè)計在眾多游戲中也屢見不鮮。我們希望時間是每秒都會動態(tài)更新,這時候我們會將時間計算的代碼寫在Update()方法里,通過總秒數(shù)這個變量來求出剩余分鐘數(shù)和秒鐘數(shù),并把它顯示在當(dāng)前關(guān)卡頂部屬性欄的顯示時間的text組件中,如果時間到了,我們還需要觸發(fā)游戲失敗的邏輯。圖30計時8、游戲?qū)傩詸谑紫龋诩虞d關(guān)卡前,我們應(yīng)該從服務(wù)器中獲取我的角色等級以及相應(yīng)等級角色擁有的屬性,比如說炸彈長度,炸彈傷害,移動速度和總生命值,并把它們顯示在關(guān)卡頂部屬性欄的text組件中。游戲?qū)傩詸诔俗铋_始的初始化外,我們還需要在Update()方法里時時刻刻更新它的數(shù)值,因為我們經(jīng)常會在場景中撿到道具,而這些道具會直接影響我的角色屬性。圖31更新屬性9、游戲強化資源刷新和獲取游戲強化資源應(yīng)該在關(guān)卡初始化的時候進行生成,而且游戲強化資源都必須放在箱子里,因此需要獲取包含所有箱子的數(shù)組集合,然后檢查當(dāng)前箱子是否已經(jīng)放入道具,如果已經(jīng)有道具在里面,應(yīng)該重新選擇隨機箱子,直到選擇到合適的箱子,就把道具放進去。當(dāng)我們撿到道具后,某項屬性得到增強,并將這個變化體現(xiàn)在屬性欄和實際操作中。圖32強化資源生效圖33強化資源生效(續(xù))圖34強化資源生效(續(xù))10、游戲加載地圖游戲加載地圖首先需要找到地圖資源素材,如下圖右下角,然后使用TileMap工具新建一個68*64圖塊規(guī)格的地圖(和Unity設(shè)置同步),長寬自擬,一般都不建議超過35,地圖過大會在游戲運行時影響游戲加載效率,下圖左側(cè)為參考面板,中間是地圖,右上角為地圖層,我的游戲只需要兩層即可,一層地面,一層不可破壞地磚。可破壞地磚,玩家角色,怪物,道具等都可以在腳本代碼中動態(tài)生成,因此不計入地圖數(shù)據(jù)。當(dāng)設(shè)計好你想要的地圖后,將其導(dǎo)出到Unity的StreamingAssets文件夾下,其后綴名為.tmx。需要注意的是,一定要導(dǎo)出到這個文件夾才能生效,因為在Unity工程中,放在StreamingAssets文件夾中的任何資源都將被原樣復(fù)制到目標(biāo)設(shè)備上的一個特定文件夾中。在任何平臺中總可以統(tǒng)一使用Application.streamingAssetsPath屬性來獲得這一文件夾路徑。這個文件夾是跟Application.dataPath相關(guān)聯(lián)的。在desktopcomputer(MacOSorWindows)中該文件夾為為:path=Application.dataPath+"/StreamingAssets";在iOS中,該文件夾為:path=Application.dataPath+"/Raw";在Android中,該文件夾為:path="jar:file://"+Application.dataPath+"!/assets/";雖然我們可以用上述三個文件夾,在各個平臺中獲取StreamingAssets的位置,但是最好還是統(tǒng)一使用Application.streamingAssetsPath.圖35地圖設(shè)計導(dǎo)出地圖文件后,我們還需要在代碼中加載它才可以在游戲運行時看到這個地圖,此處只截取展示公共變量和鋪第一層地面的代碼。鋪第一層地面主要是設(shè)置一個預(yù)制體圖塊,樣式隨意。我們根據(jù)StreamingAssets文件夾下的.tmx文件的圖塊位置和圖塊樣式更換預(yù)制體圖塊,并將它批量復(fù)制并命名后刷新在畫布上,然后再更換新的預(yù)制體圖塊,再復(fù)制命名刷新,重復(fù)多次上述操作即可把整張地圖的第一層地面完整刷新到畫布中。圖36地圖載入圖37地圖載入(續(xù))圖38地圖載入(續(xù))圖39地圖載入(續(xù))11、玩家控制器我的游戲采用玩家控制器分為兩種,一種是鍵盤+鼠標(biāo)操控,一種是虛擬按鍵游戲板操控,前者用于Unity編輯器的開發(fā)和調(diào)試,操作方式為上下左右方向鍵控制移動,鼠標(biāo)左鍵放置炸彈,后者用于安卓真機測試,虛擬搖桿控制方向,虛擬按鍵放置炸彈。由于主要操作方式以手游為主,此處只展示虛擬按鍵游戲板操控的代碼。圖40手機按鍵觸發(fā)圖41手機按鍵觸發(fā)(續(xù))圖42手機按鍵觸發(fā)(續(xù))圖43手機按鍵觸發(fā)(續(xù))圖44手機按鍵觸發(fā)(續(xù))12、怪物生成及AI首先我們應(yīng)該先提前準(zhǔn)備好怪物預(yù)制體,在怪物腳本中編寫取得怪物在內(nèi)存中的編號,更新怪物名稱,取得怪物動畫ani,怪物血條生成的代碼,在地圖腳本中寫入當(dāng)前地圖所需的怪物數(shù)量,這樣我們就能在游戲區(qū)域內(nèi)隨機位置動態(tài)生成固定數(shù)量的怪物實例。這些怪物在碰撞地磚或炸彈的時候,要判斷有哪些點可以走。有一個分叉口,就往那個分叉口走,狀態(tài)不變。碰到以后有2條路或3條路,方向隨機。圖45怪物生成圖46怪物AI圖47怪物AI(續(xù))圖48怪物AI(續(xù))13、碰撞邏輯當(dāng)怪物碰撞到玩家,玩家應(yīng)該掉血,掉血量取決于怪物的傷害。當(dāng)怪物或玩家碰撞到炸彈,則需要根據(jù)炸彈的傷害,怪物或玩家失去對應(yīng)的血量。當(dāng)炸彈炸到不可破壞墻壁,即第二地圖層數(shù)組中的元素,對應(yīng)方向的炸彈范圍應(yīng)該被阻斷。人物和怪物碰到不可破壞墻壁時也應(yīng)該阻斷其行動。炸彈可以破壞脆弱的墻體,即脆弱墻體數(shù)組中的元素。以上方向為例,相應(yīng)代碼如下:圖49怪物碰撞圖50火焰生成及碰撞圖51火焰生成及碰撞(續(xù))圖52火焰生成及碰撞(續(xù))圖53人物碰撞圖54人物碰撞(續(xù))14、對局結(jié)算判斷游戲勝利需要驗證游戲狀態(tài)是否為結(jié)束且勝利變量為0,放下統(tǒng)計板,顯示殺敵數(shù),獲取經(jīng)驗值,獲取金幣,停止播放背景音樂,播放勝利音效。隨后玩家點擊確認(rèn)就開始上傳獲取經(jīng)驗值和金幣的更新報文到服務(wù)器,視模式切換場景到不同界面。判斷游戲失敗需要驗證玩家生命值是否為0且勝利變量為0,放下統(tǒng)計板,隨后玩家點擊確認(rèn)就視模式切換場景到不同界面圖55對局結(jié)算圖56對局結(jié)算(續(xù))4.4游戲場景搭建level_1圖57第一關(guān)圖58第N關(guān)(Map公有屬性修改預(yù)覽)后面所有關(guān)卡均復(fù)制第一關(guān),在map中修改屬性即可改變地圖和難度Online_game圖59網(wǎng)絡(luò)游戲場景4.5游戲服務(wù)器搭建涉及到較多客戶端——服務(wù)器交互的游戲功能設(shè)計單獨寫在這個游戲服務(wù)器搭建的部分。1、多人游戲創(chuàng)建房間創(chuàng)建房間需要判斷是否處在多人在線狀態(tài),然后再向服務(wù)端發(fā)送創(chuàng)建房間的報文,服務(wù)端創(chuàng)建好房間后,告知客戶端房間創(chuàng)建完畢,準(zhǔn)許進入房間場景。圖60創(chuàng)建房間圖61創(chuàng)建房間(續(xù))2、多人游戲加入房間玩家在房間列表場景中,場景應(yīng)該滿足以下功能:①房間分頁顯示;②房間每秒刷新;③按標(biāo)準(zhǔn)格式輸出房間序號,標(biāo)題等信息。加入房間需要判斷是否處在多人在線狀態(tài),接著更改玩家屬性為非房主,統(tǒng)一玩家的房間號,然后再向服務(wù)端發(fā)送加入房間的報文,服務(wù)端連接房間成功后,告知客戶端房間加入完畢,準(zhǔn)許進入房間場景。圖62加入房間圖63加入房間(續(xù))3、網(wǎng)絡(luò)服務(wù)如下圖所示,我編寫了編譯腳本make.pl,看后綴名可以知道這是用perl語言編寫的,編寫它的作用在于幫助我們編譯C++文件為動態(tài)鏈接庫文件,再把它們批量復(fù)制并轉(zhuǎn)發(fā),最后將所有的引用庫和我們的主程序my_server.cpp進行綁定,以生成最終的可執(zhí)行文件my_server。另外,這些.h文件的引用順序也在圖中有所標(biāo)明。圖64編譯腳本主程序腳本my_server.cpp的部分功能如下圖所示,我們在這里設(shè)置承接函數(shù),用于接收并處理玩家從客戶端發(fā)出的請求,成功接收正確的報文格式后,我們將其進行拆分處理,取出相應(yīng)的功能編號。用下圖的例子,如果它為G,也就是此時玩家正處于多人模式,玩家需要定時將自己的位置發(fā)送到服務(wù)端,對面的玩家也定時從服務(wù)端獲取玩家的位置,并把它顯示在對面的玩家的游戲畫面中,這樣我們就可以實現(xiàn)玩家間的交互了。圖65報文檢測圖66報文轉(zhuǎn)換關(guān)于服務(wù)器的初始化部分,我們在服務(wù)器編寫了game.conf的屬性文件,里面寫入了服務(wù)器端口號,數(shù)據(jù)庫ip,數(shù)據(jù)庫用戶名,數(shù)據(jù)庫密碼,數(shù)據(jù)庫名稱。然后,我們就可以在主程序my_server中對它進行讀取,并進行數(shù)據(jù)庫初始化操作,最后啟用預(yù)設(shè)的端口號,我們玩家就可以和服務(wù)端進行互動了。圖67數(shù)據(jù)庫屬性圖68數(shù)據(jù)庫初始化最后,還有服務(wù)器的數(shù)據(jù)保存部分。以單機模式玩家勝利結(jié)算金幣和經(jīng)驗為例,玩家在客戶端上傳包含游戲勝利和關(guān)卡信息的報文給服務(wù)端,比如說操作序號為5,關(guān)卡號為1,獲得300經(jīng)驗,獲得30金幣,服務(wù)端進行接收后使用win_persional()函數(shù)具體處理數(shù)據(jù)上傳問題(先檢查數(shù)據(jù)來源的合法性,再更新人物、房間等事物的狀態(tài)),然后在這個函數(shù)里調(diào)用update_mysql()函數(shù)連接數(shù)據(jù)庫,并把更新信息寫入數(shù)據(jù)庫中。具體邏輯如下圖所示:圖69客戶端發(fā)送報文圖70服務(wù)端接收報文圖71服務(wù)端處理報文圖72服務(wù)端連接數(shù)據(jù)庫圖73可視化數(shù)據(jù)庫4.6游戲的導(dǎo)出和安裝①游戲客戶端文件夾結(jié)構(gòu)C#所有代碼均在這個文件夾中Resources圖片和聲音素材資源都在這個文件夾中Scenes所有的場景均在這個文件夾中StreamingAssets專門用來存儲tmx地圖文件②游戲服務(wù)端文件夾結(jié)構(gòu)App可運行服務(wù)端源碼Bin可運行的服務(wù)端程序|-My_server.cpp主程序源碼|-Test.cpp測試功能專用Include頭文件位置|-Class.h類/結(jié)構(gòu)體等|-Func.h服務(wù)端直接調(diào)用函數(shù)|-global.h全局變量|-Mysql_tools.h數(shù)據(jù)庫快速連接及增刪改查函數(shù)|-Split.h使用到的工具函數(shù)Lib重要函數(shù)實現(xiàn)位置|-Class.cpp類的初始化、析構(gòu)等|-Func.cpp服務(wù)端直接調(diào)用函數(shù)源碼|-Global.cpp操作全局變量用到的一些函數(shù)|-mysql_tools.cpp數(shù)據(jù)庫函數(shù)源碼|-split.cpp工具源碼Log日志存儲位置圖74服務(wù)器目錄結(jié)構(gòu)③游戲?qū)С稣f明客戶端導(dǎo)出需要將所需場景全部添加進導(dǎo)出設(shè)置中,其次還需要在平臺選項中勾選Android平臺。另外為了防止導(dǎo)出不出錯以及減少對安卓SDK的依賴,在用戶設(shè)置中,需要使用內(nèi)部系統(tǒng)構(gòu)建,設(shè)置橫屏,設(shè)置長時間喚醒屏幕,設(shè)置包名稱,設(shè)置游戲名稱。設(shè)置完成后即可導(dǎo)出客戶端。圖75客戶端導(dǎo)出面板服務(wù)端導(dǎo)出需要在Linux系統(tǒng)的服務(wù)器上(我用的是CentOS7.364位)進入我的項目目錄,然后把我需要打包的文件夾輸入到命令行中,我使用的命令行指令為tar–zcvfmy_server.tar.gzappbinetcincludeliblog,得到的是my_server.tar.gz的壓縮文件,我們可以使用WinSCP來把它下載到本地系統(tǒng)。另外我們還要導(dǎo)出數(shù)據(jù)庫的腳本文件,我使用的是本地系統(tǒng)的NavicatPremium12來連接服務(wù)器上的數(shù)據(jù)庫,然后就可以把數(shù)據(jù)庫的結(jié)構(gòu)和數(shù)據(jù)通過轉(zhuǎn)儲為.sql的格式來導(dǎo)出到本地系統(tǒng)了。④游戲安裝說明(1)客戶端代碼安裝流程系統(tǒng)要求:windows系統(tǒng)。直接解壓到任意目錄,然后使用Unity3D加載工程,用vs2017打開代碼工程,untiy可在官網(wǎng)上下載最新版使用。想要在電腦上直接測試運行,務(wù)必運行Scenes文件夾下的scene1文件,不直接從這個入口登錄,很多屬性沒有初始化會導(dǎo)致工程卡死崩潰。(2)服務(wù)端建立流程系統(tǒng)要求:1.linux系統(tǒng)的服務(wù)器2.有5.6.41版本的mysql3.支持g++及以下庫gccg++mysql#include<stdlib.h>#include<stdarg.h>#include<dirent.h>#include<sstream>#include<map>#include<time.h>#include<unistd.h>#include<sys/types.h>#include<sys/socket.h>#include<arpa/inet.h>#include<pthread.h>#include"mysql/mysql.h"操作:將my_server.tar.gz和boom.sql放在linux系統(tǒng)任意目錄下注意:服務(wù)端操作時,編碼為UTF-81.解壓 tar-zxvfmy_server.tar.gz2.設(shè)置服務(wù)端端口和數(shù)據(jù)庫賬號密碼 用vi編輯器打開etc/game.conf //修改端口 #definePORT9997 //修改數(shù)據(jù)庫 #defineMYSQL_IP"" #defineMYSQL_ID"abc" #defineMYSQL_PASSWD"123456" #defineMYSQL_DATABASE"boom"如下:PORT=9998MYSQL_IP=MYSQL_ID=abcMYSQL_PASSWD=123456MYSQL_DATABASE=boom保存退出。(3)mysql數(shù)據(jù)庫的導(dǎo)入請先保證你安裝了mysql并能用root正常登錄mysql。 數(shù)據(jù)庫版本5.1.41 如果你的數(shù)據(jù)庫版本不是原來版本,請自行打開boom.sql文件并逐行添加內(nèi)容。 1.先用root登錄 mysql-uroot-p 2.刪除默認(rèn)為空的用戶 deletefrommysql.userwhereUser=''; flushprivileges; exit; 3.再用root登錄 mysql-uroot-p 2.創(chuàng)建用戶abc密碼123456 insertintomysql.user(Host,User,Password)values("%","abc",password("123456")); 3.創(chuàng)建游戲數(shù)據(jù)庫 createdatabaseboom; 4.將游戲數(shù)據(jù)庫操作權(quán)利賦予abc grantallprivilegeson`boom`.*to'abc'@'%'identifiedby'123456'; 5.刷新 flushprivileges; 6.退出root exit; 7.導(dǎo)入文件(當(dāng)你的版本正好是5.1.41) mysqldump-uabc-h-pboom<boom.sql 如果不是這個版本,那么請打開《mysql手動執(zhí)行內(nèi)容.txt》 用abc賬戶登錄,執(zhí)行useboom;后,復(fù)制粘貼其中內(nèi)容到數(shù)據(jù)庫中。 8.檢查數(shù)據(jù)庫是否導(dǎo)入成功 用abc登錄后,useboom; showtables; 能看到新添加的幾張表,而不是empty,即為成功。(4)啟動服務(wù)端cdbin/ ./my_server圖76服務(wù)器連接失敗這種是失敗。請去調(diào)整etc/game.conf的內(nèi)容。(5)客戶端連接用安卓手機安裝apk程序或去windows中打開Unity3D工程代碼調(diào)試運行輸入服務(wù)器IP地址和你設(shè)定的端口,保證兩邊通暢,即可運行。5游戲測試我使用的游戲測試工具為VisualStudio2017和AirtestV1.2.3。VisualStudio用于手工白盒測試,直接深入代碼底層,比較符合開發(fā)人員的思維習(xí)慣,適用于單元測試和集成測試。VisualStudio是一個基本完整的開發(fā)工具集,它包括了整個軟件生命周期中所需要的大部分工具,如UML工具、代碼管控工具、集成開發(fā)環(huán)境(IDE)等等。所寫的目標(biāo)代碼適用于微軟支持的所有平臺。VisualStudio的調(diào)試方法如下:1、啟動調(diào)試。可以通過VS的調(diào)試(Debug)菜單啟動調(diào)試。點擊調(diào)試菜單下的“啟動調(diào)試”或者按F5鍵啟動。如果你已經(jīng)在代碼中加入了斷點,那么執(zhí)行會自動開始。注:退出調(diào)試快捷鍵shift+F5。圖77啟動調(diào)試2、斷點(Breakpoints)。斷點用于通知調(diào)試器何時何處暫停程序的執(zhí)行。通過點擊左邊欄或者按F9鍵在當(dāng)前行添加斷點。在加斷點之前,你需要知道你的代碼將會出現(xiàn)什么錯誤,在什么地方停止執(zhí)行。當(dāng)調(diào)試器執(zhí)行到斷點處時,你可以使用其他的調(diào)試工具核對代碼何處出現(xiàn)錯誤。圖78斷點3、逐語句(StepInto)調(diào)試器執(zhí)行到斷點后,你可能需要逐條地執(zhí)行代碼?!癝tepInto”[F11]命令用于逐條地執(zhí)行代碼。這將執(zhí)行當(dāng)前高亮的行,然后暫停。如果在一條方法調(diào)用語句高亮?xí)r按F11,執(zhí)行會停在調(diào)用語句的下一條語句上。如果當(dāng)前高亮語句是方法調(diào)用,調(diào)試器會進入方法內(nèi)部。圖79逐語句4、跳出(StepOut)當(dāng)你在一個方法內(nèi)部調(diào)試時會用到它。如果你在當(dāng)前方法內(nèi)按Shift+F11,調(diào)試器會完成此方法的執(zhí)行,之后在調(diào)用此方法的語句的下一條語句處暫停。圖80跳出Airtest用于自動化黑盒測試,站在玩家的角度測試整個游戲,比較符合測試人員的思維習(xí)慣,適用于功能測試和性能測試。AirtestIDE是一個跨平臺的UI自動化測試編輯器,通過自動化腳本錄制、一鍵回放、報告查看,輕而易舉實現(xiàn)自動化測試流程,另外還支持基于圖像識別的Airtest框架,適用于所有Android/iOS/Windows應(yīng)用,基于UI控件搜索的Poco框架,適用于Unity3D和Android/iOSApp等多種平臺,能夠運行在Windows上。以下為UI自動化測試的示例代碼:圖81自動化黑盒測試(功能測試)點擊開始運行按鈕后,腳本將開始執(zhí)行,log窗口中將會刷新實時log,如果此時想要停止腳本的運行,只需要點擊上圖中間的StopScript按鈕,快捷鍵是Shift+F5。在運行腳本后,可以立刻在log窗口中看到當(dāng)前腳本執(zhí)行成功還是失敗,然而不能夠看到更加詳細(xì)直觀的執(zhí)行結(jié)果。在AirtestIDE中,可以點擊上圖中的第三個按鈕ViewReport按鈕,快捷鍵為Ctrl+L,稍等片刻后將會自動使用默認(rèn)瀏覽器打開結(jié)果報告頁面:圖82測試報告圖83測試報告(續(xù))關(guān)于游戲測試的內(nèi)容,宏觀上可以分為:場景測試、角色動畫測試、敵人動畫測試、角色移動測試(碰撞體、控制器、動畫結(jié)合)、敵人移動測試(碰撞體、自動尋路、動畫結(jié)合)、角色攻擊測試、敵人攻擊測試(攻擊碰撞體)、游戲性能綜合測試、游戲UI布局測試、游戲UI功能測試、多平臺兼容性測試等等。 關(guān)于游戲測試用到的測試用例,我以玩家與墻壁的碰撞為例進行說明。模塊碰撞(玩家-墻壁)ID1標(biāo)題玩家與墻壁的碰撞操作步驟玩家選擇任意一面墻壁進行連續(xù)移動前置條件玩家處于游戲中預(yù)期輸出/動作玩家無法穿過墻壁,碰撞效果正常實際輸出/動作玩家穿過墻壁是否通過否備注該bug極有可能因為墻壁沒有設(shè)置碰撞體導(dǎo)致對應(yīng)bug編號101新建時間2020.02.02修改時間2020.04.176結(jié)論本文基于Unity3D進行了多人合作休閑類游戲的設(shè)計與實現(xiàn)。依據(jù)傳統(tǒng)交互設(shè)計原則和方法,并根據(jù)游戲的目標(biāo)性等原則,對游戲設(shè)計的流程脈絡(luò)對交互設(shè)計流程進行全新梳理。兩者相輔相成,強調(diào)設(shè)計過程中玩家核心的用戶黏度,并以此構(gòu)建完善的交互設(shè)計方法模型。此外論文的各種觀點通過本人在實際的游戲項目對于交互設(shè)計及其相關(guān)的研發(fā)過程進行了相對應(yīng)的實施驗證。另外在自主研發(fā)架設(shè)游戲服務(wù)器并設(shè)計實現(xiàn)了游戲客戶端的基礎(chǔ)上,采用了角色控制狀態(tài)機與交互取值算法、移動策略和人工智能交互等關(guān)鍵技術(shù)。通過“協(xié)同程序?qū)崿F(xiàn)地圖預(yù)讀取”策略改良了游戲客戶端運行時的效率,效能分析實驗證明了該優(yōu)化方法有效降低了程序時間復(fù)雜度。最后,通過開發(fā)的網(wǎng)絡(luò)游戲系統(tǒng)驗證了所提方法的可行性。針對行業(yè)特殊性的問題,根據(jù)論文研究方向性特征,可以根據(jù)今后的發(fā)展需求,對于相關(guān)的休閑策略類、休閑養(yǎng)成類等進行對應(yīng)的針對性交互設(shè)計方法擴展;此外,雖然互聯(lián)網(wǎng)的發(fā)展在不斷演變中進行,但是用戶為中心要素的交互原則確是在任何情況下都不會改變的,因此,后續(xù)研究將繼續(xù)加強對于用戶黏性的相關(guān)價值分析,并考慮融入社交平臺的時效性驗證的特性,對最終形成的交互設(shè)計方法模型進行不斷的加強和深化。參考文獻[1]休閑益智手游界面設(shè)計視覺元素研究[D].王勤勤.東華大學(xué)2017[2]基于用戶黏度的社交休閑游戲交互設(shè)計方法研究[D].李熠琦.中南大學(xué)2012[3]基于IOCP的多人在線休閑游戲服務(wù)器的設(shè)計與實現(xiàn)[D].段念.電子科技大學(xué)2010[4]免費休閑網(wǎng)絡(luò)游戲企業(yè)營銷戰(zhàn)略研究[D].池勇.上海交通大學(xué)2007[5]休閑類網(wǎng)絡(luò)游戲客戶生命周期不同階段忠誠影響因素實證研究[D].劉斌.浙江大學(xué)2007[6]基于Unity3D的多人在線網(wǎng)絡(luò)游戲設(shè)計與開發(fā)[J].吳晶晶,戴智超.計算機系統(tǒng)應(yīng)用.2017(10)[7]互動媒介論——電子游戲多重互動與敘事模式[D].關(guān)萍萍.浙江大學(xué)2010[8]計算機圖形學(xué)基礎(chǔ)教程.孔令德.北京:清華大學(xué)出版社,2008:26-35[9]基于地形的三維場景繪制方法[J].陳健松,徐從富,潘云鶴.計算機工程與應(yīng)用,2006,(08):31-33[10]基于Unity3D的三維地形建模[J].張敏.湖南工業(yè)職業(yè)技術(shù)學(xué)院學(xué)報.2014(06)[11]DynamicSchedulingofTerrainBasedonUnity[C].FangTian;LihongLou.Proceedingsof2018InternationalConferenceonNetwork,Communication,ComputerEngineering(NCCE2018)2018-05-26[12]UnderstandingrepeatplayingbehaviorincasualgamesusingaBayesiandataaugmentationapproach[J].SamK.Hui.QuantitativeMarketingandEconomics.2017-03-15[13]CasualGamesandCasualLearningAboutHumanBiologicalSystems[J].C.AaronPrice;;KatherineGean;;ClaireG.Christensen.JournalofScienceEducationandTechnology.2016-02-15[14]Aknowledge-basedapproachtomultiplayergamesinpeer-to-peernetworks[J].MichaelS.Gibson;;WambertoW.Vasconcelos.KnowledgeandInformationSystems.2019-09-02[15]Forensicinvestigationofcrossplatformmassivelymultiplayeronlinegames:MinecraftasacasestudyTaylorDCPaulJ;;MwikiHenry;;DehghantanhaAli.Science&justice:journaloftheForensicScienceSociety.2019-05-04致謝本論文的撰寫工作是在指導(dǎo)老師徐積文的悉心指導(dǎo)下完成的,同時也不得不感謝我的友人李奕威在論文撰寫過程中的督促,幫助與指點。本科生就學(xué)期間,友人李奕威、蔣皓洋、陳志深、吳陳華在學(xué)習(xí)、生活、就業(yè)等方面提供了諸多幫助,使本人快速成長,在此向他們致以最真誠的感謝。論文撰寫期間,徐積文老師給予了眾多寶貴的指導(dǎo)建議,幫助本人順利完成開題、初稿撰寫、終稿修改等工作。徐積文老師嚴(yán)謹(jǐn)?shù)闹螌W(xué)態(tài)度、豐富的專業(yè)知識、高尚的師德讓本人在諸多方面受益匪淺。值此之際,向指導(dǎo)老師徐積文致以最誠摯的感謝。最后也感謝家人對本人攻讀本科生的理解、支持和鼓勵,是他們的無私付出令本人能夠?qū)W⒂趯W(xué)業(yè),順利完成四年的本科生學(xué)習(xí)。

電腦無法識別U盤該怎么辦HYPERLINK電腦無法識別U盤怎么辦?打開我的電腦上單擊右鍵,在快捷菜單里,選擇“管理”,打開“計算機管理”窗口。在計算機管理窗口里,選擇“存儲”下面的“磁盤管理”,如果看得到?jīng)]有盤符的U盤,那么在這個U盤上按鼠標(biāo)右鍵,選擇“更改驅(qū)動器名稱和路徑”選項,就打開了“更改……的驅(qū)動器號和路徑”對話框。再點擊“更改”按鈕,打開“更改驅(qū)動器號和路徑”的對話框,在“指定以下驅(qū)動器號”的右邊下拉列表里,選擇你希望分配給U盤的驅(qū)動器號,盡可能靠后選擇,比如X、Y、Z,選擇好后,單擊確定按鈕,回到上一次“更改……的驅(qū)動器號和路徑”對話框窗口,再一次單擊確定,就回到“計算機管理”窗口。至此,如果一切正常,就給U盤單獨設(shè)置了一個長久使用的驅(qū)動器號,并卻,不受虛擬驅(qū)動器的影響了。建議將U盤插到電腦上,看任務(wù)欄中是否顯示圖標(biāo),如果顯示,在我的電腦點右鍵查看屬性——高級——硬件——設(shè)備管理器——查看里面是否有問號的設(shè)備,在問號設(shè)備上點右鍵——更新驅(qū)動程序然后下一步——否暫時不連接到網(wǎng)絡(luò)——下一步自動安裝軟件(推薦)就可以了另外:系統(tǒng)不認(rèn)U盤的幾種處理方法1.禁用主板usb設(shè)備。管理員在CMOS設(shè)置里將USB設(shè)備禁用,并且設(shè)置BIOS密碼,這樣U盤插到電腦上以后,電腦也不會識別。這種方法有它的局限性,就是不僅禁用了U盤,同時也禁用了其他的usb設(shè)備,比如usb鼠標(biāo),usb光驅(qū)等。所以這種方法管理員一般不會用,除非這臺電腦非常重要,值得他舍棄掉整個usb總線的功能。但是這種屏蔽也可以破解,即便設(shè)置了密碼。整個BIOS設(shè)置都存放在CMOS芯片里,而COMS的記憶作用是靠主板上的一個電容供電的。電容的電來源于主板電池,所以,只要把主板電池卸下來,用一根導(dǎo)線將原來裝電池的地方正負(fù)極短接,瞬間就能清空整個CMOS設(shè)置,包括BIOS的密碼。隨后只需安回電池,自己重新設(shè)置一下CMOS,就可以使用usb設(shè)備了。(當(dāng)然,這需要打開機箱,一般眾目睽睽之下不大適用~~)2.修改注冊表項,禁用usb移動存儲設(shè)備。打開注冊表文件,依次展開"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\usbehci”雙擊右面的“Start”鍵,把編輯窗口中的“數(shù)值數(shù)據(jù)”改為“4”,把基數(shù)選擇為“十六進制”就可以了。改好后注銷一下就可以看見效果了。為了防止別人用相同的方法來破解,我們可以刪除或者改名注冊表編輯器程序。提示:“Start”這個鍵是USB設(shè)備的工作開關(guān),默認(rèn)設(shè)置為“3”表示手動,“2”是表示自動,“4”是表示停用。3.在computermanagement里將removablestorage的使用權(quán)限禁止。computermanagement是一個windows管理組件,可以在控制面板——管理工具——計算機管理打開。在該工具窗口中storage——removablestorage——property中,general項,可以控制系統(tǒng)托盤是否顯示security則可以管理移動存儲設(shè)備的使用權(quán)限。在security中將普通用戶的使用權(quán)限降低,就可以達到禁用u盤的目的。破解的方法也很簡單,管理員降低普通用戶移動存儲設(shè)備的使用權(quán)限,但未必禁用computermanagement的使用權(quán)限。普通用戶可以通過這個工具解除usb移動存儲設(shè)備的使用權(quán)限限制。另外,值得一提的是,如果u盤插到電腦上后可以驅(qū)動,但是我的電腦里卻沒有盤符,很有可能是管理員改動了u盤的默認(rèn)盤符,使得我的電腦不能識別。這種情況,可以在movablestorage中看到u盤驅(qū)動器??梢栽趗盤驅(qū)動器屬性設(shè)置里為u盤重新分配一個盤符,再重新插拔一次u盤,就可以在我的電腦里看到u盤的盤符了。一、首先可以將該U盤換到別的機器上,看使用是否正常。如果排除了硬件損壞的可能,一般就是軟件方面有問題。在WindowsXP+SP1操作系統(tǒng)下,有些USB2.0設(shè)備的確常常出現(xiàn)工作不穩(wěn)定的問題,可以試試安裝設(shè)備自帶的USB2.0驅(qū)動程序。另外最好不要使用USB延長線,防止因為供電不足而造成不穩(wěn)定現(xiàn)象。如果仍無效,可以在主板BIOS設(shè)定中,將USB接口強行設(shè)置為USB1.1傳輸速率。二、(適用于WIN98)啟動計算機,進入主板BIOS設(shè)置,檢查BIOS中USB的相關(guān)選項是否已經(jīng)打開:OnChipUSB設(shè)定為Enabled;USBController設(shè)定為Enabled;PNPOSInstalled設(shè)定為Yes;AssignIRQForUSB設(shè)成Enabled。要正常使用USB設(shè)備首先要開啟USB接口,在主板BIOS里可以進行此項工作,一般來說只需在BIOS中進入ChipsetFeatures設(shè)置,并將USBKeyborad/MouseLegacy選項設(shè)定為Enable,就能夠保證在操作系統(tǒng)下使用USB鍵盤了。這些選項的作用是打開主板芯片組對USB設(shè)備的完全支持,為系統(tǒng)識別USB設(shè)備做準(zhǔn)備工作。三、USB口接觸不好處理辦法:拔下,等十秒鐘再插上USB口,使接觸完好;五、閃存盤驅(qū)動程序沒有安裝完成(WIN98系統(tǒng)下)處理辦法:鼠標(biāo)點“我的電腦”,選擇屬性找到“通用串行總線”,刪除其中的USBMASSSTORAGE項,再點擊“刷新”,然后按照提示重新安裝一次驅(qū)動程序。六、接其它USB設(shè)備(如掃描儀、打印機、數(shù)碼相機)時可以正常使用,接優(yōu)盤時閃指示燈不亮,不能夠使用。1、檢查優(yōu)盤與電腦的聯(lián)接是否正常,并換用其它USB接口測試。2、檢查設(shè)備管理器,看是否出現(xiàn)”通用總線設(shè)備控制器”條目,如果沒有,請將電腦主板BIOS中USB接口條目*激活(ENABLE)。3、如果電腦安裝過其它類型USB設(shè)備,卸載該設(shè)備驅(qū)動程序,并首先安裝優(yōu)盤驅(qū)動程序。4、到其它電腦試用此優(yōu)盤,確認(rèn)是否優(yōu)盤不良。七、啟動型優(yōu)盤在的電腦上無法實現(xiàn)啟動,可能是主板型號不支持。如何判斷一塊主板是否支持閃存盤啟動系統(tǒng)啟動型優(yōu)盤是采用模擬USB軟驅(qū)和USB硬盤的方式啟動電腦的。只要電腦主板支持USB設(shè)備啟動,即BIOS的啟動選項中有USB-FDD、USB-HDD或是其它類似的選項,就可以使用啟動型優(yōu)盤啟動電腦。八、第一次在電腦上使用優(yōu)盤,未出現(xiàn)提示發(fā)現(xiàn)新硬件的窗口,驅(qū)動程序無法安裝的原因可能是:1、主板usbcontroller未啟用解決辦法:在電腦主板BIOS中啟用此功能。2、usbcontroller已經(jīng)啟用但運行不正常解決辦法:在設(shè)備管理器中刪除”通用串行控制器”下的相關(guān)設(shè)備并刷新。3、優(yōu)盤被電腦識別異常,在設(shè)備管理器中表現(xiàn)為帶有黃色?或!的”其它設(shè)備”或“未知設(shè)備”。解決辦法:刪除此設(shè)備并刷新。九、大容量的U盤(例如兼具MP3播放器或錄音功能的U盤)或移動硬盤在電腦上無法正常使用,雖然系統(tǒng)提示找到了未知的USB設(shè)備,但無法正確識別U盤或移動硬盤。原因可能是:1.USB接口供電不足:系統(tǒng)為每個USB接口分配了500mA的最大輸出電流,一般的U盤只需要100mA的工作電流,因此在使用過程中不會出現(xiàn)什么問題。大多數(shù)移動硬盤所使用的是普通的2.5英寸硬盤,其工作電流介于500mA~1000mA之間,此時假如僅僅通過USB接口供電,當(dāng)系統(tǒng)中并無其他USB設(shè)備時,那么還是可以勉強使用的,但如果電壓不穩(wěn)的話,就隨時可能出現(xiàn)供電不足的問題。特別是使用支持USB2.0的移動硬盤時,情況最為嚴(yán)重。另外,如果你的筆記本電腦使用電池供電,那么USB接口所分配的電量就更小了。2.使用了外接的USB擴展卡:在筆記本電腦中使用USB2.0的U盤或移動硬盤時,如果筆記本電腦不支持USB2.0技術(shù),一般必須通過PCMCIA卡轉(zhuǎn)USB2.0的擴展卡來間接實現(xiàn)支持,這些擴展卡基本上都采用NEC公司的D720100AGMUSB控制芯片,少則提供兩個USB2.0接口,多則提供五個USB2.0接口,對一般用戶而言足夠使用了。由于PCMICA接口提供的電源功率比板載USB接口要小,這樣就會由于供電不足而導(dǎo)致移動硬盤工作的出現(xiàn)問題。解決方案:1.它從USB連接線上接移動硬盤的一端引出一根轉(zhuǎn)接線,可以插入電腦背后的PS/2接口取電,這里可以比USB接口提供更大的電流輸出。2.利用電源補償線(也稱“鍵盤取電線”),如果U盤或移動硬盤的包裝盒中提供了選配的電源適配器,你就可以直接使用外接電源,這樣就可以從根本上避免供電不足的情況發(fā)生了前置USB線接錯。當(dāng)主板上的USB線和機箱上的前置USB接口對應(yīng)相接時把正負(fù)接反就會發(fā)生這類故障,這也是相當(dāng)危險的,因為正負(fù)接反很可能會使得USB設(shè)備燒毀。所以盡量采用機箱后置的USB接口,也少用延長線.也可能是斷口有問題,換個USB端口看下.USB接口電壓不足。當(dāng)把<ahref="mobileharddisk">移動硬盤</a>接在前置USB口上時就有可能發(fā)生系統(tǒng)無法識別出設(shè)備的故障。原因是<ahref="">移動硬盤</a>功率比較大要求電壓相對比較嚴(yán)格,前置接口可能無法提供足夠的電壓,當(dāng)然劣質(zhì)的電源也可能會造成這個問題。解決方法是<ahref="">移動硬盤</a>不要接在前置USB接口上,更換劣質(zhì)低功率的電源或盡量使用外接電源的硬盤盒,假如有條件的話。主板和系統(tǒng)的兼容性問題。呵呵這類故障中最著名的就是NF2主板與USB的兼容性問題。假如你是在NF2的主板上碰到這個問題的話,則可以先安裝最新的nForce2專用USB2.0驅(qū)動和補丁、最新的主板補丁和操作系統(tǒng)補丁,還是不行的話嘗試著刷新一下主板的BIOS一般都能解決。系統(tǒng)或BIOS問題。當(dāng)你在BIOS或操作系統(tǒng)中禁用了USB時就會發(fā)生USB設(shè)備無法在系統(tǒng)中識別。解決方法是開啟與USB設(shè)備相關(guān)的選項。就是開機按F2或DEL鍵,進入BIOS,把enableusbdevice選擇enable。拔插要小心,讀寫時千萬不可拔出,不然有可能燒毀芯片。XP中任務(wù)欄中多出USB設(shè)備的圖標(biāo),打開該圖標(biāo)就會在列表中顯示U盤設(shè)備,選擇將該設(shè)備停用,然后你再拔出設(shè)備,這樣會比較安全。

其實判斷軟件硬件問題很簡單,在別的機器或換個系統(tǒng)試試就可以了.有些小的問題不妨先用專門軟件格式化下.還有提醒大家WINDOWS下格式化時要選擇FAT,不要選FAT32。

提示無法識別的USB設(shè)備維修

故障提示如圖:

無法識別的USB設(shè)備:UnknownUSBDevice.很多人都遇

溫馨提示

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

評論

0/150

提交評論