




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
畢業實訓報告課題名稱:Unity游戲開發專業:移動開發班級:學號:學生姓名:指導教師:年月日
中原工學院畢業實訓任務書年月9日學生姓名學號專業軟件開發班級課題名稱Unity3D小游戲開發(星空大戰)課題來源指導教師專業軟件工程職稱講師課題說明:開發路線: 1,游戲背景(連續播放) 2,添加主角 3,設置游戲主角的動畫 4,添加兩種子彈并設置子彈的運動 5,添加三種子彈 設置子彈的自動生成和運動 6,添加兩種獎勵物品 設置獎勵物品的自動生成和運動 7,設置主角的控制 7.1檢測手指觸摸 7.2問題:防止主角飛出屏幕 8,設置Tag 添加子彈和敵人的碰撞 9,設計敵人012震動動畫和爆炸效果 10,添加腳本GameManager做游戲的控制 11,統計分數 摘要摘要游戲,目前已經是最大眾化的娛樂之一,而其中的3D游戲也是技術含量較高的項目之一。Unity3D是一個3D/2D游戲開發工具和游戲引擎套件,其中包括了圖形、音頻、物理、網絡等多方面的引擎支持,并且有一個非常強大的編輯器來整合這一切,非常適合于游戲開發。
本文主要是以Unity5.3.8為開發環境,設計并開發一款單機版的三維游戲——直升機大戰,旨在介紹直升機戰斗游戲的實現方法,并逐步介紹使用Unity3D開發3D游戲的方法和技巧。通過這次游戲制作,使我體會到了,制作一個游戲所需要做的工作,包括前期的游戲策劃,素材的制作,到后期的游戲的設計,代碼實現等,最終形成一個完整的3D游戲,并通過Unity3D選擇平臺生成可執行文件。但本次設計的直升機戰斗游戲所做工作還不夠完善,開始場景中菜單比較簡單,游戲中武器只有一種,關卡也只有一個,這些都需要以后進一步設計.第1章項目分析
1.1Unity及其組成的介紹
本書主要講解的是,如何使用Unity開發2D游戲。但在開始講解之前,最好先熟悉一下Unity這個工具。本章會首先介紹Unity的下載和安裝,然后會介紹Unity界面的各組成部分,這些知識會在本書后面的章節頻繁使用,所以不要掉以輕心。
1.2Unity概述
Unity現如今已是非常的流行,因此在開始學習2D游戲開發之前,本節就來簡要說明下Unity,及其下載和安裝方法。1.Unity簡介Unity是一款跨平臺的專業游戲引擎,可以使用它輕松的開發各種2D和3D游戲,然后部署到各種游戲平臺上。當然也包括這些主流游戲平臺:Windows、iOS、Android、Xbox360、PS3。第2章2.1需求分析玩家:控制游戲中的戰機,向敵機發出攻擊;敵機:敵機不會發射子彈攻擊玩家,boss敵機由程序控制自動向玩家飛機發出攻擊子彈:玩家和boss敵機都擁有自己的子彈,玩家的子彈可以用來攻擊所有的敵機子彈禮包:玩家飛機得到子彈禮包后,玩家的飛機會在一段時間內有發射雙排子彈功能炸彈禮包:玩家飛機得到子彈禮包后,玩家飛機如果使用炸彈可以清除屏幕上除boss外的所有敵機。2.2功能需求:1》用戶進入游戲開始菜單可以選擇開始游戲,退出游戲,游戲幫助;2》進入游戲后可暫停游戲3》玩家飛機以一定速度自下而上飛行,用戶可以控制飛機前后左右移動4》玩家飛機一直發子彈,用戶通過控制飛機位置來掃描敵機;5》不同種類的敵機以一定速度隨機出現;6》玩家飛機的發射子彈擊中敵機后消失。7》玩家飛機達到一定分數后,程序會隨機提供子彈包和炸彈包;》8》玩家與禮包碰撞后即可得到禮包;9》彈禮包后,玩家的飛機會在一段時間內有發射雙排子彈功能10》進行游戲時,屏幕左上角會顯示用戶達到的分數;2.3用戶功能需求由于本游戲交互性好,簡單易操作,對用戶并沒有特殊的要求。一般用戶經過幾分鐘后就可以掌握游戲規則。2.4游戲性能需求1)實時性:本應用為手機游戲對于用戶操作必須做出立即響應,否則本游戲失敗2)單機手機游戲最大的特點紀委已操作行,用戶在不看說明的情況下也能夠玩,并且在玩過幾遍之后即熟悉本游戲規則。這是本應用對于操作性的要求。2.5游戲流程:進入游戲進入游戲開始游戲開始游戲游戲失敗游戲失敗敵機玩家飛機敵機玩家飛機歲游戲進行種類,數量增加查看分數歲游戲進行種類,數量增加查看分數歲游戲進行種類,數量增加得到禮包增加威力歲游戲進行種類,數量增加得到禮包增加威力重新游戲、退出游戲重新游戲、退出游戲被擊中自行退出被擊中自行退出退出游戲退出游戲如圖2.5-1第3章場景設計3.1.創建游戲場景1.由于創建的是2d項目,則將圖片拖入Scene中,該圖片自動成為一個精靈,所以將圖片信息拖入擺放即可。如圖3-1-1所示2.下面創建一個GameManager文件,其綁定在攝像機中,主要負責飛機生命,玩家得分,背景播放等的顯示功能。而生命,得分的顯示需要我們創建GUIText來擺放。publicenumGameState{ Runing, Pause}publicclassGameManager:MonoBehaviour{ publicstaticGameManager_instance; publicintscore=0; privateGUITextguiText; publicGameStategameState=GameState.Runing; voidAwake(){ _instance=this; guiText=GameObject.FindGameObjectWithTag("ScoreGUI").GetComponent<GUIText>(); } //Updateiscalledonceperframe voidUpdate(){ guiText.text="Score:"+score; } publicvoidtransfromGameState(){ if(gameState==GameState.Runing){ pauseGame(); }elseif(gameState==GameState.Pause){ continueGame(); } }然后我們來實現背景的滾動。首先創建兩個一樣的背景圖片上下擺放,如下圖所示,這里切換到3d模式,更加形象如圖3-1-34.下面創建用于綁定在背景上的腳本BackgroundTransform,代碼如下publicclassBackgroundTransform:MonoBehaviour{ publicstaticfloatmoveSpeed=2f; //Updateiscalledonceperframe voidUpdate(){ this.transform.Translate(Vector3.down*moveSpeed*Time.deltaTime); Vector3postion=this.transform.position; if(postion.y<=-8.52f){ this.transform.position=newVector3(postion.x,postion.y+8.52f*2,postion.z); } }}然后將腳本綁定在兩張背景圖上即可。5.主角創建與背景創建基本一樣,也是可以用一張2d貼圖,就不多說了。主角腳本主要處理移動,發射子彈,處理碰撞等,代碼如下:publicclassBullet:MonoBehaviour{ publicfloatspeed=2; //Updateiscalledonceperframe voidUpdate(){ transform.Translate(Vector3.up*speed*Time.deltaTime); if(transform.position.y>4.3f){ Destroy(this.gameObject); } } voidOnTriggerEnter2D(Collider2Dother){ if(other.tag=="Enemy"){ if(!other.GetComponent<Enemy>().isDeath){ other.gameObject.SendMessage("BeHit"); GameObject.Destroy(this.gameObject); } } 6.上面代碼中我用了bulletTop,bulletLeft,bullfight,這是我為主機添加的兩個子對象,主要是用于發射子彈,相當于炮筒吧,而bullet則是定義的預設,其中綁定的腳本后面會說明。3-1-6代碼實現如下:publicclassGun:MonoBehaviour{ publicfloatrate=0.2f; publicGameObjectbullet; publicvoidfire(){ GameObject.Instantiate(bullet,transform.position,Quaternion.identity); } publicvoidopenFire(){ InvokeRepeating("fire",1,rate); } publicvoidstopFire(){ CancelInvoke("fire"); } 好了,通過以上的代碼我們就可以按鍵盤的方向鍵移動飛機,按空格鍵發射子彈了,我已經等不及要打敵人了。3.2創建敵機1.敵機也是先拖入敵機圖片,然后綁定腳本,添加組件,然后保存為預設,我們以后還有個敵機生產器要生產敵機呢。我創建了三種敵機預設3-2-1敵機預制2.敵機主要是移動,碰撞。下面來看看敵機腳本:publicenumEnemyType{ smallEnemy, middleEnemy, bigEnemy}publicclassEnemy:MonoBehaviour{ publicinthp=1; publicfloatspeed=2; publicintscore=100; publicEnemyTypetype=EnemyType.smallEnemy; publicboolisDeath=false; publicSprite[]explosionSprites; privatefloattimer=0; publicintexplosionAnimationFrame=10; privateSpriteRendererrender; publicfloathitTimer=0.2f; privatefloatresetHitTime; publicSprite[]hitSprites; //Usethisforinitialization voidStart(){ render=this.GetComponent<SpriteRenderer>(); resetHitTime=hitTimer; hitTimer=0; } //Updateiscalledonceperframe voidUpdate(){ this.transform.Translate(Vector3.down*speed*Time.deltaTime); if(this.transform.position.y<=-5.6f){ Destroy(this.gameObject); } if(isDeath){ timer+=Time.deltaTime;//0 intframeIndex=(int)(timer/(1f/explosionAnimationFrame)); if(frameIndex>=explosionSprites.Length){ //destroy Destroy(this.gameObject); }else{ render.sprite=explosionSprites[frameIndex]; } }else{ if(type==EnemyType.middleEnemy||type==EnemyType.bigEnemy){ if(hitTimer>=0){ hitTimer-=Time.deltaTime; intframeIndex=(int)((resetHitTime-hitTimer)/(1f/explosionAnimationFrame)); frameIndex%=2; render.sprite=hitSprites[frameIndex]; } } }if(Input.GetKeyDown(KeyCode.Space)&&BombManager._instance.count>0){toDie();} } publicvoidBeHit(){ hp-=1; //explosion if(hp<=0){ toDie(); }else{ hitTimer=resetHitTime; } } privatevoidtoDie(){ if(!isDeath){ isDeath=true; GameManager._instance.score+=score; } }}3-2-23.上面使用到了一個動畫,就是敵機爆炸時的動畫。那么如何創建動畫呢?首先資源中可以拖動一組連續的爆炸圖片到場景中,系統會自動提醒創建動畫,命名為explosion即可。然后Project視圖中就出現了一個animation和一個animator。在菜單欄找到Windows->Animation和Winodws->Animator可以打開如下窗口。如圖3-1-3如圖3-1-3-14.下面是敵機生產器,在主界面的左右兩邊的頂部分別放上兩個空物體用來創建敵機。敵機創建時間為1~3秒不等,然后綁定創建腳本即可。publicclassSpawn:MonoBehaviour{ publicGameObjectenemy0Prefab; publicGameObjectenemy1Prefab; publicGameObjectenemy2Prefab; publicGameObjectawardType0Prefab; publicGameObjectawardType1Prefab; publicfloatenemy0Rate=0.5f; publicfloatenemy1Rate=5f; publicfloatenemy2Rate=8f; publicfloatawardType0Rate=7; publicfloatawardType1Rate=10; //Usethisforinitialization voidStart(){ InvokeRepeating("createEnemy0",1,enemy0Rate); InvokeRepeating("createEnemy1",3,enemy1Rate); InvokeRepeating("createEnemy2",6,enemy2Rate); InvokeRepeating("createAwardType0",10,awardType0Rate); InvokeRepeating("createAwardType1",10,awardType1Rate); } //Updateiscalledonceperframe voidUpdate(){ } publicvoidcreateEnemy0(){ floatx=Random.Range(-2.15f,2.15f); GameObject.Instantiate(enemy0Prefab,newVector3(x,transform.position.y,0),Quaternion.identity); } publicvoidcreateEnemy1(){ floatx=Random.Range(-2.04f,2.04f); GameObject.Instantiate(enemy1Prefab,newVector3(x,transform.position.y,0),Quaternion.identity); } publicvoidcreateEnemy2(){ floatx=Random.Range(-2.04f,2.04f); GameObject.Instantiate(enemy2Prefab,newVector3(x,transform.position.y,0),Quaternion.identity); } publicvoidcreateAwardType0(){ GetComponent<AudioSource>().Play(); floatx=Random.Range(-2.1f,2.1f); GameObject.Instantiate(awardType0Prefab,newVector3(x,transform.position.y,0),Quaternion.identity); } publicvoidcreateAwardType1(){ GetComponent<AudioSource>().Play(); floatx=Random.Range(-2.1f,2.1f); GameObject.Instantiate(awardType1Prefab,newVector3(x,transform.position.y,0),Quaternion.identity); }}5.關于碰撞檢測敵機碰撞,如果碰到了敵機死亡:3-1-5.1敵機碰撞,由于只要碰撞就死亡,所以動畫幀執行時間快,死亡很快。運行界面:3-1-5.23.2UI設計:每次打死敵機加分,三種不同的加分分數,分別5,10,15分。在游戲界面編輯創建游戲Text,記錄分數,以及退出時記錄最高成績。重新開始按鈕,和退出成績按鈕Button組件。如圖視窗所示:3-2-1Ok!下面開始通過代碼來控制程序的顯示和執行:3-2-2運行程序效果:死亡時保存記錄最高分3-2-3可以看出圖中我設計了獎勵,保存為預制體如果吃到獎勵增加左右子彈的發射攻擊敵機3-2-4控制獎勵的移動邏輯:3-2-5運行如下:3-2-6游戲結束時點擊退出和重新開始執行不同的事件。退出:3-2-7退出代碼圖重新開始就再次開始重玩即可。
第4章第五章結束語本章是對整個實訓過程的總結,首先總結實訓完成情況(很好完成、較好完成、還是未完成等),要具體說明開發效果,有哪些不足,有哪些待改進;然后總結自己的心得體會,有哪些收獲,有哪些經驗,遇到了什么問題,是如何解決的,對整個行業的認識有什么提高,對自己的優勢劣勢有什么認識等等,內容不限。
參考文獻[1]童愛紅.VisualC#.NET應用教程[M].北京:人民郵電出版社,2004.3[2]李蘭友楊曉光.VisualC#.NET程序設計[M]北京:清華大學出版社,2004.5[3]韓玉民.計算機專業英語教學研究與實踐[J].計算機與信息技術,2008,(6):106-107.[4]Whenmouseusecomputer.[EB/OL]./comp_demo101.gif,2008-12-26.
附錄A:附加圖、表附錄B:主要源程序基于C8051F單片機直流電動機反饋控制系統的設計與研究基于單片機的嵌入式Web服務器的研究MOTOROLA單片機MC68HC(8)05PV8/A內嵌EEPROM的工藝和制程方法及對良率的影響研究基于模糊控制的電阻釬焊單片機溫度控制系統的研制基于MCS-51系列單片機的通用控制模塊的研究基于單片機實現的供暖系統最佳啟停自校正(STR)調節器單片機控制的二級倒立擺系統的研究基于增強型51系列單片機的TCP/IP協議棧的實現基于單片機的蓄電池自動監測系統基于32位嵌入式單片機系統的圖像采集與處理技術的研究基于單片機的作物營養診斷專家系統的研究基于單片機的交流伺服電機運動控制系統研究與開發基于單片機的泵管內壁硬度測試儀的研制基于單片機的自動找平控制系統研究基于C8051F040單片機的嵌入式系統開發基于單片機的液壓動力系統狀態監測儀開發模糊Smith智能控制方法的研究及其單片機實現一種基于單片機的軸快流CO〈,2〉激光器的手持控制面板的研制基于雙單片機沖床數控系統的研究基于CYGNAL單片機的在線間歇式濁度儀的研制基于單片機的噴油泵試驗臺控制器的研制基于單片機的軟起動器的研究和設計基于單片機控制的高速快走絲電火花線切割機床短循環走絲方式研究基于單片機的機電產品控制系統開發基于PIC單片機的智能手機充電器基于單片機的實時內核設計及其應用研究基于單片機的遠程抄表系統的設計與研究基于單片機的煙氣二氧化硫濃度檢測儀的研制基于微型光譜儀的單片機系統單片機系統軟件構件開發的技術研究基于單片機的液體點滴速度自動檢測儀的研制基于單片機系統的多功能溫度測量儀的研制基于PIC單片機的電能采集終端的設計和應用基于單片機的光纖光柵解調儀的研制氣壓式線性摩擦焊機單片機控制系統的研制基于單片機的數字磁通門傳感器基于單片機的旋轉變壓器-數字轉換器的研究基于單片機的光纖Bragg光柵解調系統的研究單片機控制的便攜式多功能乳腺治療儀的研制基于C8051F020單片機的多生理信號檢測儀基于單片機的電機運動控制系統設計Pico專用單片機核的可測性設計研究基于MCS-51單片機的熱量計基于雙單片機的智能遙測微型氣象站MCS-51單片機構建機器人的實踐研究基于單片機的輪軌力檢測基于單片機的GPS定位儀的研究與實現基于單片機的電液伺服控制系統用于單片機系統的MMC卡文件系統研制基于單片機的時控和計數系統性能優化的研究基于單片機和CPLD的粗光柵位移測量系統研究單片機控制的后備式方波UPS提升高職學生單片機應用能力的探究基于單片機控制的自動低頻減載裝置研究基于單片機控制的水下焊接電源的研究基于單片機的多通道數據采集系統基于uPSD3234單片機的氚表面污染測量儀的研制基于單片機的紅外測油儀的研究96系列單片機仿真器研究與設計基于單片機的單晶金剛石刀具刃磨設備的數控改造基于單片機的溫度智能控制系統的設計與實現基于MSP430單片機的電梯門機控制器的研制基于單片機的氣體測漏儀的研究基于三菱M16C/6N系列單片機的CAN/USB協議轉換器基于單片機和DSP的變壓器油色譜在線監測技術研究基于單片機的膛壁溫度報警系統設計基于AVR單片機的低壓無功補償控制器的設計基于單片機船舶電力推進電機監測系統基于單片機網絡的振動信號的采集系統基于單片機的大容量數據存儲技術的應用研究基于單片機的疊圖機研究與教學方法實踐基于單片機嵌入式Web服務器技術的研究及實現基于AT89S52單片機的通用數據采集系統基于單片機的多道脈沖幅度分析儀研究機器人旋轉電弧傳感角焊縫跟蹤單片機控制系統基于單片機的控制系統在PLC虛擬教學實驗中的應用研究基于單片機系統的網絡通
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 機電工程考試高效答題技巧與試題及答案
- 西方國家的文化政策與全球治理試題及答案
- 公共政策中的社區參與的重要性試題及答案
- 網絡工程師復習重點試題及答案合集
- 及時反饋的軟件設計師考試試題及答案
- 2025年初級銀行從業資格(銀行管理)考試練習題庫
- 機電工程監測技術試題及答案
- 跨文化團隊的挑戰與機遇及試題答案
- 引導機電工程考試思考的實踐操作試題及答案
- 西方政治制度下的社會文化認同與政策動向分析試題及答案
- 【課件】2025屆高考英語最后一課課件
- 護理相關法律法規 課件
- 社區工作者經典備考題庫(必背300題)
- 中職《PLC技術與應用》期末考試試卷
- 安全生產標準化管理體系
- QCT302023年機動車用電喇叭技術條件
- 中醫內科學方劑+歌訣
- 分形理論幻燈片
- 汽車租賃后續服務承諾
- 高風險作業檢查表
- 外傷性截癱課件
評論
0/150
提交評論