基于Unity3d的潛行游戲開發(fā)_第1頁
基于Unity3d的潛行游戲開發(fā)_第2頁
基于Unity3d的潛行游戲開發(fā)_第3頁
基于Unity3d的潛行游戲開發(fā)_第4頁
基于Unity3d的潛行游戲開發(fā)_第5頁
已閱讀5頁,還剩36頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、2011屆湖北汽車工業(yè)學院畢業(yè)設計(論文) 畢業(yè)設計論文課題名稱基于Unity3d的潛行游戲開發(fā)系 部計算機工程系專 業(yè)計算機科學與技術班 級T11232學 號20110230204姓 名楊吉乾指導教師吳文歡2015年 5 月 20日摘 要隨著計算機技術的不斷發(fā)展,游戲制作也慢慢成為社會上不可或缺的一部分,游戲一方面能夠給玩家?guī)砩钌系姆潘?,另一方面也是對現(xiàn)實中某些場景的夸張和放大,各種各樣的游戲能給玩家?guī)聿煌w驗,深受廣大群眾的喜愛,市場需求量很大,因此對游戲的開發(fā)和研究也顯得很有意義.而在一系列開發(fā)引擎中,Unity3D游戲引擎主要用來制作3D游戲,能夠給玩家?guī)砗苷鎸嵉母惺芎头浅2诲e

2、的游戲體驗,與此同時也能做出效果很好的UI界面,學好Unity3D在未來無論是3D網(wǎng)頁的開發(fā)還是虛擬現(xiàn)實都會起來不可估量的作用,而本次課題就將通過Unity3D做出一個效果不錯的游戲.本次課題做一個潛行類游戲,主角需要避開敵人、紅外線、攝像頭的檢測,拿到鑰匙到達指定目的地,就像軍事行動深入敵后。在整個游戲設計過程中會用到一些數(shù)學知識,會用到Mecanim動畫系統(tǒng),會用到狀態(tài)機,會用到自動導航系統(tǒng),也要求設計者有很強的邏輯思維和一定的審美標準,也需要對游戲引擎有較為熟練的使用能力。而在界面的搭建上又需要用到UI知識,懂得如何通過視覺魔術讓3D模型顯示在2D界面,又能讓玩家從2D界面感受3D模型的

3、3D效果,對設計者來說是具有一定的挑戰(zhàn)和鍛煉意義.開發(fā)的游戲有一定的可玩性,可以滿足很多玩家的娛樂需求,也可以用來當作二次開發(fā)的模型,做出難度更高、涉及元素更多元化、更復雜的市場游戲,因此,本次課題的研發(fā)不僅具有學習研究意義,也有一定的市場價值。關鍵詞:Unity3D游戲;潛行游戲開發(fā);Unity3D技術應用 AbstractAlong with the development of computer technology,game production has graduallybecome the indispensable part of the society,on the one h

4、and games can take relation toplayers,on the other hand,its also exaggerated and amplified to some of the realscenes,a varieties of games can bring different experience to the game players,lovedby the masses,the market demand is very big,therefor,its meaningful to research anddevelop the game。In the

5、series of development engine,Unity3D game engine is mainly used to make 3D games,it can give true feelings and bring a very good experienceto game players,make a good effect of UI interface at the same time。LearningUnity3D will rise an inestimable role in the futurewhether the development of 3DWebpa

6、ge or virtual reality.This topic will bring a good game for you throughUnity3D engine.This topic will bring you a stealth game,the hero needs to avoid enemy detection,infrared,camera,get the key to arrive at the designated destination。Just like military operations as behind enemy lines。It will use s

7、ome mathematical knowledge in the game design process,and the mecanim animation system,the state machine,the automatic navigation system,it also requires designers to have good logical thought and aesthetic standards,and the abilities to use engine very well。As for UI design,you must let the 3D mode

8、ls display in the 2D panel though visual magic,and let the players taste the 3D model effects from 2D panel,its a challenge and will let designer get some exercise。 The game is funny,it will meet entertainment needs of many game players,it also can be used as a model when you do the twice developmen

9、t,to make it more difficult,more diversified,more complex,and make it marketization,therefor,research of this topic not only has significance of learning, there is a certain market value。Key Word: Unity3D Game ;Stealth Game Unity3D Technology目 錄第一章 緒論11。1 開發(fā)背景及意義11.2國內(nèi)外研究現(xiàn)狀11。3本課題簡介2第二章 Unity3D游戲引擎的

10、介紹32。1 API接口32。2。物理引擎3第三章 游戲的主界面設計43。1 界面總體效果43。2 具體設計53.2。1 主界面53。2。2 聲音控制界面73。2。3 場景說明界面83。2。4 游戲控制界面93。2。5 關卡選擇界面93.3 實現(xiàn)各界面滑動效果10第四章 游戲設計114。1 游戲地形設計114。1。1場景鳥瞰圖114。1.2操作過程114。2 環(huán)境對象的設計124。2。1 激光124.2。2 感應門134.2。3 監(jiān)控攝像機154。2.4激光控制器154。2。5 電梯164。2.6 其它環(huán)境設置164.3 人物對象的設計174.3.1 主角的設計174。3.2 機器人的設計21

11、4.4 其它必要設計274.4。1 攝像機274。4.2 游戲控制284。4。3 UI界面28第五章 游戲測試305。1Unity中運行305。1.1UI界面305。1.2 游戲315。2 PC端運行32第六章 總結(jié)33致 謝34參考文獻35第一章 緒論1.1 開發(fā)背景及意義隨著計算機的不斷普及,各種各樣的應用也如雨后春筍層出不窮,而伴隨著人們生活水平的日益提高,游戲也變成了人們生活中不可或缺的調(diào)味品。做游戲自然離不開開發(fā)引擎,Unity是由Unity Technologies開發(fā)的一個讓玩家輕松創(chuàng)建諸如三維視頻游戲、建筑可視化、實時三維動畫等類型互動內(nèi)容的多平臺的綜合型游戲開發(fā)工具,是一個全

12、面整合的專業(yè)游戲引擎。Unity類似于Director,Blender game engine,Virtools或Torque Game Builder等利用交互的圖形化開發(fā)環(huán)境為首要方式的軟件,其編輯器運行在Windows和Mac OS X下,可發(fā)布游戲至Windows、Mac、Wii、iPhone、Windows Phone 8和Android平臺。也可以利用Unity web player插件發(fā)布網(wǎng)頁游戲,支持Mac和Windows網(wǎng)頁瀏覽。它的網(wǎng)頁播放器也被Mac widgets所支持。除此之外,Unity在虛擬現(xiàn)實中也可以得到廣泛應用,本次課題就是想通過主流市場游戲的形式來熟悉和了解

13、Unity的相關技術操作,從而在未來能夠在一切都向3D發(fā)展的大趨勢下游刃有余.1.2國內(nèi)外研究現(xiàn)狀90年代初國外的3D游戲就已經(jīng)開始起步了,第一部3D第一人稱射擊游戲是美國的卡馬克的重返德軍總部.國內(nèi)3D游戲則起始于2003年,相較于國外的3D游戲開發(fā)起步要晚了很多,雖然國內(nèi)大的游戲公司和團隊也開發(fā)出了自己的引擎,做出了古劍奇譚系列,仙劍奇?zhèn)b傳系列的游戲,但相比較國外的魔獸世界、模擬人生等國際游戲大作,無論是從游戲開發(fā)理念上還是技術支持上都還有不可逾越的差距,導致大量的財富資金流向國外.而隨著時間的推移,手機也越來越智能化,現(xiàn)在的手機可以說比十幾年前的電腦更加強大,也越來越多的應用出現(xiàn)在了手機

14、上,游戲也是不可或缺的一部分,但是不同語言開發(fā)工具開發(fā)的產(chǎn)品想要移植到手機上需要花費巨大的代價,成本太高,操作很復雜,國外的一款游戲引擎完美的解決了這個問題,那就是Unity3D。對于Unity3D,國內(nèi)對其的研究還處于起步階段,所以我們認真的學習國外的優(yōu)秀游戲引擎,熟悉其操作,對以后自主研究符合自身需求的引擎有很大的參考價值。1。3本課題簡介本課題開發(fā)一個潛行類的游戲,其中游戲主角將小心的潛入敵人的大本營,通過敏捷的身手,機智的頭腦找到所有的電腦控制臺關閉所有的激光紅外線,在行進過程中需要躲避所有的攝像頭檢測,盡可能的避免機器人的發(fā)現(xiàn),在被發(fā)現(xiàn)后能逃過所有機器人的追捕,最終拿到鑰匙進入電梯后

15、從容離開。在游戲開始會有關于游戲的操作控制說明,也可以選擇不同的關卡。進入游戲后,機器人會進行自主巡邏,主角需要合理的利用潛行,避免被機器人聽到腳步聲后前來追擊,合理的利用地形是制勝的關鍵,請注意不要碰到紅外線,一旦玩家被發(fā)現(xiàn),所有巡邏機器人會前來對你進行圍剿,這個時候就將是顯示你高超的智商的時刻,冷靜、沉著的應對,找到合適的方法,玩家也可以躲避追捕化險為夷。36第二章 Unity3D游戲引擎的介紹2。1 API接口API是一些預先定義的函數(shù),目的是提供應用程序與開發(fā)人員基于某軟件或硬件得以訪問一組例程的能力,而又無需訪問源碼,或理解內(nèi)部工作機制的細節(jié)。Unity3D就有一套自己的API函數(shù)庫

16、,通過這些API函數(shù),開發(fā)人員可以很方便的實現(xiàn)項目的初始化,功能模塊的每幀調(diào)用,如何進行觸發(fā)檢測并進行觸發(fā)事件的響應,如何判斷是否進入觸發(fā)區(qū),是否在觸發(fā)區(qū),是否離開觸發(fā)區(qū),如何實現(xiàn)拖動事件的響應等等。2.2。物理引擎任何一個游戲的設計都必須有其物體特性的合理性,這樣才能顯得真實可信,在Unity3D中為開發(fā)人員提供了大量的組件,可以對對象進行渲染,顏色的透明度、法線貼圖、平行光、點光源、圖片、文字、聲音、動畫、材質(zhì)等一系列組件可以讓人產(chǎn)生很逼真的視覺效果,而在物理特性上添加的剛體、碰撞器等組件,可以實現(xiàn)對象受到重力、摩擦力、空氣阻力等自然物理特性的影響,而爬坡的坡度設定,碰撞后的一切物理變化,

17、逼真的體驗讓你覺得這就是一個現(xiàn)實中的物體.可以說Unity引擎就是一個組件編程的引擎,整個開發(fā)過程就是一個從無到有的組件添加,對象的物理特性Unity一般都封裝好了,只需要找到合適的組件進行添加,合理控制其屬性即可,而行為特性就是腳本,通過代碼的邏輯操作進而實現(xiàn)對象的一系列活動事件。第三章 游戲的主界面設計當一進入游戲,就將會跳轉(zhuǎn)到開始界面,在該界面中你可以看到游戲主角的一個靜止狀態(tài)的動畫,上面寫有游戲名稱,在右上方有一個游戲的標志,左下方的是聲音選項按鈕,點擊后會進入聲音面板。在開始界面里可以進行鼠標的拖動,用來實現(xiàn)不同的幾個界面的滑動效果,圖3。2即為游戲的說明界面,在里面描繪了主角和機器

18、人在四種各不同場景下會出現(xiàn)的情形,圖3。3則是告訴你游戲如何進行控制,又如何取得勝利,圖3。4則是關卡選擇界面,可以選擇不同的關卡。3。1 界面總體效果整個游戲界面用的是UGUI技術,在整個開發(fā)過程中會用到panel組件(作為容器存在,用來存放其它組件,并可添加圖片當作背景存在),image組件(用來添加圖片,可以用作logo或者按鈕等的背景),button組件(作為按鈕存在,在其上可以添加點擊事件),text組件(用來顯示文本信息),slider組件(是一個滑動條,滑動條有一個數(shù)值,通過滑動事件同步該數(shù)值可以控制音量大小,也可以控制主角血量)。 3。1開始界面 3.2場景說明界面 3。3游戲

19、控制界面 3.4關卡選擇界面3。5聲音控制界面3。1游戲開始界面當玩家開始重新玩一次游戲時,會進入游戲開始界面,如圖所示:實現(xiàn)游戲開始界面的主要步驟為:1. 首先在Hierarchy面板建立一個Panel,用來作為對象的載體,給該面板拖拽一個Sprite圖片,注意一般圖片的類型為texture,選中該圖片,更改Texture Type的類型變成Sprite即可,如圖3。6。3。6 圖片屬性2. 在該面板內(nèi)添加一個文本組件,在文本域?qū)懮蠘祟}Stealth,調(diào)整字體大小顏色位置字體等信息,把文本框拖到合適的位置。3. 在界面右上方添加一個圖片組件,然后拖一個合適的圖片到該組件作為Logo,注意調(diào)整

20、錨點位置,方便屏幕自適應,如圖3。7。 3。7 錨點圖4. 在左下方添加一個Button控件,在其背景中拖動一個合適的背景圖片進去.然后創(chuàng)建一個空對象,用來掛載面板控制腳本,腳本主要實現(xiàn)的是對聲音面板動畫狀態(tài)機里面的標志位進行修改,實現(xiàn)在不同條件下不同動畫的播放,這里我將通過兩個函數(shù),分別對動畫狀態(tài)機里面的標志位進行不同修改來實現(xiàn)不同動畫的狀態(tài)轉(zhuǎn)換,當狀態(tài)機里面標志位“DisplayAudioSetting”為真的時候就會播放聲音面板的顯示動畫,為假的時候就會播放隱藏動畫.在圖3.8所示面板添加事件,然后把該對象拖進去即可產(chǎn)生按鈕事件,點擊后會調(diào)用對應的函數(shù)進行事件的響應。 3.8 Butto

21、n點擊事件圖5.添加一個主角,拖動主角模型到合適的位置,在Project面板中給主角添加一個狀態(tài)機,Create-Animator Controller,然后把主角的靜止動畫添加進去,如圖3。9.在主角的對象上添加一個Aniator組件,然后把狀態(tài)機拖進去,運行即可播放主角靜止動畫。 3。9 主角靜止狀態(tài)機3。2 聲音控制界面1. 添加一個Panel組件作為各組件的載體,給其添加一個sprite圖片作為panel的背景存在。2. 添加2個text組件,用來顯示文字,分別寫上音效、音量,將其放置到合適位置,調(diào)整錨點位置.3. 添加兩個slider組件,用來控制聲音的大小,在其子對象backgro

22、und上改變顏色為黑色,添加一個空對象用來掛載聲音文件,命名AudioController,在其上添加2個聲音組件AudioSource,把對應的聲音文件拖放進去,然后添加一個AudioListener,用來監(jiān)聽場景中的聲音,添加一個腳本,用來控制聲音的大小,在控制過程中實現(xiàn)將滑動條的數(shù)值實時更新賦值給聲音組件聲音大小的數(shù)值,聲音組件的大小值為零到一,屬于百分比,滑動范圍同樣設置為零到一,然后調(diào)用Update函數(shù),此函數(shù)每幀都會執(zhí)行,一秒大約執(zhí)行60幀,基本可以滿足大部分應用實現(xiàn)實時更新效果,如此即可滿足聲音大小和滑動比例一致.4. 添加一個Button組件,用來控制聲音面板的隱藏,選擇聲音面

23、板,點擊WindowAnimation,然后出現(xiàn)3。10所示圖,該面板是用來自行制作動畫效果的,可以通過設置在不同幀的時候?qū)ο蟮奈恢?、旋轉(zhuǎn)等信息來進行錄制后連續(xù)播放,實現(xiàn)放電影一樣的效果,在該面板中設置兩個幀動畫,調(diào)節(jié)該面板的位置,實現(xiàn)效果一個為隱藏(把面板拖到攝像機視野外),一個為顯示(把面板拖到攝像機視野內(nèi)),在聲音面板上添加Animator組件并把該動畫放進去,在Button上添加點擊事件,監(jiān)測到點擊后會調(diào)用相關函數(shù)控制狀態(tài)機中標志位的值,進而改變狀態(tài)實現(xiàn)顯示或者隱藏,如圖3.11. 3。10 聲音面板幀動畫設置圖 3。11 Button點擊事件圖3。3 場景說明界面1. 在左上方添加3

24、D模型,一個為機器人,一個為主角,調(diào)整好位置放置,給主角添加動畫狀態(tài)機,將其跑動動畫放入,然后給主角添加Animator組件,拖入該動畫狀態(tài)機,注意查看該動畫,需要修改部分屬性,固定跑動使其不產(chǎn)生位移,如圖3。12。在其下方合適位置添加text組件,附上文字說明.3。12 Run動畫設置2. 在其右上方添加模型,并給主角添加上潛行動畫,具體方式可參照跑動設置,在其下方添加文件說明.3. 在其左下方添加模型,同時給主角和機器人添加跑動動畫,并附上文字說明.4. 在其右下方添加模型,給機器人添加射擊動畫,給主角添加死亡動畫,設置動畫循環(huán)播放,并在其下附上文字說明.3。4 游戲控制界面拖入各個模型,

25、給鑰匙添加一個旋轉(zhuǎn)動畫,調(diào)整各模型位置,附上文字說明。3。5 關卡選擇界面1. 在其左上方添加一個panel組件,給其添加3個image子組件和一個button子組件,分別給它們附上圖片,然后給該面板添加一個幀動畫,在第60幀的時候旋轉(zhuǎn)180度,在120幀的時候旋轉(zhuǎn)360度,然后選擇動畫反復執(zhí)行,可以實現(xiàn)面板不停做旋轉(zhuǎn)運動,添加一個空對象用來掛載腳本控制關卡的加載,可以直接調(diào)用Unity的API函數(shù)Application。LoadLevel()方法進行場景的加載,每個關卡都是一個不同的場景,每個場景都有自己獨一無二的索引值,將該值作為參數(shù)傳給該函數(shù)即可區(qū)分不同場景的加載,然后將該對象賦給but

26、ton的點擊事件,選擇對應的函數(shù)實現(xiàn)點擊調(diào)用。2. 在其他位置添加3個面板,每個面板添加一個button子組件,每個button添加鎖的背景圖片表明關卡還未開通。3。6界面之間的連接在Unity中有兩個類IBeginDragHandler,IDragHandler 專門封裝的鼠標拖動事件,其中OnBeginDrag(PointerEventData eventData) 方法是在鼠標開始拖動的時候啟用,可以記錄鼠標開始拖動的位置,OnDrag(PointerEventData eventData) 則是在鼠標拖動過程中調(diào)用,可以用來記錄鼠標最新的位置,在此用來記錄當前的位置,用鼠標左鍵抬起時結(jié)

27、束該函數(shù)的運行,用此時鼠標的位置減去開始的位置可以得到一個方向向量,通過調(diào)用this。transform。Translate()方法,重新給給該面板設置一個相對于世界坐標系的位置即可,需要注意的是,通過拖動函數(shù)得到的差值是一個象素值,而在設置位置的時候的值單位是米,用象素值除以100即可得到一個相對較好的效果。由于拖動過程中很難實現(xiàn)拖動距離正好達到一個界面的寬度,所以需要實時更新位置信息,通過方向向量的正負情況,確定向哪一個界面移動,然后通過差值運算將面板正好卡到想要達到的效果的位置.先設置每個面板的寬度為800米,可以在Update函數(shù)里面每幀執(zhí)行,當面板的本地X坐標大于零的時候,讓其回到(

28、0,0,0)位置,當面板的本地X坐標小于-3200時,將其移動到(-2400,0,0)位置,當面板本地X坐標在0到800以內(nèi),檢查方向向量的正負,為正移到(0,0,0)位置,為負移到(-800,0,0)位置,其它面板卡位思想相同,操作類似。注意在重新設置位置的時候,需要調(diào)用Vector3。Lerp()方法,該方法是一個差值運算,當距離目標點遠的時候移動很快,距離目標點近的時候移動很慢,可以實現(xiàn)平滑移動。第4章 游戲設計 用文字對本章節(jié)介紹內(nèi)容進行一個簡潔4。1 游戲場景設計4。1.1 游戲地形設計 本游戲采用了一個工廠地形,但是這個地形是雛形,需要添加4。1 場景鳥瞰圖1. 先把美工做好的地形

29、模型放入,給其添加一個碰撞器,見圖4。2。2. 依照鳥瞰圖把對應的激光、障礙物、攝像機、機器人、鑰匙、主角、控制臺、電梯、門等對象放到合適的位置。 4。2碰撞器4。1。2 激光設計1. 先給激光添加一個light組件,具體設置見該面板,其中Range是用來控制光線照射范圍,Intensity是用來控制光照強度的,Color使用來控制光的顏色渲染,根據(jù)場景中實際效果調(diào)節(jié)該值到一個合適的數(shù)值,見圖4。3。2. 給激光添加一耳光AudioSource組件,用來控制激光的聲音,注意該聲音為3D聲音,3D聲音只有靠近一定范圍才能聽見,靠的越近聲音越大,是掛載在對象上的,2D聲音無論距離遠近聲音大小一樣,

30、設置該聲音的傳播距離,實現(xiàn)只有靠近才能聽見的效果哦,見圖4.4.3. 給激光添加一個Box Collider,勾選IsTrigger設置其為觸發(fā)器,用來控制觸發(fā)檢測的,有了該觸發(fā)器,當對象進入觸發(fā)區(qū)域即可調(diào)用對應的函數(shù),見圖4。5。 4。3 燈光屬性 4。4聲音組件 4.5觸發(fā)器4. 給激光添加腳本,用來控制觸發(fā)響應事件和激光特性。在本游戲中激光有兩種狀態(tài),其中一種是一直存在的,另一種是閃爍變化的.為了區(qū)分兩種激光,設置一個標志位isFlicker,當其為真的時候代表閃爍激光,為假代表不可閃爍激光。主角有一個tag標簽,所有激光,當碰撞的對象的標簽是主角的時候就會控制警報聲的響起,并記錄主角碰

31、撞的位置信息通知機器人前去追捕擊殺。而對于閃爍激光,通過一個計時器控制閃爍的時間周期,當關閉周期到了使其關閉渲染,關閉觸發(fā)器,當開啟周期到了打開渲染,打開觸發(fā)器。5. 在Project面板建立一個空的文件夾,用來放置Prefabs,把Hierarchy面板中的激光拖進去做成預制,預制的作用即是克隆,以預制物體為母本,其它所有該物體均為克隆體,當發(fā)現(xiàn)有需要改動的地方,改動母體之后,所有克隆體都會修改,用起來很方便。在合適的位置添加該預制,可實現(xiàn)所有激光特性和預制一樣,在靠近電梯的兩個激光,勾選isFlicker,設置按滅時間,使其實現(xiàn)閃爍效果。4.1.2 感應門設計1. 先給門做一個Animat

32、or Controller,添加動畫狀態(tài)機Open和Close,右鍵Close,設置為默認狀態(tài),添加一個標志位Close,用來控制動畫的切換,右鍵Open選擇Make Transition,然后指向Close,單擊該指向,在出現(xiàn)的面板設置轉(zhuǎn)換條件,當Close為真的時候轉(zhuǎn)換到關閉狀態(tài)。Close指向Open做類似設置,當Close為假的時候轉(zhuǎn)換到打開狀態(tài),如圖4。6。2. 給門添加Animator組件,把該狀態(tài)機放進去。3. 給門添加Sphere Collider觸發(fā)器,調(diào)至合適的位置,調(diào)整合適的大小,具體可根據(jù)游戲運行效果設置,當主角或者機器人進入觸發(fā)區(qū)域,即可調(diào)用對應的觸發(fā)函數(shù)完成觸發(fā)事件

33、,如圖4。7。 4.6 門的狀態(tài)切換圖 4.7 球形觸發(fā)器4. 給門添加一個AudioSource組件,用來播放門的打開和關閉聲音,當主角或者機器人進入觸發(fā)區(qū)域的時候檢測有無開門聲音正在播放,沒有就播放,離開的時候也類似。5. 添加腳本控制門的事件,門的打開與關閉狀態(tài)是通過計數(shù)來判斷的,有人就打開,沒人就關閉。在一開始需要得到門動畫的引用,設置一個變量控制是否感應到有對象進入,當門的觸發(fā)區(qū)域沒有游戲?qū)ο?,就設置動畫為關閉狀態(tài),當觸發(fā)區(qū)域有對象進入,計數(shù)器加一,此時設置動畫為打開狀態(tài)。需要注意的是機器人身上不僅有碰撞器,也同時有范圍很大的觸發(fā)器,需要設置判定條件,只有碰撞對象是機器人并且為機器人

34、的碰撞器進入到門的觸發(fā)范圍才能計數(shù)器的自加.在游戲中還有一種是電梯的門,該門需要鑰匙才能打開,只有在持有鑰匙,并且觸發(fā)對象是主角的情況下門才會打開,需要設置一個標志位,用來控制是否需要鑰匙的門,當主角持有鑰匙進入計數(shù)器才會加一,否則進入觸發(fā)區(qū)域會播放一個拒絕的聲音。當對象離開的時候需要做相反的設置,進入調(diào)用OnTriggerEnter()函數(shù),該函數(shù)會在進入觸發(fā)區(qū)域時調(diào)用一次,離開用OnTriggerExit()函數(shù),該函數(shù)會在離開觸發(fā)區(qū)域時調(diào)用一次.6. 把門做成預制,在合適的位置添加門。4。1。3 監(jiān)控器設計1. 先把攝像機拖至合適的位置,給其子物體設置旋轉(zhuǎn)動畫,window-Animat

35、ion,選擇Rotation進行不同幀的動畫設置,在第60幀的時候讓其旋轉(zhuǎn)90度,在120幀的時候旋轉(zhuǎn)回來,控制該動畫循環(huán)播放,給其添加Animator組件,把狀態(tài)機放進去.2. 給子body子物體添加燈的組件,調(diào)整參數(shù)如圖4。8,用來達到攝像機照射區(qū)域提醒效果。3. 給其子物體添加一個觸發(fā)器,用來檢測被照射后的事件,攝像機能否發(fā)現(xiàn)主角,就是通過這個觸發(fā)器實現(xiàn),把該觸發(fā)器的渲染組件刪除,就可以感覺像是攝像機照射到的效果. 4。8 攝像機照射區(qū)域4. 添加一個腳本,控制攝像機的觸發(fā)檢測,每個攝像機都有一個專門制作的觸發(fā)區(qū)域模型,當主角進入觸發(fā)區(qū)域后就需要通知游戲控制器發(fā)現(xiàn)主角并記錄主角觸發(fā)時的位

36、置信息,檢測是否為主角通過主角的標簽進行判斷.5. 把攝像機做成預制,放在合適的位置,場景中一共有三個攝像機,其中兩個需要旋轉(zhuǎn)動畫,另一個只需要靜止檢測一塊區(qū)域即可,根據(jù)實際情況可調(diào)節(jié)各自屬性。4.1。4激光控制器設計1. 添加電腦到合適位置,給其添加碰撞器,觸發(fā)器,AudioSource組件.2. 添加腳本控制激光的關閉。當主角進入激光控制器的觸發(fā)范圍的時候,通過調(diào)用Input。GetKeyDown(KeyCode.Z)方法,當按下Z鍵調(diào)用對應的激光,通過GameObject。SetActive(false)方法可以禁用掉該激光,此方法禁用時會關閉其下所有組件,之后通過screen.rend

37、erer。materialf方法改變激光控制器上的鎖的圖標,設置一個標志位表明激光是否已關閉,當激光沒關閉的時候才能關閉,每關閉一個激光,激光計數(shù)就會減一,并設置該標志位為真。需要注意的是,為了得到激光、材質(zhì)等信息,需要在開始設置對象的引用,然后在Unity中賦值.4.1。5 電梯設計1. 添加電梯外側(cè)門,給左右的門添加碰撞器。給電梯外側(cè)門設置動畫狀態(tài)機,控制門的打開和關閉,具體可參照通用門的設置,添加AudioSource組件來控制門的拒絕聲音和打開聲音,添加觸發(fā)器來進行檢測主角是否進入.需要注意的是,一般感應門是一扇門,電梯的門是左右兩扇,只有電梯內(nèi)門設置的有動畫,為了保證內(nèi)外門一致,需要

38、在Update方法里面記錄內(nèi)門兩扇門的位置信息,當內(nèi)側(cè)門在播放動畫時,通過差值運算調(diào)用Mathf。Lerp()方法,使外側(cè)門的位置信息與內(nèi)側(cè)門保持一致。2. 用腳本控制電梯的升降,當有主角進入的時候,更改標志位表明主角進入,設置一個計數(shù)器記錄主角在電梯中的時間,到達計數(shù)時間后用transform.Translate()方法控制電梯向上運動,設置一個計數(shù)器記錄電梯上升時間,當?shù)竭_計數(shù)時間后調(diào)用協(xié)同程序顯示游戲勝利界面.4.1。6 其它環(huán)境設置1. 給每個喇叭添加一個AudioSource組件用來播放警報聲,當主角被發(fā)現(xiàn)就播放該聲音。2. 添加一個鑰匙模型放置到合適位置,給鑰匙添加旋轉(zhuǎn)動畫,給其添

39、加Light組件渲染其顏色效果,添加一個球形觸發(fā)器,當主角進入觸發(fā)區(qū)域后就通過Destroy()方法銷毀鑰匙對象,設置主角持有鑰匙的標志位,播放鑰匙被撿起的音效。3. 添加整個環(huán)境的背景光,需要兩個平行光,第一個平行光作為正常的光,顏色調(diào)的稍微灰暗一點,強度不需要太大,需要符合游戲場景。第二個平行光作為警報時的背景光,顏色調(diào)為紅色,強度設置為0,當觸發(fā)警報的時候再更改強度.4。9 正常背景光 4。10警報背景光4。2人物對象的設計4.2。1 主角的設計1. 把主角模型添加上去,在主角模型里面需要調(diào)一些屬性,大小如果不合適,可以調(diào)Model里面的數(shù)值。人物骨骼設置Rig,點Configure,注

40、意查看主角的骨骼映射.在其右方有骨骼映射關系圖,看看映射是否正確,否則會導致動畫出現(xiàn)不可預知的錯誤。在其左側(cè)有做好的對象的骨骼對象,找到對應的拖進去即可. 4。11 人物模型設置 4。12 人物骨骼 4。13 骨骼映射 4。14 骨骼映射對象2. 添加主角動畫狀態(tài)機,添加靜止、潛行和死亡動畫,設置兩個標志位,分別控制是否潛行,是否死亡,靜止設置為默認狀態(tài),死亡設置為任何狀態(tài)都可以轉(zhuǎn)化。4.15 主角動畫狀態(tài)機3. 在狀態(tài)機里面添加動畫狀態(tài)樹,然后把走動和跑動動畫都添加上去,可以使兩個動畫合成,添加一個float變量控制速度,合成的動畫可以依照速度的值進行狀態(tài)的切換。 4.16 狀態(tài)樹4。17狀

41、態(tài)樹動畫添加面板4. 給主角添加Capsule Collider碰撞器做碰撞檢測,添加剛體組件來實現(xiàn)主角的物理特性,添加一個AudioSource控制腳步聲的播放。4.18 剛體組件5. 控制主角移動的腳本。主角的移動是根據(jù)動畫產(chǎn)生位移的,調(diào)用Unity的API實時更新,當有方向鍵按下的時候,通過按下時間的長短控制其數(shù)值的變化,并將該數(shù)值實時更新到主角移動動畫狀態(tài)機里面,狀態(tài)機會根據(jù)其數(shù)值自動調(diào)節(jié)到走動或是跑動動畫.當按下鍵盤左邊的Shift鍵后,會控制動畫狀態(tài)機播放潛行動畫。當沒有鍵按下的時候,動畫狀態(tài)機就會播放主角靜止動畫。void Update () float h = Input。Ge

42、tAxis(”Horizontal”);/獲取水平數(shù)值float v = Input.GetAxis(”Vertical”);/獲取垂直數(shù)值/按下左側(cè)shift設置潛行標志位為trueif (Input。GetKey(KeyCode。LeftShift)) anim。SetBool(”Sneak", true); else anim。SetBool(”Sneak”, false); /有移動的時候設置狀態(tài)機里面的值控制移動if (Mathf.Abs(h) 0。1f | Mathf。Abs(v) > 0。1f) float newSpeed = Mathf。Lerp(anim。G

43、etFloat(”Speed”), currentSpeed, Time。deltaTime moveSpeed); anim。SetFloat(”Speed", newSpeed);/目標方向Vector3 targetDir = newVector3(h, 0, v);/獲取朝向和旋轉(zhuǎn)軸Quaternion newRotation= Quaternion。LookRotation(targetDir, Vector3。up);/旋轉(zhuǎn) transform.rotation= Quaternion。Lerp(transform。rotation, newRotation, Time。

44、deltaTime rotateSpeed); else anim。SetFloat(”Speed", 0); if (anim。GetCurrentAnimatorStateInfo(0).IsName("Locomotion”)) PlayFootMusic(); else StopFootMusic(); if (currentSpeed 0) txt_CuurentSpeed。GetComponent<Text>().text = ”當前最大移動速度:” + currentSpeed。ToString(”0。0"); else txt_Cuur

45、entSpeed。GetComponent<Text>().text = ”當前最大移動速度:0" 6. 主角血量腳本。用來控制主角血量信息,會在此處控制主角血量的滑動條的數(shù)值和主角血量保持一致進行實時更新,當主角受到傷害的時候就會使其血量減少,一旦血量為0則表示主角死亡,死亡后通過調(diào)用協(xié)程等待2秒后顯示游戲結(jié)束面板。/初始化void Awake() anim=this。GetComponentAnimator(); /受到傷害生命值減少publicvoid TakeDamage(float damage) hp -= damage;if (hp = 0) anim。Se

46、tBool(”Dead”,true); StartCoroutine(ReLoad(); /協(xié)程控制游戲失敗面板的顯示IEnumerator ReLoad() yieldreturnnewWaitForSeconds(2); gameOverPanel。SetActive(true);/實時更新血量信息publicvoid Update() healthSlider.GetComponentSlider>().value = hp;if (hp 0) healthText.GetComponent<Text()。text = hp。ToString(”0”); else healt

47、hText。GetComponent<Text()。text ="0”; 4。2。2 機器人的設計1. 同樣給機器人添加動畫狀態(tài)機,添加狀態(tài)樹合成新動畫,設置好骨骼,具體參照主角設計,添加三個float型變量,Speed控制移動速度,AngularSpeed控制角速度,Shot控制射擊頻率,設置一個標志位控制是否發(fā)現(xiàn)主角. 4。19 機器人動畫狀態(tài)樹 4。20 機器人動畫合成2. 給機器人添加剛體組件控制其物理特性,添加一個觸發(fā)器控制其聽覺 4。21 機器人剛體組件 4。22機器人觸發(fā)器3. 選中環(huán)境,烘培地形,實現(xiàn)自動導航,設置其參數(shù)如圖,然后點擊Back. 4。23導航烘培

48、屬性 4。24烘培后效果4. 給機器人添加Nav Mesh Agent組件,設置參數(shù)如圖,實現(xiàn)機器人自動導航,由于機器人的移動是通過動畫產(chǎn)生的,而在自動導航中會有一個位置的改變和旋轉(zhuǎn)的改變會強行變化機器人的位置和朝向,因此需要通過腳本控制將導航組件里面的位置和旋轉(zhuǎn)給禁用掉。 4。25 導航組件5. 機器人視野腳本。機器人會實時更新最新發(fā)現(xiàn)主角的位置,如果最新發(fā)現(xiàn)主角的位置和之前最后一次發(fā)現(xiàn)主角的位置不一致,就會通知游戲控制腳本主角的最新位置信息.在設計中,機器人是有聽覺和視覺的,設置一個標志位用來判斷主角是否在機器人的視野范圍內(nèi),默認為false.通過一個較大的觸發(fā)器來控制機器人的聽覺,如果主

49、角在觸發(fā)范圍內(nèi)并且此時在播放運動的動畫,就進行路徑檢測,在此設置一個路徑用來記錄主角和機器人之間的距離,Unity自帶的導航API可以調(diào)用其屬性來獲取一系列的路徑點,通過用一個for循環(huán)可以把這所有點每兩個點之間進行線段長度的累加,如果長度之和在機器人聽覺范圍內(nèi),機器人就會聽到主角的移動聲音,就會將主角位置信息賦值給警報位置,進而過去巡查。對于機器人視野,通過一個射線檢測實現(xiàn),首先會記錄機器人的一個朝向信息,當主角進入機器人的觸發(fā)范圍內(nèi)后,通過主角位置與機器人位置的一個差值可以得到一個方向向量,再用一個變量記錄機器人的朝向和主角之間的夾角,從機器人的眼睛位置會朝主角發(fā)射射線,如果機器人朝向和主

50、角的夾角小于一個數(shù)值,并且射線直接碰撞到主角的時候,就表明機器人發(fā)現(xiàn)了主角,然后設置一系列發(fā)現(xiàn)后的位置更新報警追捕等事件。當主角離開觸發(fā)區(qū)域后,就設置主角在視野范圍內(nèi)的標志位為false。/實時更新最近一次發(fā)現(xiàn)主角的位置void Update() if (GameController。_instance。lastPlayerPostion != preLastPlayerPosition) alertPosition = GameController。_instance.lastPlayerPostion; preLastPlayerPosition = GameController。_ins

51、tance。lastPlayerPostion; publicvoid OnTriggerStay(Collider other) /檢測是否在視野范圍內(nèi)if (other.tag = Tags。player) Vector3 forward = transform。forward;Vector3 playerDir = other.transform.position transform。position;float temp = Vector3。Angle(forward, playerDir);RaycastHit hitInfo;bool res= Physics.Raycast(tr

52、ansform.position+Vector3。up,other.transform.positiontransform。position,out hitInfo);if (temp 0.5f * fieldOfView)&(res=false|hitInfo。collider。tag=Tags.player) playerInSight = true; alertPosition = other。transform.position;GameController。_instance.SeePlayer(other.transform); else playerInSight = false; /檢測是否在聽覺范圍內(nèi)if (playerAnim。GetCurrentAnimatorSta

溫馨提示

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

評論

0/150

提交評論