版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
廣東東軟學(xué)院本科生畢業(yè)設(shè)計(論文)摘要‘禪’這個進(jìn)年來新誕生的游戲概念給游戲玩家?guī)硇碌挠螒蝮w驗,給游戲創(chuàng)造界帶來新的創(chuàng)作方向,還讓社會界看到了‘游戲不一定暴力’的一面改變著社會界對游戲的認(rèn)知。禪派游戲的玩法讓玩家從游玩過程中得到快樂,與大多游戲注重游玩結(jié)果這點背道而馳。禪派游戲與傳統(tǒng)游戲背道而馳的玩法概念也讓玩家的心情與煩躁背道而馳。從心理學(xué)的角度來看禪派游戲的游玩符合所有年齡的玩家。Unity3d游戲引擎它的功能非常強(qiáng)大。它擁有功能強(qiáng)大的API,多種動畫制作功能,多種游戲開發(fā)問題解決方案,多種游戲優(yōu)化方案,大量的游戲開發(fā)插件等豐富的功能。用Unity3d來開發(fā)禪派游戲在理論上是可行的。本文將探究基于Untiy3d游戲開發(fā)的方法論,再結(jié)合禪派游戲的概念來研究開發(fā)游戲的過程并且將其實現(xiàn)。關(guān)鍵詞:Unity3D開發(fā)游戲的過程禪派游戲AbstractAtpresent,mostofthegamesareeitherwinorlose,bloodyandviolent,andthegamesthatneedalotofkryptongoldalsoemergeinendlesslytoadddepressionandboredomtotheirhearts.Inthecurrentenvironment,anewconceptofgameisborn,andZengamesareborn.PeoplenolongerpursuetheresultsofthegamewhentheyplayZengames,buttakeaspiritualjourneyinthegameandfindamomentofpeaceinthegame.Zen,anewconceptofgame,bringsnewgameexperiencetogameplayers,newcreativedirectiontothegamecreationcommunity,andthesocialcommunityseesthatthe"gameisnotnecessarilyviolent"sidechangesthesocialcommunity'scognitionofthegame.TheZengame'splayingmethodletstheplayersgethappinessfromtheplayingprocess,whichiscontrarytothefactthatmostgamespayattentiontotheplayingresults.TheconceptofplayingmethodwhichiscontrarytothetraditionalgameandZengamealsomakestheplayer'smoodandfidgety.Fromapsychologicalpointofview,Zengamesaresuitableforallages.Unity3dgameengineisverypowerful.IthasapowerfulAPI,avarietyofanimationproductionfunctions,avarietyofgamedevelopmentproblem-solvingsolutions,avarietyofgameoptimizationprograms,alargenumberofgamedevelopmentplug-insandotherrichfunctions.ItistheoreticallyfeasibletodevelopZengameswithunity3d.Thistopicexploresthemeaningof"Zen"inthegameofZenSchool,andsummarizesthethoughtsofthegameofZenSchoolwiththedesigntheoryofthegameofZenSchool.WhileexploringthedesigntheoryofZenSchool,italsostudiesthemethodandprocessofunity'sactualgamedevelopment.ThetheoryofZengameiscombinedwiththemethodofunitygamedevelopmenttomakeZengame.Keywords:Unity3DTheprocessofdevelopinggamesZengame目錄TOC\o"1-3"\h\u第一章緒論 .3禪派游戲的現(xiàn)狀禪派游戲是進(jìn)幾年興起的的游戲概念,此概念誕生給游戲界帶來新的游戲創(chuàng)作方向。華人游戲制作人陳興漢是禪派游戲代表之一,他的代表作《風(fēng)之旅人》獲得11個獎項中的6項大獎?!讹L(fēng)之旅人》屬于禪派游戲?!吨参锎髴?zhàn)僵尸》中的禪境花園也是禪派概念的玩法。目前應(yīng)用了禪派概念的游戲成上升趨勢,很多小型獨立游戲開發(fā)團(tuán)隊也大量的利用此概念來開發(fā)游戲。心里學(xué)學(xué)家也將禪派游戲放在了心里學(xué)的研究行列。由此可見禪派游戲這個概念很有研究價值,每個游戲制作者必須去了解它。1.4論文組織結(jié)構(gòu)論文先將當(dāng)下的禪派游戲概念進(jìn)行解釋,而后結(jié)合Unity3d的游戲制作方法,將概念與制作方法融合以實際制作的形式展現(xiàn)出來。論文具體分為6個部分:第一部分:緒論。主要闡述了該畢業(yè)設(shè)計制作的背景以及課題的研究價值。第二部分:主要對unity3d開發(fā)原理與游戲開發(fā)過程進(jìn)行闡述。第三部分:先對禪派游戲這個概念進(jìn)行解釋。而后進(jìn)行需求分析第四部分:對課題作品的實現(xiàn)過程進(jìn)行描述。第五部分:對作品進(jìn)行打包封裝與測試的方法進(jìn)行描述。第六部分:結(jié)論。第二章游戲開發(fā)原理2.1游戲開發(fā)工具的介紹本課題中作品使用的開發(fā)工具是unity3d,接下來我就介紹一下這個工具。Unity3D是由UnityTechnologies開發(fā)的一個讓玩家輕松創(chuàng)建諸如\t"/item/Unity3D/_blank"三維視頻游戲、建筑可視化、實時\t"/item/Unity3D/_blank"三維動畫等類型互動內(nèi)容的多平臺的綜合型游戲開發(fā)工具,是一個全面整合的專業(yè)\t"/item/Unity3D/_blank"游戲引擎。Unity類似于Director,Blendergameengine,Virtools或TorqueGameBuilder等利用交互的圖型化\t"/item/Unity3D/_blank"開發(fā)環(huán)境為首要方式的軟件。其編輯器可運(yùn)行在Windows、Linux(目前僅支持Ubuntu和Centos發(fā)行版)、MacOSX下,可發(fā)布游戲至\t"/item/Unity3D/_blank"Windows、\t"/item/Unity3D/_blank"Mac、\t"/item/Unity3D/_blank"Wii、\t"/item/Unity3D/_blank"iPhone、\t"/item/Unity3D/_blank"WebGL(需要\t"/item/Unity3D/_blank"HTML5)、Windowsphone8和Android平臺。也可以利用Unitywebplayer\t"/item/Unity3D/_blank"插件發(fā)布網(wǎng)頁游戲,支持Mac和Windows的網(wǎng)頁瀏覽。它的\t"/item/Unity3D/_blank"網(wǎng)頁播放器也被Mac所支持。簡單來說unity3d是一個可跨平臺發(fā)發(fā)布游戲的游戲開發(fā)工具[14REF_Ref8811\r\h]。他內(nèi)置的物理引擎和封裝好的api可以大幅度的減少代碼編寫率,提高了開發(fā)效率,減少工作成本。很多軟件開發(fā)公司與獨立開發(fā)團(tuán)體也開發(fā)了很多面向unity的插件與框架,讓小團(tuán)體開發(fā)游戲也變得簡單。2.2游戲開發(fā)過程介紹2.2.1確立核心玩法開發(fā)初期就要確立游戲的核心玩法,后續(xù)的工作就要圍繞核心玩法進(jìn)行展開。所謂玩法就是游戲的本質(zhì),游戲不能拋開玩法。2.2.2制作demo這一項也尤為重要。當(dāng)確立了核心玩法之后就立馬做出一個小demo,小demo不需要太好看用方塊來代替人物也行。用小demo來驗證之前確立的核心玩法是否可行.例如:本課題游戲作品中的主角扮演鯊魚去追草魚時草魚逃跑的玩法,在開發(fā)初期就用方塊作為魚證明了玩法的可行。2.2.3確立游戲的世界觀與題材游戲制作脫離不了文學(xué),可以理解成一個微型小說。好的游戲背后都有一個完美的世界觀與主題,把這兩項確立之后游戲策劃就有了方向,游戲關(guān)卡或劇情該怎么設(shè)計不該怎么設(shè)計都得到了規(guī)范。2.2.4游戲框架在核心玩法建立后,策劃內(nèi)部就應(yīng)該開始搭建初步的游戲框架,包括系統(tǒng)框架、數(shù)值框架(主要為核心玩法數(shù)值)、主要玩法設(shè)計等一系列大綱。
完整的游戲框架應(yīng)該有鮮明的設(shè)計目的以及階段性目標(biāo)這樣才能方便安排版本計劃。
2.2.5美術(shù)風(fēng)格和配音風(fēng)格與制作標(biāo)準(zhǔn)美術(shù)需要根據(jù)策劃提供的世界觀以及需求文檔,來定下美術(shù)畫風(fēng)以及制作標(biāo)準(zhǔn)。制作標(biāo)準(zhǔn)需要與程序、策劃、美術(shù)的共同商討得出。在制作上需要考慮兼顧性能、性價比以及感觀接受度等方面的因素,游戲制作往往會采用重要的部分的美術(shù)表現(xiàn)或者完成度較高的美術(shù)表現(xiàn),而比較不是特別重要的部分大多數(shù)會采用簡單精致的美術(shù)表現(xiàn)。配音需要根據(jù)玩法,玩家控制的主角所處的環(huán)境以及世界觀來設(shè)定,和美術(shù)一樣制作標(biāo)準(zhǔn)需要程序、策劃和音樂負(fù)責(zé)人的共同討論得出REF_Ref7583\r\h[6]。2.2.6開發(fā)階段核心玩法確定后策劃就可以從這個核心玩法中提取幾個關(guān)鍵詞,而這幾個關(guān)鍵詞就是接下來游戲開發(fā)周期的核心工作內(nèi)容。這幾個關(guān)鍵詞將決定游戲開發(fā)的重點向以及人員分配,就一般而言這幾個關(guān)鍵詞對應(yīng)的就是,基礎(chǔ)戰(zhàn)斗(核心玩法),玩法的深度,核心系統(tǒng)循環(huán)以及核心數(shù)值。常見的游戲都會有戰(zhàn)斗場景只是重要性和復(fù)雜程度有所不同。例如動作類的游戲基礎(chǔ)戰(zhàn)斗就顯得非常重要,大多數(shù)要在基礎(chǔ)戰(zhàn)斗中花很多時間和精力去調(diào)試,而且步驟也要環(huán)環(huán)相扣,如果前面的環(huán)節(jié)沒有調(diào)整好,就會造成后面環(huán)節(jié)的工作混亂,找不出問題所在。第三章游戲需求分析3.1禪派游戲概念的基本介紹本課題的作品的游戲類型是禪派游戲,先解釋一下什么是禪派游戲?禪派游戲這個概念是個很新的概念,它區(qū)別于其他類別游戲不講究輸贏,沒有暴力與血腥單純只是讓玩家在美麗的世界里游玩,背景配上輕松緩慢的音樂。讓生活在浮躁世界的玩家在附有輕松的世界里得到片刻安寧。例如:讓玩家扮演的角色走在花叢繚繞的小道上,玩家看著美麗的花和翩翩起舞的蝴蝶,音頻配上有鳥叫聲與風(fēng)聲作為采樣的輕松的音樂。在禪派游戲中,玩家能夠徹底忘懷在多數(shù)情況下所需背負(fù)的一切心里包袱,在持續(xù)控制的特色角色和不斷流轉(zhuǎn)的美麗風(fēng)光的陪伴下,享受自己獨處安逸的時光。就如禪派游戲奠基人也是世界級游戲制作人的陳星漢說的“游戲可以和電影,書籍一樣解決人們情感訴求。游戲為何稱其為游戲,首要原因便在于其人為地給玩家設(shè)定了很多限制,并讓玩家只能在這些限制之內(nèi)進(jìn)行一些規(guī)定好的行為,并旨在達(dá)成某一指定結(jié)果。但禪派玩法卻盡可能地取消了游戲內(nèi)的諸多的限制。游戲針對玩家的行為施加正反饋或負(fù)面反饋,以便是鼓勵或懲罰玩家行為,引導(dǎo)玩家進(jìn)行正確的游戲戰(zhàn)略性行動。但禪派玩法卻舍棄了大多數(shù)與玩家行為相關(guān)的游戲反饋(無論是正反饋還是負(fù)反饋)。游戲是一門展現(xiàn)交互的藝術(shù)。但禪派玩法大多數(shù)具有很低的交互性。以標(biāo)準(zhǔn)的游戲定義的角度來看這類的禪式玩法甚至都不可以被直接稱作為“游戲”。然而,對于一小部分明白怎么利用這一玩法的游戲開發(fā)者而言,正是這一逆流游戲玩法的禪派玩法,能夠讓玩家產(chǎn)生大多數(shù)主流游戲都難以到達(dá)的心流體驗。不同玩家玩禪派游戲的體驗上也會有差異,根植于玩家們對于這一模式的了解程度與使用方式的差異之中。禪派游戲通過其所欠缺的交互性要素,向我們宣告了這樣一條啟示:我們在游戲中所獲得的歡樂的源泉,并不在游戲本中帶來的,而是源于我們自己的內(nèi)心。而并非一定需要獲得某一外在條件我才能感到快樂。3.2課題游戲作品的介紹本課題的作品的游戲類型是禪派游戲,玩家扮演一條魚在大海中漫無目的的游,餓了就吃東西,有天敵來了就躲避。配合著優(yōu)美的背景音樂,體驗海洋的美麗與生命的美好。當(dāng)生存環(huán)境發(fā)生巨大改變已經(jīng)不適合生物生活時你扮演的魚和其他的魚一樣為了活下去開啟了新的旅程。玩家在游玩過程中需要關(guān)注饑餓值減少程度,適當(dāng)?shù)娜フ覍な澄铮瓮骐y度幾乎沒有。游戲中主角的種類分為食草魚和鯊魚。當(dāng)玩家選擇扮演食草魚時,玩家控制食草魚游泳和吃水草。在游戲中敵人就是鯊魚,鯊魚發(fā)現(xiàn)玩家扮演的食草魚時它會向食草魚發(fā)起攻擊,這時玩家就需要控制食草魚躲避鯊魚的攻擊。本游戲中所有魚類有饑餓值,主角扮演的魚類有饑餓值,其他的系統(tǒng)控制的魚類也設(shè)置了饑餓值,系統(tǒng)控制的魚饑餓值到一定數(shù)值時,系統(tǒng)就會調(diào)用尋找食物功能的方法塊,當(dāng)魚類發(fā)現(xiàn)食物時魚類就會去吃食物。地圖中的食物是有限的,當(dāng)食物減少到一定量時,系統(tǒng)會在游戲中隨機(jī)生成少量食物來補(bǔ)充食物不足,當(dāng)也會有很多電腦與沒有食物吃而死亡。游戲系統(tǒng)會在玩家選定扮演的魚類時開始計時,當(dāng)規(guī)定時間到時,所有的食物將會消失,所有魚類會游向在地圖中隨機(jī)生成的傳送門,海洋中的植物會消失,玩家控制主角游進(jìn)傳送門游戲結(jié)束,游戲回到主頁。3.3游戲系統(tǒng)功能需求描述標(biāo)向后拖動魚頭就會向下,再配合按下w鍵玩家控制的魚就會向下潛。鼠標(biāo)向前推動魚頭就會向上抬,同理再配合按下w鍵玩家控制的魚就會向上浮。鼠標(biāo)向左移動魚頭也會以一個恒定的角速度向左移動,配合w鍵魚會向左移動。鼠標(biāo)向右移動魚頭也會一個恒定的角速度向右移動,配合w鍵魚會向右轉(zhuǎn)彎,魚類前進(jìn)有初速度,表現(xiàn)形式由慢變快,再到勻速前進(jìn)狀態(tài),此項功能要將盡可能模仿現(xiàn)實中魚類游動狀態(tài)。向下潛水時魚類頭部朝下,向上浮時魚類頭部朝上,左右轉(zhuǎn)彎時角速度設(shè)置的剛剛好。功能名稱功能描述玩家扮演的鯊魚吃小魚功能玩家可以利用魚類游動的功能控制鯊魚游到食草魚身邊,當(dāng)玩家用魚頭去觸碰食草魚時,食草魚會消失。主角鯊魚的饑餓值會減少。AI控制的魚類自動巡游功能除了玩家控制的主角魚以外其他的電腦控制魚需要像現(xiàn)實中的魚一樣能在游戲場景中的海洋中自動巡游。自動巡游范圍高度不高出海洋平面與海底之間的高度,面積小于等于場景面積。電腦控制的魚類巡游過程中遇到巖石要自動避開,遇到海底山丘要自動避開或者翻越。魚類巡游的速度食草魚和鯊魚不同,食草魚游動的速度相對的比鯊魚慢。AI控制的魚類尋找食物與吃食物功能當(dāng)AI控制的魚類飽腹值下降到一定值的時候魚類就會去尋找食物,發(fā)現(xiàn)食物時魚類會把食物吃掉來減少饑餓值。食物草魚當(dāng)飽腹值下降到一定值時草魚會AI控制的鯊魚追逐食草魚與食草魚逃跑功能當(dāng)AI控制的鯊魚尋找食物時發(fā)現(xiàn)了食草魚,鯊魚會去追逐食草魚,這時草魚會做擺脫動作。例如突然向上游,或者突然向左游。鯊魚會緊追著食草魚。玩家控制扮演的吃草魚吃草功能玩家可以利用魚類游動功能控制食草魚游到草旁邊,去吃草來減少饑餓值,當(dāng)玩家控制主角食草魚的魚頭碰到了海底的水草,水草會消失,魚類的饑餓值會增加。3.4系統(tǒng)開發(fā)運(yùn)行環(huán)境設(shè)備:pc電腦端操作系統(tǒng):MicrosoftWindows10第四章游戲設(shè)計與實現(xiàn)4.1主界面設(shè)計本游戲作品分為兩個場景:場景1:主要用于放置主界面和玩家用來選擇角色。場景2:游戲中的游戲關(guān)卡場景。4.1.1主界面中的場景設(shè)計本游戲作使用一個游戲場景來充當(dāng)游戲的主界面,將其場景命名為Maininterface.本場景分為兩個模塊,分別是海面以上與海面一下。游戲按照分辨率按照1680*1050來設(shè)計游戲中相機(jī)的視角就是玩家所能看到的畫面,以下就以相機(jī)的視角為切入點來描述本作品的主界面中的場景設(shè)計。圖4-1海面上的場景效果這個主界面場景設(shè)計主旨是要突顯夜晚月下海面風(fēng)景的美麗。場景中使用的是月圓是的夜晚繁星點綴的skybox和星星粒子,海面使用會生成海浪的動畫模型。相機(jī)放在海平面之上,面朝明月,天和海各站相機(jī)的50%。用寬的夜空與遼闊的海面來體現(xiàn)場景的宏大。燈光做了動畫處理,具體控制directionlight中的intensity的大小與軸向作規(guī)則旋轉(zhuǎn),讓月光與海平面更加生動。圖4-2海底的地形圖海底場景主要用來充當(dāng)玩家選擇要扮演的角色的選擇界面的背景。海底場景模型分成兩個小型Terrain。將不同的植物模型一個個按放上去,1號terrain的植物分布明顯比2號terrain多。因為相機(jī)會落在1號Terrain中,玩家的視角都在1號terrain中,所以1號terrain的搭建要比2號terrain復(fù)雜許多。海底放上食草魚以及鯊魚模型,用來作為給玩家直觀選擇主角模型的???。例如當(dāng)玩家選擇鯊魚時就會調(diào)用草魚身上腳本代碼的hide()函數(shù)來隱藏草魚模型。玩家就能直觀的看見自己將要選擇的角色的樣子。當(dāng)然海底只有植物模型和巖石模型是不夠的,還需要加入海水渲染以及其他的魚群,再使用腳本讓魚群自由的游動,展現(xiàn)一個擁有生機(jī)的海底。這樣才能更好看。4.1.2主界面中的UI設(shè)計本作品的主界面ui設(shè)計遵循的是簡潔明了美觀的設(shè)計理念。與玩家交互簡潔,讓玩家一看就知道怎么操作。之前在主界面中的場景設(shè)計這一節(jié)提到過,本場景分為兩個模塊,分別是海面以上與海面一下。因此ui也分為分別是海面以上與海面一下兩個模塊。海面以上顯示游戲名稱,為了襯托月下海面的風(fēng)景,選擇將alive這個image做成富有科幻意味的image文字。打開游戲時alive這個游戲logo下的組件canvasgroup中的alpha設(shè)置成0,這樣打開游戲時游戲logo被隱藏,玩家看到的是遼闊美麗的海面,1秒種后游戲logo組件canvasgroup中的alpha從0在2秒內(nèi)增加到1,游戲logo從透明漸漸的變得清晰。當(dāng)游戲logo組件canvasgroup中的alpha增加到1時,就會顯示交互提示”按任意鍵開始游戲”。交互提示”按任意鍵開始游戲”采用同樣animation控制canvasgroup中的alpha實現(xiàn)緩慢閃爍。這是玩家就可以按任意鍵與游戲交互。圖4-3UI界面玩家按下任意鍵以后調(diào)用hide函數(shù)隱藏掉海面上的ui模塊后相機(jī)隨即做勻速下落落入海中。角色模型提前放在了相機(jī)下落的軌跡上,當(dāng)相機(jī)的視角的中心與角色模型相交時。相機(jī)停止運(yùn)動開啟海面一下的ui模塊。海面下的ui模塊有3個button組成。分別為左右兩個箭頭按鍵和一個開始游戲按鍵。按下左右兩個箭頭按鍵,角色模型隨即切換。這里的角色模型代表的是玩家開始游戲后扮演角色(玩家選擇鯊魚開始游戲后就已鯊魚為扮演角色游玩)。玩家點擊箭頭按鍵時角色模型會切換。選好角色后點擊開始游戲按鍵進(jìn)入下一個場景。圖4-4選擇扮演食物草魚圖4-5選擇扮演鯊魚圖4-6海底植物分布圖4.1.3主界面場景制作過程場景地形制作。地形搭建等于施工,需求產(chǎn)生圖紙,圖紙再交到美工手上。為了保證設(shè)計和結(jié)果不出現(xiàn)偏差,策劃和美工就要按規(guī)定的常數(shù)進(jìn)行設(shè)計。先按策劃的參數(shù)創(chuàng)建一個Terrain設(shè)置其大小,把它移動到規(guī)定好的坐標(biāo)中。本作品的地形參數(shù)標(biāo)準(zhǔn)以相機(jī)的視角大小作為標(biāo)準(zhǔn)進(jìn)行設(shè)計,相機(jī)的視角長度被規(guī)范在地形的三分之二里。把植物密集度縮小視界范圍里REF_Ref11473\r\h[7]。本場景中ui用ugui制作。先在場景中創(chuàng)建一個Canvas,然后在Canvas下創(chuàng)建要用到UI控件。本作場景要用到的UI控件分別為三個button,一個text控件用來制作交互提示”按任意鍵開始游戲”,一個image控件用來制作游戲logo。4.1.4主界面場景功能實現(xiàn)剛打開游戲時游戲logo隱藏,2秒后logo緩緩顯示實現(xiàn)過程如下:先將logo控件上的組件canvasgroup中的Alpha設(shè)置為0,創(chuàng)建腳本。成員變量float
timer;//游戲開始時幀時間累加
float
HowMuchtimeShowLogo;//多少時間后顯示游戲logo
float
index;//變量索引
CanvasGroup
Group;//canvas
grouo組件
bool
isshow=false;//logo是否已顯示
float
Speed;//logo顯示的速度
腳本代碼中應(yīng)該至少有一個show()方法函數(shù)和重寫update()方法,unity內(nèi)置類中有個time類。這里用timer+=Time.deltaTime來記錄游戲時間的增長。Time.deltaTim表示從上一幀到當(dāng)前幀時間,以秒為單位。又稱增量時間。接著就實現(xiàn)shwo()方法。
public
void
show()
{
timer
+=
Time.deltaTime;
if
(timer
>=
HowMuchtimeShowLoge&&isshow==false)
/*判斷當(dāng)前時間是否已經(jīng)到了顯示游戲logo的時間*/
{index=
Mathf.Lerp(index,
1,
Speed
*
Time.deltaTime);//用插值將index從0增長到1
if
(Mathf.Abs(1
-
index)
<
0.05f)//當(dāng)1-index的絕對值小于0.05時就當(dāng)index已經(jīng)完全為1
{
isshow
=
true;//logo已經(jīng)顯示完畢
index
=
1;
}Group.alpha
=
index;//每次調(diào)用show()都將index賦值給alpha速度
}
讓Show()方法在update方法里調(diào)用。繼承了MonoBehaviour的代碼腳本每一幀都會去調(diào)用update方法。CanvasGroupGroup賦值這里有兩個用的是兩個方法第一個方法是將CanvasGroupGroup的訪問權(quán)限寫成public,這樣的話就在unity3d的控制面板上設(shè)置給group對象賦值,賦值過程就是用鼠標(biāo)將對應(yīng)的CanvasGroup主鍵拖進(jìn)Group中這樣就賦值好了。第二個方法是使用getCompent<>()來獲取組件。Group=GetCompent<CanvasGroup>()REF_Ref11208\r\h[13]將其寫在Start()方法中,這樣就能獲取Group組件。使用以上實現(xiàn)法可以實現(xiàn)交互提示”按任意鍵開始游戲”閃爍。玩家接下來按下任意鍵后logo和交互提示”按任意鍵開始游戲”瞬間消失,然后相機(jī)會落下水面。實現(xiàn)代碼如下:logoCr
logeshowControl;//logoCr為logo上掛載腳本的名稱.
Camera
mainCamera;
GameObject
Laber;//交互提示
Camera
CameraInthesky;//海面上的相機(jī)
Void
Update(){
if
(timer
>=
logeshowControl.HowMuchtimeShowLoge
&&
Input.anyKey)
{iskeydown
=
true;}
if
(iskeydown)
{laber.SetActive(false);logeshowControl.gameObject.SetAction(false)
if
(CameraInthesky.transform.position.y
<=
181.15f)
{
CameraInthesky.gameObject.SetActive(false);
CameraIntTheWater.enabled
=
true;CameraIntTheWaterMove();
}
else
{
CameraIntheskyMove()
;
}
}
}
實現(xiàn)邏輯其實很簡單,首先將取到logo對象上的logoCr腳本從而獲取里面的變量值。獲取變量值后判斷l(xiāng)ogo是否已顯示完畢且玩家在鍵盤上是否按下任意鍵,這兩個條件都達(dá)成后,對logo和交互提示進(jìn)行隱藏。隱藏的辦法用到了setActive()這個方法,給這個方法里傳入falselogo的活動就會被關(guān)閉掉從而達(dá)到隱藏的效果。SetAction是GameObject類中的方法函數(shù),所以寫成logeshowControl.gameObject.SetAction(false)。本作品相機(jī)分為海面上的與海面下的兩個相機(jī)。當(dāng)海面上的相機(jī)向下落至與海面y坐相等時,海面上的相機(jī)關(guān)閉運(yùn)動。海面下的相機(jī)開啟運(yùn)動。弄清楚相機(jī)實現(xiàn)邏輯后我們使用GetCompent<Camera>();取到了在海面上和海面下的camera。取到camera后先用enabled=false進(jìn)行隱藏。public
void
CameraIntheskyMove()
{CameraInthesky.transform.position
=
Vector3.Lerp(CameraInthesky.transform.position,
new
Vector3(CameraInthesky.transform.position.x,
180.15f,
CameraInthesky.transform.position.z),
Cameraspeen
*
Time.deltaTime);}
圖4-7海底相機(jī)以上代碼是相機(jī)運(yùn)動的功能實現(xiàn)。我們用改變相機(jī)transform.position的值來讓相機(jī)移動。先讓x與z不變,利用再利用vector3.Lerp插值讓y值以Camerasppen*Time.deltatTime改變到180.15這里海平面的y坐標(biāo)為181.15。我們用transform.position.y的辦法取到y(tǒng)坐標(biāo)的值,然后用if判斷它是否已經(jīng)小于等于海平面y坐標(biāo)的值。如果大于就調(diào)用海面上的相機(jī)移動方法。如果等于就調(diào)CameraInthesky.gameObject.SetActive(false)將海面上的相機(jī)的活動停止。停止海面上的相機(jī)以后隨即開啟海面下的相機(jī),然后調(diào)用已經(jīng)寫好的海面下相機(jī)移動的方法,海面下的相機(jī)開始下潛。相機(jī)下潛到預(yù)設(shè)好能看見角色模型的深度,就停止運(yùn)動。判斷是否到達(dá)預(yù)設(shè)深度的邏輯和海面上的相機(jī)一樣。相機(jī)停止運(yùn)動后隨即開啟海底模塊的UI界面。海面下的模塊主要功能是給玩家選擇扮演的角色。我們以選擇到哪個模型就隱藏除了這個模型以外的其他模型。所以使用數(shù)組來存儲player的gameObject。從代碼中可以看出如果index為0時那么存在player[0]的GameObject會調(diào)用SetAction(true)從而顯示出來,其他的player會被用foreach遍歷調(diào)用SetAction(false)從而隱藏起來。public
void
clicklButton()
{index--;if
(index
<
0)index
=
player.Length-1;
foreach(GameObject
p
in
player){p.SetActive(false);
}player[index].SetActive(true);};
我們使用監(jiān)聽事件對UI按鍵進(jìn)行監(jiān)聽,首先我們將代碼腳本拖到button組件中額度onclick()中然后選擇好監(jiān)聽方法,這里我們選擇監(jiān)聽clicklButton()這個方法,當(dāng)玩家用鼠標(biāo)去點擊左箭頭UI按鍵時clicklButton()方法會被調(diào)用。clicklButton()實現(xiàn)了按下右箭頭button角色模型切換的功能。此方法是通過控制存有角色GameObject數(shù)組的索引來取數(shù)組里面的值,然后再用SetAction()來控制值的活動讓其顯現(xiàn)。索引以外的數(shù)組則隱藏。例如游戲中玩家只能扮演兩種角色所以有數(shù)組長度為2。如果這時索引index=1;玩家用鼠標(biāo)去點擊左箭頭UI按鍵,index=index-1,然后index會等于0.這時player[0]中的GameObject會被顯現(xiàn)出來,其余會被隱藏。玩家再點擊左箭頭UI按鍵后,index=index-1;index=-1,達(dá)成index<0的條件所以運(yùn)行index等于數(shù)組長度減去1;index=1,這時player[1]中的GameObject被顯示出來??傮w來說本作主界面中的功能需求不是特別復(fù)雜,代碼實現(xiàn)起來耦合度也不會高,所以在主界面代碼設(shè)計上面做到高內(nèi)聚就已經(jīng)能讓代碼在后期維護(hù)上面比較方便,unity里面自帶的功能函數(shù)讓代碼冗余度減少。Ugui的強(qiáng)大功能也大大的減少了b本作主界面UI的代碼量。4.2游戲關(guān)卡場景設(shè)計本游戲中的游戲關(guān)卡場景只使用一個場景。這個場景除了凸顯游戲中海洋的美麗而且要融入了這個游戲中的核心玩法,除了玩法以為還要將文藝添加進(jìn)去。場景中布置了大量植物,每個植物食草魚的能食用從而減少饑餓值。地形模仿現(xiàn)實中的海底,有狹窄的谷地也有視野開闊的海床。本場景以禪派玩法舍棄了輸贏觀念,玩家扮演的角色在此關(guān)卡場景中只需要關(guān)注饑餓值的減少量,適當(dāng)?shù)娜パa(bǔ)充食物即可。AudioClip掛上輕音樂,讓玩家在游戲中盡可能放松。場景設(shè)計大量工作專注于如何讓場景中的生物擁有開放的生態(tài)系統(tǒng),生態(tài)系統(tǒng)遵循大魚吃小魚,小魚吃草的規(guī)律。魚如果沒有吃會被餓死。讓玩家從中體會到生命的美好。圖4-8游戲關(guān)卡場景的地形4.3游戲關(guān)卡場景場景的功能實現(xiàn)MangerofManagers本課題作品用的是此架構(gòu)設(shè)計EmptyGO:是一個框架的雛形,在一個空的游戲?qū)ο笊蠏煲粋€腳本管理所有控件,使用gameobject.find()或inspector目標(biāo)引用(就是public拖進(jìn)來)相互溝通一旦有預(yù)制體UI界面然后東西變多后控制邏輯也不方便管理SimpleGameManager:是最簡單最常用的架構(gòu)方法大多數(shù)初學(xué)者首先接觸的就是這個架構(gòu),它在之前基礎(chǔ)上用單例類管理所有東西。例如單例GameManager.Instance.playBgm(“XX音樂”);它適合小型項目REF_Ref10790\r\h[3]。MangerofManagers:MangerofManagers是本課題作品主要用到的架構(gòu)。此架構(gòu)是simpleGameManager進(jìn)階版。它從單一Manager管理改為多個Manager.它出GameManager以外還有EventManager(事件監(jiān)聽管理),AudioManager(聲音管理),GuiManager(UI管理),PoolManager(對象池管理),LevelManager(場景管理),GameManager(游戲管理),SaveManager(存儲管理)。把功能分為多個Manager讓代碼模塊實現(xiàn)高內(nèi)聚低耦合,方便后期管理REF_Ref10790\r\h[3]。之前舉例用GameManager播放音樂GameManager.Instance.playBgm(“XX音樂”);。這樣耦合度就非常高?,F(xiàn)在我們就可以用AudioManger來控制音樂的播放例:AudioManager.Instance.playBgm(“XX音樂”)。讓GameManager專心去管理游戲核心機(jī)制模塊。用LevelManager管理場景讓場景在功能代碼中更加可控。以前用Application.LoadLevel(“XX場景”)或者Application.Level(1)老方法根據(jù)名字和index去加載場景,如果其中名字或者順序一變就會出問題?,F(xiàn)在我們只需先做一個配置表,然后在管理類里面實現(xiàn)LevelManager.LoadNext();這樣我只需加載下個場景即可。配置表的參數(shù)也可觀可控。使用LevelManager這種寫法我們還可以在場景切換之間加入動畫等特效果。異步加載也更好實現(xiàn)。圖4-9Manager很多人都玩過殺怪物的游戲,游戲中玩家扮演的主角與成群結(jié)隊的怪物戰(zhàn)斗,在戰(zhàn)斗過程中怪物大量死亡而后被從場景中去除,一會場景中又有新的同樣的怪物生成。如果我們把去除的怪物對象以銷毀的形式實現(xiàn),然后再以new一個新怪物對象來生成新的怪物,可想而知這樣做會大大的消耗性能。我們可以用對象池這概念來優(yōu)化這個過程。當(dāng)怪物對象在游戲中死亡我們把這個對象丟進(jìn)對象池中,生產(chǎn)新怪物時再從池中取出。這樣可以頻繁的創(chuàng)建和銷毀節(jié)省不必要的性能消耗。我們可以用List或者Stack來存儲需要頻繁銷毀的對象。PoolManager就是管理所以對象池的總池,它一般被做成單例的形式其中我可以把一類物體用SpawnPool。單獨的物體用PrefabPool放置。本作品的代碼架構(gòu)設(shè)計使用的是MangerofManagers,這里主要使用AudioManagerGameManagerLevelManagerSimplePoolManager。當(dāng)玩家在主界面選好要扮演的角色用鼠標(biāo)點擊開始游戲以后。玩家選擇的主角信息就被存在來LevelManager中帶到了下一個場景,GameManager就從LevelManager中取到了此信息。然后在關(guān)卡場景中初始化玩家扮演的主角的預(yù)制體。GameManager控制著游戲核心機(jī)制如判斷游戲倒記時是否已經(jīng)為0,觸發(fā)下一個游戲事件。private
static
GameManager
initialize;
public
static
GameManager
_initialize
{get{if
(initialize
==
)
{
initialize
=
new
GameObject("GameManager")
.AddComponent<GameManager>();
DontDestroyOnLoad(initialize);
}return
initialize;}}
GameManager以單例的形式生成在控件中,先判斷是否已經(jīng)存在GameManager如果沒有則創(chuàng)建新的GameManager。傳送們的生產(chǎn)也是GameManager管理。如果游戲中生成傳送門的倒計時已經(jīng)結(jié)束。GameManager就好調(diào)用生產(chǎn)傳送門的方法。生成傳送門的實現(xiàn)邏輯是以y軸為高度,隨機(jī)取x軸和z軸的值,y軸的取值范圍在海平面與海底最高點的區(qū)間內(nèi),x軸與z軸則以海底面積為范圍生產(chǎn)之前還有先看看傳送門是否已經(jīng)生成過了。以這樣的邏輯實現(xiàn)傳送門的生產(chǎn),保證了傳送門只會生成在場景范圍里。SimplePoolManager為單例,食草魚吃掉草以后,在調(diào)用吃草這個功能代碼的同時調(diào)用SimplePoolManager中的Recycle方法將草這個對象存到池中。以后要用到就從池中取出從而節(jié)約性能。private
static
AudioManager
Minstance;
public
static
AudioManager
Instance
{get{if
(Minstance
==
)
{Minstance
=
new
GameObject("AudioManager").
AddComponent<AudioManager>();
DontDestroyOnLoad(Minstance);}return
Minstance;}}
AudioManager以單例的形式生產(chǎn)在控件中,和GameManager一樣先判斷是否已經(jīng)存在AudioManager這個控件,如果沒有就生產(chǎn)一個空白控件取名為AudioManager然后掛上AudioManager這個腳本,而且使用DontDestroyOnLoad()不讓它被隨意刪除。之后我們可以在AudioManager這個腳本類的代碼里實現(xiàn)如PlayBgm等功能publicvoidplayBgm(stringmName,boolloop){CheckAListener();
if
(!BgmSource)
{BgmSource
=
gameObject.AddComponent<AudioSource>();}
AudioClip
clip
=
Resources.Load<AudioClip>("Music/"
+
mName);
BgmSource.clip
=
clip;
BgmSource.loop
=
loop;
BgmSource.Play();}
想循環(huán)播放某個Bgm就調(diào)用AudioManager.Instance.playBgm("XX音樂",true)。我們可以針對音樂做一個配置表,這樣可以達(dá)到解耦的效果。本作品也使用面向?qū)ο蟮脑O(shè)計理念。食草魚對應(yīng)掛載EatGrassfish腳本,食肉魚對應(yīng)掛載EatMeatfish腳本,草等植物掛上對應(yīng)的Grass腳本。EatGrassfish和EatMeatfish這倆類都繼承fish類。食草魚吃草時觸發(fā)器取到的是觸發(fā)到的草的Grass腳本,然后去調(diào)用Grass腳本里的hide方法讓草消失。每個對象類盡量做到最大的高內(nèi)聚。在這個場景中所有的Ai魚都會自動迅游[Tooltip("魚巡游的最大高度")]
public
float
maxhight;
[Tooltip("魚巡游的最小高度")]
public
float
minhight;
[Tooltip("魚巡游的速度")]
public
float
speed;
[Tooltip("魚頭的轉(zhuǎn)動速度")]
[Range(0,
10f)]
public
float
Anglesspeed;
private
Rigidbody
rig;
void
Start
()
{rig=transform.GetComponent<Rigidbody>();}
以上是自動迅游用到的參數(shù),使用Tooltip去修飾,讓其參數(shù)可以在unity控制面板調(diào)試。maxhigh與mixhight共同用來限制魚的迅游范圍。Speed來控制魚迅游的速度。Anglesespen魚轉(zhuǎn)頭的角速度。圖4-10玩家控制鯊魚靠近食草魚AI魚的前進(jìn)功能通過使用rigidbody.velocity來實現(xiàn)。rig.velocity=(transform.forward*speed);魚以speed的速度讓魚模型的z軸方移動。改變電腦魚的歐拉角transform.eulerAngles=newVector3(num,transform.eulerAngles.y,0)使魚抬頭或者低頭,呈現(xiàn)下潛或者上浮的樣子。電腦左轉(zhuǎn)或者右轉(zhuǎn)同樣也是以改變電腦魚的歐拉角來實現(xiàn)其功能,transform.eulerAngles.y-Anglesspeed使魚以y軸為軸心每幀向左旋轉(zhuǎn)Anglesspeed個值transform.eulerAngles=newVector3(transform.eulerAngles.x,transform.eulerAngles.y-Anglesspeed,transform.eulerAngles.z)。然后將左轉(zhuǎn)頭;右轉(zhuǎn)頭;下潛;上浮,寫4個方法。以隨機(jī)概率的形式調(diào)用一個或者兩個方法。例如:電腦魚向前游的時候,隨機(jī)調(diào)用到了上浮這一個方法,魚就向上游,魚開始上浮。3秒后隨機(jī)調(diào)用到了左轉(zhuǎn)頭和下潛這輛方法,魚開始邊向左轉(zhuǎn)頭同時下潛。當(dāng)食草魚的飽腹值降到%60時草魚就好打開BoxCollider,BoxCollider中的isTrigger打鉤。食草魚的游泳速度加快來提高尋找草的效率。BoxCollider檢測到了Layer為Grass的物體,說明食物草魚發(fā)現(xiàn)了草。這時食草魚就會關(guān)閉自動迅游功能,然后使用Quaternion.Lerp將魚頭轉(zhuǎn)向草,在rigidbody.velocity的作用下向草游過去。魚頭的碰撞器接觸到草的時候,草這個物體對象先丟進(jìn)對象池,然后刪掉草對應(yīng)的模型控件,食草魚的飽腹感加20。鯊魚覓食功能的實現(xiàn)原理和食草魚吃草的實現(xiàn)原理相似。不同在于觸發(fā)器發(fā)現(xiàn)食物后取的是對象類EatGrassfish然后再調(diào)用對象類中的刪除方法來實現(xiàn)吃魚功能。食草魚逃避鯊魚追捕這個功能優(yōu)先級大于迅游功能和尋找食物功能,當(dāng)鯊魚的觸發(fā)器發(fā)現(xiàn)到食草魚時,鯊魚會在它自身的對象類EatMeatfish中調(diào)用觸發(fā)器取到的食草魚對象類EatGrassfish中的RunAway(eatMeatfishEatMeatfish)方法,這個方法需要鯊魚將自身的對象類EatMeatfish傳進(jìn)去。利用Quaternion.Lerp將魚尾對準(zhǔn)鯊魚逃離追捕。第五章導(dǎo)出與測試5.1游戲打包與導(dǎo)出游戲的設(shè)計已經(jīng)基本完成,接下來就要將游戲打包發(fā)布。在工具欄選擇File->BuildSetting,在ScenesInBuild中可以將需要加載的場景導(dǎo)入進(jìn)去,這樣就可以實現(xiàn)場景的切換。在左下角的導(dǎo)出模式中可選PC,Android,ios等。選擇好導(dǎo)出模式之后,點擊Build就可以實現(xiàn)打包發(fā)布了,此時生成一個exe可執(zhí)行文件,一個Data數(shù)據(jù)文件夾。圖5-1打開BuildSetting進(jìn)行打包圖5-2打包后的可運(yùn)行文件5.2游戲測試用例標(biāo)識XZCZ001項目名稱海洋禪派游戲用例作者韋祖正模塊名稱游戲主界面測試類型功能測試、黑盒測試、手工測試設(shè)計日期2020-2-1測試人員韋祖正測試方法場景分析法測試日期2020-2-1用例描述該用例用來測試在玩家打開游戲后,選擇扮演的主角進(jìn)入關(guān)卡編號測試項操作步驟結(jié)果CZDL1玩家打開游戲進(jìn)入主界面玩家點擊exe文件啟動游戲成功打開游戲顯示帶有”按任意鍵開始游戲”的交互界面CZDL2玩家按下任意鍵進(jìn)入選擇角色界面玩家按下鍵盤任意鍵或者鼠標(biāo)上的任意鍵游戲視角從水面進(jìn)入水中,鏡頭中出現(xiàn)角色模型并且顯現(xiàn)出帶有左右箭頭的選擇按鈕和開始游戲按鈕。CZDL3玩家選擇角選擇后開始游戲玩家控制鼠標(biāo)點擊UI上的左右箭頭按鈕來切換角色。確定好要扮演的角色后控制鼠標(biāo)點擊開始游戲按鈕游戲成功以玩家選擇的角色進(jìn)入關(guān)卡場景用例標(biāo)識XZCZ002項目名稱海洋禪派游戲用例作者韋祖正模塊名稱游戲關(guān)卡場景測試類型功能測試、黑盒測試、手工測試設(shè)計日期2020-2-1測試人員韋祖正測試方法場景分析法測試日期2020-2-1用例描述該用例用來測試游戲關(guān)卡中的功能編號測試項操作步驟結(jié)果DZDL1玩家控制角色向前游左轉(zhuǎn)彎,右轉(zhuǎn)彎,向上浮游,向下潛。1.玩家按下w鍵2.控制鼠標(biāo)向左滑動3.控制鼠標(biāo)向右滑動4.控制鼠標(biāo)向前滑動5.控制鼠標(biāo)向后滑動玩家控制的角色向前游,而后向左轉(zhuǎn)彎,再向右轉(zhuǎn)彎。之后向上游,向下游。DZDL2玩家控制食草魚角色吃草玩家控制角色靠近海底的草,用魚的頭部觸碰草。草消失不見,角色的飽腹值UI條增加DZDL31分鐘后生成傳送門玩家控制角色在關(guān)卡里游玩一分鐘以上地圖上隨機(jī)生成了圓形發(fā)光的傳送門DZDL4玩家控制角色進(jìn)入傳送門并返回返回到主界面玩家控制角色用頭部觸碰傳送門播放結(jié)束動畫并放回主界面。圖5-3選擇角色界面第六章總結(jié)本次課題的基于unity3d的海洋禪派游戲設(shè)計與實現(xiàn)至此已經(jīng)實現(xiàn)完成。主要成果是包括游戲設(shè)計中的禪派概念的實現(xiàn)與游戲功能實現(xiàn)。本次禪派游戲設(shè)計階主要著重點是想辦法設(shè)計出讓玩家進(jìn)入放松狀態(tài)的游戲。所以在場景設(shè)計上畫了大量的精力取研究如何在有限的美術(shù)資源上凸顯出場景的意境美。其中在主界面中對鏡頭使用動畫的方式去實現(xiàn)UI切換,將一個場景分為了兩部分,使其帶入感更強(qiáng)。Bgm選擇上也要圍繞著本作品的兩個主題“禪”和海洋展開,選擇相對舒緩放松的音樂。本作中引用禪派游戲玩法概念設(shè)計,我嘗試舍棄了游戲中除了饑餓值之外的負(fù)反饋,的確在一定程度上增強(qiáng)了玩家在游戲中的安全感。所以使用禪派玩法能讓玩家進(jìn)入舒適的游玩狀態(tài)這點是正確的。但是本作有個不足之處在于舍棄大量的交互之后沒有去用其他的東西填補(bǔ)空白,再加上流程短,導(dǎo)致游戲帶入感不好。所以借鑒歷來的禪派游戲設(shè)計,本作玩法優(yōu)化方向應(yīng)該盡可能增加流程后用故事性去填補(bǔ)交互的缺失。本作的開發(fā)使用的是Unity3d,Unity3d強(qiáng)大的功能讓在后期的開發(fā)過程比較順利。MangerofManagers程序架構(gòu)也在本作的開發(fā)過程發(fā)揮出了他的優(yōu)點,讓代碼高耦合低內(nèi)聚。Unity3d中的性能優(yōu)化方案給本作后期優(yōu)化帶來很大的幫助,讓游戲從全程10幀,提高到50幀,渲染多的地方也能維持30幀。所以禪派游戲的理論結(jié)合unity開發(fā)游戲的方法來制作禪派游戲是可行。參考文獻(xiàn)Unity.Unity3D參考手冊.Unity,2010:94-121.Unity3DC#游戲編程.清華大學(xué)出版社,201201高建洪等.VRML虛擬場景中實時交互動畫的實現(xiàn)[J].蘇州大學(xué)學(xué)報(工科版),2008,(06):36-38[8]張曉媛著.基于游戲引擎的機(jī)械動力仿真技術(shù)的研究與實現(xiàn)[J].傳媒學(xué)子論壇,2010加藤政樹.Unity[M].人民郵電出版社,201703陳健松,徐從富,潘云鶴.基于地形的三維場景繪制方法[J].計算機(jī)工程與應(yīng)用,2006,(08):31-33童恒建.三維數(shù)字景觀中場景圖的組織與繪制[J].測繪信息與工程,2005,(05):9-11LukeLudwig,JohnHaurykiewicz.Collisioncheckinganalysistool:discoveringdynamiccollisionsinamodelingandsimulationenvironment[J].IntJInteractDesManuf(2007):135-141ChristerErison.Real-TimeCollisionDetection[M].CRCPress,2004,7-21Tanzi,Vito.Theoryandpolicy:AcommentonDixieandoncurrenttaxtheory[J].InternationalMonetaryandFundStaffPaper(IMF),Vol.39,No.4,1992:957-966葉思義宋昀璐.游戲設(shè)計全方位學(xué)習(xí)[M].1900.吳亞峰,于復(fù)興,索依娜.Unity3D游戲開發(fā)標(biāo)準(zhǔn)教程[M].北京:人民郵電出版社,2016.陳泉宏.UnityAPI解析(圖靈原創(chuàng))[M].北京:人民郵電出版社,2014Unity官方參考手冊郭浩瑜.Unity3DShaderLab開發(fā)實戰(zhàn)詳解(第二版)[M].北京:人民郵電出版社,2015.致謝隨著畢業(yè)設(shè)計的完成,我的大學(xué)生涯也步入了尾聲。我在此特別感謝我的指導(dǎo)老師王千秋老師,不斷關(guān)注我的畢業(yè)設(shè)計進(jìn)展,對于我課題的完成和畢業(yè)論文撰寫提出了很多寶貴的意見和建議。讓我的畢業(yè)設(shè)計得以順利完成。我也特別感謝吳志達(dá)老師,吳志達(dá)老師的游戲開發(fā)課讓我有機(jī)會能接觸到游戲開發(fā)。他也給予了我學(xué)習(xí)游戲開發(fā)的信心和幫助,使我在游戲開發(fā)的路上不斷前進(jìn)。最后感謝所有幫助過我的人,我在此表示真誠的感謝。
電腦故障檢測卡代碼表
1、特殊代碼"00"和"ff"及其它起始碼有三種情況出現(xiàn):
①已由一系列其它代碼之后再出現(xiàn):"00"或"ff",則主板ok。
②如果將cmos中設(shè)置無錯誤,則不嚴(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芯片上直接查看,也可以在啟動屏幕時直接看到。
5、有少數(shù)主板的pci槽只有一部分代碼出現(xiàn),但isa槽有完整自檢代碼輸出。且目前已發(fā)現(xiàn)有極個別原裝機(jī)主板的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寄存器測試正在進(jìn)行或者失敗。
02確定診斷的類型(正常或者制造)。如果鍵盤緩沖器含有數(shù)據(jù)就會失效。停用不可屏蔽中斷;通過延遲開始。CMOS寫入/讀出正在進(jìn)行或者失靈。
03清除8042鍵盤控制器,發(fā)出TESTKBRD命令(AAH)通電延遲已完成。ROMBIOS檢查部件正在進(jìn)行或失靈。
04使8042鍵盤控制器復(fù)位,核實TESTKBRD。鍵盤控制器軟復(fù)位/通電測試??删幊涕g隔計時器的測試正在進(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計算ROMBIOS檢查總和,以及檢查鍵盤緩沖器是否清除。DMA初始頁面寄存器讀/寫測試正在進(jìn)行或失靈。
07處理器測試2,核實CPU寄存器的工作。ROMBIOS檢查總和正常,鍵盤緩沖器已清除,向鍵盤發(fā)出BAT(基本保證測試)命令。.
08使CMOS計時器作初始準(zhǔn)備,正常的更新計時器的循環(huán)。已向鍵盤發(fā)出BAT命令,即將寫入BAT命令。RAM更新檢驗正在進(jìn)行或失靈。
09EPROM檢查總和且必須等于零才通過。核實鍵盤的基本保證測試,接著核實鍵盤命令字節(jié)。第一個64KRAM測試正在進(jìn)行。
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停機(jī)字節(jié)。CMOS停開寄存器讀/寫測試;將計算CMOS檢查總和。初始化輸入/輸出端口地址。
0F測試擴(kuò)展的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)備,即將停用DMA和中斷控制器。第一個64DKRAM第1位故障。
12測試DMA頁面寄存器。停用DMA控制器1以及中斷控制器1和2;即將視頻顯示器并使端口B作初始準(zhǔn)備。第一個64DKRAM第2位故障。
13測試8741鍵盤控制器接口。視頻顯示器已停用,端口B已作初始準(zhǔn)備;即將開始電路片初始化/存儲器自動檢測。第一個64DKRAM第3位故障。
14測試存儲器更新觸發(fā)電路。電路片初始化/存儲器處自動檢測結(jié)束;8254計時器測試即將開始。第一個64DKRAM第4位故障。
15測試開頭64K的系統(tǒng)存儲器。第2通道計時器測試了一半;8254第2通道計時器即將完成測試。第一個64DKRAM第5位故障。
16建立8259所用的中斷矢量表。第2通道計時器測試結(jié)束;8254第1通道計時器即將完成測試。第一個64DKRAM第6位故障。
17調(diào)準(zhǔn)視頻輸入/輸出工作,若裝有視頻BIOS則啟用。第1通道計時器測試結(jié)束;8254第0通道計時器即將完成測試。第一個64DKRAM第7位故障。
18測試視頻存儲器,如果安裝選用的視頻BIOS通過,由可繞過。第0通道計時器測試結(jié)束;即將開始更新存儲器。第一個64DKRAM第8位故障。
19測試第1通道的中斷控制器(8259)屏蔽位。已開始更新存儲器,接著將完成存儲器的更新。第一個64DKRAM第9位故障。
1A測試第2通道的中斷控制器(8259)屏蔽位。正在觸發(fā)存儲器更新線路,即將檢查15微秒通/斷時間。第一個64DKRAM第10位故障。
1B測試CMOS電池電平。完成存儲器更新時間30微秒測試;即將開始基本的64K存儲器測試。第一個64DKRAM第11位故障。
1C測試CMOS檢查總和。.第一個64DKRAM第12位故障。
1D調(diào)定CMOS配置。.第一個64DKRAM第13位故障。
1E測定系統(tǒng)存儲器的大小,并且把它和CMOS值比較。.第一個64DKRAM第14位故障。
1F測試64K存儲器至最高640K。.第一個64DKRAM第15位故障。
20測量固定的8259中斷位。開始基本的64K存儲器測試;即將測試地址線。從屬DMA寄存器測試正在進(jìn)行或失靈。
21維持不可屏蔽中斷(NMI)位(奇偶性或輸入/輸出通道的檢查)。通過地址線測試;即將觸發(fā)奇偶性。主DMA寄存器測試正在進(jìn)行或失靈。
22測試8259的中斷功能。結(jié)束觸發(fā)奇偶性;將開始串行數(shù)據(jù)讀/寫測試。主中斷屏蔽寄存器測試正在進(jìn)行或失靈。
23測試保護(hù)方式8086虛擬方式和8086頁面方式?;镜?4K串行數(shù)據(jù)讀/寫測試正常;即將開始中斷矢量初始化之前的任何調(diào)節(jié)。從屬中斷屏蔽存器測試正在進(jìn)行或失靈。
24測定1MB以上的擴(kuò)展存儲器。矢量初始化之前的任何調(diào)節(jié)完成,即將開始中斷矢量的初始準(zhǔn)備。設(shè)置ES段地址寄存器注冊表到內(nèi)存高端。
25測試除頭一個64K之后的所有存儲器。完成中斷矢量初始準(zhǔn)備;將為旋轉(zhuǎn)式斷續(xù)開始讀出8042的輸入/輸出端口。裝入中斷矢量正在進(jìn)行或失靈。
26測試保護(hù)方式的例外情況。讀出8042的輸入/輸出端口;即將為旋轉(zhuǎn)式斷續(xù)開始使全局?jǐn)?shù)據(jù)作初始準(zhǔn)備。開啟A20地址線;使之參入尋址。
27確定超高速緩沖存儲器的控制或屏蔽RAM。全1數(shù)據(jù)初始準(zhǔn)備結(jié)束;接著將進(jìn)行中斷矢量之后的任何初始準(zhǔn)備。鍵盤控制器測試正在進(jìn)行或失靈。
28確定超高速緩沖存儲器的控制或者特別的8042鍵盤控制器。完成中斷矢量之后的初始準(zhǔn)備;即將調(diào)定單色方式。CMOS電源故障/檢查總和計算正在進(jìn)行。
29.已調(diào)定單色方式,即將調(diào)定彩色方式。CMOS配置有效性的檢查正在進(jìn)行。
2A使鍵盤控制器作初始準(zhǔn)備。已調(diào)定彩色方式,即將進(jìn)行ROM測試前的觸發(fā)奇偶性。置空64K基本內(nèi)存。
2B使磁碟驅(qū)動器和控制器作初始準(zhǔn)備。觸發(fā)奇偶性結(jié)束;即將控制任選的視頻ROM檢查前所需的任何調(diào)節(jié)。屏幕存儲器測試正在進(jìn)行或失靈。
2C檢查串行端口,并使之作初始準(zhǔn)備。完成視頻ROM控制之前的處理;即將查看任選的視頻ROM并加以控制。屏幕初始準(zhǔn)備正在進(jìn)行或失靈。
2D檢測并行端口,并使之作初始準(zhǔn)備。已完成任選的視頻ROM控制,即將進(jìn)行視頻ROM回復(fù)控制之后任何其他處理的控制。屏幕回掃測試正在進(jìn)行或失靈。
2E使硬磁盤驅(qū)動器和控制器作初始準(zhǔn)備。從視頻ROM控制之后的處理復(fù)原;如果沒有發(fā)現(xiàn)EGA/VGA就要進(jìn)行顯示器存儲器讀/寫測試。檢測視頻ROM正在進(jìn)行。
2F檢測數(shù)學(xué)協(xié)處理器,并使之作初始準(zhǔn)備。沒發(fā)現(xiàn)EGA/VGA;即將開始顯示器存儲器讀/寫測試。.
30建立基本內(nèi)存和擴(kuò)展內(nèi)存。通過顯示器存儲器讀/寫測試;即將進(jìn)行掃描檢查。認(rèn)為屏幕是可以工作的。
31檢測從C800:0至EFFF:0的選用ROM,并使之作初始準(zhǔn)備。顯示器存儲器讀/寫測試或掃描檢查失敗,即將進(jìn)行另一種顯示器存儲器讀/寫測試。單色監(jiān)視器是可以工作的。
32對主板上COM/LTP/FDD/聲音設(shè)備等I/O芯片編程使之適合設(shè)置值。通過另一種顯示器存儲器讀/寫測試;卻將進(jìn)行另一種顯示器掃描檢查。彩色監(jiān)視器(40列)是可以工作的。
33.視頻顯示器檢查結(jié)束;將開始利用調(diào)節(jié)開關(guān)和實際插卡檢驗顯示器的關(guān)型。彩色監(jiān)視器(80列)是可以工作的。
34.已檢驗顯示器適配器;接著將調(diào)定顯示方式。計時器滴答聲中斷測試正在進(jìn)行或失靈。35.完成調(diào)定顯示方式;即將檢查BIOSROM的數(shù)據(jù)區(qū)。停機(jī)測試正在進(jìn)行或失靈。
36.已檢查BIOSROM數(shù)據(jù)區(qū);即將調(diào)定通電信息的游標(biāo)。門電路中A-20失靈。
37.識別通電信息的游標(biāo)調(diào)定已完成;即將顯示通電信息。保護(hù)方式中的意外中斷。
38.完成顯示通電信息;即將讀出新的游標(biāo)位置。RAM測試正在進(jìn)行或者地址故障>FFFFH。
39.已讀出保存游標(biāo)位置,即將顯示引用信息串。.
3A.引用信息串顯示結(jié)束;即將顯示發(fā)現(xiàn)信息。間隔計時器通道2測試或失靈。
3B用OPTI電路片(只是486)使輔助超高速緩沖存儲器作初始準(zhǔn)備。已顯示發(fā)現(xiàn)<ESC>信息;虛擬方式,存儲器測試即將開始。按日計算的日歷時鐘測試正在進(jìn)行或失靈。
3C建立允許進(jìn)入CMOS設(shè)置的標(biāo)志。.串行端口測試正在進(jìn)行或失靈。
3D初始化鍵盤/PS2鼠標(biāo)/PNP設(shè)備及總內(nèi)存節(jié)點。.并行端口測試正在進(jìn)行或失靈。
3E嘗試打開L2高速緩存。.數(shù)學(xué)協(xié)處理器測試正在進(jìn)行或失靈。
40.已開始準(zhǔn)備虛擬方式的測試;即將從視頻存儲器來檢驗。調(diào)整CPU速度,使之與外圍時鐘精確匹配。
41中斷已打開,將初始化數(shù)據(jù)以便于0:0檢測內(nèi)存變換(中斷控制器或內(nèi)存不良)從視頻存儲器檢驗之后復(fù)原;即將準(zhǔn)備描述符表。系統(tǒng)插件板選擇失靈。
42顯示窗口進(jìn)入SETUP。描述符表已準(zhǔn)備好;即將進(jìn)行虛擬方式作存儲器測試。擴(kuò)展CMOSRAM故障。
43若是即插即用BIOS,則串口、并口初始化。進(jìn)入虛擬方式;即將為診斷方式實現(xiàn)中斷。.44.已實現(xiàn)中斷(如已接通診斷開關(guān);即將使數(shù)據(jù)作初始準(zhǔn)備以檢查存儲器在0:0返轉(zhuǎn)。)BIOS中斷進(jìn)行初始化。
45初始化數(shù)學(xué)協(xié)處理器。數(shù)據(jù)已作初始準(zhǔn)備;即將檢查存儲器在0:0返轉(zhuǎn)以及找出系統(tǒng)存儲器的規(guī)模。.
46.測試存儲器已返回;存儲器大小計算完畢,即將寫入頁面來測試存儲器。檢查只讀存儲器ROM版本。
47.即將在擴(kuò)展的存儲器試寫頁面;即將基本640K存儲器寫入頁面。
48.已將基本存儲器寫入頁面;即將確定1MB以上的存儲器。視頻檢查,CMOS重新配置。
49.找出1BM以下的存儲器并檢驗;即將確定1MB以上的存儲器。.
4A.找出1MB以上的存儲器并檢驗;即將檢查BIOSROM數(shù)據(jù)區(qū)。進(jìn)行視頻的初始化。
4B.BIOSROM數(shù)據(jù)區(qū)的檢驗結(jié)束,即將檢查<ESC>和為軟復(fù)位清除1MB以上的存儲器。.4C.清除1MB以上的存儲器(軟復(fù)位)即將清除1MB以上的存儲器.屏蔽視頻BIOSROM。.4D。已清除1MB以上的存儲器(軟復(fù)位);將保存存儲器的大小。.
4E若檢測到有錯誤;在顯示器上顯示錯誤信息,并等待客戶按<F1>鍵繼續(xù)。開始存儲器的測試:(無軟復(fù)位);即將顯示第一個64K存儲器的測試。顯示版權(quán)信息。
4F讀寫軟、硬盤數(shù)據(jù),進(jìn)行DOS引導(dǎo)。開始顯示存儲器的大小,正在測試存儲器將使之更新;將進(jìn)行串行和隨機(jī)的存儲器測試。.
50將當(dāng)前BIOS監(jiān)時區(qū)內(nèi)的CMOS值存到CMOS中。完成1MB以下的存儲器測試;即將高速存儲器的大小以便再定位和掩蔽。將CPU類型和速度送到屏幕。
51.測試1MB以上的存儲器。.
52所有ISA只讀存儲器ROM進(jìn)行初始化,最終給PCI分配IRQ號等初始化工作。已完成1MB以上的存儲器測試;即將準(zhǔn)備回到實址方式。進(jìn)入鍵盤檢測。
53如果不是即插即用BIOS,則初始化串口、并口和設(shè)置時種值。保存CPU寄存器和存儲器的大小,將進(jìn)入實址方式。.
54.成功地開啟實址方式;即將復(fù)原準(zhǔn)備停機(jī)時保存的寄存器。掃描“打擊鍵”
55.寄存器已復(fù)原,將停用門電路A-20的地址線。.
56.成功地停用A-20的地址線;即將檢查BIOSROM數(shù)據(jù)區(qū)。鍵盤測試結(jié)束。
57.BIOSROM數(shù)據(jù)區(qū)檢查了一半;繼續(xù)進(jìn)行。.
58.BIOSROM的數(shù)據(jù)區(qū)檢查結(jié)束;將清除發(fā)現(xiàn)<ESC>信息。非設(shè)置中斷測試。
59.已清除<ESC>信息;信息已顯示;即將開始DMA和中斷控制器的測試。.
5A..顯示按“F2”
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 污水課程設(shè)計紫外消毒
- 數(shù)字電路ic課程設(shè)計
- 教育培訓(xùn)行業(yè)教學(xué)方法培訓(xùn)體驗
- 電子課程設(shè)計網(wǎng)課答案
- 稅務(wù)工作總結(jié)制度建設(shè)與規(guī)范化監(jiān)督
- 急救護(hù)理工作總結(jié)
- 貸款經(jīng)理工作總結(jié)
- 電信通訊科技行業(yè)技術(shù)分析
- 旅游行業(yè)促銷活動總結(jié)
- 酒店用品銷售工作總結(jié)
- 高低壓供配電設(shè)備檢查和檢修保養(yǎng)合同3篇
- 投資可行性分析財務(wù)數(shù)據(jù)全套表格
- 2023-2024學(xué)年福建省廈門市八年級(上)期末物理試卷
- 易查云全球智能貿(mào)易信息查詢平臺商業(yè)計劃書
- 招標(biāo)文件的保密措施
- 2024小米在線測評題
- GA/T 804-2024機(jī)動車號牌專用固封裝置
- 公務(wù)車輛定點洗車協(xié)議書2024年
- 學(xué)??照{(diào)維修合同模板
- 2015年下半年教師資格考試-小學(xué)《教育教學(xué)知識與能力》真題及答案解析
- 陰道內(nèi)放置卡前列甲酯栓在無痛人工流產(chǎn)中運(yùn)用
評論
0/150
提交評論