版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
摘要隨著我國經(jīng)濟(jì)的快速發(fā)展,大多數(shù)的家庭也購置了交通工具;但在上下班高峰期,車主在開車回家的路上已經(jīng)因?yàn)槿嚩诼飞侠速M(fèi)了不少的時(shí)間,對交規(guī)和道路規(guī)劃感到失望。但大多數(shù)的車主并不了解城市規(guī)劃部門和交警同志的做過為了盡可能的使交通流程所做出的努力。我想通過制作一款交通管理模擬器,讓車主們通過游戲的形式了解城市規(guī)劃部門和交警同志的不易。Unity3D(以下稱為U3D)是一款用于多平臺游戲開發(fā)的游戲引擎。它提供了一個(gè)完善的多平臺游戲系統(tǒng)。平臺之間的差異通常會影響產(chǎn)品開發(fā)的速度和進(jìn)度,因此大多數(shù)開發(fā)人員會花很多時(shí)間在上面,但U3D出現(xiàn),標(biāo)志著此游戲引擎可以完美地移植到幾乎10個(gè)主流平臺之間。該游戲并不像名字那樣是一款嚴(yán)肅的游戲;恰恰相反,交通管理模擬器是一款氛圍幽默且易于上手的游戲。因?yàn)槲蚁胗猛ㄋ滓锥挠螒蚍绞阶屓藗兇笾碌牧私饨煌ú块T的日常工作,從而明白交通部門日常工作的艱辛。該游戲是以3D塔防游戲的系統(tǒng)作為基礎(chǔ)進(jìn)行開發(fā),并加入了我不少的創(chuàng)新設(shè)計(jì),且游戲?qū)⒁?D的形式制作。本文主要描述了該游戲的開發(fā)原理,游戲的設(shè)計(jì)與實(shí)現(xiàn)以及游戲功能測試等。為后續(xù)希望開發(fā)同類游戲的開發(fā)者提供借鑒與參考。關(guān)鍵詞:Unity3D交通管理模擬器3D塔防游戲
AbstractWiththerapiddevelopmentoftheChineseeconomy,mostfamilieshavealsopurchasedmeansoftransportation;butduringrushhourdailycommutes,carownerslostalotoftimeontheroadbecauseoftrafficjamsontheroadtogethome.Bedisappointed.Butmostcarownersdonotunderstandtheeffortsoftheurbanplanningserviceandthefellowtrafficpolicetomaketrafficassmoothaspossible.Iwanttomakeatrafficmanagementsimulatortoallowcarownerstounderstandthedifficultyofurbanplanningservicesandfellowtrafficpoliceintheformofgames.
Unity3D(hereinafterreferredtoasU3D)isagameengineforthedevelopmentofgames.Itprovidesaperfectcross-platformgamesystem.Differencesbetweenplatformsgenerallyaffectthespeedandprogressofproductdevelopment,somostdeveloperswillspendalotoftimeonit,buttheemergenceofU3Dmarksthatthisgameenginecanbeperfectlytransplantedbetweencloseof10consumerplatforms.
Thegameisnotaseriousgameasthenamesuggests;onthecontrary,thetrafficmanagementsimulatorisahumorousandeasytousegame.BecauseIwanttousesimpleandeasytounderstandgamestoallowpeopletohaveageneralunderstandingofthedailyworkofthetransportservice,inordertounderstandthedifficultiesofthedailyworkofthetransportservice.Thegameisdevelopedonthebasisofthe3Dtowerdefensegamesystem,andincorporatesmanyofmyinnovativedesigns,andthegamewillbeproducedin3D.Thisarticlemainlydescribestheprinciplesofgamedevelopment,gamedesignandimplementation,andgamefunctiontesting.Provideareferenceandreferencetolaterdeveloperswhowishtodevelopsimilargames.Keywords:Unity3DTrafficManagementSimulator3DTowerDefenseGame目錄第一章 緒論 緒論選題的目的和意義我認(rèn)為塔防游戲是一種對玩家易于上手,卻難于精通的游戲類型,當(dāng)此游戲類型面向一般不接觸游戲的藍(lán)海用戶時(shí)也能讓他們快速上手并沉浸其中;但在大多數(shù)玩家眼里,塔防游戲的玩法已經(jīng)被游戲廠商們挖掘的差不多了;但我認(rèn)為塔防游戲在玩法方面還是有不少可創(chuàng)新的空間,隨著手機(jī)游戲的崛起,越來越多的游戲廠商也開始在手機(jī)平臺上制作塔防游戲。且塔防游戲的玩法也與我的畢業(yè)設(shè)計(jì),交通模擬器的游戲主題十分契合;即能讓玩家通過上帝視角觀察日常中馬路上的交通情況,也能讓玩家通過管理馬路上的交通情況,明白交警在日常管理交通的工作中的不易。國內(nèi)外研究現(xiàn)狀塔防游戲已經(jīng)存在很長時(shí)間了,從《桌面塔防游戲》的開始到War3時(shí)代功能強(qiáng)大的關(guān)卡編輯器的幫助下出現(xiàn)的各種讓人印象深刻的塔防游戲關(guān)卡。最初爆火的《植物大戰(zhàn)僵尸》、《獸人必須死》和其他具有不同主題的流行獨(dú)立游戲作品,再到近年來《部落戰(zhàn)爭》和其他手游杰作,塔防游戲的發(fā)展速度可以說是突飛猛進(jìn)了。但是另一方面,塔防游戲注重細(xì)節(jié),例如防御單位的位置,進(jìn)攻和防御價(jià)值,甚至在困難的情況下,通關(guān)方法也總是過于功利。關(guān)卡也是總是換湯不換藥,使得玩家很快就喪失興趣。結(jié)果,塔防多年以來一直未能擺脫玩家數(shù)量稀少的命運(yùn),許多玩家玩過塔防,但卻很少有人會堅(jiān)持只玩一款塔防游戲。要想讓玩家一直只專注在一款塔防游戲上,是廣大游戲廠商難以做的。實(shí)際上,對于任何具有先天游戲性缺陷的游戲,打破命運(yùn)并將其從小眾游戲轉(zhuǎn)變?yōu)榭梢哉嬲M(jìn)入大眾游戲市場的并流行,仍然是那句老生常談的方法——要?jiǎng)?chuàng)新!但是,對于像塔防游戲這種具有相對固定玩法的游戲,創(chuàng)新應(yīng)該從哪里開始呢?如果您想制作高質(zhì)量的塔防游戲并想創(chuàng)新,那么游戲玩法上的創(chuàng)新無疑是重中之重。誠然,塔防的基本玩法仍然基于炮塔(或近似概念的道具、建筑)的放置和搭配,但這并不意味著沒有新的設(shè)計(jì)可用于塔防游戲的游戲創(chuàng)新。一方面,塔防游戲可以嘗試在炮塔升級系統(tǒng),戰(zhàn)術(shù),技能,地形和其他元素上進(jìn)行創(chuàng)新,或者可以使用不同的游戲主題來制作戰(zhàn)斗和塔防策略的突破。另一方面,塔防游戲還可以為習(xí)慣于獨(dú)自作戰(zhàn)的游戲玩家創(chuàng)建實(shí)用且易于使用的交互式平臺,以增強(qiáng)游戲的社交游戲?qū)傩院褪褂蒙缃幌到y(tǒng)。在社交化的幫助下,塔防游戲具有更多的變量和更深入的體驗(yàn)內(nèi)容。除了特定于產(chǎn)品的創(chuàng)新之外,當(dāng)今產(chǎn)品的同質(zhì)化也變得越來越嚴(yán)重,大多數(shù)的游戲公司都是以制作成本低廉的山寨網(wǎng)頁游戲和手機(jī)游戲的塔防游戲?yàn)橹鳌T诋?dāng)前這種情況下,優(yōu)質(zhì)的產(chǎn)品需要什么?想要獲得市場認(rèn)可除了產(chǎn)品的創(chuàng)新外,也需要一些創(chuàng)新的營銷手段。傳統(tǒng)的塔防游戲,無論是獨(dú)立游戲還是Flash游戲,除了引入大量廣告流量外,便是依靠玩家之間的口口相傳,這種傳統(tǒng)在網(wǎng)頁游戲和手機(jī)游戲領(lǐng)域繼續(xù)。但是,在硬廣告的轉(zhuǎn)換率越來越差,相似產(chǎn)品的數(shù)量在增加并且參與者的選擇也在增加的情況下,這些舊的營銷方法變得越來越難以使用。論文組織結(jié)構(gòu)?論文從最初構(gòu)思到分析實(shí)踐,結(jié)合了在網(wǎng)上查詢的塔防游戲開發(fā)課程與資料和關(guān)于交通部門和城市規(guī)劃部門的工作資料,進(jìn)行了一個(gè)交通管理模擬器游戲的設(shè)計(jì)與制作,其中,具體介紹游戲的制作步驟,包括游戲的系統(tǒng)功能設(shè)計(jì)與實(shí)現(xiàn)和與之相關(guān)的代碼編寫。論文分為五個(gè)章節(jié),各章節(jié)安排如下:?第一部分:緒論,主要闡述了該畢業(yè)設(shè)計(jì)制作的背景、國內(nèi)外對相關(guān)課題的研究現(xiàn)狀以及本設(shè)計(jì)的大概介紹;?第二部分:介紹了本文制作游戲使用的各類開發(fā)工具和Unity3D的大致介紹;?第三部分:詳細(xì)介紹游戲的各個(gè)模塊需求設(shè)計(jì);第四部分:詳細(xì)介紹游戲的各個(gè)模塊的設(shè)計(jì)與實(shí)現(xiàn);??第五部分:詳細(xì)介紹了游戲各個(gè)功能的測試;?第六部分:總結(jié)了在完成畢設(shè)游戲的過程中的困難與今后的學(xué)習(xí)目標(biāo)。
開發(fā)工具介紹Unity3D游戲引擎Unity3D軟件介紹Unity3D(以下稱為U3D)是一款用于多平臺游戲開發(fā)的游戲引擎。它提供了一個(gè)完善的多平臺游戲系統(tǒng)。平臺之間的差異通常會影響產(chǎn)品開發(fā)的速度和進(jìn)度,因此大多數(shù)開發(fā)人員會花很多時(shí)間在上面,但U3D出現(xiàn),標(biāo)志著此游戲引擎可以完美地移植到幾乎10個(gè)主流平臺之間。同時(shí),U3D還提供了良好的交互式操作界面,可以完美地部署在Windows和MacOS上。該軟件中包含的五個(gè)工程視圖框架可以幫助設(shè)計(jì)人員對游戲中的對象進(jìn)行分類,并觀察游戲創(chuàng)建的進(jìn)度。其中,項(xiàng)目視圖主要存儲游戲內(nèi)資源文件,分層視圖主要將特定的游戲?qū)ο蠓胖迷谟螒驁鼍爸校瑱z查者視圖主要用于描述游戲資源的信息,場景視圖主要在游戲中存儲模型的資源,游戲視圖用于觀察完成游戲的當(dāng)前結(jié)果。U3D還為我們提供了編譯多種腳本語言的通用環(huán)境。用戶可以根據(jù)需要調(diào)整默認(rèn)編譯環(huán)境。Unity3D支持多種腳本語言,其中包含但不限于C#,javascript和boo。API接口Unity3D豐富API可以幫助您滿足各種需求。API是預(yù)定義的函數(shù),可用于為應(yīng)用程序和開發(fā)人員提供基于某些軟件或硬件的訪問例程集的功能,而無需訪問源代碼或了解內(nèi)部工作機(jī)制的細(xì)節(jié)。U3D具有完整的API函數(shù)庫集。使用這些API函數(shù),開發(fā)人員可以輕松實(shí)現(xiàn)項(xiàng)目初始化,調(diào)用功能模塊的每一幀,如何執(zhí)行觸發(fā)檢測和對觸發(fā)事件的響應(yīng)以及如何判斷是否進(jìn)入該區(qū)域觸發(fā),是否在觸發(fā)區(qū)域,是否離開觸發(fā)區(qū)域,如何響應(yīng)滑動事件等。GUI(圖形用戶界面)此次畢業(yè)設(shè)計(jì)主要使用NGUI和UGUI開發(fā)用戶界面,GUI是英文圖形用戶界面的縮寫。Unity的GUI系統(tǒng)稱為UnityGUI。UnityGUI使您可以快速輕松地添加各種功能和各種界面元素,包括在創(chuàng)建GUI控件時(shí)實(shí)例化,定位和定義功能。只需編寫少量代碼即可完成GUI實(shí)例的創(chuàng)建,在屏幕上定位該實(shí)例,并在元素時(shí)執(zhí)行的腳本界面已激活。UGUI與Unity3D集成在一起,而NGUI是一個(gè)用戶界面插件,它擴(kuò)展了為Unity游戲引擎開發(fā)的工具的功能。它還可以為開發(fā)人員提供快速便捷的用戶界面設(shè)計(jì)方法,以此加快游戲設(shè)計(jì)和制作。C#開發(fā)語言C#是由微軟公司開發(fā)并在.NETFramework上運(yùn)行的高級面向?qū)ο蟮木幊陶Z言。C#與Java類似,是一種語言,一種工具。但是在這里我們需要知道Unity是跨平臺的,而C#不是跨平臺的語言。只是由于Mono的重新實(shí)現(xiàn),Unity才能使用C#進(jìn)行開發(fā),因此我們可以在Unity上編寫C#代碼,且代碼語法清晰,類庫易于使用。因?yàn)橐陨系母鞣N優(yōu)勢,為此C#是游戲開發(fā)者在Unity開發(fā)中首先考慮的語言。VisualStudio2019VisualStudio2019(以下稱為VS)是Microsoft獨(dú)立啟動的開發(fā)環(huán)境。其中,它支持最新的集成開發(fā)環(huán)境。VS還帶來了NETFramework4.6,MicrosoftVisualStudio2019CTP,并且還支持開發(fā)人員開發(fā)面向Windows的應(yīng)用程序。并支持MicrosoftSQLSever,IBM,Oracle數(shù)據(jù)庫等。
游戲需求設(shè)計(jì)游戲基本介紹交通管理模擬器是一款類3D塔防的游戲,玩家可通過修改場景中的紅綠燈的紅燈時(shí)間和綠燈時(shí)間來控制車輛通行綠燈的時(shí)間與行人過馬路的時(shí)間,且游戲在特定的場景內(nèi)會出現(xiàn)酒駕的車輛,玩家需要通過場景內(nèi)的測速攝像機(jī)得知場景內(nèi)是否存在酒駕的車輛,通過場景內(nèi)的測速攝像機(jī)的車輛,其速度會顯示在玩家的界面上,若玩家不處理場景中的酒駕車輛,當(dāng)酒駕車輛與行人碰撞發(fā)生意外時(shí),玩家的游戲就會失敗;玩家可通過在公路上設(shè)置測量駕駛員的酒精含量的交警來阻攔酒駕車輛的通行。游戲通過游戲內(nèi)順利通過的車輛和行人的數(shù)量來給予玩家積分,在場景中限制的時(shí)間內(nèi)獲得的積分越多,玩家的評分就越高。若玩家游玩的場景內(nèi)發(fā)生意外,則游戲失敗。游戲?qū)ο蟮男枨笤O(shè)計(jì)正常行駛車輛的需求設(shè)計(jì)圖3-1正常行駛車輛的模型正常行駛車輛的AI邏輯:看見紅燈:停車看見綠燈:車輛行駛看到行人:停車經(jīng)過測速攝像機(jī):GUI讀取車速看到測酒駕交警:停車等待酒精檢測,完成檢測后通過酒駕車輛的需求設(shè)計(jì)圖3-2酒駕車輛的模型酒駕車輛的AI邏輯:看到紅燈:不停車看到綠燈:不停車看到行人:不停車經(jīng)過測速攝像機(jī):GUI讀取車速看到測酒駕交警:停車等待酒精檢測,完成檢測后銷毀自身行人的需求設(shè)計(jì)圖3-3行人的模型行人的AI邏輯:看到紅燈:行走 看到綠燈:不行走 看到行人:不行走紅綠燈的需求設(shè)計(jì)圖3-4紅綠燈的模型紅綠燈的AI邏輯:當(dāng)為紅燈時(shí):阻止車輛通過,放行行人通過當(dāng)為綠燈時(shí):發(fā)行車輛通過,阻止行人通過紅綠燈的操控:玩家通過點(diǎn)擊紅綠燈的游戲?qū)ο蠛?,紅綠燈會顯示可改變紅燈的時(shí)間和綠燈的時(shí)間的UI供玩家進(jìn)行設(shè)置。交警的需求設(shè)計(jì)圖3-5交警的模型交警的AI邏輯:看到車輛時(shí):阻止車輛前進(jìn),并對其進(jìn)行檢查交警的操作:玩家通過點(diǎn)擊交警的游戲?qū)ο蠛螅痪瘯@示升級和撤離的UI供玩家進(jìn)行設(shè)置測速攝像機(jī)的需求設(shè)計(jì)圖3-6測速攝像機(jī)的模型高速攝像機(jī)的AI: 當(dāng)有車輛經(jīng)過時(shí):把車輛測出來的速度顯示在玩家的UI上游戲功能的需求設(shè)計(jì)游戲?qū)ο笞詣由晒δ艿男枨笤O(shè)計(jì):此功能的需求是:通過自動生成游戲?qū)ο竽_本的編寫,實(shí)現(xiàn)車流和人流自動生成(只是在游戲內(nèi)自動生成,但還是要通過開發(fā)者的設(shè)置才行)的功能。在游戲場景中生成交警功能的需求設(shè)計(jì)此功能的需求是:在游戲場景中通過GUI的Button選擇交警,并在游戲場景相應(yīng)的位置中生成交警、升級已經(jīng)生成的交警和撤離交警的功能。游戲場景中攝像機(jī)的操控的需求設(shè)計(jì)此功能的需求是:讓玩家能在游戲場景中通過鍵盤和鼠標(biāo)對游戲的視角進(jìn)行平移和放大的功能。游戲的暫停功能的需求設(shè)計(jì)此功能的需求是: 為了防止玩家手忙腳亂,游戲中會有暫停功能,玩家可通過UI中的暫停按鍵和繼續(xù)按鍵進(jìn)入暫停狀態(tài);在暫停狀態(tài)下,玩家依然可以生成交警和改變紅綠燈的時(shí)間。游戲場景的需求設(shè)計(jì)新手教程場景的需求設(shè)計(jì):此場景(圖3-7)教會玩家如何游玩交通模擬器。圖3-7新手教程場景早高峰場景的需求設(shè)計(jì):此場景(圖3-8)內(nèi)會出現(xiàn)行人和正常行駛的車輛。圖3-8早高峰場景晚高峰場景的需求設(shè)計(jì):此場景(圖3-9)內(nèi)會出現(xiàn)行人、正常行駛的車輛和酒駕車輛。圖3-9晚高峰場景游戲的設(shè)計(jì)與實(shí)現(xiàn)游戲界面設(shè)計(jì)與實(shí)現(xiàn)游戲開始界面的設(shè)計(jì)與實(shí)現(xiàn)此界面為開始界面(圖4-1),其功能如下:玩家按開始按鈕時(shí)加載游戲第一個(gè)游戲場景玩家按退出按鈕時(shí)退出游戲給攝像機(jī)添加一個(gè)Animator使攝像機(jī)可以實(shí)現(xiàn)自動平移移動的功能。圖4-1游戲開始界面圖4-2攝影機(jī)的動畫TimeLine玩家操作界面的設(shè)計(jì)與實(shí)現(xiàn)此界面為玩家操作界面(圖4-3),其功能如下:顯示玩家的得分顯示游戲剩余的時(shí)間顯示空閑交警的數(shù)量顯示車輛的時(shí)速玩家可通過按測量酒精檢測站,在馬路上生成交警玩家可通過按暫停游戲彈出菜單(圖4-4)玩家可通過按暫停,讓游戲進(jìn)入暫停狀態(tài),按繼續(xù)可繼續(xù)進(jìn)行游戲圖4-3玩家操作界面游戲暫停界面的功能與實(shí)現(xiàn)此界面為游戲暫停界面(圖4-4),其功能如下:玩家可通過按繼續(xù)游戲按鈕繼續(xù)游戲玩家可通過按返回主菜單按鈕返回游戲圖4-4暫停游戲界面游戲分?jǐn)?shù)結(jié)算界面的功能與實(shí)現(xiàn)此界面為游戲分?jǐn)?shù)結(jié)算界面(圖4-5),其功能如下:在剩余時(shí)間為0時(shí),顯示此界面顯示玩家最終得分在剩余時(shí)間為0時(shí),顯示此界面玩家可通過按下一個(gè)按鈕進(jìn)入下一關(guān)玩家可通過按返回主菜單按鈕返回主菜單圖4-5游戲分?jǐn)?shù)結(jié)算界面游戲?qū)ο笤O(shè)計(jì)與實(shí)現(xiàn)正常行駛的車輛設(shè)計(jì)與實(shí)現(xiàn)正常行駛的車輛可根據(jù)場景內(nèi)的設(shè)置好的目標(biāo)點(diǎn)(Targetpoint)來實(shí)現(xiàn)自動尋路。車輛通過與Tag為Start的游戲?qū)ο筮M(jìn)行碰撞,從而獲得Tag為Start的游戲?qū)ο笙碌淖訉ο髞慝@取目標(biāo)點(diǎn),并存到數(shù)組positions中。碰撞檢測代碼如下:private
void
OnTriggerEnter(Collider
coll)
{
if(coll.tag
==
"Start")
{
wayPoint
=
coll.gameObject;
FindWayPoint();
}
}
獲得并將子對象存儲的代碼如下: public
void
FindWayPoint()
{
positions
=
new
Transform[wayPoint.transform.childCount];
for
(int
i
=
0;
i
<
positions.Length;
i++)
{
positions[i]
=
wayPoint.transform.GetChild(i);
}
}
車輛的移動通過判斷獲得的子對象的數(shù)組內(nèi)的數(shù)量,當(dāng)數(shù)組內(nèi)的數(shù)量大于1時(shí)開始執(zhí)行移動,先對準(zhǔn)子對象,再向子對象進(jìn)行移動。當(dāng)車輛與子對象的距離小于0.2f時(shí)則車輛會向數(shù)組內(nèi)的下一個(gè)子對象進(jìn)行移動。當(dāng)目標(biāo)點(diǎn)都移動完時(shí),車輛會銷毀自身游戲?qū)ο?。移動的腳本如下:void
Move()
{
if
(index
>
positions.Length
-
1)
return;
transform.LookAt(positions[index].position);
transform.Translate(Vector3.forward.normalized
*
Time.deltaTime
*
nowSpeed);
if
(Vector3.Distance(positions[index].position,transform.position)
<
0.2f)
{
index++;
}
if
(index
>
positions.Length
-
1)
{
ReachDestination();
}
}
銷毀自身游戲?qū)ο蟮哪_本如下:void
ReachDestination()
{
GameObject.Destroy(this.gameObject);
}
車輛是通過自身游戲物體上的射線來與游戲物體的碰撞體(collider)進(jìn)行碰撞,并通過與子碰撞到的對象的Tag進(jìn)行判斷該進(jìn)行怎么樣的行動。當(dāng)Tag為Red(紅燈)、People(行人)和Car(車輛)時(shí),速度將變成0以停止移動;當(dāng)Tag為Green(綠燈)時(shí)將進(jìn)行移動;當(dāng)Tag為TrafficPilice(交警)和TrafficPiliceUpgrade(交警)時(shí),將執(zhí)行交警腳本;若射線沒有與游戲?qū)ο筮M(jìn)行碰撞,則移動。車輛的碰撞檢測代碼如下:void
Update()
{
Move();
Ray
ray
=
new
Ray(transform.position
+
transform.forward,
transform.forward);
Vector3
forward
=
transform.TransformDirection(Vector3.forward);
Debug.DrawRay(ray.origin,
forward,
Color.green);
RaycastHit
hit;
int
layA
=
LayerMask.NameToLayer("TrafficLights");
int
layB
=
LayerMask.NameToLayer("Enemy");
bool
isCollider
=
Physics.Raycast(transform.position,
transform.forward,
out
hit,
3f,
(1
<<
layA)
|
(1
<<
layB),
QueryTriggerInteraction.Collide);
if
(isCollider)
{
if
(hit.collider.tag
==
"Red"
||
hit.collider.tag
==
"People"
||
hit.collider.tag
==
"Car")
{
nowSpeed
=
0;
}
if
(hit.collider.tag
==
"Green")
{
nowSpeed
=
speed;
}
if(hit.collider.tag
==
"TrafficPolice")
{
TrafficPolice1(5f);
}
if
(hit.collider.tag
==
"TrafficPoliceUpgrade")
{
TrafficPolice1(3f);
}
}
else
{
nowSpeed
=
speed;
}
}
當(dāng)車輛的射線與Tag為TrafficPilice(交警)和TrafficPiliceUpgrade(交警)的游戲?qū)ο筮M(jìn)行碰撞時(shí),車輛的速度將會變成0,并顯示車輛身上的Slider來表示車輛被測量酒精含量的等待時(shí)間;在時(shí)間結(jié)束后,車輛將繼續(xù)移動。交警的代碼如下:public
void
TrafficPolice1(float
x)
{
if
(TT
==
true)
{
StopAllCoroutines();
}
else
{
StartCoroutine(TrafficPolice2(x));
}
}
IEnumerator
TrafficPolice2(float
x)
{
totalTime
=
x;
if
(TT
==
false)
{
TimeGO.SetActive(true);
nowSpeed
=
0;
for
(int
i
=
0;i
<=
x;i++)
{
yield
return
new
WaitForSeconds(1);
Debug.Log(x);
totalTime
-=
1;
TimeSlider.value
=
totalTime/x;
if
(i
==
x)
{
TT
=
true;
}
}
}
酒駕車輛的設(shè)計(jì)與實(shí)現(xiàn)酒駕車輛的移動代碼與正常行駛的車輛一樣,但在射線與游戲物體發(fā)生碰撞時(shí)判斷條件不一樣,且功能不一樣;只有當(dāng)碰撞體的Tag為car(車輛)時(shí),車輛的速度才會變成0,從而停止移動;當(dāng)Tag為TrafficPilice(交警)和TrafficPiliceUpgrade(交警)時(shí)車輛的速度將會變成0,并顯示車輛身上的Slider來表示車輛被測量酒精含量的等待時(shí)間;在時(shí)間結(jié)束后,車輛將銷毀自身;當(dāng)Tag為People(行人)時(shí),游戲失敗,且顯示游戲失敗UI。碰撞檢測代碼如下:if
(isCollider)
{
if
(hit.collider.tag
==
"Car")
{
nowSpeed
=
0;
}
if
(hit.collider.tag
==
"TrafficPolice")
{
TrafficPolice1(2f);
}
if
(hit.collider.tag
==
"TrafficPoliceUpgrade")
{
TrafficPolice1(5f);
}
if
(hit.collider.tag
==
"People")
{
GameManager.Instance.Failed();
}
}
else
{
nowSpeed
=
speed;
}
當(dāng)Tag為TrafficPilice(交警)和TrafficPiliceUpgrade(升級交警)所執(zhí)行的代碼如下:IEnumerator
TrafficPolice2(float
x)
{
totalTime
=
x;
if
(TT
==
false)
{
TimeGO.SetActive(true);
nowSpeed
=
0;
for
(int
i
=
0;
i
<=
x;
i++)
{
yield
return
new
WaitForSeconds(1);
Debug.Log(x);
totalTime
-=
1;
TimeSlider.value
=
totalTime
/
x;
if
(i
==
x)
{
TT
=
true;
}
}
}
GameObject.Destroy(this.gameObject);
}
行人的設(shè)計(jì)與實(shí)現(xiàn)行人與車輛的移動代碼與正常行駛的車輛沒有太大區(qū)別,除了在射線碰撞中Tag為Red(紅燈)與Tag為Green(綠燈)時(shí)結(jié)果以外且不與Tag為TrafficPilice(交警)和TrafficPiliceUpgrade(升級交警)的游戲?qū)ο筮M(jìn)行碰撞檢測外;行人多了一個(gè)Animator組件(圖4-6),通過組件里的Bool值Walk來判斷行人是否在移動。圖4-6行人的Animator組件行人的動畫判斷腳本如下:if(nowSpeed
==
speed)
{
man.SetBool("Walk",
true);
}
else
if(nowSpeed
==
0)
{
man.SetBool("Walk",
false);
}
紅綠燈的設(shè)計(jì)與實(shí)現(xiàn)紅綠燈功能的是通過綠燈時(shí)間與紅的時(shí)間分別顯示和隱藏不同GameObject實(shí)現(xiàn)的,不同的GameObject內(nèi)的Tag不一樣,分別為Red(紅燈)和Green(綠燈)。圖4-7Tag為Green(綠燈)的游戲?qū)ο髨D4-8Tag為Red(紅燈)的游戲?qū)ο蠹t綠燈的根據(jù)綠燈時(shí)間和紅燈時(shí)間分別顯示和隱藏不同GameObject和在游戲場景中顯示紅燈時(shí)間和綠燈時(shí)間,是通過IEnumerator接口實(shí)現(xiàn)的;它是一個(gè)真正的集合訪問器,沒有它,就不能使用foreach語句遍歷數(shù)組或集合,因?yàn)橹挥蠭Enumerator對象才能訪問集合中的項(xiàng),假如連集合中的項(xiàng)都訪問不了,那么進(jìn)行集合的循環(huán)遍歷是不可能的事情了。實(shí)現(xiàn)根據(jù)綠燈時(shí)間和紅燈時(shí)間分別顯示和隱藏不同GameObject的代碼與顯示紅燈時(shí)間與綠燈時(shí)間的代碼如下:public
IEnumerator
Red()
{
for(;
;
)
{
while
(NowRedTime
>
0)
{
x
=
false;
TimeText.text
=
""
+
NowRedTime;
TimeText.color
=
Color.red;
yield
return
new
WaitForSeconds(1);
NowRedTime--;
}
yield
return
new
WaitForSeconds(NowRedTime);
NowGreenTime
=
GreenTime;
while
(NowGreenTime
>
0)
{
x
=
true;
TimeText.text
=
""
+
NowGreenTime;
TimeText.color
=
Color.green;
yield
return
new
WaitForSeconds(1);
NowGreenTime--;
}
yield
return
new
WaitForSeconds(NowGreenTime);
NowRedTime
=
RedTime;
yield
return
null;
}
}
玩家修改紅綠燈的紅燈時(shí)間與綠燈時(shí)間是通過紅綠燈游戲?qū)ο笊系囊粋€(gè)UI(圖4-9)來進(jìn)行,且玩家只能輸入大于零的整數(shù),諾玩家輸入不為大于零的整數(shù)時(shí),紅綠燈的游戲?qū)ο笊蠒棾鲥e(cuò)誤提示(圖4-9)。圖4-9紅綠燈游戲?qū)ο笊系腢I圖4-10錯(cuò)誤提示紅綠燈時(shí)間修改UI代碼如下:public
void
ChangerTime()
{
String
Rtext
=
ChangerRedTime.text;
String
Gtext
=
ChangerGreenTime.text;
if
(Rtext
==
null
||
Rtext.Equals("")
||
Gtext
==
null
||
Gtext.Equals(""))
{
Wrong.SetActive(true);
}
else
{
float
r
=
Convert.ToSingle(ChangerRedTime.text);
float
g
=
Convert.ToSingle(ChangerGreenTime.text);
if
(r
<
0
||
g
<
0)
{
Wrong.SetActive(true);
}
else
{
GreenTime
=
g;
RedTime
=
r;
TlUi.SetActive(false);
Wrong.SetActive(false);
ShowButton.SetActive(true);
}
}
}
交警的設(shè)計(jì)與實(shí)現(xiàn)游戲中的交警只是作為一個(gè)被車輛的射線碰撞測速判斷是否執(zhí)行酒精檢測的游戲?qū)ο?,所以交警的游戲?qū)ο笊喜o代碼,只有Tag為TrafficPilice(交警)和TrafficPiliceUpgrade(升級交警)的游戲?qū)ο?。測速攝像機(jī)的設(shè)計(jì)與實(shí)現(xiàn)測速攝像機(jī)的功能是通過OnTriggerEnter的接口實(shí)現(xiàn)的,OnTriggerEnter的功能是當(dāng)碰撞器進(jìn)入觸發(fā)器時(shí)OnTriggerEnter被調(diào)用;所以當(dāng)Tag為Car(車輛)的游戲?qū)ο蟮腃ollider(碰撞體)進(jìn)入測速攝像機(jī)的Collider(碰撞體)時(shí),測速攝像機(jī)會讀取Tag為Car(車輛)的游戲?qū)ο笊系哪_本里的Speed(速度),并將其顯示在測速UI(圖4-11)上。圖4-11測速UI測速的代碼如下:private
void
OnTriggerEnter(Collider
other)
{
if(other.tag
==
"Car")
{
Car
=
other.gameObject;
Speed
=
Car.GetComponent<Enemy>().speed;
SpeedText.text
=
"時(shí)數(shù):"
+
Speed*10
+
"KM/S";
}
}
游戲功能設(shè)計(jì)與實(shí)現(xiàn)游戲?qū)ο笞詣由傻脑O(shè)計(jì)與實(shí)現(xiàn)游戲?qū)ο蟮淖詣由墒峭ㄟ^IEnumerator接口和Instantiate實(shí)現(xiàn)的,且在此基礎(chǔ)上加入一個(gè)foreach進(jìn)行遍歷;用foreach遍歷相較于for效率更高且不用擔(dān)心數(shù)組的索引是幾;以腳本W(wǎng)ave為遍歷條件(Wave腳本中的是保存每一波敵人所生成所需的屬性),并設(shè)置publicWave[]waves來決定要生成多少組游戲?qū)ο?。Wave的腳本如下://保存每一波敵人所生成所需的屬性
[System.Serializable]
public
class
Wave
{
public
GameObject
enemyPrefab;
public
int
count;
public
float
rate;
}
游戲?qū)ο笊傻哪_本如下:public
class
EnemySpawner
:
MonoBehaviour
{
public
static
int
CountEnemyAlive
=
0;
public
Wave[]
waves;
public
Transform
START;
public
float
waveRate
=
0.2f;
private
Coroutine
coroutine;
private
void
Start()
{
coroutine
=
StartCoroutine(SpawnEnemy());
}
public
void
Stop()
{
//StopCoroutine(coroutine);
}
IEnumerator
SpawnEnemy()
{
foreach(Wave
wave
in
waves)
{
for(int
i
=
0;
i
<
wave.count;
i++)
{
CountEnemyAlive++;
GameObject.Instantiate(wave.enemyPrefab,
START.position,
START.rotation);
if(i!=wave.count-1)
yield
return
new
WaitForSeconds(wave.rate);
}
yield
return
new
WaitForSeconds(waveRate);
}
while(CountEnemyAlive
>
0)
{
yield
return
0;
}
//GameManager.Instance.Win();
}
}
圖4-12開發(fā)者可通過游戲?qū)ο笊善鬟M(jìn)行調(diào)整在游戲場景中生成交警的設(shè)計(jì)與實(shí)現(xiàn)在游戲場景中創(chuàng)建交警是先通過按UI上的創(chuàng)建交警按鈕,并選中可創(chuàng)建交警的位置進(jìn)行創(chuàng)建。并在一個(gè)Tag為MapCube和Layer為MapCube的名為MapCube的游戲?qū)ο笊仙山痪螒驅(qū)ο螅▓D4-13)。圖4-13MapCube的游戲?qū)ο驧apCube游戲?qū)ο笊嫌杏糜谏山痪?、升級交警、撤離交警和通過自身的顏色變化提示是否可以創(chuàng)建交警的腳本。MapCube生成交警代碼如下:
public
void
BuildTp(TP_Data
tpData)
{
this.tpData
=
tpData;
isUpgraded
=
false;
tpGO
=
GameObject.Instantiate(tpData.GoPrefab,
transform.position,
Quaternion.identity);
GameObject
effect
=
GameObject.Instantiate(buildEffect,
transform.position,
Quaternion.identity);
Destroy(effect,
1.5f);
}
MapCube升級交警的代碼如下:
public
void
UpgradeTp()
{
if
(isUpgraded
==
true)
return;
Destroy(tpGO);
isUpgraded
=
true;
tpGO
=
GameObject.Instantiate(tpData.GoUpgradedPrefab,
transform.position,
Quaternion.identity);
GameObject
effect
=
GameObject.Instantiate(buildEffect,
transform.position,
Quaternion.identity);
Destroy(effect,
1.5f);
}
MapCube撤離交警的代碼如下:public
void
DestroyTp()
{
Destroy(tpGO);
GameObject
effect
=
GameObject.Instantiate(buildEffect,
transform.position,
Quaternion.identity);
Destroy(effect,
1.5f);
isUpgraded
=
false;
tpGO
=
null;
tpData
=
null;
}
MapCube改變自身顏色的代碼如下:void
OnMouseEnter()
{
if(tpGO
==
null
&&
EventSystem.current.IsPointerOverGameObject()==false)
{
renderer.material.color
=
Color.green;
}
}
void
OnMouseExit()
{
renderer.material.color
=
Color.white;
}
在項(xiàng)目中創(chuàng)建一個(gè)保存交警信息(TP_Data)的腳本,用于存放交警的游戲?qū)ο?、升級交警的游戲?qū)ο?、生成交警所花費(fèi)的人力、升級交警所花費(fèi)人力。TP_Data的代碼如下:using
System.Collections;
using
System.Collections.Generic;
using
UnityEngine;
[System.Serializable]
public
class
TP_Data
{
public
GameObject
GoPrefab;
public
int
cost;
public
GameObject
GoUpgradedPrefab;
public
int
costUpgraded;
public
GoType
type;
}
public
enum
GoType
{
TrafficPolice
}
名為BuildTP的腳本是用于根據(jù)玩家手上的人力資源與MapCube上是否已經(jīng)存在游戲?qū)ο?,從而來判斷是否能在MapCube上生成交警和判斷是否能升級交警。且BuildTP腳本可讀取TP_Data的腳本來設(shè)置交警的數(shù)據(jù)(圖4-9)。圖4-14設(shè)置交警數(shù)據(jù)的游戲?qū)ο驜uildTP腳本上判斷是否能生成交警和是否能升級交警的腳本如下:void
Update()
{
if
(Input.GetKeyDown(KeyCode.Z))
{
OnNull();
}
if
(Input.GetMouseButtonDown(0))
{
if
(EventSystem.current.IsPointerOverGameObject()
==
false)
{
//交警的建造
Ray
ray
=
Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit
hit;
bool
isCollider
=
Physics.Raycast(ray,
out
hit,
1000,
LayerMask.GetMask("MapCube"));
if
(isCollider)
{
MapCube
mapCube
=
hit.collider.GetComponent<MapCube>();//得到點(diǎn)擊的mapCube
if
(selectedGoData
!=
null
&&
mapCube.tpGO
==
null)
{
Debug.Log("bbb");
//可以創(chuàng)建
if
(man
>=
selectedGoData.cost)
{
ChangeMoney(-selectedGoData.cost);
mapCube.BuildTp(selectedGoData);
}
else
{
//人力不夠
manAnimator.SetTrigger("Flicker");
}
}
else
if
(mapCube.tpGO
!=
null)
{
//升級處理
if
(mapCube.tpGO
==
selectedMapCube
&&
upgradeCanvas.activeInHierarchy)
{
StartCoroutine(HideUpgradeUI());
}
else
{
ShowUpgradeUI(mapCube.transform.position,
mapCube.isUpgraded);
}
selectedMapCube
=
mapCube;
}
}
}
}
}
在MapCube上會綁定一個(gè)用于升級交警和撤離交警的UI(圖4-15),是通過判斷玩家所擁有和資源和MapCube游戲?qū)ο笊鲜欠翊嬖诮痪M(jìn)行判斷而顯示,且判斷MapCube游戲?qū)ο笊辖痪欠褚呀?jīng)升級來播放動畫提示玩家交警已升級。圖4-15升級交警與撤離交警UIBuildTP上關(guān)于升級交警和撤離交警的代碼如下:void
ShowUpgradeUI(Vector3
pos,
bool
isDisableUpgrade
=
false)
{
StopCoroutine("HideUpgradeUI");
upgradeCanvas.SetActive(false);
upgradeCanvas.SetActive(true);
upgradeCanvas.transform.position
=
pos;
buttonUeractable
=
!isDisableUpgrade;
}
IEnumerator
HideUpgradeUI()
{
upgradeCanvasAnimator.SetTrigger("Hide");
yield
return
new
WaitForSeconds(0.8f);
upgradeCanvas.SetActive(false);
}
public
void
OnDestroyButtonDown()
{
if
(selectedMapCube.isUpgraded
==
true)
{
ChangeMoney(+(selectedGoData.costUpgraded+
selectedGoData.cost));
}
if
(selectedMapCube.isUpgraded
==
false)
{
ChangeMoney(+selectedGoData.cost);
}
selectedMapCube.DestroyTp();
StartCoroutine(HideUpgradeUI());
}
public
void
OnUpgradeButtonDown()
{
if
(man
>=
selectedMapCube.tpData.costUpgraded)
{
ChangeMoney(-selectedMapCube.tpData.costUpgraded);
selectedMapCube.UpgradeTp();
}
else
{
manAnimator.SetTrigger("Flicker");
}
StartCoroutine(HideUpgradeUI());
}
游戲場景中攝像機(jī)的操控設(shè)計(jì)與實(shí)現(xiàn)游戲中的攝像機(jī)玩家可以通過WSAD來控制攝像機(jī)的平行位置,并通過滾輪來調(diào)整攝像機(jī)的垂直位置。控制攝像機(jī)的代碼如下:public
float
speed
=
1;
public
float
mouseSpeed
=
60;
//
Update
is
called
once
per
frame
void
Update()
{
float
h
=
Input.GetAxis("Horizontal");
float
v
=
Input.GetAxis("Vertical");
float
mouse
=
Input.GetAxis("Mouse
ScrollWheel");
transform.Translate(new
Vector3(h
*
speed,
mouse*mouseSpeed,
v
*
speed)
*Time.deltaTime,Space.World);
}
游戲的暫停功能的設(shè)計(jì)與實(shí)現(xiàn)為了防止玩家手忙腳亂,游戲中會有暫停功能,玩家可通過UI中的暫停按鍵和繼續(xù)按鍵進(jìn)入暫停狀態(tài);在暫停狀態(tài)下,玩家依然可以生成交警和改變紅綠燈的時(shí)間。實(shí)現(xiàn)游戲暫停功能的代碼如下:public
void
OnStop()
{
Debug.Log("游戲暫停");
Time.timeScale
=
0;
}
public
void
UpStop()
{
Debug.Log("游戲繼續(xù)");
Time.timeScale
=
1;
}
游戲的打包和導(dǎo)出當(dāng)游戲編寫完成后,需要將項(xiàng)目打包并導(dǎo)出。在Unity3D的界面File中,選擇BuildSettings,就會顯示BuildSetting界面(圖4-16);將需要打包的場景導(dǎo)入,且選擇相應(yīng)的導(dǎo)出格式,之后按Build按鈕,即可實(shí)現(xiàn)打包并導(dǎo)出項(xiàng)目。圖4-16打開BuildSetting進(jìn)行打包游戲打包并導(dǎo)出完成后,即可獲得如圖4-17的文件圖4-17打包發(fā)布后的文件游戲測試游戲功能測試游戲的功能表的表頭分別是用例描述、測試步驟、預(yù)測結(jié)果和實(shí)際結(jié)果。表5-1游戲UI功能測試表用例描述測試步驟預(yù)測結(jié)果實(shí)際結(jié)果開始游戲在主界面按開始游戲按鈕進(jìn)入第一個(gè)游戲場景進(jìn)入第一個(gè)游戲場景退出游戲在主界面按退出游戲按鈕退出游戲程序退出游戲程序暫停游戲在游戲場景中按暫停游戲的按鈕暫停游戲,并退出暫停游戲菜單暫停游戲,并退出暫停游戲菜單返回主菜單在暫停界面中按返回主菜單按鈕返回游戲主菜單返回游戲主菜單繼續(xù)游戲在暫停界面中按繼續(xù)游戲按鈕繼續(xù)游戲繼續(xù)游戲開啟暫停游戲狀態(tài)在游戲場景中按暫停按鈕開啟狀態(tài)游戲狀態(tài),且玩家可繼續(xù)控制游戲開啟狀態(tài)游戲狀態(tài),且玩家可繼續(xù)控制游戲繼續(xù)游戲狀態(tài)在游戲場景中按繼續(xù)按鈕繼續(xù)游戲繼續(xù)游戲游戲剩余時(shí)間UI在游戲中等待游戲剩余時(shí)間減少剩余時(shí)間減少剩余時(shí)間減少游戲得分UI等待正常行駛車輛、酒駕車輛和行人到達(dá)終點(diǎn)正常行駛車輛、酒駕車輛和行人到達(dá)終點(diǎn),得分UI里的分?jǐn)?shù)提高正常行駛車輛、酒駕車輛和行人到達(dá)終點(diǎn),得分UI里的分?jǐn)?shù)提高測速UI等待正常行駛車輛和酒駕車輛通過測速攝像機(jī)測速UI顯示相應(yīng)的車速測速UI顯示相應(yīng)的車速生成測量酒精檢查點(diǎn)點(diǎn)擊測量酒精檢查點(diǎn)按鈕,在相應(yīng)的位置生成檢測酒精檢查點(diǎn)在相應(yīng)的位置生成檢測酒精檢查點(diǎn),且檢測酒精檢測點(diǎn)功能正常在相應(yīng)的位置生成檢測酒精檢查點(diǎn),且檢測酒精檢測點(diǎn)功能正常交警空閑人數(shù)UI完成生成測量酒精檢查點(diǎn)的操作;升級測量酒精檢查點(diǎn);撤離測量酒精檢查點(diǎn)交警空閑人數(shù)UI在生成時(shí)空閑人數(shù)數(shù)量減一;升級測量酒精檢查點(diǎn)人數(shù)減一;撤離測量酒精檢查點(diǎn)人數(shù)加一或加二交警空閑人數(shù)UI在生成時(shí)空閑人數(shù)數(shù)量減一;升級測量酒精檢查點(diǎn)人數(shù)減一;撤離測量酒精檢查點(diǎn)人數(shù)加一或加二結(jié)算UI等待游戲剩余時(shí)間為0時(shí)當(dāng)游戲剩余時(shí)間為0時(shí),顯示結(jié)算UI,并顯示玩家最終得分當(dāng)游戲剩余時(shí)間為0時(shí),顯示結(jié)算UI,并顯示玩家最終得分進(jìn)入下一關(guān)卡在結(jié)算UI中按下一關(guān)的按鈕進(jìn)入下一個(gè)進(jìn)入下一個(gè)在結(jié)算UI中返回主菜單在結(jié)算UI中按返回主菜單的按鈕返回主菜單返回主菜單表5-2游戲?qū)ο笊蓽y試用例描述測試步驟預(yù)測結(jié)果實(shí)際結(jié)果生成正常行駛的車輛在游戲場景中等待正常行駛車輛的生成生成正常行駛車輛,且按照指定好的路線移動生成正常行駛車輛,且車輛安裝指定好的路線移動生成行人在游戲場景中等待正常行駛行人的生成生成行人,且按照指定好的路線移動生成行人,且按照指定好的路線移動生成酒駕車輛在游戲場景中等待正常行駛酒駕的生成生成酒駕車輛,且按照指定好的路線移動生成酒駕車輛,且按照指定好的路線移動
總結(jié) 通過完成基于Unity3D交通管理模擬器的開發(fā),標(biāo)志著我畢設(shè)的完成,也標(biāo)志著我大學(xué)學(xué)習(xí)生涯的結(jié)束;在做畢設(shè)的過程中,我學(xué)習(xí)了不少關(guān)于塔防游戲制作流程的知識,在此過程中我受益匪淺。 在制作過程中,我學(xué)習(xí)了在不使用Navigation插件的情況下,如何完成一個(gè)3D的AI腳本制作,讓我了解AI的尋路系統(tǒng)的大致代碼邏輯。但要是從0開始制作AI腳本對我來說難度十分巨大,為此我在網(wǎng)上查閱了不少的教程,并針對我的畢設(shè)所需要實(shí)現(xiàn)的AI功能進(jìn)行學(xué)習(xí)。而在關(guān)于如何在一個(gè)游戲?qū)ο笊仙梢粋€(gè)新的游戲?qū)ο蟮墓δ軐?shí)現(xiàn)也讓我十分頭痛,因?yàn)樵谥谱鞔舜萎呍O(shè)的過程中我并沒有做過此功能,但我跟著網(wǎng)上開發(fā)一款塔防游戲的網(wǎng)課先做了一款基本功能完整的塔防游戲后,明白了該如何實(shí)現(xiàn)此功能并用于我的畢設(shè)游戲中。 為了游戲的玩法設(shè)計(jì),我在網(wǎng)上查詢了不少關(guān)于交警日常工作和城市規(guī)劃的知識;在此過程中,網(wǎng)上查閱的資料不止讓我將其簡化加入到了畢設(shè)游戲的玩法中,也讓我了解了另一個(gè)領(lǐng)域的知識,對我來說也是一種進(jìn)步。 但我對于我的畢設(shè)游戲并不是十分滿意,認(rèn)為還能加入更多的功能和關(guān)卡,如把游戲做成一個(gè)玩家不但能操作城市規(guī)劃還能控制一名交警在城市中進(jìn)行工作的游戲,但因本人的技術(shù)有限無法完成,為此我會在大學(xué)畢業(yè)后繼續(xù)深入學(xué)習(xí)Unity3D,提高自己的技術(shù)水平,以此來實(shí)現(xiàn)完成能表達(dá)自己觀點(diǎn)和可玩性更高的游戲。
參考文獻(xiàn)苗藝楠;申閆春.基于Unity3D的交通事故虛擬再現(xiàn)系統(tǒng)研究.北京:北京工業(yè)大學(xué)文法學(xué)部,1006-9348(2018)12-0122-05謝新慧,司占軍,劉恩銳.基于Unity3D的汽車展示系統(tǒng)的設(shè)計(jì)與制作.安徽:電腦知識與技術(shù)Vol.14,2018年11月第14期胡杭.基于Unity3D的移動塔防游戲設(shè)計(jì)與實(shí)現(xiàn)].廣州:現(xiàn)代計(jì)算機(jī),2019.02上沈馬躍,王藝超.基于Unity3D的交通安全交互式課件的設(shè)計(jì)與制作,安徽:電腦知識與技術(shù)期刊,2019.15-5徐欣祺,葉江涵,曹洪濤,高子軒,王詩語.基于機(jī)器學(xué)習(xí)與3D可視化技術(shù)的智慧交警系統(tǒng).現(xiàn)代信息科技,2019第3卷第13期,7月10日段薛孔,李潼,朱旭東,吳蘭.Unity3D游戲場景中人物角色動畫的設(shè)計(jì).安徽:電腦知識與技術(shù)期刊,2019.15-9仲曉慶,蔡朝暉,基于unity3D的塔防游戲開發(fā),黑龍江省:科技創(chuàng)新與應(yīng)用,2018年29期張茜,基于Unity3D的汽車功能模擬與駕駛場景演示系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn),東南大學(xué)毛翔宇,基于Unity3D的非真人玩家(NPC)智能行為分析,湖北武漢:武漢紡織大學(xué)計(jì)算機(jī)學(xué)院430200程廷,潘耘,姜瑞娟.基于Unity3D的蟻群算法仿真,北京:中國傳媒大學(xué)學(xué)報(bào)自然科學(xué),第24卷,第3期程彬彬,王明鑫,商楠.淺談游戲開發(fā)平臺Unity3D的應(yīng)用與發(fā)展前景.遼寧沈陽:沈陽理工大學(xué),110159盧毅,周維,高語陽.基于Unity3D引擎的虛擬測量設(shè)備的設(shè)計(jì).蘇州中科天啟遙感科技有限公司,江蘇蘇州215000;南京航空航天大學(xué)航天學(xué)院,江蘇南京210016任諾文.基于Unity3d的多出口行人流疏散仿真.內(nèi)蒙古:內(nèi)蒙古大學(xué).2018年4月25日李兵川.基于Unity3D游戲開發(fā)流程分析.重慶:重慶科創(chuàng)職業(yè)學(xué)院,402160
致謝隨著畢業(yè)設(shè)計(jì)的完成,我的大學(xué)生涯也步入了尾聲。在此特別感謝我的指導(dǎo)老師楊超老師,在我制作畢業(yè)設(shè)計(jì)的過程中給予了我不少的幫助。也感謝我的游戲設(shè)計(jì)與制作老師吳志達(dá)老師,是您帶我跨進(jìn)游戲制作大門,踏入了游戲制作的世界。同時(shí)也感覺網(wǎng)上無私分享的極客們,是你們讓我的游戲制作水平不斷進(jìn)步。最后感謝我的同學(xué)和室友,是你們陪伴了我走完四年美好的大學(xué)生活。在此我也感謝我的所有大學(xué)老師們,是你們讓我在四年的大學(xué)生活里不斷成長和進(jìn)步。由衷的感謝我的指導(dǎo)老師吳志達(dá),感謝關(guān)心幫助我的同學(xué),感謝所有的課程老師,感謝我的母校。在此向他們表示深深的謝意。
電腦故障檢測卡代碼表
1、特殊代碼"00"和"ff"及其它起始碼有三種情況出現(xiàn):
①已由一系列其它代碼之后再出現(xiàn):"00"或"ff",則主板ok。
②如果將cmos中設(shè)置無錯(cuò)誤,則不嚴(yán)重的故障不會影響bios自檢的繼續(xù),而最終出現(xiàn)"00"或"ff"。
③一開機(jī)就出現(xiàn)"00"或"ff"或其它起始代碼并且不變化則為主板沒有運(yùn)行起來。
2、本表是按代碼值從小到大排序,卡中出碼順序不定。
3、未定義的代碼表中未列出。
4、對于不同bios(常用ami、award、phoenix)用同一代碼代表的意義不同,因此應(yīng)弄清您所檢測的電腦是屬于哪一種類型的bios,您可查閱您的電腦使用手冊,或從主板上的bios芯片上直接查看,也可以在啟動屏幕時(shí)直接看到。
5、有少數(shù)主板的pci槽只有一部分代碼出現(xiàn),但isa槽有完整自檢代碼輸出。且目前已發(fā)現(xiàn)有極個(gè)別原裝機(jī)主板的isa槽無代碼輸出,而pci槽則有完整代碼輸出,故建議您在查看代碼不成功時(shí),將本雙槽卡換到另一種插槽試一下。另外,同一塊主板的不同pci槽,有的槽有完整代碼送出,如dell810主板只有靠近c(diǎn)pu的一個(gè)pci槽有完整代碼顯示,一直變化到"00"或"ff",而其它pci槽走到"38"后則不繼續(xù)變化。
6、復(fù)位信號所需時(shí)間isa與pci不一定同步,故有可能isa開始出代碼,但pci的復(fù)位燈還不熄,故pci代碼停要起始代碼上。
代碼對照表
00.已顯示系統(tǒng)的配置;即將控制INI19引導(dǎo)裝入。
01處理器測試1,處理器狀態(tài)核實(shí),如果測試失敗,循環(huán)是無限的。處理器寄存器的測試即將開始,不可屏蔽中斷即將停用。CPU寄存器測試正在進(jìn)行或者失敗。
02確定診斷的類型(正?;蛘咧圃欤?。如果鍵盤緩沖器含有數(shù)據(jù)就會失效。停用不可屏蔽中斷;通過延遲開始。CMOS寫入/讀出正在進(jìn)行或者失靈。
03清除8042鍵盤控制器,發(fā)出TESTKBRD命令(AAH)通電延遲已完成。ROMBIOS檢查部件正在進(jìn)行或失靈。
04使8042鍵盤控制器復(fù)位,核實(shí)TESTKBRD。鍵盤控制器軟復(fù)位/通電測試??删幊涕g隔計(jì)時(shí)器的測試正在進(jìn)行或失靈。
05如果不斷重復(fù)制造測試1至5,可獲得8042控制狀態(tài)。已確定軟復(fù)位/通電;即將啟動ROM。DMA初如準(zhǔn)備正在進(jìn)行或者失靈。
06使電路片作初始準(zhǔn)備,停用視頻、奇偶性、DMA電路片,以及清除DMA電路片,所有頁面寄存器和CMOS停機(jī)字節(jié)。已啟動ROM計(jì)算ROMBIOS檢查總和,以及檢查鍵盤緩沖器是否清除。DMA初始頁面寄存器讀/寫測試正在進(jìn)行或失靈。
07處理器測試2,核實(shí)CPU寄存器的工作。ROMBIOS檢查總和正常,鍵盤緩沖器已清除,向鍵盤發(fā)出BAT(基本保證測試)命令。.
08使CMOS計(jì)時(shí)器作初始準(zhǔn)備,正常的更新計(jì)時(shí)器的循環(huán)。已向鍵盤發(fā)出BAT命令,即將寫入BAT命令。RAM更新檢驗(yàn)正在進(jìn)行或失靈。
09EPROM檢查總和且必須等于零才通過。核實(shí)鍵盤的基本保證測試,接著核實(shí)鍵盤命令字節(jié)。第一個(gè)64KRAM測試正在進(jìn)行。
0A使視頻接口作初始準(zhǔn)備。發(fā)出鍵盤命令字節(jié)代碼,即將寫入命令字節(jié)數(shù)據(jù)。第一個(gè)64KRAM芯片或數(shù)據(jù)線失靈,移位。
0B測試8254通道0。寫入鍵盤控制器命令字節(jié),即將發(fā)出引腳23和24的封鎖/解鎖命令。第一個(gè)64KRAM奇/偶邏輯失靈。
0C測試8254通道1。鍵盤控制器引腳23、24已封鎖/解鎖;已發(fā)出NOP命令。第一個(gè)64KRAN的地址線故障。
0D1、檢查CPU速度是否與系統(tǒng)時(shí)鐘相匹配。2、檢查控制芯片已編程值是否符合初設(shè)置。3、視頻通道測試,如果失敗,則鳴喇叭。已處理NOP命令;接著測試CMOS停開寄存器。第一個(gè)64KRAM的奇偶性失靈
0E測試CMOS停機(jī)字節(jié)。CMOS停開寄存器讀/寫測試;將計(jì)算CMOS檢查總和。初始化輸入/輸出端口地址。
0F測試擴(kuò)展的CMOS。已計(jì)算CMOS檢查總和寫入診斷字節(jié);CMOS開始初始準(zhǔn)備。.
10測試DMA通道0。CMOS已作初始準(zhǔn)備,CMOS狀態(tài)寄存器即將為日期和時(shí)間作初始準(zhǔn)備。第一個(gè)64KRAM第0位故障。
11測試DMA通道1。CMOS狀態(tài)寄存器已作初始準(zhǔn)備,即將停
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單位管理制度匯編大合集【人事管理篇】十篇
- 單位管理制度合并匯編員工管理
- 《眩暈基礎(chǔ)知識》課件
- 單位管理制度分享大全【職工管理篇】十篇
- 單位管理制度范例合集【員工管理】十篇
- 單位管理制度呈現(xiàn)匯編人力資源管理十篇
- 單位管理制度呈現(xiàn)大合集【職工管理】十篇
- 《離心泵工作點(diǎn)》課件
- 貴都高速某合同段施工組織設(shè)計(jì)
- 《祝世界好友周快樂》課件
- 廣東省潮州市暨實(shí)高級中學(xué)2024-2025學(xué)年高二上學(xué)期9月月考語文試題
- GB/T 44415-2024基于全球衛(wèi)星導(dǎo)航的機(jī)動車制動性能路試檢驗(yàn)要求和方法
- 物流園區(qū)運(yùn)營管理合同
- 紅船女子(2022年安徽中考語文試卷記敘文閱讀題及答案)
- 空氣動力學(xué)實(shí)驗(yàn)方法:激光多普勒測速(LDV):原理與應(yīng)用
- 反思單元 沈括的“海陸變遷”說(習(xí)題教學(xué)設(shè)計(jì))2023-2024學(xué)年三年級上冊科學(xué)(大象版 河南專用)
- 2023-2024屆高考語文復(fù)習(xí)-閱讀與訓(xùn)練主題+工匠精神(含答案)
- 裝表接電培訓(xùn)課件
- 新蘇教版五年級上冊科學(xué)全冊期末復(fù)習(xí)知識點(diǎn)(彩版)
- 部編版小學(xué)一年級上冊道德與法治教學(xué)設(shè)計(jì)(第三、第四單元)
- CJJT 164-2011 盾構(gòu)隧道管片質(zhì)量檢測技術(shù)標(biāo)準(zhǔn)
評論
0/150
提交評論