![基于Unity3D的多人在線射擊游戲設計與實現(xiàn)_第1頁](http://file4.renrendoc.com/view/8e031bee465226693f2fdb2582d4f8a3/8e031bee465226693f2fdb2582d4f8a31.gif)
![基于Unity3D的多人在線射擊游戲設計與實現(xiàn)_第2頁](http://file4.renrendoc.com/view/8e031bee465226693f2fdb2582d4f8a3/8e031bee465226693f2fdb2582d4f8a32.gif)
![基于Unity3D的多人在線射擊游戲設計與實現(xiàn)_第3頁](http://file4.renrendoc.com/view/8e031bee465226693f2fdb2582d4f8a3/8e031bee465226693f2fdb2582d4f8a33.gif)
![基于Unity3D的多人在線射擊游戲設計與實現(xiàn)_第4頁](http://file4.renrendoc.com/view/8e031bee465226693f2fdb2582d4f8a3/8e031bee465226693f2fdb2582d4f8a34.gif)
![基于Unity3D的多人在線射擊游戲設計與實現(xiàn)_第5頁](http://file4.renrendoc.com/view/8e031bee465226693f2fdb2582d4f8a3/8e031bee465226693f2fdb2582d4f8a35.gif)
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
基于Unity3D的多人在線射擊游戲設計與實現(xiàn)MultiplayerOnlineshootingGamedevelopmentwithUnity3D內容摘要隨著生活水平與科技的發(fā)展,游戲已經(jīng)成為現(xiàn)代人緩解壓力的一大利器,使用好這一利器,有利于鍛煉自己的反應能力拓寬自己的朋友圈等等,而市面上游戲引擎五花八門,其中最吸引眼球的是Unity引擎,它憑借三大優(yōu)勢,孕育了成百上千款高品質游戲,而這三大優(yōu)勢為:第一,Unity引擎功能豐富,插件資源龐大,大大地減少了開發(fā)者的對游戲的開發(fā)時間;第二,它的可視化界面對開發(fā)新手老手都十分友好,容易上手;第三,支持跨平臺的開發(fā)。本文將構思并實現(xiàn)一個基于Unity引擎技術的多人在線射擊游戲,并將其實現(xiàn)。之所以會選擇這個課題,是因為我認為射擊游戲在過去,現(xiàn)在,未來都是屬于不會沒落的游戲類型,在世面上,各種射擊游戲讓人眼花繚亂,反恐精英、穿越火線、絕地逃生、守望先鋒等游戲都深受人們喜歡,而聯(lián)機游戲,既可以讓玩家感受游戲內容,還可以與小伙伴一起享受開黑的樂趣,在開發(fā)過程中,我使用了Unity中一套稱為Mutiplayer的網(wǎng)絡體系結構,以局域網(wǎng)的形式進行聯(lián)機,是一種基于UDP協(xié)議的高性能傳輸層,包含以NetworkManager為核心的管理工具,我可以在腳本中進行網(wǎng)絡開發(fā),在開發(fā)過程中,這個網(wǎng)絡架構非常有效地降低了程序在時間上的復雜度,提高了游戲運行時的實效性,解決了開發(fā)聯(lián)機游戲過程中常會發(fā)生的同步問題。關鍵詞:Unity3D;射擊類游戲;多人聯(lián)機;功能實現(xiàn)
AbstractWiththedevelopmentoflivingstandardsandtechnology,gameshavebecomeagreatweaponformodernpeopletorelievestress.Theuseofthisweaponisgoodforexercisingtheirresponsivenessandwideningtheircircleoffriends.Thegameenginesonthemarketarediverse.Oneofthemosteye-catchingUnityengines,ithasnurturedhundredsofthousandsofhigh-qualitygamesbyvirtueofthreeadvantages,andthesethreeadvantagesare:First,theUnityengineisrichinfunctionsandtheplug-inresourcesarehuge,greatlyreducingthenumberofdevelopersThedevelopmenttimeofthegame;second,itsvisualinterfaceisveryfriendlytonovicesandveterans,easytogetstarted;third,one-timedevelopmentsupportsmulti-platformdevelopment.
ThisarticlewillconceiveandimplementamultiplayeronlineshootinggamebasedonUnityenginetechnologyandimplementit.IuseanetworkarchitecturecalledMutiplayerinUnity,whichcontainsNetworkManagerasthecoremanagementtool.Developerscanperformnetworkdevelopmentinscripts,forexample:NetworkIdentitycanbeusedfornon-playergameobjects,aseriesofcomponentsForexample,NetworkTransformandNetworkAnimatorcanbeusedforassistance.ClientRpc,SynCarandotherpackagesareverycomprehensive.Secondly,intermsofhowtomakethegamerun,thisnetworkarchitectureeffectivelyreducesthecomplexityoftheprogramintime,improvestheeffectivenessofthegamewhenitruns,andgreatlysolvesthisproblem.Keywords:Unity3D;shootinggame;Multiplayer;Functionrealization
目錄第一章 緒論 緒論選題的目的和意義隨著生活水平與科技的發(fā)展,游戲已經(jīng)成為現(xiàn)代人緩解壓力的一大利器,使用好這一利器,有利于鍛煉自己的反應能力,拓寬自己的朋友圈。所以當人們對游戲要求提高,開發(fā)游戲的要求也隨之變高。市面上開發(fā)游戲的引擎五花八門,根據(jù)GameTracker數(shù)據(jù)排行榜顯示,Unity3d與Cocos2D系列引擎,成為全球最主流的兩大第三方引擎的供應商,其中最吸引眼球的Unity引擎,它憑借三大優(yōu)勢,孕育了成百上千款高品質游戲,根據(jù)有效數(shù)據(jù)顯示,Unity用戶超過330萬人,每月活躍用戶高大70萬,市場比例接近百分之四十五,它的優(yōu)勢分為三部分,第一,Unity引擎功能豐富,插件資源龐大,大大的減少了開發(fā)者所需的對游戲的開發(fā)時間;第二,它的可視化界面對開發(fā)新手老手都十分友好,即便是不會編程的人也能快速適應并上手;第三,高度的可跨越平臺性,減少了為了適應平臺所投入的人力物力資源,作為開發(fā)者來說,不管是哪個引擎,都必須為愛好者提供交流的平臺,盡量給開發(fā)者自己的空間,可以提供豐富的開源組件,也能提供開發(fā)者自行設計編輯器的組件。研究現(xiàn)狀中國人口基數(shù)大,游戲的市場需求大,玩游戲的人口基數(shù)大,但大多數(shù)人都圍繞著熱門游戲玩,所以熱門游戲就占據(jù)了游戲市場中較大的份額,而熱門游戲中,例如絕地求生(TPS類)和英雄聯(lián)盟(MOBA類)就屬于國內熱門游戲,已經(jīng)變成了大家交流的一個媒介。游戲除了讓人們緩解生活帶來的壓力外,還能以此為話題進行溝通交流,而游戲市場也是圍繞著這兩大類去更新玩法,給人帶來新鮮的東西,吸引別人進行游戲,本文就TPS類游戲展開設計開發(fā),第三人稱射擊游戲,也就是我們說的TPS游戲類型,玩家可以看到自己的角色進行行走射擊等操作,即為TPS游戲,該類游戲收獲了國內外許多玩家的喜愛。相對于第一人稱游戲的緊張感和操作感,TPS游戲往往更加有策略性和操作性,玩家通過第三視角全方位的進行掌握局勢,通過擊殺大量敵人產(chǎn)生刺激感、成就感,從而獲得游戲體驗。研究內容從最初的小想法到寫需求分析、游戲文檔,到分析游戲并進行最終開發(fā)測試,閱讀了許多Unity專業(yè)知識書籍以及許多基于Unity3D技術的開發(fā)者論壇博客,設計并實現(xiàn)了多人在線射擊游戲。首先,為了實現(xiàn)多人聯(lián)機,我用的是UnityNetworking網(wǎng)絡技術。基于UDP的高性能傳輸層是他最大的特點,可以支持所有游戲類型,底層通過LLPI進行全面控制,在面臨如何改善游戲的網(wǎng)絡同步問題上,我查閱了非常多的資料,解決了游戲運行時的服務器端與客戶端的實效性問題,該游戲在保證運行效果的同時,可以實現(xiàn)客戶端與服務器的同步,具有設備要求低,跨平臺性能好,運行流暢穩(wěn)定的特點,其次,為了提高游戲體驗,使用TextMeshpro字體組件,有效地豐富玩家的視覺效果,還通過NavMeshAgent組件,用來實現(xiàn)角色進行尋路導航的功能開發(fā),在開發(fā)過程中根據(jù)游戲功能進行邏輯推理,實現(xiàn)功能后測試中調整游戲數(shù)值參數(shù),使游戲更加完善。章節(jié)安排本論文分為七章,結構安排如下:第一章:緒論,將會從本課題研究的目的及意義出發(fā),講述研究現(xiàn)狀與研究課題。第二章:介紹開發(fā)環(huán)境和Unity引擎、還有其他涉及到本次開發(fā)的插件和軟件。第三章:介紹本次游戲開發(fā)在前期的需求設計和構想,包括于設定的游戲背景和游戲玩法規(guī)則,考慮該游戲需要擁有的功能和如何實現(xiàn)。第四章:介紹游戲的開發(fā)階段,從功能出發(fā),講述如何編寫腳本實現(xiàn),包括使用Unity中一套稱為Mutiplayer的網(wǎng)絡體系結構,以NetworkManager為核心的管理工具,從創(chuàng)建人物、敵人角色,編輯控制腳本,角色的血條控制、子彈的形成、計數(shù)器的邏輯,聯(lián)網(wǎng)的代碼邏輯,服務器端和客戶端之間的同步問題等。第五章:場景、UI、音效、燈光等的設計與實現(xiàn),從尋找合適的模型到,進行搭建場景,對界面UI的設計、合適的游戲音效和背景音樂、添加燈光渲染氣氛。第六章:游戲完成后,對游戲進行多次的測試,包括界面測試、功能測試,打包封裝。第七章:結論和感想,作為論文最后一章,對本次畢業(yè)設計開發(fā)中的總結,包括學到的知識,開發(fā)中的感想。開發(fā)工具介紹Unity引擎Unity引擎來源Unity擁有著交互舒適的操作界面,讓開發(fā)者能夠快速上手[4],Scene場景窗口是開發(fā)者最熟悉的部分,你可以在這里進行大膽創(chuàng)作,例如攝影機、光源、模型、材質、粒子系統(tǒng)、天空盒等,你可以在這里對你的游戲預制體進行編輯,包括不限于選擇物體、旋轉物體、移動物體、縮放物體;Game游戲窗口,這個窗口主要用來呈現(xiàn)出完整的動畫效果,不能進行編輯,用來渲染Scene中的動畫;如果你想知道你正在編輯的對象的具體數(shù)據(jù),你對應在Inspector編輯窗口查找,包括不限于名字、標簽坐標、角度、大小、身上的組件、腳本等各種屬性信息;Hierarchy清單窗口,陳列所有Scene中的預制體;Project項目窗口,你的所有模型素材、組件、腳本等都在這。Unity引擎的特點Unity具備著高效、高度優(yōu)化、高度集成等優(yōu)點。Unity引擎的優(yōu)勢第一,Unity引擎功能齊全,插件資源龐大,大大縮短了開發(fā)時間,Unity引擎在開發(fā)上,為開發(fā)人員提供了可視化工具和3D補償引擎;在腳本上,有著多樣的語言環(huán)境,還有著非常龐大的IDE社區(qū),在用戶體驗上,提供了嚴謹?shù)南到y(tǒng)用于處理項目,給合作開發(fā)的團隊提供了版本管理,只要用過這個引擎的人都會知道Assetstore,這個是他們公司自己所經(jīng)營的,包含著超過三千種工具、組件。為后續(xù)的開發(fā)工作提供了非常大的便利,特別注意的是,里面的免費產(chǎn)品的質量也及其高。擁有高度集成的特點,帶有粒子、物理、簡單模型系統(tǒng),調用方便,全程可視化調整。第二,所謂所見即所得,即便是不會編程的人也能快速適應并上手,例如說開發(fā)時你并不需要對物理了解得多深,引擎的物理系統(tǒng)已經(jīng)接近完善了;當你想有碰撞檢測時,你不需要自行編輯代碼,你只需要通過組件和鼠標,就可以實現(xiàn)自己想要的效果;當你希望你的人物可以進行導航尋路,敵人可以自動巡邏,都可以用unity里面強大的組件進行設計嗎,雖然不足與3dmax相比專業(yè),但是unity進行初步場景設計也是綽綽有余的,包括場景的烘焙,渲染,制作粒子效果,無論是哪個單拿出來都屬于比較有技術性的模塊功能,但在該引擎中,你只需要下載幾個組件,進行操作設置就能實現(xiàn)大部分你想要的功能,這樣也是在減少開發(fā)游戲的資金、資源,降低開發(fā)游戲的難度,縮短開發(fā)游戲的時長。而官方也提供了非常詳細的文檔說明,并且在18年版本之后新增了中文語言,方便我們進行開發(fā)游戲。第三,高度的可跨越平臺性,減少了為了適應平臺所投入的人力物力資源。該引擎在常見的Win、Linux和Mac系統(tǒng)上都可以進行開發(fā),開發(fā)的游戲可以發(fā)布到對應的平臺。甚至你也可以通過他發(fā)布網(wǎng)頁游戲,支持常用系統(tǒng)的網(wǎng)頁瀏覽。它的\t"/item/Unity3D/_blank"網(wǎng)頁播放器也被Mac所支持。Unity引擎重點常用函數(shù)介紹表2-1函數(shù)表函數(shù)名內容Update當MonoBehaviour啟用時,其Update在每一幀被調用。LateUpdate當Behaviour啟用時,其LateUpdate在每一幀被調用FixedUpdate當MonoBehaviour啟用時,其FixedUpdate在每一幀被調用,常用與物理引擎的調用,以及需要固定時間更新的函數(shù)Awake一個初始化函數(shù),當一個腳本勢力被載入時,Awake被調用,一般用于創(chuàng)建變量。State一個初始化函數(shù),僅在Update函數(shù)第一次被調用前調用,一般用于富裕變量值。Reset重置與默認值。OnTriggerEnterCollider進入trigger時調用OnTriggerEnter,一般用于判定物體碰撞到角色。OnTriggerExitCollider停止觸發(fā)trigger時調用OnTriggerExit。OnTriggerStay當碰撞體接觸觸發(fā)器時,OnTriggerStay將在每一幀都調用。插件介紹TextMeshpro:是該引擎Unity收購的插件,足以看出他的強大,強大的UI功能受不少開發(fā)者喜愛,這款組件解決了國內開發(fā)者在Unity里無法進行文字渲染,不會出現(xiàn)亂碼情況,你可以經(jīng)過網(wǎng)格渲染,也可以經(jīng)過UI渲染,其中最著名的一個技術——SDF,在我們傳統(tǒng)的渲染技術中,都是通過像素代表字符形狀,而這個新技術是是把輸入的字符串放到一個集合中,形成字符狀態(tài),它的優(yōu)點是字符不管如何縮放都可以精準的渲染出清晰的字符。NavMeshAgent:作為尋路系統(tǒng)的核心組件,有了這個容器,可以生成導航網(wǎng)格,這個NavMesh可以設置我們預制體的活動范圍。開發(fā)過程中使用的軟件介紹1、Unity3D:功能插件資源都非常成熟,能有效的縮減開發(fā)時間,該引擎界面交互友好,及時不懂編程的人也可以輕松做出一款小游戲,常見的平臺都可支持。2、3dsMax:如果說到3dmax三維動畫渲染和制作的軟件,我想3dmax有它自己的一席之地,開發(fā)中可以通過他建造各種場景模型和人物模型,可以對材質進行處理。3、VisualStudio:擁有非常成熟的開發(fā)工具,在主流的編碼軟件算得上是非常成熟了,擁有著開發(fā)者所需要的工具,例如代碼管控、UML、IDE等等,VS對各種平臺有著高度的適應性。4、Photoshop:PS是一款可以處理圖像的工具,可以利用他對圖片做需要的編輯操作,PS支持多個常用平臺。輸出游戲平臺通過調查,Windows平臺性能游戲在性能的限制和平臺使用量占有優(yōu)勢,所以決定將會輸出為Windows。游戲需求設計游戲基本介紹主角Henry是宇宙中一萬億顆星球中的一員,作為一名維護自己星球和平的保衛(wèi)隊員,他的日常就是在自己的領域上巡邏,有天他接到總部的通知,稱Tw-1空間站失去了連接,在最后一次連接時,總部收到了該空間站的求救信號,信息表明,空間站被外星種族MAX突襲,并侵占了所有資源,Henry的任務就是到達Tw-1空間站,消滅所有敵人,并收集所有被搶占的資源,當然你可以邀請你的戰(zhàn)友Jack與你協(xié)同作戰(zhàn)!在游戲菜單中選擇開始游戲,一名玩家作為局域網(wǎng)中的主機,以參數(shù)的形式建立主機名,其他玩家尋找該局域網(wǎng)并進行連接,連接完成后進行數(shù)據(jù)的傳遞與同步,聯(lián)機完成則玩家會出生在停機坪,等待小伙伴們連接成功,就可以和小伙伴控制自己的角色進行上下左右移動,空格鍵為射擊鍵,穿過一座橋,就到達空間站,空間站里有不少敵人,玩家需要操作自己的人物消滅所有的敵人,同時玩家還需要收集空間站中因掠奪散落一地的資源,操控人物觸碰即可拾取,當所有敵人被消滅,資源都回收,游戲就獲得勝利。游戲功能局域網(wǎng)的建立、連接主服務器端建立后,通過UDP協(xié)議廣播地址,內容包括服務器的id、服務器組、主機的名字還有ip地址,而客戶端通過接受到廣播后,會在列表中添加相關信息,同時同步自身信息到主服務器端,從而建立連接。游戲界面游戲需要一個游戲菜單來引導玩家進行開始和退出游戲,在游戲過程中,有血條的顯示,讓玩家清晰的知道自己的血量和敵人的血量,也能知道已經(jīng)收集多少被強占的資源。圖3-1游戲菜單圖3-2血條設想游戲控制玩家控制鍵盤,控制上下左右,空格射擊,觸碰資源即拾取。游戲設計玩家需要控制角色進行射擊敵人,躲避敵人攻擊,通過上下左右移動,空格射出子彈,敵人自動巡邏并檢測到角色進入特定范圍內會主動進行攻擊玩家和敵人顯示血條,當死亡時銷毀并播放死亡音效當檢測碰撞到資源時,玩家資源數(shù)+1玩家清理完敵人,收集完全部空間站中的資源即游戲勝利圖3-3游戲邏輯圖游戲功能實現(xiàn)UnityNetworkNetworkManager[1](如圖1),就如他的名字,是一個網(wǎng)絡管理器,用于管理從預制體進行實例化網(wǎng)絡對象,開發(fā)者可從派生一個類去繼承又HLAPI實現(xiàn)的NetworkManager,這個組件可以進行游戲的狀態(tài)管理、游戲的派生管理、游戲的場景管理、游戲中網(wǎng)絡的各項自定義等等。UnityManager添加網(wǎng)絡管理器,NetworkManager是unity的組件(如圖1),就如他的名字是一個網(wǎng)絡管理器,開發(fā)者可從派生一個類去繼承又HLAPI實現(xiàn)的NetworkManager,并且可以通過自己的需求去編寫任何他可以提供的虛擬函數(shù),這個組件可以進行游戲的狀態(tài)管理、游戲的派生管理、游戲的場景管理、游戲中網(wǎng)絡的各項自定義等等。圖4-1網(wǎng)絡管理器UnityManagerHUD首先創(chuàng)建如圖2的網(wǎng)絡管理器,需要在Inspector面板上配置和編輯網(wǎng)絡相關狀態(tài),有一個網(wǎng)絡管理器可視化組件,后綴是HUD,為開發(fā)者打開了一個高效率的操作界面,十分友好,在游戲中控制顯示當前的網(wǎng)絡狀態(tài),方便開發(fā)時進行測試,圖里host為本機的服務器段,client為客戶端,當我們要處理一些事件時,只需要在服務器上處理,不需要重復處理。圖4-2網(wǎng)絡可視化組件創(chuàng)建Player角色角色模型及控制腳本1、角色模型如圖,進行注冊聯(lián)網(wǎng)對象,找到SpawnInfo屬性集從組件面板中,掛上我們的玩家預制體在playerprefab上圖4-3角色模型編寫角色控制移動腳本、空格發(fā)射子彈,我們的前提是UnityEngine.Networking,再改為NetworkBehaviour,識別到本地玩家后進行區(qū)分,不然會控制到不同的客戶端的玩家對象。void
Update
()
{
if
(isLocalPlayer
==
false)
{
return;
}
float
h
=
Input.GetAxis("Horizontal");
float
v
=
Input.GetAxis("Vertical");
transform.Rotate(Vector3.up
*
h
*
120
*
Time.deltaTime);
transform.Translate(Vector3.forward
*
v
*
3
*
Time.deltaTime);
if
(Input.GetKeyDown(KeyCode.Space))
{
CmdFire();
}
}
角色綁定網(wǎng)絡并進行Transfrom同步由于是多人聯(lián)機,角色不管在服務器端生成還是客戶端生成,都需要進行角色的位置同步,而NetworkSendRate是表示網(wǎng)絡數(shù)據(jù)的同步,如果頻率太高會使游戲的幀數(shù)過高導致網(wǎng)絡延遲,但是頻率低又會影響玩家游玩體驗,具體代碼如下:1.
[Command]
2.
void
CmdFire()//這個方法需要在server里面調用
3.
{
4.
GameObject
bullet
=
Instantiate(bulletPrefab,
bulletSpawn.position,
b ulletSpawn.rotation)
as
GameObject;
5.
bullet.GetComponent<Rigidbody>().velocity
=
bullet.transform.forward
*
10;
6.
Destroy(bullet,
2);
7.
NetworkServer.Spawn(bullet);
8.
}
9.
}
角色隨機出生點和重生點有兩個隨機的出生點和重生點,NetworkStartPosition組件可以用來控制玩家的出生點,原理是訪問NetworkStartPosition可以讓列表通過Network.StartPositions,幫助在NetworkManager實現(xiàn)OnServerAddPlayer,如圖圖4-4隨機出生點重生時,第一步應檢測是否為本地角色,第二步進行血量檢測,當血量<=0時,則死亡,代碼如下:public
void
TakeDamage(int
damage)
{
if
(isServer
==
false)
return;//
檢測血量這部分只在服務器端
currentHealth
-=
damage;
if
(currentHealth
<=
0)
{
if
(destroyOnDeath)
{
Destroy(this.gameObject);
return;
}
currentHealth
=
maxHealth;
Debug.Log("Dead");
RpcRespawn();
}
}
檢測到角色死亡后,檢測重生的隨機點,在這里添加ClientRpc,是為了是調用雙端同步以執(zhí)行任務,方法是序列化客戶端的數(shù)據(jù)并將其發(fā)送給客戶端以執(zhí)行,首先服務器將檢測到掛在對象Components上的NetworkIdentity然后將RPC命令發(fā)送大各個所監(jiān)視的客戶端上,代碼如下:[ClientRpc]
void
RpcRespawn()//客戶端調用
{
if
(isLocalPlayer
==
false)
return;
Vector3
spawnPosition
=
Vector3.zero;
if
(spawnPoints
!=
null
&&
spawnPoints.Length
>
0)
{
spawnPosition
=
spawnPoints[Random.Range(0,
spawnPoints.Length)].transform.position;
}
transform.position
=
spawnPosition;
}
角色血條控制并進行檢測同步當前角色血量為100,首先要做一個碰撞檢測,當子彈碰撞到角色后,子彈需要自我銷毀,再處理角色的血量,調用takedamage這個方法,把血量-10,這里有一種邏輯,當銷毀某些東西時,應該調用NetworkIdentity.OnDestroy,最好的方法是在服務器端銷毀它,然后與每個客戶端同步,這樣就可以減少如果客戶端銷毀時,服務器端的物體會突然消失的問題,調用服務器檢測到后,預制件銷毀,服務器端也同步銷毀。public
class
Bullet
:
MonoBehaviour
{
void
OnCollisionEnter(Collision
col)
{
GameObject
hit
=
col.gameObject;
Health
health
=
hit.GetComponent<Health>();
if
(health
!=
null)
{
health.TakeDamage(10);
}
Destroy(this.gameObject);
}
}
血條始終保持面向相機,代碼如下:void
Update
()
{
transform.LookAt(Camera.main.transform);
}
射擊功能子彈的生成首先實例化子彈,子彈的位置,子彈的攻擊力為10,當子彈射出并碰撞后,銷毀子彈public
GameObject
bulletPrefab;//子彈
public
Transform
bulletSpawn;//子彈位置
3.
void
OnCollisionEnter(Collision
col)
{
4.
GameObject
hit
=
col.gameObject;
5.
Health
health
=
hit.GetComponent<Health>();
6.
if
(health
!=
null)
{
7.
health.TakeDamage(10);
}
8.
Destroy(this.gameObject);
9.
}10.
}
子彈綁定網(wǎng)絡并進行同步做完前面的工作后,測試發(fā)現(xiàn),子彈射中后可以出發(fā)掉血,但是當由于涉及后回觸發(fā)TakeDamage方法,如果其中一方接觸到對方并且銷毀時,由于網(wǎng)絡延遲,另一方在打中對方前就進行了銷毀處理,導致雙方數(shù)據(jù)的不同步,這是因為先前子彈只是在客戶端生成,并沒有進行同步,所以我們需要把子彈綁定網(wǎng)格再同步到各個客戶端,首先,子彈要在網(wǎng)絡生成,需要把子彈注冊到網(wǎng)絡管理器中,在此之前,要在子彈上掛上NetworkIdentify,增加Command特性,原理是代碼在服務器端運轉,但需要在客戶段調用,把子彈同步到各個客戶端,這時候可以用Spawn方法,可以把指定生成在各個客戶端,當具有網(wǎng)絡徽標的預制件掛在服務器Spawn上時,該預制件將調用OnstarServer,而后進行調配netid,當完成這個注冊這個流程后,會更改對應的網(wǎng)絡物體列表,接著查找所有客戶端帶有網(wǎng)絡標識的物體,如果狀態(tài)為TRUE,則將MsgType.ObjectSpawn或是MsgType.ObjectSpawnScene傳遞到預制體上,在注冊列表中的預制體里面尋找對應的物體,找到后更新注冊到NetworkScene的列表中,需要更新相關信息,這時客戶端上的子彈沒有速度,我們得先進行數(shù)據(jù)的同步,先在子彈上掛上組件獲取他的位置和狀態(tài),同步剛體組件。因為子彈的速度不是時刻變化,所以只需要同步一次即可,從客戶端調用參數(shù)的前提條件是可以對網(wǎng)絡進行序列化,以便可以對參數(shù)進行反序列化。在開發(fā)時,由于我的粗心,發(fā)生了無法調用的錯誤,在我查閱資料后發(fā)現(xiàn),我的客戶端上忘記了掛上NetworkIdentity組件,像spawn、destroy這些都需要有一個NetworkIScene為前提。SynCar特性是解決這個方法的核心,通過這個方法,如此一來可以使服務器的值同步到客戶端上,讓雙端數(shù)據(jù)保持一致,防止因為一端改變而影響另外一端,出現(xiàn)錯誤。1.
[Command]
2.
void
CmdFire()//這個方法需要在server里面調用
3.
{
4.
GameObject
bullet
=
Instantiate(bulletPrefab,
bulletSpawn.position,
bulletSpawn.rotation)
as
GameObject;
5.
bullet.GetComponent<Rigidbody>().velocity
=
bullet.transform.forward
*
10;
6.
Destroy(bullet,
2);
7.
NetworkServer.Spawn(bullet);
8.
}
9.
}
創(chuàng)建敵人預制體敵人模型設置有兩種敵人,一種血量為100,一種血量為200,為了增加難度,不同敵人的傷害也不同。圖4-5敵人模型敵人綁定網(wǎng)格并進行同步作為網(wǎng)絡對象的一個非?;镜慕M成部分,雙端必須確定它甚少有沒有networkID,這是用來指示對象的網(wǎng)絡狀態(tài),例如它是屬于雙端中的哪一端,相對于具體是客戶端的哪個,擁有什么權限等圖4-6網(wǎng)絡狀態(tài)敵人隨機生成實例化隨機生成點,并設置隨機數(shù)量,代碼如下:public
GameObject
enemyPrefab;
public
int
numberOfEnemies;
public
override
void
OnStartServer()
{
for
(int
i
=
0;
i
<
numberOfEnemies;
i++)
{
Vector3
position
=
new
Vector3(Random.Range(-6f,
6f),
0,
Random.Range(-6f,
6f));
Quaternion
rotation
=
Quaternion.Euler(0,
Random.Range(0,
360),
0);
GameObject
enemy
=
Instantiate(enemyPrefab,
position,
rotation)
as
GameObject;
NetworkServer.Spawn(enemy);
}
}
美術實現(xiàn)場景外部場景游戲中的場景,擁有神秘的飛船和隕石,圍繞著主題科幻搭建,燈光也改為較為昏暗,讓玩家游玩時有種神秘的感覺,設置玩家的出生點和重生點都在飛船坪上隨機生成,從這里開始進行游戲圖5-1場景1內部場景在內部裝飾上,從地磚到墻,再到每一樣東西,都是一個個搭建出來的,房間內飾有控制室、各類科技用品圖5-2-場景2菜單UI開始菜單,有PLAY、exit等按鈕,當點擊PLAY即進入場景2,為游戲主界面。當通過鼠標按下該按鈕,就可以載入所要進行的游戲圖5-3-TEXTMESHPRO首先導入TEXTMESHPRO組件,設計好菜單字體與顏色如圖,其次,為了給玩家,按鈕按下后的回饋,進行調節(jié)按鈕圖5-4-調節(jié)面板制作結束菜單,有繼續(xù)游戲和退出按鈕。圖5-5-菜單血條UI編輯血條UI永遠面向攝像機的代碼using
UnityEngine;
using
System.Collections;
public
class
LookAtCamera
:
MonoBehaviour
{
void
Update
()
{
transform.LookAt(Camera.main.transform);
}
}
圖5-6-血條游戲音效本游戲的風格關鍵詞是“外太空”、“科幻”“神秘”所以在選擇游戲音效時遵循這樣的風格,在游戲前期和后期,菜單部分,選擇了比較舒緩的背景音樂,而在游戲進行中,選擇為比較緊張刺激的背景音樂,營造出一種十分緊張的刺激氛圍,增加玩家游戲的沉浸感和代入感[3]。為了提高玩家的用戶體驗,游戲時,射擊時伴有聲音、角色和敵人死亡后的音效聲都進行設置。游戲燈光燈光是經(jīng)常被開發(fā)者或玩家忽視的一樣游戲感受,但是燈光在游戲中屬于非常重要的部分,好的游戲的燈光要求非常高,燈光可以被用來營造出特定氛圍的環(huán)境,也可以引出需要被關注的物體,燈光不僅僅只是用來照亮場景,而是需要好好利用起來,喚起一種玩家游玩時的現(xiàn)實感,有目的的照亮該場景的建筑與物體甚至是角色,提高玩家游玩時的沉浸感,讓玩家能更深刻的被吸引到故事和游戲情景當中。圖是初始游戲場景時的燈光,圖是增加了三個燈光組件后的場景,對比非常明顯,由于本游戲是設定在太空當中,神秘、科幻、夢幻是該游戲的關鍵詞。圖5-7燈光對比游戲測試游戲測試游戲測試的重要新就相當于人身體中的一個器官,這個器官可以保證著人體(游戲)的健康(游戲質量),并且在現(xiàn)在的開發(fā)行業(yè)里,游戲測試是不可或缺的一個崗位,目的是為了發(fā)現(xiàn)游戲中存在或者可能存在的缺陷,需要進行模擬操作一遍,通過測試發(fā)現(xiàn)問題后,有利于開發(fā)者進行改善??傊?,游戲測試是為了發(fā)現(xiàn)問題后進行提高游戲質量,按以往我們說的傳統(tǒng)的軟件測試包括黑盒測試或白盒測試,并且游戲比其他軟件更特殊,他的測試含有可玩性、游戲世界的平衡性、游戲文化風格等都是游戲測試中的一部分,這是相對于其他軟件所不一樣的。從游戲的開始需求調研時,就可以進行測試了,例如音游游戲,就可以去市面上找到相同類型的游戲進行測評,對未來測試自己的游戲是非常大的幫助的,游戲開發(fā)時,通過游戲文檔、需求文檔等文件進行編寫游戲測試文檔,所謂蘿卜青菜各有所愛,游戲也是如此,我們要通過進行用戶調研,開發(fā)出喜聞樂見的游戲,而后期成型后,像比如說游戲的壓力測試、兼容測試、網(wǎng)絡測試、適配性測試等等也是非常重要.表6-1游戲信息表游戲名字:SpaceHulk游戲類型:TPS游戲風格:科幻是否聯(lián)網(wǎng):是表6-2游戲UI測試游戲UI部分(是否正常?)開始菜單—PLAY是開始菜單—QUIT是結束菜單—NEWGAME是結束菜單—QUIT是血條顯示是表6-3游戲功能測試游戲功能(是否正常?)移動是射擊是傷害、血條計算是拾撿東西是相機跟隨是表6-3游戲音效測試游戲燈光音效(是否正常?)游戲燈光是菜單背景音樂是菜單內音效聲是游戲背景音樂是表6-4游戲音效測試游戲場景模型(是否正常?)天空盒是大環(huán)境(宇宙)是建筑是內飾是玩家模型是敵人模型是總結與期望隨著我的畢業(yè)論文到了寫總結的部分,也意味著我四年青春歲月的大學生涯也隨之快要接近尾聲了,畢設和論文從前期設計到后期開發(fā)測試到收尾工作,都讓我感觸頗深,在完成的過程中出現(xiàn)了許多bug,也使我對自身的能力認識的一個過程,從提出設想,到去學習制作,這個過程讓我受益匪淺,只有每天不斷的學習充實才讓我覺得有安全感。在開始前,我認為的畢業(yè)設計,不過就是對我四年來學習的的一個總結,但昨完畢業(yè)設計的我認為,這只是學習的一個開始,我需要對自身水平有個清晰的定位,以前的知識需要去學習,未來發(fā)展出來的知識也得去學習,學習是一件長期積累的過程,沒有捷徑,沒有終點,只有不斷鞭策自己往前走,再往前走,才是生命的真諦。本論文主要介紹了多人聯(lián)機射擊游戲,在設計開始之前,我在白紙上進行了一次大腦風暴,把想做的功能都羅列了出來,隨著越寫越多,發(fā)現(xiàn)自己寫的功能都是常見的多人射擊游戲,不夠新穎,沒有創(chuàng)意,而且功能龐大,有點眼高手低,于是我把基本功能都圈了出來,決定先實現(xiàn)出,有些看似簡單的功能,在實現(xiàn)起來時卻遭遇困難,非常感謝我的同學們和老師,在我開發(fā)過程中給了我許多建議,通過在網(wǎng)上查閱資料,觀看教學視頻,結合自己的理解,不斷的攻破一道道難題,從前期的需求設計,開發(fā)的準備,素材的查找,開發(fā)時自學各種軟件插件,開發(fā)后的優(yōu)化等,都不是那么簡單的,基本上完成了初始的功能,ui界面有開始菜單,結束菜單,血條的顯示,實現(xiàn)了模型的移動射擊,血量血條,隨機生成敵人,重生點,子彈射擊邏輯,還有本文最重要的聯(lián)機部分,采用的是Mutiplayer的網(wǎng)絡架構,在場景的構造過程中,以科幻風格為目的去完成,界面簡單友好,運行穩(wěn)定,從開發(fā)前期到后期漸漸總結了一個規(guī)律,所有功能在服務器端處理,比如敵人的生成位置、子彈的生成、子彈同步的邏輯,敵人自動巡邏的邏輯、檢測范圍內玩家自動攻擊。一個游戲,他不僅僅只是編寫代碼,他還需要結合邏輯,需要會處理素材,需要不斷的學習新的插件組件,利用好網(wǎng)絡資源,能讓我的游戲變得完整,在這個過程中,聯(lián)機作為我畢業(yè)設計的亮點,也是難點,就讓我花費了很多時間去研究,在發(fā)開時,由于沒有經(jīng)驗,代碼比較冗雜,處理重復多,致使游戲實效性低下,后來以一個原則,則是先在服務器端進行更新數(shù)據(jù),再通過客戶端進行同步。游戲雖然制作成功,但是存在著以下問題:?1.?場景制作時間過長,導致游戲功能較為單一,可玩性不高。?2.?對于模型的處理方面的知識比較欠缺,也花了些時間學習。3.?Unity中有許多強大的組件,沒有吃透,這塊在未來也需要一直學習。隨著技術的不斷上升,電腦配置不停的提高,游戲開發(fā)環(huán)境越來越完善,開發(fā)者越來越多,做出的好游戲也是數(shù)不勝數(shù),而游戲的游戲效果也是越來越精致,游戲已經(jīng)成為大眾化的一項魚類項目,反之,由于當代的玩家玩的游戲
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度城市道路回填工程承包合同
- 上海居間合同范本
- 保密條款合同范本
- 2025年建筑門窗安裝與智能化管理系統(tǒng)合同
- 養(yǎng)殖工人安全合同范本
- 與飯店合作合同范例
- 烏魯木齊離婚律師合同范例
- 包招聘合同范本
- 公園木棧道維修合同范本
- 農(nóng)副產(chǎn)購銷合同范本
- 部編版語文二年級下冊第三單元教材解讀大單元集體備課
- HYT 235-2018 海洋環(huán)境放射性核素監(jiān)測技術規(guī)程
- ISO28000:2022供應鏈安全管理體系
- 中國香蔥行業(yè)市場現(xiàn)狀分析及競爭格局與投資發(fā)展研究報告2024-2034版
- 婦科惡性腫瘤免疫治療中國專家共識(2023)解讀
- 2024年浪潮入職測評題和答案
- 小班數(shù)學《整理牛奶柜》課件
- 中考語文真題雙向細目表
- 我國新零售業(yè)上市公司財務質量分析-以蘇寧易購為例
- 藥品集采培訓課件
- 股骨干骨折教學演示課件
評論
0/150
提交評論