基于Unity3d的交通管理模擬器_第1頁
基于Unity3d的交通管理模擬器_第2頁
基于Unity3d的交通管理模擬器_第3頁
基于Unity3d的交通管理模擬器_第4頁
基于Unity3d的交通管理模擬器_第5頁
已閱讀5頁,還剩54頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

摘要隨著我國經(jīng)濟的快速發(fā)展,大多數(shù)的家庭也購置了交通工具;但在上下班高峰期,車主在開車回家的路上已經(jīng)因為塞車而在路上浪費了不少的時間,對交規(guī)和道路規(guī)劃感到失望。但大多數(shù)的車主并不了解城市規(guī)劃部門和交警同志的做過為了盡可能的使交通流程所做出的努力。我想通過制作一款交通管理模擬器,讓車主們通過游戲的形式了解城市規(guī)劃部門和交警同志的不易。Unity3D(以下稱為U3D)是一款用于多平臺游戲開發(fā)的游戲引擎。它提供了一個完善的多平臺游戲系統(tǒng)。平臺之間的差異通常會影響產(chǎn)品開發(fā)的速度和進度,因此大多數(shù)開發(fā)人員會花很多時間在上面,但U3D出現(xiàn),標(biāo)志著此游戲引擎可以完美地移植到幾乎10個主流平臺之間。該游戲并不像名字那樣是一款嚴(yán)肅的游戲;恰恰相反,交通管理模擬器是一款氛圍幽默且易于上手的游戲。因為我想用通俗易懂的游戲方式讓人們大致的了解交通部門的日常工作,從而明白交通部門日常工作的艱辛。該游戲是以3D塔防游戲的系統(tǒng)作為基礎(chǔ)進行開發(fā),并加入了我不少的創(chuàng)新設(shè)計,且游戲?qū)⒁?D的形式制作。本文主要描述了該游戲的開發(fā)原理,游戲的設(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目錄第一章 緒論 緒論選題的目的和意義我認為塔防游戲是一種對玩家易于上手,卻難于精通的游戲類型,當(dāng)此游戲類型面向一般不接觸游戲的藍海用戶時也能讓他們快速上手并沉浸其中;但在大多數(shù)玩家眼里,塔防游戲的玩法已經(jīng)被游戲廠商們挖掘的差不多了;但我認為塔防游戲在玩法方面還是有不少可創(chuàng)新的空間,隨著手機游戲的崛起,越來越多的游戲廠商也開始在手機平臺上制作塔防游戲。且塔防游戲的玩法也與我的畢業(yè)設(shè)計,交通模擬器的游戲主題十分契合;即能讓玩家通過上帝視角觀察日常中馬路上的交通情況,也能讓玩家通過管理馬路上的交通情況,明白交警在日常管理交通的工作中的不易。國內(nèi)外研究現(xiàn)狀塔防游戲已經(jīng)存在很長時間了,從《桌面塔防游戲》的開始到War3時代功能強大的關(guān)卡編輯器的幫助下出現(xiàn)的各種讓人印象深刻的塔防游戲關(guān)卡。最初爆火的《植物大戰(zhàn)僵尸》、《獸人必須死》和其他具有不同主題的流行獨立游戲作品,再到近年來《部落戰(zhàn)爭》和其他手游杰作,塔防游戲的發(fā)展速度可以說是突飛猛進了。但是另一方面,塔防游戲注重細節(jié),例如防御單位的位置,進攻和防御價值,甚至在困難的情況下,通關(guān)方法也總是過于功利。關(guān)卡也是總是換湯不換藥,使得玩家很快就喪失興趣。結(jié)果,塔防多年以來一直未能擺脫玩家數(shù)量稀少的命運,許多玩家玩過塔防,但卻很少有人會堅持只玩一款塔防游戲。要想讓玩家一直只專注在一款塔防游戲上,是廣大游戲廠商難以做的。實際上,對于任何具有先天游戲性缺陷的游戲,打破命運并將其從小眾游戲轉(zhuǎn)變?yōu)榭梢哉嬲M入大眾游戲市場的并流行,仍然是那句老生常談的方法——要創(chuàng)新!但是,對于像塔防游戲這種具有相對固定玩法的游戲,創(chuàng)新應(yīng)該從哪里開始呢?如果您想制作高質(zhì)量的塔防游戲并想創(chuàng)新,那么游戲玩法上的創(chuàng)新無疑是重中之重。誠然,塔防的基本玩法仍然基于炮塔(或近似概念的道具、建筑)的放置和搭配,但這并不意味著沒有新的設(shè)計可用于塔防游戲的游戲創(chuàng)新。一方面,塔防游戲可以嘗試在炮塔升級系統(tǒng),戰(zhàn)術(shù),技能,地形和其他元素上進行創(chuàng)新,或者可以使用不同的游戲主題來制作戰(zhàn)斗和塔防策略的突破。另一方面,塔防游戲還可以為習(xí)慣于獨自作戰(zhàn)的游戲玩家創(chuàng)建實用且易于使用的交互式平臺,以增強游戲的社交游戲?qū)傩院褪褂蒙缃幌到y(tǒng)。在社交化的幫助下,塔防游戲具有更多的變量和更深入的體驗內(nèi)容。除了特定于產(chǎn)品的創(chuàng)新之外,當(dāng)今產(chǎn)品的同質(zhì)化也變得越來越嚴(yán)重,大多數(shù)的游戲公司都是以制作成本低廉的山寨網(wǎng)頁游戲和手機游戲的塔防游戲為主。在當(dāng)前這種情況下,優(yōu)質(zhì)的產(chǎn)品需要什么?想要獲得市場認可除了產(chǎn)品的創(chuàng)新外,也需要一些創(chuàng)新的營銷手段。傳統(tǒng)的塔防游戲,無論是獨立游戲還是Flash游戲,除了引入大量廣告流量外,便是依靠玩家之間的口口相傳,這種傳統(tǒng)在網(wǎng)頁游戲和手機游戲領(lǐng)域繼續(xù)。但是,在硬廣告的轉(zhuǎn)換率越來越差,相似產(chǎn)品的數(shù)量在增加并且參與者的選擇也在增加的情況下,這些舊的營銷方法變得越來越難以使用。論文組織結(jié)構(gòu)?論文從最初構(gòu)思到分析實踐,結(jié)合了在網(wǎng)上查詢的塔防游戲開發(fā)課程與資料和關(guān)于交通部門和城市規(guī)劃部門的工作資料,進行了一個交通管理模擬器游戲的設(shè)計與制作,其中,具體介紹游戲的制作步驟,包括游戲的系統(tǒng)功能設(shè)計與實現(xiàn)和與之相關(guān)的代碼編寫。論文分為五個章節(jié),各章節(jié)安排如下:?第一部分:緒論,主要闡述了該畢業(yè)設(shè)計制作的背景、國內(nèi)外對相關(guān)課題的研究現(xiàn)狀以及本設(shè)計的大概介紹;?第二部分:介紹了本文制作游戲使用的各類開發(fā)工具和Unity3D的大致介紹;?第三部分:詳細介紹游戲的各個模塊需求設(shè)計;第四部分:詳細介紹游戲的各個模塊的設(shè)計與實現(xiàn);??第五部分:詳細介紹了游戲各個功能的測試;?第六部分:總結(jié)了在完成畢設(shè)游戲的過程中的困難與今后的學(xué)習(xí)目標(biāo)。

開發(fā)工具介紹Unity3D游戲引擎Unity3D軟件介紹Unity3D(以下稱為U3D)是一款用于多平臺游戲開發(fā)的游戲引擎。它提供了一個完善的多平臺游戲系統(tǒng)。平臺之間的差異通常會影響產(chǎn)品開發(fā)的速度和進度,因此大多數(shù)開發(fā)人員會花很多時間在上面,但U3D出現(xiàn),標(biāo)志著此游戲引擎可以完美地移植到幾乎10個主流平臺之間。同時,U3D還提供了良好的交互式操作界面,可以完美地部署在Windows和MacOS上。該軟件中包含的五個工程視圖框架可以幫助設(shè)計人員對游戲中的對象進行分類,并觀察游戲創(chuàng)建的進度。其中,項目視圖主要存儲游戲內(nèi)資源文件,分層視圖主要將特定的游戲?qū)ο蠓胖迷谟螒驁鼍爸?,檢查者視圖主要用于描述游戲資源的信息,場景視圖主要在游戲中存儲模型的資源,游戲視圖用于觀察完成游戲的當(dāng)前結(jié)果。U3D還為我們提供了編譯多種腳本語言的通用環(huán)境。用戶可以根據(jù)需要調(diào)整默認編譯環(huán)境。Unity3D支持多種腳本語言,其中包含但不限于C#,javascript和boo。API接口Unity3D豐富API可以幫助您滿足各種需求。API是預(yù)定義的函數(shù),可用于為應(yīng)用程序和開發(fā)人員提供基于某些軟件或硬件的訪問例程集的功能,而無需訪問源代碼或了解內(nèi)部工作機制的細節(jié)。U3D具有完整的API函數(shù)庫集。使用這些API函數(shù),開發(fā)人員可以輕松實現(xiàn)項目初始化,調(diào)用功能模塊的每一幀,如何執(zhí)行觸發(fā)檢測和對觸發(fā)事件的響應(yīng)以及如何判斷是否進入該區(qū)域觸發(fā),是否在觸發(fā)區(qū)域,是否離開觸發(fā)區(qū)域,如何響應(yīng)滑動事件等。GUI(圖形用戶界面)此次畢業(yè)設(shè)計主要使用NGUI和UGUI開發(fā)用戶界面,GUI是英文圖形用戶界面的縮寫。Unity的GUI系統(tǒng)稱為UnityGUI。UnityGUI使您可以快速輕松地添加各種功能和各種界面元素,包括在創(chuàng)建GUI控件時實例化,定位和定義功能。只需編寫少量代碼即可完成GUI實例的創(chuàng)建,在屏幕上定位該實例,并在元素時執(zhí)行的腳本界面已激活。UGUI與Unity3D集成在一起,而NGUI是一個用戶界面插件,它擴展了為Unity游戲引擎開發(fā)的工具的功能。它還可以為開發(fā)人員提供快速便捷的用戶界面設(shè)計方法,以此加快游戲設(shè)計和制作。C#開發(fā)語言C#是由微軟公司開發(fā)并在.NETFramework上運行的高級面向?qū)ο蟮木幊陶Z言。C#與Java類似,是一種語言,一種工具。但是在這里我們需要知道Unity是跨平臺的,而C#不是跨平臺的語言。只是由于Mono的重新實現(xiàn),Unity才能使用C#進行開發(fā),因此我們可以在Unity上編寫C#代碼,且代碼語法清晰,類庫易于使用。因為以上的各種優(yōu)勢,為此C#是游戲開發(fā)者在Unity開發(fā)中首先考慮的語言。VisualStudio2019VisualStudio2019(以下稱為VS)是Microsoft獨立啟動的開發(fā)環(huán)境。其中,它支持最新的集成開發(fā)環(huán)境。VS還帶來了NETFramework4.6,MicrosoftVisualStudio2019CTP,并且還支持開發(fā)人員開發(fā)面向Windows的應(yīng)用程序。并支持MicrosoftSQLSever,IBM,Oracle數(shù)據(jù)庫等。

游戲需求設(shè)計游戲基本介紹交通管理模擬器是一款類3D塔防的游戲,玩家可通過修改場景中的紅綠燈的紅燈時間和綠燈時間來控制車輛通行綠燈的時間與行人過馬路的時間,且游戲在特定的場景內(nèi)會出現(xiàn)酒駕的車輛,玩家需要通過場景內(nèi)的測速攝像機得知場景內(nèi)是否存在酒駕的車輛,通過場景內(nèi)的測速攝像機的車輛,其速度會顯示在玩家的界面上,若玩家不處理場景中的酒駕車輛,當(dāng)酒駕車輛與行人碰撞發(fā)生意外時,玩家的游戲就會失敗;玩家可通過在公路上設(shè)置測量駕駛員的酒精含量的交警來阻攔酒駕車輛的通行。游戲通過游戲內(nèi)順利通過的車輛和行人的數(shù)量來給予玩家積分,在場景中限制的時間內(nèi)獲得的積分越多,玩家的評分就越高。若玩家游玩的場景內(nèi)發(fā)生意外,則游戲失敗。游戲?qū)ο蟮男枨笤O(shè)計正常行駛車輛的需求設(shè)計圖3-1正常行駛車輛的模型正常行駛車輛的AI邏輯:看見紅燈:停車看見綠燈:車輛行駛看到行人:停車經(jīng)過測速攝像機:GUI讀取車速看到測酒駕交警:停車等待酒精檢測,完成檢測后通過酒駕車輛的需求設(shè)計圖3-2酒駕車輛的模型酒駕車輛的AI邏輯:看到紅燈:不停車看到綠燈:不停車看到行人:不停車經(jīng)過測速攝像機:GUI讀取車速看到測酒駕交警:停車等待酒精檢測,完成檢測后銷毀自身行人的需求設(shè)計圖3-3行人的模型行人的AI邏輯:看到紅燈:行走 看到綠燈:不行走 看到行人:不行走紅綠燈的需求設(shè)計圖3-4紅綠燈的模型紅綠燈的AI邏輯:當(dāng)為紅燈時:阻止車輛通過,放行行人通過當(dāng)為綠燈時:發(fā)行車輛通過,阻止行人通過紅綠燈的操控:玩家通過點擊紅綠燈的游戲?qū)ο蠛?,紅綠燈會顯示可改變紅燈的時間和綠燈的時間的UI供玩家進行設(shè)置。交警的需求設(shè)計圖3-5交警的模型交警的AI邏輯:看到車輛時:阻止車輛前進,并對其進行檢查交警的操作:玩家通過點擊交警的游戲?qū)ο蠛?,交警會顯示升級和撤離的UI供玩家進行設(shè)置測速攝像機的需求設(shè)計圖3-6測速攝像機的模型高速攝像機的AI: 當(dāng)有車輛經(jīng)過時:把車輛測出來的速度顯示在玩家的UI上游戲功能的需求設(shè)計游戲?qū)ο笞詣由晒δ艿男枨笤O(shè)計:此功能的需求是:通過自動生成游戲?qū)ο竽_本的編寫,實現(xiàn)車流和人流自動生成(只是在游戲內(nèi)自動生成,但還是要通過開發(fā)者的設(shè)置才行)的功能。在游戲場景中生成交警功能的需求設(shè)計此功能的需求是:在游戲場景中通過GUI的Button選擇交警,并在游戲場景相應(yīng)的位置中生成交警、升級已經(jīng)生成的交警和撤離交警的功能。游戲場景中攝像機的操控的需求設(shè)計此功能的需求是:讓玩家能在游戲場景中通過鍵盤和鼠標(biāo)對游戲的視角進行平移和放大的功能。游戲的暫停功能的需求設(shè)計此功能的需求是: 為了防止玩家手忙腳亂,游戲中會有暫停功能,玩家可通過UI中的暫停按鍵和繼續(xù)按鍵進入暫停狀態(tài);在暫停狀態(tài)下,玩家依然可以生成交警和改變紅綠燈的時間。游戲場景的需求設(shè)計新手教程場景的需求設(shè)計:此場景(圖3-7)教會玩家如何游玩交通模擬器。圖3-7新手教程場景早高峰場景的需求設(shè)計:此場景(圖3-8)內(nèi)會出現(xiàn)行人和正常行駛的車輛。圖3-8早高峰場景晚高峰場景的需求設(shè)計:此場景(圖3-9)內(nèi)會出現(xiàn)行人、正常行駛的車輛和酒駕車輛。圖3-9晚高峰場景游戲的設(shè)計與實現(xiàn)游戲界面設(shè)計與實現(xiàn)游戲開始界面的設(shè)計與實現(xiàn)此界面為開始界面(圖4-1),其功能如下:玩家按開始按鈕時加載游戲第一個游戲場景玩家按退出按鈕時退出游戲給攝像機添加一個Animator使攝像機可以實現(xiàn)自動平移移動的功能。圖4-1游戲開始界面圖4-2攝影機的動畫TimeLine玩家操作界面的設(shè)計與實現(xiàn)此界面為玩家操作界面(圖4-3),其功能如下:顯示玩家的得分顯示游戲剩余的時間顯示空閑交警的數(shù)量顯示車輛的時速玩家可通過按測量酒精檢測站,在馬路上生成交警玩家可通過按暫停游戲彈出菜單(圖4-4)玩家可通過按暫停,讓游戲進入暫停狀態(tài),按繼續(xù)可繼續(xù)進行游戲圖4-3玩家操作界面游戲暫停界面的功能與實現(xiàn)此界面為游戲暫停界面(圖4-4),其功能如下:玩家可通過按繼續(xù)游戲按鈕繼續(xù)游戲玩家可通過按返回主菜單按鈕返回游戲圖4-4暫停游戲界面游戲分數(shù)結(jié)算界面的功能與實現(xiàn)此界面為游戲分數(shù)結(jié)算界面(圖4-5),其功能如下:在剩余時間為0時,顯示此界面顯示玩家最終得分在剩余時間為0時,顯示此界面玩家可通過按下一個按鈕進入下一關(guān)玩家可通過按返回主菜單按鈕返回主菜單圖4-5游戲分數(shù)結(jié)算界面游戲?qū)ο笤O(shè)計與實現(xiàn)正常行駛的車輛設(shè)計與實現(xiàn)正常行駛的車輛可根據(jù)場景內(nèi)的設(shè)置好的目標(biāo)點(Targetpoint)來實現(xiàn)自動尋路。車輛通過與Tag為Start的游戲?qū)ο筮M行碰撞,從而獲得Tag為Start的游戲?qū)ο笙碌淖訉ο髞慝@取目標(biāo)點,并存到數(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時開始執(zhí)行移動,先對準(zhǔn)子對象,再向子對象進行移動。當(dāng)車輛與子對象的距離小于0.2f時則車輛會向數(shù)組內(nèi)的下一個子對象進行移動。當(dāng)目標(biāo)點都移動完時,車輛會銷毀自身游戲?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)進行碰撞,并通過與子碰撞到的對象的Tag進行判斷該進行怎么樣的行動。當(dāng)Tag為Red(紅燈)、People(行人)和Car(車輛)時,速度將變成0以停止移動;當(dāng)Tag為Green(綠燈)時將進行移動;當(dāng)Tag為TrafficPilice(交警)和TrafficPiliceUpgrade(交警)時,將執(zhí)行交警腳本;若射線沒有與游戲?qū)ο筮M行碰撞,則移動。車輛的碰撞檢測代碼如下: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行碰撞時,車輛的速度將會變成0,并顯示車輛身上的Slider來表示車輛被測量酒精含量的等待時間;在時間結(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è)計與實現(xiàn)酒駕車輛的移動代碼與正常行駛的車輛一樣,但在射線與游戲物體發(fā)生碰撞時判斷條件不一樣,且功能不一樣;只有當(dāng)碰撞體的Tag為car(車輛)時,車輛的速度才會變成0,從而停止移動;當(dāng)Tag為TrafficPilice(交警)和TrafficPiliceUpgrade(交警)時車輛的速度將會變成0,并顯示車輛身上的Slider來表示車輛被測量酒精含量的等待時間;在時間結(jié)束后,車輛將銷毀自身;當(dāng)Tag為People(行人)時,游戲失敗,且顯示游戲失敗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è)計與實現(xiàn)行人與車輛的移動代碼與正常行駛的車輛沒有太大區(qū)別,除了在射線碰撞中Tag為Red(紅燈)與Tag為Green(綠燈)時結(jié)果以外且不與Tag為TrafficPilice(交警)和TrafficPiliceUpgrade(升級交警)的游戲?qū)ο筮M行碰撞檢測外;行人多了一個Animator組件(圖4-6),通過組件里的Bool值Walk來判斷行人是否在移動。圖4-6行人的Animator組件行人的動畫判斷腳本如下:if(nowSpeed

==

speed)

{

man.SetBool("Walk",

true);

}

else

if(nowSpeed

==

0)

{

man.SetBool("Walk",

false);

}

紅綠燈的設(shè)計與實現(xiàn)紅綠燈功能的是通過綠燈時間與紅的時間分別顯示和隱藏不同GameObject實現(xiàn)的,不同的GameObject內(nèi)的Tag不一樣,分別為Red(紅燈)和Green(綠燈)。圖4-7Tag為Green(綠燈)的游戲?qū)ο髨D4-8Tag為Red(紅燈)的游戲?qū)ο蠹t綠燈的根據(jù)綠燈時間和紅燈時間分別顯示和隱藏不同GameObject和在游戲場景中顯示紅燈時間和綠燈時間,是通過IEnumerator接口實現(xiàn)的;它是一個真正的集合訪問器,沒有它,就不能使用foreach語句遍歷數(shù)組或集合,因為只有IEnumerator對象才能訪問集合中的項,假如連集合中的項都訪問不了,那么進行集合的循環(huán)遍歷是不可能的事情了。實現(xiàn)根據(jù)綠燈時間和紅燈時間分別顯示和隱藏不同GameObject的代碼與顯示紅燈時間與綠燈時間的代碼如下: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;

}

}

玩家修改紅綠燈的紅燈時間與綠燈時間是通過紅綠燈游戲?qū)ο笊系囊粋€UI(圖4-9)來進行,且玩家只能輸入大于零的整數(shù),諾玩家輸入不為大于零的整數(shù)時,紅綠燈的游戲?qū)ο笊蠒棾鲥e誤提示(圖4-9)。圖4-9紅綠燈游戲?qū)ο笊系腢I圖4-10錯誤提示紅綠燈時間修改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è)計與實現(xiàn)游戲中的交警只是作為一個被車輛的射線碰撞測速判斷是否執(zhí)行酒精檢測的游戲?qū)ο?,所以交警的游戲?qū)ο笊喜o代碼,只有Tag為TrafficPilice(交警)和TrafficPiliceUpgrade(升級交警)的游戲?qū)ο?。測速攝像機的設(shè)計與實現(xiàn)測速攝像機的功能是通過OnTriggerEnter的接口實現(xiàn)的,OnTriggerEnter的功能是當(dāng)碰撞器進入觸發(fā)器時OnTriggerEnter被調(diào)用;所以當(dāng)Tag為Car(車輛)的游戲?qū)ο蟮腃ollider(碰撞體)進入測速攝像機的Collider(碰撞體)時,測速攝像機會讀取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ù):"

+

Speed*10

+

"KM/S";

}

}

游戲功能設(shè)計與實現(xiàn)游戲?qū)ο笞詣由傻脑O(shè)計與實現(xiàn)游戲?qū)ο蟮淖詣由墒峭ㄟ^IEnumerator接口和Instantiate實現(xiàn)的,且在此基礎(chǔ)上加入一個foreach進行遍歷;用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行調(diào)整在游戲場景中生成交警的設(shè)計與實現(xiàn)在游戲場景中創(chuàng)建交警是先通過按UI上的創(chuàng)建交警按鈕,并選中可創(chuàng)建交警的位置進行創(chuàng)建。并在一個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;

}

在項目中創(chuàng)建一個保存交警信息(TP_Data)的腳本,用于存放交警的游戲?qū)ο?、升級交警的游戲?qū)ο?、生成交警所花費的人力、升級交警所花費人力。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ū)ο螅瑥亩鴣砼袛嗍欠衲茉贛apCube上生成交警和判斷是否能升級交警。且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>();//得到點擊的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上會綁定一個用于升級交警和撤離交警的UI(圖4-15),是通過判斷玩家所擁有和資源和MapCube游戲?qū)ο笊鲜欠翊嬖诮痪M行判斷而顯示,且判斷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());

}

游戲場景中攝像機的操控設(shè)計與實現(xiàn)游戲中的攝像機玩家可以通過WSAD來控制攝像機的平行位置,并通過滾輪來調(diào)整攝像機的垂直位置??刂茢z像機的代碼如下: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è)計與實現(xiàn)為了防止玩家手忙腳亂,游戲中會有暫停功能,玩家可通過UI中的暫停按鍵和繼續(xù)按鍵進入暫停狀態(tài);在暫停狀態(tài)下,玩家依然可以生成交警和改變紅綠燈的時間。實現(xiàn)游戲暫停功能的代碼如下:public

void

OnStop()

{

Debug.Log("游戲暫停");

Time.timeScale

=

0;

}

public

void

UpStop()

{

Debug.Log("游戲繼續(xù)");

Time.timeScale

=

1;

}

游戲的打包和導(dǎo)出當(dāng)游戲編寫完成后,需要將項目打包并導(dǎo)出。在Unity3D的界面File中,選擇BuildSettings,就會顯示BuildSetting界面(圖4-16);將需要打包的場景導(dǎo)入,且選擇相應(yīng)的導(dǎo)出格式,之后按Build按鈕,即可實現(xiàn)打包并導(dǎo)出項目。圖4-16打開BuildSetting進行打包游戲打包并導(dǎo)出完成后,即可獲得如圖4-17的文件圖4-17打包發(fā)布后的文件游戲測試游戲功能測試游戲的功能表的表頭分別是用例描述、測試步驟、預(yù)測結(jié)果和實際結(jié)果。表5-1游戲UI功能測試表用例描述測試步驟預(yù)測結(jié)果實際結(jié)果開始游戲在主界面按開始游戲按鈕進入第一個游戲場景進入第一個游戲場景退出游戲在主界面按退出游戲按鈕退出游戲程序退出游戲程序暫停游戲在游戲場景中按暫停游戲的按鈕暫停游戲,并退出暫停游戲菜單暫停游戲,并退出暫停游戲菜單返回主菜單在暫停界面中按返回主菜單按鈕返回游戲主菜單返回游戲主菜單繼續(xù)游戲在暫停界面中按繼續(xù)游戲按鈕繼續(xù)游戲繼續(xù)游戲開啟暫停游戲狀態(tài)在游戲場景中按暫停按鈕開啟狀態(tài)游戲狀態(tài),且玩家可繼續(xù)控制游戲開啟狀態(tài)游戲狀態(tài),且玩家可繼續(xù)控制游戲繼續(xù)游戲狀態(tài)在游戲場景中按繼續(xù)按鈕繼續(xù)游戲繼續(xù)游戲游戲剩余時間UI在游戲中等待游戲剩余時間減少剩余時間減少剩余時間減少游戲得分UI等待正常行駛車輛、酒駕車輛和行人到達終點正常行駛車輛、酒駕車輛和行人到達終點,得分UI里的分數(shù)提高正常行駛車輛、酒駕車輛和行人到達終點,得分UI里的分數(shù)提高測速UI等待正常行駛車輛和酒駕車輛通過測速攝像機測速UI顯示相應(yīng)的車速測速UI顯示相應(yīng)的車速生成測量酒精檢查點點擊測量酒精檢查點按鈕,在相應(yīng)的位置生成檢測酒精檢查點在相應(yīng)的位置生成檢測酒精檢查點,且檢測酒精檢測點功能正常在相應(yīng)的位置生成檢測酒精檢查點,且檢測酒精檢測點功能正常交警空閑人數(shù)UI完成生成測量酒精檢查點的操作;升級測量酒精檢查點;撤離測量酒精檢查點交警空閑人數(shù)UI在生成時空閑人數(shù)數(shù)量減一;升級測量酒精檢查點人數(shù)減一;撤離測量酒精檢查點人數(shù)加一或加二交警空閑人數(shù)UI在生成時空閑人數(shù)數(shù)量減一;升級測量酒精檢查點人數(shù)減一;撤離測量酒精檢查點人數(shù)加一或加二結(jié)算UI等待游戲剩余時間為0時當(dāng)游戲剩余時間為0時,顯示結(jié)算UI,并顯示玩家最終得分當(dāng)游戲剩余時間為0時,顯示結(jié)算UI,并顯示玩家最終得分進入下一關(guān)卡在結(jié)算UI中按下一關(guān)的按鈕進入下一個進入下一個在結(jié)算UI中返回主菜單在結(jié)算UI中按返回主菜單的按鈕返回主菜單返回主菜單表5-2游戲?qū)ο笊蓽y試用例描述測試步驟預(yù)測結(jié)果實際結(jié)果生成正常行駛的車輛在游戲場景中等待正常行駛車輛的生成生成正常行駛車輛,且按照指定好的路線移動生成正常行駛車輛,且車輛安裝指定好的路線移動生成行人在游戲場景中等待正常行駛行人的生成生成行人,且按照指定好的路線移動生成行人,且按照指定好的路線移動生成酒駕車輛在游戲場景中等待正常行駛酒駕的生成生成酒駕車輛,且按照指定好的路線移動生成酒駕車輛,且按照指定好的路線移動

總結(jié) 通過完成基于Unity3D交通管理模擬器的開發(fā),標(biāo)志著我畢設(shè)的完成,也標(biāo)志著我大學(xué)學(xué)習(xí)生涯的結(jié)束;在做畢設(shè)的過程中,我學(xué)習(xí)了不少關(guān)于塔防游戲制作流程的知識,在此過程中我受益匪淺。 在制作過程中,我學(xué)習(xí)了在不使用Navigation插件的情況下,如何完成一個3D的AI腳本制作,讓我了解AI的尋路系統(tǒng)的大致代碼邏輯。但要是從0開始制作AI腳本對我來說難度十分巨大,為此我在網(wǎng)上查閱了不少的教程,并針對我的畢設(shè)所需要實現(xiàn)的AI功能進行學(xué)習(xí)。而在關(guān)于如何在一個游戲?qū)ο笊仙梢粋€新的游戲?qū)ο蟮墓δ軐崿F(xiàn)也讓我十分頭痛,因為在制作此次畢設(shè)的過程中我并沒有做過此功能,但我跟著網(wǎng)上開發(fā)一款塔防游戲的網(wǎng)課先做了一款基本功能完整的塔防游戲后,明白了該如何實現(xiàn)此功能并用于我的畢設(shè)游戲中。 為了游戲的玩法設(shè)計,我在網(wǎng)上查詢了不少關(guān)于交警日常工作和城市規(guī)劃的知識;在此過程中,網(wǎng)上查閱的資料不止讓我將其簡化加入到了畢設(shè)游戲的玩法中,也讓我了解了另一個領(lǐng)域的知識,對我來說也是一種進步。 但我對于我的畢設(shè)游戲并不是十分滿意,認為還能加入更多的功能和關(guān)卡,如把游戲做成一個玩家不但能操作城市規(guī)劃還能控制一名交警在城市中進行工作的游戲,但因本人的技術(shù)有限無法完成,為此我會在大學(xué)畢業(yè)后繼續(xù)深入學(xué)習(xí)Unity3D,提高自己的技術(shù)水平,以此來實現(xiàn)完成能表達自己觀點和可玩性更高的游戲。

參考文獻苗藝楠;申閆春.基于Unity3D的交通事故虛擬再現(xiàn)系統(tǒng)研究.北京:北京工業(yè)大學(xué)文法學(xué)部,1006-9348(2018)12-0122-05謝新慧,司占軍,劉恩銳.基于Unity3D的汽車展示系統(tǒng)的設(shè)計與制作.安徽:電腦知識與技術(shù)Vol.14,2018年11月第14期胡杭.基于Unity3D的移動塔防游戲設(shè)計與實現(xiàn)].廣州:現(xiàn)代計算機,2019.02上沈馬躍,王藝超.基于Unity3D的交通安全交互式課件的設(shè)計與制作,安徽:電腦知識與技術(shù)期刊,2019.15-5徐欣祺,葉江涵,曹洪濤,高子軒,王詩語.基于機器學(xué)習(xí)與3D可視化技術(shù)的智慧交警系統(tǒng).現(xiàn)代信息科技,2019第3卷第13期,7月10日段薛孔,李潼,朱旭東,吳蘭.Unity3D游戲場景中人物角色動畫的設(shè)計.安徽:電腦知識與技術(shù)期刊,2019.15-9仲曉慶,蔡朝暉,基于unity3D的塔防游戲開發(fā),黑龍江省:科技創(chuàng)新與應(yīng)用,2018年29期張茜,基于Unity3D的汽車功能模擬與駕駛場景演示系統(tǒng)的設(shè)計和實現(xiàn),東南大學(xué)毛翔宇,基于Unity3D的非真人玩家(NPC)智能行為分析,湖北武漢:武漢紡織大學(xué)計算機學(xué)院430200程廷,潘耘,姜瑞娟.基于Unity3D的蟻群算法仿真,北京:中國傳媒大學(xué)學(xué)報自然科學(xué),第24卷,第3期程彬彬,王明鑫,商楠.淺談游戲開發(fā)平臺Unity3D的應(yīng)用與發(fā)展前景.遼寧沈陽:沈陽理工大學(xué),110159盧毅,周維,高語陽.基于Unity3D引擎的虛擬測量設(shè)備的設(shè)計.蘇州中科天啟遙感科技有限公司,江蘇蘇州215000;南京航空航天大學(xué)航天學(xué)院,江蘇南京210016任諾文.基于Unity3d的多出口行人流疏散仿真.內(nèi)蒙古:內(nèi)蒙古大學(xué).2018年4月25日李兵川.基于Unity3D游戲開發(fā)流程分析.重慶:重慶科創(chuàng)職業(yè)學(xué)院,402160

致謝隨著畢業(yè)設(shè)計的完成,我的大學(xué)生涯也步入了尾聲。在此特別感謝我的指導(dǎo)老師楊超老師,在我制作畢業(yè)設(shè)計的過程中給予了我不少的幫助。也感謝我的游戲設(shè)計與制作老師吳志達老師,是您帶我跨進游戲制作大門,踏入了游戲制作的世界。同時也感覺網(wǎng)上無私分享的極客們,是你們讓我的游戲制作水平不斷進步。最后感謝我的同學(xué)和室友,是你們陪伴了我走完四年美好的大學(xué)生活。在此我也感謝我的所有大學(xué)老師們,是你們讓我在四年的大學(xué)生活里不斷成長和進步。由衷的感謝我的指導(dǎo)老師吳志達,感謝關(guān)心幫助我的同學(xué),感謝所有的課程老師,感謝我的母校。在此向他們表示深深的謝意。

電腦故障檢測卡代碼表

1、特殊代碼"00"和"ff"及其它起始碼有三種情況出現(xiàn):

①已由一系列其它代碼之后再出現(xiàn):"00"或"ff",則主板ok。

②如果將cmos中設(shè)置無錯誤,則不嚴(yán)重的故障不會影響bios自檢的繼續(xù),而最終出現(xiàn)"00"或"ff"。

③一開機就出現(xiàn)"00"或"ff"或其它起始代碼并且不變化則為主板沒有運行起來。

2、本表是按代碼值從小到大排序,卡中出碼順序不定。

3、未定義的代碼表中未列出。

4、對于不同bios(常用ami、award、phoenix)用同一代碼代表的意義不同,因此應(yīng)弄清您所檢測的電腦是屬于哪一種類型的bios,您可查閱您的電腦使用手冊,或從主板上的bios芯片上直接查看,也可以在啟動屏幕時直接看到。

5、有少數(shù)主板的pci槽只有一部分代碼出現(xiàn),但isa槽有完整自檢代碼輸出。且目前已發(fā)現(xiàn)有極個別原裝機主板的isa槽無代碼輸出,而pci槽則有完整代碼輸出,故建議您在查看代碼不成功時,將本雙槽卡換到另一種插槽試一下。另外,同一塊主板的不同pci槽,有的槽有完整代碼送出,如dell810主板只有靠近cpu的一個pci槽有完整代碼顯示,一直變化到"00"或"ff",而其它pci槽走到"38"后則不繼續(xù)變化。

6、復(fù)位信號所需時間isa與pci不一定同步,故有可能isa開始出代碼,但pci的復(fù)位燈還不熄,故pci代碼停要起始代碼上。

代碼對照表

00.已顯示系統(tǒng)的配置;即將控制INI19引導(dǎo)裝入。

01處理器測試1,處理器狀態(tài)核實,如果測試失敗,循環(huán)是無限的。處理器寄存器的測試即將開始,不可屏蔽中斷即將停用。CPU寄存器測試正在進行或者失敗。

02確定診斷的類型(正?;蛘咧圃欤H绻I盤緩沖器含有數(shù)據(jù)就會失效。停用不可屏蔽中斷;通過延遲開始。CMOS寫入/讀出正在進行或者失靈。

03清除8042鍵盤控制器,發(fā)出TESTKBRD命令(AAH)通電延遲已完成。ROMBIOS檢查部件正在進行或失靈。

04使8042鍵盤控制器復(fù)位,核實TESTKBRD。鍵盤控制器軟復(fù)位/通電測試??删幊涕g隔計時器的測試正在進行或失靈。

05如果不斷重復(fù)制造測試1至5,可獲得8042控制狀態(tài)。已確定軟復(fù)位/通電;即將啟動ROM。DMA初如準(zhǔn)備正在進行或者失靈。

06使電路片作初始準(zhǔn)備,停用視頻、奇偶性、DMA電路片,以及清除DMA電路片,所有頁面寄存器和CMOS停機字節(jié)。已啟動ROM計算ROMBIOS檢查總和,以及檢查鍵盤緩沖器是否清除。DMA初始頁面寄存器讀/寫測試正在進行或失靈。

07處理器測試2,核實CPU寄存器的工作。ROMBIOS檢查總和正常,鍵盤緩沖器已清除,向鍵盤發(fā)出BAT(基本保證測試)命令。.

08使CMOS計時器作初始準(zhǔn)備,正常的更新計時器的循環(huán)。已向鍵盤發(fā)出BAT命令,即將寫入BAT命令。RAM更新檢驗正在進行或失靈。

09EPROM檢查總和且必須等于零才通過。核實鍵盤的基本保證測試,接著核實鍵盤命令字節(jié)。第一個64KRAM測試正在進行。

0A使視頻接口作初始準(zhǔn)備。發(fā)出鍵盤命令字節(jié)代碼,即將寫入命令字節(jié)數(shù)據(jù)。第一個64KRAM芯片或數(shù)據(jù)線失靈,移位。

0B測試8254通道0。寫入鍵盤控制器命令字節(jié),即將發(fā)出引腳23和24的封鎖/解鎖命令。第一個64KRAM奇/偶邏輯失靈。

0C測試8254通道1。鍵盤控制器引腳23、24已封鎖/解鎖;已發(fā)出NOP命令。第一個64KRAN的地址線故障。

0D1、檢查CPU速度是否與系統(tǒng)時鐘相匹配。2、檢查控制芯片已編程值是否符合初設(shè)置。3、視頻通道測試,如果失敗,則鳴喇叭。已處理NOP命令;接著測試CMOS停開寄存器。第一個64KRAM的奇偶性失靈

0E測試CMOS停機字節(jié)。CMOS停開寄存器讀/寫測試;將計算CMOS檢查總和。初始化輸入/輸出端口地址。

0F測試擴展的CMOS。已計算CMOS檢查總和寫入診斷字節(jié);CMOS開始初始準(zhǔn)備。.

10測試DMA通道0。CMOS已作初始準(zhǔn)備,CMOS狀態(tài)寄存器即將為日期和時間作初始準(zhǔn)備。第一個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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論