




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
頁緒論手游的發(fā)展手游即手機上的游戲。隨著移動互聯(lián)網(wǎng)時代的到來,如今,手機除了滿足大家發(fā)短信、通電話的基本需求外,玩游戲早已成為手機最重要的功能之一。手游早期為簡單的文字游戲,隨著手機像素、運行效率的提高,一些具備了簡單彩色圖形的手游開始面向用戶,這類游戲大多使用JAVA語言編寫實現(xiàn),不論是畫面,還是玩法都比上一個代提升了許多,然后是近幾年的app應(yīng)用,例如N-Gage,N-Gage是諾基亞在那個時代所研發(fā)的手游平臺,但是由于移動網(wǎng)絡(luò)無法很好的支持手游下載、支付渠道也稀少而復(fù)雜,N-Gage始終沒能大紅大紫。Android和IOS的興起,手機在其本質(zhì)工作幾乎毫無進化的幾年之間卻在其余幾乎每個領(lǐng)域發(fā)生了翻天覆地的變化,最簡單并且最直觀的一點表現(xiàn)就是性能參數(shù)了,手機性能參數(shù)的提高增加了應(yīng)用的安裝數(shù)量及功能,在這之中,手游獲得的增益很大。門檻低,投入小,回報大,是手游的主要優(yōu)勢,這也使很多游戲開發(fā)商紛紛轉(zhuǎn)型手機游戲的開發(fā)。隨著手機游戲市場的日漸升溫,手游已經(jīng)開始主導(dǎo)著整個移動互聯(lián)網(wǎng)的發(fā)展,千萬級用戶,千萬級收入已經(jīng)不再是空話,手機行業(yè)的發(fā)展極大推動了手游的發(fā)展。近年來,手游更是有了質(zhì)的飛躍,在手機行業(yè)跨越式的發(fā)展下,手機系統(tǒng)再也不是當年NOKIA的塞班系統(tǒng),iPhone的誕生,及其開創(chuàng)的觸屏潮流,不僅革新了用戶操作手機的體驗,而且也使手游脫離了物理鍵盤的局限,有了除“上下左右”之外的新的玩法。后來谷歌研發(fā)的安卓手機系統(tǒng)誕生,觸屏智能更加便捷,得到了很快的普及,谷歌市場也出現(xiàn)了各種各樣的安卓游戲,隨后的幾年安卓手游成瘋狂的趨勢增持。研究目的及意義小時候接觸的小霸王游戲機,當時街霸對打、忍者神龜系列、刀侍等格斗游戲就非?;穑祟愑螒虻氖芤嫒罕姺浅6?。再加上手機性能的提高,3D格斗游戲在手機上也越來越流暢,格斗游戲在以后將非常有優(yōu)勢。相對頁游、端游來說,手游開發(fā)在當前游戲領(lǐng)域還算比較少,可探索的區(qū)域還有很多,比如前一段時間掛機游戲能火也是出乎意料的結(jié)果。生活節(jié)奏的加快,碎片化的時間模式推動玩家朝手游方向靠攏,并且當前正值手機領(lǐng)域高速發(fā)展,這提供給玩家一個很好的游戲載體,這一機遇迫使部分游戲開發(fā)商紛紛投身手游開發(fā),游戲行業(yè)即將掀起一場手游風(fēng)暴。論文架構(gòu)本文共六個章節(jié)內(nèi)容,主要介紹一款游戲從剛開始構(gòu)思到開發(fā)完成的整個過程。第一章:緒論,簡要介紹了手機游戲的發(fā)展歷史,本課題的研究目的和意義。第二章:游戲開發(fā)環(huán)境,詳細介紹了本次畢設(shè)的開發(fā)引擎-Unity3D界面的使用,并且就UI界面的設(shè)計做詳細的說明。第三章:游戲需求分析,列舉了游戲中的一些需求點,并對游戲中出現(xiàn)的一些相關(guān)技術(shù)進行說明。第四章:游戲設(shè)計實現(xiàn),列舉游戲中比較重要的幾個系統(tǒng)(登陸界面、游戲主界面、關(guān)卡選擇界面、戰(zhàn)斗系統(tǒng)),對其功能的實現(xiàn)進行腳本的說明。第五章:游戲測試,游戲項目完成后,對游戲進行測試,并提供測試數(shù)據(jù)。第六章:總結(jié)與展望,根據(jù)本畢設(shè)的開發(fā)現(xiàn)狀,作總結(jié)與展望。
二、游戲開發(fā)環(huán)境Unity3D游戲引擎Unity3D是一款集三維視頻游戲、建筑可視化、實時三維動畫于一身的專業(yè)游戲引擎[1],其多平臺性表現(xiàn)在它可將已完成的游戲項目打包成Windows、Mac、Wii、iPhone、Windowsphone8和Android等多種平臺所對應(yīng)的文件格式。具有高度優(yōu)化的圖形渲染管道和內(nèi)建的NVIDIAPhysX物理引擎,使其能夠較為真實地模擬3D物體的運動和碰撞。對DirectX和0penGL擁有高度優(yōu)化的圖形渲染管道,使其能夠比較真實、清晰的顯示各種材質(zhì)、貼圖。它支持大部分主要的文件格式,并能和大部分相關(guān)應(yīng)用程序協(xié)同工作,使用者不再需要使用其他轉(zhuǎn)換格式的軟件,用起來更加方便快捷。Unity3D能夠?qū)庉嬈?、跨平臺發(fā)布、地形編輯、著色器、腳本、網(wǎng)絡(luò)、物理、版本控制等進行全面整合,優(yōu)化使用界面,降低操作重復(fù)性,提高操作效率。這些都使Unity3D成為獨一無二的游戲引擎。關(guān)于Unity3D的使用,需要了解以下幾個方面的內(nèi)容:主界面視圖Unity3D界面上方為菜單欄,所有功能都可以在菜單欄中找到。菜單欄下方為具有各種功能的窗口,負責游戲項目的大部分操作,可將部分用得相對頻繁的窗口單獨拖出來放在外面,方便使用。Hierarchy窗口、Project窗口、Console窗口、inspector窗口、Scene窗口和Game窗口為主要的窗口,具體如圖2-1所示:2-1Unity3D主界面Hierarchy窗口主要用于放置Gameobject,可以對Gameobject進行選中、重命名、拖動分層、添加組件等操作,并且Hierarchy的所有內(nèi)容都會在scence窗口中顯示出來。Project窗口為項目工程的文件入口,游戲項目的所有文件都可以在project中找到,進行資源替換、查找都要在這個窗口下操作。Console窗口為一個指令提示窗口,項目運行的各種情況都會在這邊以CSharp語言的形式顯示出來,包括錯誤、警告、運行成功等,通過查看此窗口,可以輕松找出報錯的根源。Inspector窗口為Gameobject的編輯窗口,包括Gameobject的坐標、大小、附加控件及添加腳本等,一個Gameobject對應(yīng)一個inspector,默認顯示被選中的Gameobject的inspector窗口。Scene窗口真實地顯示Hierarchy窗口中Gameobject的樣式和Tranform位置,可對Gameobject進行選中、拖動、旋轉(zhuǎn)等操作。Game窗口為運行項目時所呈現(xiàn)出來的真實游戲效果,為映入屏幕的畫面。GameobjectGameobject就是一個容器,Unity3D中的任何組件、目標、模型都必須用Gameobject來承載,它可以是一張圖片、一段單一的文字、或是一個簡單的模型,取決于你給它添加什么內(nèi)容。從Unity3D菜單欄的“Gameobject”中可以輕松創(chuàng)建一個空的Gameobject,快捷鍵ctrl+shift+N比較常用。如在一個空的Gameobject中添加一個Directionallight(單向燈光控件),則此Gameobject就是個燈光,可在inspector窗口編輯。Gameobject支持重命名功能,使開發(fā)者能一眼就看出Gameobject內(nèi)的內(nèi)容,提升工作效率,Gameobject還可以嵌套子Gameobject,方便進行資源的整合。Tranform(坐標)的理解如下圖inpector窗口中的Tranfrom所示,Gameobject的坐標包含“P”“R”“S”三個坐標,“P”即position,為Gameobject的位置坐標,用于控制目標的方位信息?!癛”即rotate,為Gameobject的旋轉(zhuǎn)坐標,調(diào)節(jié)P坐標將使目標作出相應(yīng)轉(zhuǎn)向。例如將上面提到的單向燈光的Tranform“R”中的X坐標從0改成90,則此燈光從橫向燈變成縱向燈?!癝”即scale,為Gameobject的大小坐標,控制目標的大小尺寸,x、y、z對應(yīng)Gameobject的長寬高。一個Gameobject至少包含一個tranform,有且僅有一個tranform。2-2Gameobject中的tranform腳本系統(tǒng)Unity3D提供強大的腳本系統(tǒng),支持javascript、C#script、booscript語言[2],本次畢設(shè)用的是C#語言,如需要讓某些Gameobject實現(xiàn)特定功能,可通過編寫C#腳本,保存起來,并將腳本拖動到Gameobject所對應(yīng)的inspector窗口,這樣該Gameobject就具有腳本所描述的功能。2-3Unity3D中的腳本文件C#也叫做CSharp,是一種面向?qū)ο蟮某绦蛟O(shè)計語言,它繼承了C和C++的強大功能,并簡化了C和C++的一些復(fù)雜特性,使其成為當前.NET開發(fā)的首選語言。因為它強大的操作能力、優(yōu)雅的語法風(fēng)格、創(chuàng)新的語言特性和便捷的面向組件編程,使其成為系統(tǒng)開發(fā)和應(yīng)用開發(fā)的最佳使用語言。Unity3D文件在Unity3D中的Gameobject文件,均被保存為后綴為.perfebs文件,也是Unity3D可讀取識別的文件。做游戲項目資源是必不可少的,Unity3D自帶的資源也是有限的,例如一些Unity3D里面沒有的貼圖、材質(zhì)、animation動畫等資源[3],需要通過其他途徑查找,然后導(dǎo)入到Unity3D中使其變成可用元素。Unity3D也支持自制animation動畫,在Unity3D菜單欄的“windows”中選擇animation窗口進行動畫的自制,將animation動畫掛在Gameobject上可實現(xiàn)Gameobject的位移、放大縮小、漸變或其他更高級的效果。2-4animation制作工具游戲中的各種圖標Texture文件需要制作成Atlas圖集的形式,Unity3D提供atlasmaker工具,將想要的圖標素材導(dǎo)入到Unity3D中,然后利用atlasmaker工具將素材更新到所需要的圖集里。2-5atlasmaker界面Camera(鏡頭)正如電影導(dǎo)演手中的攝像機將故事呈現(xiàn)給觀眾一樣,Unity3D中的Camera用于將游戲畫面呈現(xiàn)給玩家,即Game窗口中的內(nèi)容。一個視圖中至少應(yīng)該放置一個鏡頭,否則呈現(xiàn)出來的畫面只會是一片漆黑。鏡頭的放置位置也決定了游戲體驗,鏡頭應(yīng)盡量放置在能看清整個場景的位置,距離適中,太近的鏡頭視距太短看不到遠方的路障,太遠的鏡頭看不清前方的物體,影響游戲體驗。Unity3D中新建的工程都有提供一個maincamera鏡頭。另外,可以給鏡頭添加一些功能,如animation動畫,在鏡頭上添加具有短位移的animation動畫可以使其抖動。NGUINGUI為Unity3D的一款界面UI設(shè)計插件,使用NGUI可以輕松完成大部分2D界面設(shè)計,下面是NGUI的一些基礎(chǔ)控件及關(guān)鍵點:Sprite(圖片):如果要將一張圖片放在界面中,需要選中一個Gameobject,然后添加UIsprite腳本(或直接使用NGUI創(chuàng)建一個sprite控件),該對象的inspector窗口中即出現(xiàn)sprite控件欄。如圖1-2所示,點擊Atlas選擇圖集,后面為選擇圖集的具體圖片。2-6UISprite腳本界面Label(文本框):使用UIlabel腳本在界面中添加文字,文字顏色、大小、位置均可自己控制,如圖2-7所示:2-7UILabel腳本界面Button(按鈕):其實Button控件是由sprite、label和collider碰撞器組合而成的,應(yīng)該包含一個父Gameobject,和三個子Gameobject。Collider為碰撞器,用于響應(yīng)外界對此塊區(qū)域的操作。當點擊此塊區(qū)域時,將執(zhí)行某些處理,可由腳本控制。這三個也可全部放在一個Gameobject中,但是,這樣做的缺點就是他們共用一個tranform,復(fù)用性不強。Tween(動畫):即動畫效果,包含顏色變化、大小變化、旋轉(zhuǎn)變化、深淺變化等,類似animation動畫,差別在于tween為寫死的動畫,沒法像animation動畫那樣自由調(diào)節(jié)??蓲煸谌魏螌ο笊?,并且需要選擇如何觸發(fā)此動畫。如點擊一下Button觸發(fā)頂部按鈕由透明變成正常顏色,這樣就實現(xiàn)了簡單的Tween動畫功能。Depth(深度):界面為2D界面,沒法避免窗口、圖片重疊的現(xiàn)象,depth可以有效的將各個Gameobject分層處理。Depth值越低代表此物體越底層,將被depth值比他高的Gameobject遮擋住。NGUI還提供一些例如滑動條、輸入框、下拉欄等更高級的控件,在本文不涉及到,在這里不做闡述。
游戲需求分析游戲基本介紹本畢設(shè)為一款使用Unity3D引擎制作實現(xiàn)的3D格斗游戲,腳本使用C#編程語言編寫,主角為大家耳熟能詳?shù)匿撹F俠,游戲整體風(fēng)格偏機甲類,主要玩法即格斗。3-1戰(zhàn)斗界面戰(zhàn)斗界面如圖3-1所示,玩家通過控制界面左側(cè)的方向鍵(已隱藏)進行主角前后左右的移動,通過點擊右邊的攻擊鍵實施攻擊。游戲?qū)⒔o玩家?guī)沓诺母穸穭幼?,逼真的打擊感,通過較為真實的打擊感,讓玩家在游戲中感受快樂。需求分析設(shè)計游戲之前需要對游戲進行全面的需求分析[4],明確設(shè)計方向,然后寫游戲的設(shè)計說明書,界面設(shè)計及一些功能性的東西可以參考市面上比較熱門的游戲的做法,游戲?qū)⒁罁?jù)此份說明書進行設(shè)計。說明書應(yīng)該包含游戲各個界面的介紹、每個按鈕功能、以及游戲中每一步操作對應(yīng)的響應(yīng)方式。需求分析完需要構(gòu)建游戲的系統(tǒng)框架,使用導(dǎo)圖的方式將游戲的各個系統(tǒng)、模塊一目了然的呈現(xiàn)出來。如圖3-2所示,利用MVC框架將游戲的各個系統(tǒng)界面聯(lián)系起來。3-2游戲系統(tǒng)框架場景模型的搭建一個可用的場景模型包含兩個方面的屬性,一方面是模型,另一方面是阻擋。單純從可用性來說模型一點用處都沒有,但是為了讓玩家知道哪邊可以踩、哪邊是墻壁、哪邊會產(chǎn)生碰撞,就必須設(shè)置模型。阻擋用于限制玩家的活動區(qū)域,也就是配合模型來使用的。可以說,沒有阻擋的模型是不可用的,沒有模型的阻擋是不具生命力的,兩者密不可分。3-3一個模型所包含的內(nèi)容如圖3-3所示,inspector窗口中Cube(MeshFilter)為模型組件,BoxCollider為阻擋碰撞器,Center為此碰撞器的坐標位置,Size為碰撞器尺寸。MeshRenderer是材質(zhì)組件,用于幫模型添加材質(zhì)、貼圖。3-4較為成形的場景模型模型眾所周知,點成線,線成面,面成體。模型由面組合而成,模型的制作可通過3DSMAX等建模軟件實現(xiàn),面數(shù)越多的模型越精致,但是對系統(tǒng)性能的要求也越高。游戲畫面是由計算機CUP和GPU實時處理演算出來的圖像,面數(shù)越多對GPU的壓力越大,易導(dǎo)致游戲畫面卡,運行不流暢等情況,所以盡量選擇低面數(shù)模型、優(yōu)化所用模型材質(zhì)能夠大幅提高游戲性能。Unity3D提供一些簡單的3D模型供玩家使用,如正方體、球體、圓柱體等多種模型,實際上,他們是屬于添加了模型組件的Gameobject,這些模型可用于當做戰(zhàn)斗場景,可以通過調(diào)節(jié)這些模型的長寬高來匹配場景人物模型的大小。阻擋Unity3D自帶一些簡單形狀的阻擋,如boxcollider、meshcollider碰撞器。阻擋碰撞器只是個組件,想運用它必須放在Gameobject中實現(xiàn),因為這些都是體阻擋,如果想要面阻擋,需把該阻擋對應(yīng)的Gameobject中tranform的S坐標其中一個值改成0就行了。設(shè)置場景的各個方向阻擋,需要特別注意的是,給主角和NPC站立的那一面阻擋需要將阻擋對應(yīng)Gameobject屬性改成“ground”,否則角色無法站在阻擋上。設(shè)置四周阻擋,防止主角掉出場景外,四周阻擋必須足夠高,超過角色所能跳躍的高度,防止主角跳出阻擋。碰撞檢測游戲過程中經(jīng)常會出現(xiàn)主角被墻壁所阻斷,撞到NPC將其推開等情況,這些都是屬于碰撞檢測,Unity3D提供例如boxcollider(長方體)、meshcollider(圓柱體)等碰撞檢測器[5],當檢測到碰撞器時,調(diào)用OnControllerColliderHit()控制碰撞器碰撞函數(shù),防止游戲過程中人物相互穿越、穿墻等情況的發(fā)生,有利于提高游戲的真實性。想要添加更多復(fù)雜的碰撞檢測器,可通過3DSMAX等建模軟件制作完成再添加到Unity3D中來。人物動作說明因為動作與模型的高度長短相關(guān)聯(lián),所以動作一般都是和模型綁定在一起,兩個模型骨骼(高度、肢體長度)大體一樣,可進行動作的復(fù)用,人物動作可以用maya等動作處理軟件實現(xiàn),動作應(yīng)包含最基本的走路、攻擊、跳躍等基本動作。本畢設(shè)所用模型、動作均來源于網(wǎng)絡(luò),且模型高度、骨架一樣,動作復(fù)用同一套,節(jié)約開發(fā)成本,縮短開發(fā)周期。3-5動作文件腳本內(nèi)容模型動作的導(dǎo)入將已制作好的模型動作文件導(dǎo)入到Unity3D引擎中,導(dǎo)入格式為FBX,并將模型所對應(yīng)的貼圖材質(zhì)一起導(dǎo)入到Unity3D中。值得注意的是,無論之前在3DSMAX軟件中的模型有沒有材質(zhì),導(dǎo)入到Unity3D后,模型都是沒有材質(zhì)的。Unity3D配備了強大的編寫材質(zhì)和陰影的工具(ShaderLab),導(dǎo)入模型后,需要手動在Unity里面重新設(shè)置一遍材質(zhì)貼圖。動作處理導(dǎo)入到Unity3D中的FBX動作文件其實就是帶序列幀的動畫文件,它包含動作的所有動畫,并標注出每一個動作的幀數(shù)范圍。但是這些動畫沒法直接拿出來使用,需要進行腳本控制處理[6]。根據(jù)導(dǎo)入的FBX動作文件的序列幀,編寫腳本,在某些條件下觸發(fā)對應(yīng)動畫序列幀,制作對應(yīng)的perfeb動作文件,比如按“攻擊”按鈕,觸發(fā)攻擊動畫的序列幀等。一個動作應(yīng)該包含四個屬性:位移、傷害、聲音和特效。3-6動作對應(yīng)幀范圍位移--即從動作開始到動作結(jié)束人物產(chǎn)生的位移。傷害—包含此動作所產(chǎn)生的傷害范圍、擊飛距離、高度等,但是走路動作是不具備傷害屬性的。聲音—即此動作的聲音。特效—即此動作的特效。動作調(diào)優(yōu)為了動作更加真實,經(jīng)過動作處理的perfeb動作文件需要進行調(diào)優(yōu)才算是一個合格的動作,比如一個攻擊動作產(chǎn)生位移太大、走路能把人擊飛等這些顯然都是不合理的。動作調(diào)優(yōu)即根據(jù)實際動作,合理的調(diào)節(jié)動作的位移、傷害、聲音、特效,使它的傷害、聲音、特效出現(xiàn)時機更加匹配該動作。另外,為了防止一個動作還未結(jié)束另一個動作就開始執(zhí)行的情況發(fā)生,需要設(shè)置每一個動作的開始結(jié)束時間,這樣能有效解決連招動作的施放問題。除此之外,為了防止出現(xiàn)按鍵重疊時動作出錯的情況,每個動作需要設(shè)置施放優(yōu)先級。經(jīng)過以上三步調(diào)優(yōu)后的動作更加接近真實。游戲鏡頭控制本游戲用的兩種游戲鏡頭,camera和maincamera,camera為固定死的2D鏡頭,用于2D界面映射,maincamera用于3D場景映射,戰(zhàn)斗時打開此相機。手機游戲比較頭疼的問題就是屏幕太小,不好操作容易按錯鍵,為了使玩家在手機上更便捷的操作,鏡頭將使用系統(tǒng)自帶的跟進鏡頭腳本(firstpersoncontroller),將其掛在maincamera上進行鏡頭的控制,減少玩家控制過程中對于鏡頭的調(diào)整,使能更專注于戰(zhàn)斗本身,簡化了游戲操作,并且更為輕松。加載界面3-6加載界面由于不同界面之間的切換、界面到戰(zhàn)斗場景的切換都需要加載各種數(shù)據(jù),加載到內(nèi)存完成才會顯示出來,這需要花費一段時間,如果莫名奇妙的黑屏將會使玩家迷茫,使用加載界面作為過渡能有效的解決此問題。界面中下方為進度條,方便玩家理解加載的進度。
四、游戲設(shè)計實現(xiàn)各系統(tǒng)界面分析登錄界面4-1游戲登錄界面簡圖登錄說明進入游戲后首先進入登錄界面(圖4-1所示),登陸界面采用快速登錄方式,屏幕中上方為游戲名稱,默認顯示“基于Unity3D的格斗游戲”,屏幕中心為賬號名稱,可任意輸入想要的游戲ID,下方“進入游戲”按鈕,背景圖可隨時替換,點擊屏幕后進入游戲主界面。界面設(shè)計登錄界面相對其他界面來說較為簡單,添加sprite控件,或者是新建一個Gameobject,并添加UIsprite腳本。將所需背景圖拖入sprite中,將depth調(diào)為0,置于最底層,保證背景圖不會覆蓋到其他內(nèi)容。同樣的,新添一個label控件,將label文字內(nèi)容更改為所需的游戲名稱,depth值大于0就行。添加一個button控件作為進入游戲主界面的按鈕,將button的文字改成“進入游戲”,調(diào)整Tranform大小來調(diào)節(jié)button碰撞器的大小,碰撞器大小盡量大,易于點擊,用于響應(yīng)手指點擊后跳轉(zhuǎn)游戲主界面。賬戶的輸入使用NGUI輸入框控件。功能實現(xiàn)點擊“進入游戲”按鈕,進入游戲主界面,實現(xiàn)代碼如下:stringuserAccount=SystemInfo.deviceUniqueIdentifier;stringuserPassword=SystemInfo.deviceUniqueIdentifier;Show(false);HudManager.Instance.ShowDialog(DIALOG_TYPE.HUD_LOADING_BAR);KiiManager.Instance.RegisterIphone(userAccount,userPassword);Fa?ade.instance.sendnotification(GAME_TAPE.HUD_MAINTEMP))說明:Show(false);表示關(guān)閉登錄界面,HudManager為界面管理器,實際上就是一個手寫的腳本。HUD_LOADING_S為加載界面,利用界面管理器調(diào)用打開加載界面,隨后打開游戲主界面。KiiManager即Kiicloud,為一個管理數(shù)據(jù)的后端服務(wù),本段代碼調(diào)用KiiManager中的instance方法將賬號密碼保存起來。實際效果4-2實際登錄界面游戲主界面4-3游戲主界面簡圖界面功能說明在登錄界面點擊按鈕后進入游戲主界面,如上圖所示。左上角為游戲名稱,顯示玩家游戲ID,界面中心角色模型為鋼鐵俠模型,界面右邊為“冒險”“競技塔”“部件”按鈕,“冒險”為關(guān)卡選擇界面入口,點擊后進入關(guān)卡選擇界面。界面NGUI設(shè)計界面中心是一個鋼鐵俠模型,為perfeb模型文件,這塊區(qū)域必須放置碰撞器以響應(yīng)手指觸摸。右邊對應(yīng)“冒險”按鈕,為button控件,可掛相應(yīng)腳本在button上,使其點擊后執(zhí)行不同指令,進入不同分界面。新添一個sprite控件,選擇一張背景圖,并將depth值調(diào)到最低。功能實現(xiàn)點擊“冒險”按鈕跳轉(zhuǎn)關(guān)卡選擇界面,實現(xiàn)如下:publicvoidOnBattle(){ if(!ballEnable) return; Show(false); GlobalSet.SetMainSceneCameraControl(true);HudManager.Instance.ShowDialog(DIALOG_TYPE.HUD_LOADING_S);Fa?ade.instance.sendnotification(GAME_TAPE.HUD_MAIN_SCENE))}說明:打開一個新界面時需要先關(guān)閉當前界面,這樣節(jié)省內(nèi)存空間。Show(false)就是用來關(guān)閉當前界面。GlobalSet.SetMainSceneCameraControl(true);打開關(guān)卡場景相機,并調(diào)用facade的instance方法發(fā)送消息給MVC端口請求打開HUD_MAIN_SCENE。為關(guān)卡界面。實際效果4-4實際主界面關(guān)卡選擇界面4-5關(guān)卡選擇界面界面功能說明如上圖所示,第一章共有5個關(guān)卡,點擊后在相應(yīng)關(guān)卡按鈕上方彈出“攻擊”按鈕,點擊“攻擊”按鈕進入對應(yīng)關(guān)卡的戰(zhàn)斗界面,點擊其他區(qū)域隱藏攻擊按鈕。點擊右下角的“返回”按鈕,回到游戲主界面。界面NGUI設(shè)計使用sprite控件添加背景圖,depth設(shè)為最低。新建一個空的Gameobject,添加關(guān)卡的sprite、label和collider碰撞器,選擇好合適的圖片作為關(guān)卡圖添加到sprite中,label改成相應(yīng)的關(guān)卡名。右下角“返回”按鈕為button控件。界面功能實現(xiàn)點擊任一關(guān)卡彈出“攻擊”按鈕,點擊“攻擊”按鈕進入戰(zhàn)斗畫面,實現(xiàn)代碼如下:publicvoidOnBuilding(){ if(mBuildingDic==null) return; GlobalSet.SetMainSceneCameraControl(false); buildingUi.SetActive(true);}說明:if(mBuildingDic==null)判斷當前區(qū)域是否有關(guān)卡數(shù)據(jù),如果是空的,返回重新判斷,如果非空,則關(guān)閉關(guān)卡場景鏡頭,打開戰(zhàn)斗場景。4-6點擊關(guān)卡彈出攻擊按鈕點擊其他區(qū)域關(guān)閉攻擊按鈕,實現(xiàn)如下:publicvoidOnCloseBuildingUi() { ClearAllBuilding(); buildingUi.SetActive(false); GlobalSet.SetMainSceneCameraControl(true); }點擊“返回”按鈕返回游戲主界面,實現(xiàn)如下:publicvoidOnRet() { GlobalSet.SetMainCameraControl(false); if(m_baseInfo.type==BASE_TYPE.MAIN) HudManager.Instance.ShowDialog(DIALOG_TYPE.HUD_MAIN);}實際效果4-7實際關(guān)卡界面戰(zhàn)斗系統(tǒng)戰(zhàn)斗系統(tǒng)分成兩個部分,一部分是對于主角的控制,通過觸摸屏幕控制主角的上下左右、跳躍、攻擊等,另一部分是NPC的智能AI,讓NPC自動尋找接近目標,并實施攻擊。主角控制通過響應(yīng)玩家的某些操作,調(diào)用播放主角對應(yīng)的動作動畫,實現(xiàn)動作的控制。實現(xiàn)控制主角上下左右移動,代碼如下:publicvoidSetHorizontalVelocity(Vector2velocity,boolreferenceSelf) { SetHorizontalVelocity(velocity.normalized,velocity.magnitude,referenceSelf); } publicvoidSetHorizontalVelocity(Vector2toward,floatspeed,boolreferenceSelf) { horizontalSpeed=speed; horizontalToward=toward; if(referenceSelf)horizontalToward=TransformDirection(horizontalToward); } publicVector2TransformDirection(Vector2direction) { Vector3toward=newVector3(direction.x,0f,direction.y); toward=transform.TransformDirection(toward); returnnewVector2(toward.x,toward.z);}實現(xiàn)控制主角跳躍代碼如下:publicvoidJump() { TurnTo(joystickToward,false); if(joystickToward!=Vector3.zero) SetHorizontalVelocity(Vector2.up,runSpeed,true); verticalVelocity=jumpSpeed; }實現(xiàn)控制主角攻擊代碼如下:publicvoidCast(iHerocaster) { this.caster=caster; if(faceTarget) { HeroManager.SelectTarget(caster); if(caster.AttackTarget!=null) caster.Controller.TowardEnemy(caster.AttackTarget,false); } else { caster.Controller.TowardJoystick(); } curStep=0; StartCurStep(); }NPC智能AINPC的智能程度決定了游戲的難易度,wait、walk、attak、limit為電腦的四種簡單狀態(tài),這也構(gòu)成了簡單的電腦智能AI。簡單的NPC智能AI主要需要以下兩方面的內(nèi)容:NPC尋路設(shè)置:voidAwake(){Player=GameObject.FindGameObjectWithTag("Player").transform;playerHealth=player.GetComponent<PlayerHealth>();enemyHealth=GetComponent<EnemyHealth>();nav=GetComponent<NavMeshAgent>();}voidUpdate(){if(enemyHealth.currentHealth>0&&playerHealth.currentHealth>0){nav.SetDestination(player.position);}else{nav.enabled=false;}}首先NPC需要獲取尋路目標的位置,Player=GameObject.FindGameObjectWithTag("Player").transform;這一句將獲取player的坐標位置,使其暴露于NPC的視野范圍之內(nèi)。NavMeshAgent為Unity3D內(nèi)置的尋路組件,nav=GetComponent<NavMeshAgent>();這一句獲取調(diào)用此尋路組件。然后是條件判斷,如果NPC生命值>0且玩家生命值>0,符合以上條件執(zhí)行nav.SetDestination(player.position);即設(shè)置玩家的坐標作為尋路目標,并且將以最短路線尋路,不符合條件執(zhí)行nav.enabled=false;表示尋路不可用。NPC自動攻擊:publicclassEnemyAttack:MonoBehaviour{publicfloattimeBetweenAttacks=0.5f;publicintattackDamage=10;floattimer;voidAwake(){player=GameObject.FindGameObjectWithTag("Player");playerHealth=player.GetComponent<PlayerHealth>();enemyHealth=GetComponent<EnemyHealth>();}voidOnTriggerEnter(Colliderother){if(other.gameObject==player){playerInRange=true;}}voidOnTriggerExit(Colliderother){if(other.gameObject==player){playerInRange=false;}}voidUpdate(){
溫馨提示
- 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)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- minus-6α-Hydroxy-cannabidiol-生命科學(xué)試劑-MCE
- Caramiphen-hydrochloride-Pentaphene-hydrochloride-生命科學(xué)試劑-MCE
- 贈房合同范本
- 工程資料合同范本
- 青島購房合同范本照片
- 裝修墻面合同范本
- 字畫代理銷售合同范本
- 合股車合同范本
- 2025年B119型一氧化碳高溫變換催化劑合作協(xié)議書
- 2025年天然膠粘劑:動物膠項目發(fā)展計劃
- 低溫絕熱液氧瓶充裝操作規(guī)程模版(2篇)
- (正式版)JBT 11517-2024 刮板取料機
- 大眾汽車使用說明書
- 小學(xué)科學(xué)湘科版五年級下冊全冊教案2023春
- 2024年學(xué)校法制副校長工作職責 法制副校長聘任書(5篇)
- 《鄧稼先》公開課一等獎創(chuàng)新教學(xué)設(shè)計
- (高清版)DZT 0145-2017 土壤地球化學(xué)測量規(guī)程
- 老舊小區(qū)物業(yè)管理方案
- 供熱公司安全教育知識
- 高中英語課程綱要
- 《創(chuàng)新永無止境》示范課教學(xué)設(shè)計【部編人教版九年級道德與法治上冊】
評論
0/150
提交評論