




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
基于Unity3D的多人在線(xiàn)射擊游戲設(shè)計(jì)與實(shí)現(xiàn)MultiplayerOnlineshootingGamedevelopmentwithUnity3D內(nèi)容摘要隨著生活水平與科技的發(fā)展,游戲已經(jīng)成為現(xiàn)代人緩解壓力的一大利器,使用好這一利器,有利于鍛煉自己的反應(yīng)能力拓寬自己的朋友圈等等,而市面上游戲引擎五花八門(mén),其中最吸引眼球的是Unity引擎,它憑借三大優(yōu)勢(shì),孕育了成百上千款高品質(zhì)游戲,而這三大優(yōu)勢(shì)為:第一,Unity引擎功能豐富,插件資源龐大,大大地減少了開(kāi)發(fā)者的對(duì)游戲的開(kāi)發(fā)時(shí)間;第二,它的可視化界面對(duì)開(kāi)發(fā)新手老手都十分友好,容易上手;第三,支持跨平臺(tái)的開(kāi)發(fā)。本文將構(gòu)思并實(shí)現(xiàn)一個(gè)基于Unity引擎技術(shù)的多人在線(xiàn)射擊游戲,并將其實(shí)現(xiàn)。之所以會(huì)選擇這個(gè)課題,是因?yàn)槲艺J(rèn)為射擊游戲在過(guò)去,現(xiàn)在,未來(lái)都是屬于不會(huì)沒(méi)落的游戲類(lèi)型,在世面上,各種射擊游戲讓人眼花繚亂,反恐精英、穿越火線(xiàn)、絕地逃生、守望先鋒等游戲都深受人們喜歡,而聯(lián)機(jī)游戲,既可以讓玩家感受游戲內(nèi)容,還可以與小伙伴一起享受開(kāi)黑的樂(lè)趣,在開(kāi)發(fā)過(guò)程中,我使用了Unity中一套稱(chēng)為Mutiplayer的網(wǎng)絡(luò)體系結(jié)構(gòu),以局域網(wǎng)的形式進(jìn)行聯(lián)機(jī),是一種基于UDP協(xié)議的高性能傳輸層,包含以NetworkManager為核心的管理工具,我可以在腳本中進(jìn)行網(wǎng)絡(luò)開(kāi)發(fā),在開(kāi)發(fā)過(guò)程中,這個(gè)網(wǎng)絡(luò)架構(gòu)非常有效地降低了程序在時(shí)間上的復(fù)雜度,提高了游戲運(yùn)行時(shí)的實(shí)效性,解決了開(kāi)發(fā)聯(lián)機(jī)游戲過(guò)程中常會(huì)發(fā)生的同步問(wèn)題。關(guān)鍵詞:Unity3D;射擊類(lèi)游戲;多人聯(lián)機(jī);功能實(shí)現(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)代人緩解壓力的一大利器,使用好這一利器,有利于鍛煉自己的反應(yīng)能力,拓寬自己的朋友圈。所以當(dāng)人們對(duì)游戲要求提高,開(kāi)發(fā)游戲的要求也隨之變高。市面上開(kāi)發(fā)游戲的引擎五花八門(mén),根據(jù)GameTracker數(shù)據(jù)排行榜顯示,Unity3d與Cocos2D系列引擎,成為全球最主流的兩大第三方引擎的供應(yīng)商,其中最吸引眼球的Unity引擎,它憑借三大優(yōu)勢(shì),孕育了成百上千款高品質(zhì)游戲,根據(jù)有效數(shù)據(jù)顯示,Unity用戶(hù)超過(guò)330萬(wàn)人,每月活躍用戶(hù)高大70萬(wàn),市場(chǎng)比例接近百分之四十五,它的優(yōu)勢(shì)分為三部分,第一,Unity引擎功能豐富,插件資源龐大,大大的減少了開(kāi)發(fā)者所需的對(duì)游戲的開(kāi)發(fā)時(shí)間;第二,它的可視化界面對(duì)開(kāi)發(fā)新手老手都十分友好,即便是不會(huì)編程的人也能快速適應(yīng)并上手;第三,高度的可跨越平臺(tái)性,減少了為了適應(yīng)平臺(tái)所投入的人力物力資源,作為開(kāi)發(fā)者來(lái)說(shuō),不管是哪個(gè)引擎,都必須為愛(ài)好者提供交流的平臺(tái),盡量給開(kāi)發(fā)者自己的空間,可以提供豐富的開(kāi)源組件,也能提供開(kāi)發(fā)者自行設(shè)計(jì)編輯器的組件。研究現(xiàn)狀中國(guó)人口基數(shù)大,游戲的市場(chǎng)需求大,玩游戲的人口基數(shù)大,但大多數(shù)人都圍繞著熱門(mén)游戲玩,所以熱門(mén)游戲就占據(jù)了游戲市場(chǎng)中較大的份額,而熱門(mén)游戲中,例如絕地求生(TPS類(lèi))和英雄聯(lián)盟(MOBA類(lèi))就屬于國(guó)內(nèi)熱門(mén)游戲,已經(jīng)變成了大家交流的一個(gè)媒介。游戲除了讓人們緩解生活帶來(lái)的壓力外,還能以此為話(huà)題進(jìn)行溝通交流,而游戲市場(chǎng)也是圍繞著這兩大類(lèi)去更新玩法,給人帶來(lái)新鮮的東西,吸引別人進(jìn)行游戲,本文就TPS類(lèi)游戲展開(kāi)設(shè)計(jì)開(kāi)發(fā),第三人稱(chēng)射擊游戲,也就是我們說(shuō)的TPS游戲類(lèi)型,玩家可以看到自己的角色進(jìn)行行走射擊等操作,即為T(mén)PS游戲,該類(lèi)游戲收獲了國(guó)內(nèi)外許多玩家的喜愛(ài)。相對(duì)于第一人稱(chēng)游戲的緊張感和操作感,TPS游戲往往更加有策略性和操作性,玩家通過(guò)第三視角全方位的進(jìn)行掌握局勢(shì),通過(guò)擊殺大量敵人產(chǎn)生刺激感、成就感,從而獲得游戲體驗(yàn)。研究?jī)?nèi)容從最初的小想法到寫(xiě)需求分析、游戲文檔,到分析游戲并進(jìn)行最終開(kāi)發(fā)測(cè)試,閱讀了許多Unity專(zhuān)業(yè)知識(shí)書(shū)籍以及許多基于Unity3D技術(shù)的開(kāi)發(fā)者論壇博客,設(shè)計(jì)并實(shí)現(xiàn)了多人在線(xiàn)射擊游戲。首先,為了實(shí)現(xiàn)多人聯(lián)機(jī),我用的是UnityNetworking網(wǎng)絡(luò)技術(shù)?;赨DP的高性能傳輸層是他最大的特點(diǎn),可以支持所有游戲類(lèi)型,底層通過(guò)LLPI進(jìn)行全面控制,在面臨如何改善游戲的網(wǎng)絡(luò)同步問(wèn)題上,我查閱了非常多的資料,解決了游戲運(yùn)行時(shí)的服務(wù)器端與客戶(hù)端的實(shí)效性問(wèn)題,該游戲在保證運(yùn)行效果的同時(shí),可以實(shí)現(xiàn)客戶(hù)端與服務(wù)器的同步,具有設(shè)備要求低,跨平臺(tái)性能好,運(yùn)行流暢穩(wěn)定的特點(diǎn),其次,為了提高游戲體驗(yàn),使用TextMeshpro字體組件,有效地豐富玩家的視覺(jué)效果,還通過(guò)NavMeshAgent組件,用來(lái)實(shí)現(xiàn)角色進(jìn)行尋路導(dǎo)航的功能開(kāi)發(fā),在開(kāi)發(fā)過(guò)程中根據(jù)游戲功能進(jìn)行邏輯推理,實(shí)現(xiàn)功能后測(cè)試中調(diào)整游戲數(shù)值參數(shù),使游戲更加完善。章節(jié)安排本論文分為七章,結(jié)構(gòu)安排如下:第一章:緒論,將會(huì)從本課題研究的目的及意義出發(fā),講述研究現(xiàn)狀與研究課題。第二章:介紹開(kāi)發(fā)環(huán)境和Unity引擎、還有其他涉及到本次開(kāi)發(fā)的插件和軟件。第三章:介紹本次游戲開(kāi)發(fā)在前期的需求設(shè)計(jì)和構(gòu)想,包括于設(shè)定的游戲背景和游戲玩法規(guī)則,考慮該游戲需要擁有的功能和如何實(shí)現(xiàn)。第四章:介紹游戲的開(kāi)發(fā)階段,從功能出發(fā),講述如何編寫(xiě)腳本實(shí)現(xiàn),包括使用Unity中一套稱(chēng)為Mutiplayer的網(wǎng)絡(luò)體系結(jié)構(gòu),以NetworkManager為核心的管理工具,從創(chuàng)建人物、敵人角色,編輯控制腳本,角色的血條控制、子彈的形成、計(jì)數(shù)器的邏輯,聯(lián)網(wǎng)的代碼邏輯,服務(wù)器端和客戶(hù)端之間的同步問(wèn)題等。第五章:場(chǎng)景、UI、音效、燈光等的設(shè)計(jì)與實(shí)現(xiàn),從尋找合適的模型到,進(jìn)行搭建場(chǎng)景,對(duì)界面UI的設(shè)計(jì)、合適的游戲音效和背景音樂(lè)、添加燈光渲染氣氛。第六章:游戲完成后,對(duì)游戲進(jìn)行多次的測(cè)試,包括界面測(cè)試、功能測(cè)試,打包封裝。第七章:結(jié)論和感想,作為論文最后一章,對(duì)本次畢業(yè)設(shè)計(jì)開(kāi)發(fā)中的總結(jié),包括學(xué)到的知識(shí),開(kāi)發(fā)中的感想。開(kāi)發(fā)工具介紹Unity引擎Unity引擎來(lái)源Unity擁有著交互舒適的操作界面,讓開(kāi)發(fā)者能夠快速上手[4],Scene場(chǎng)景窗口是開(kāi)發(fā)者最熟悉的部分,你可以在這里進(jìn)行大膽創(chuàng)作,例如攝影機(jī)、光源、模型、材質(zhì)、粒子系統(tǒng)、天空盒等,你可以在這里對(duì)你的游戲預(yù)制體進(jìn)行編輯,包括不限于選擇物體、旋轉(zhuǎn)物體、移動(dòng)物體、縮放物體;Game游戲窗口,這個(gè)窗口主要用來(lái)呈現(xiàn)出完整的動(dòng)畫(huà)效果,不能進(jìn)行編輯,用來(lái)渲染Scene中的動(dòng)畫(huà);如果你想知道你正在編輯的對(duì)象的具體數(shù)據(jù),你對(duì)應(yīng)在Inspector編輯窗口查找,包括不限于名字、標(biāo)簽坐標(biāo)、角度、大小、身上的組件、腳本等各種屬性信息;Hierarchy清單窗口,陳列所有Scene中的預(yù)制體;Project項(xiàng)目窗口,你的所有模型素材、組件、腳本等都在這。Unity引擎的特點(diǎn)Unity具備著高效、高度優(yōu)化、高度集成等優(yōu)點(diǎn)。Unity引擎的優(yōu)勢(shì)第一,Unity引擎功能齊全,插件資源龐大,大大縮短了開(kāi)發(fā)時(shí)間,Unity引擎在開(kāi)發(fā)上,為開(kāi)發(fā)人員提供了可視化工具和3D補(bǔ)償引擎;在腳本上,有著多樣的語(yǔ)言環(huán)境,還有著非常龐大的IDE社區(qū),在用戶(hù)體驗(yàn)上,提供了嚴(yán)謹(jǐn)?shù)南到y(tǒng)用于處理項(xiàng)目,給合作開(kāi)發(fā)的團(tuán)隊(duì)提供了版本管理,只要用過(guò)這個(gè)引擎的人都會(huì)知道Assetstore,這個(gè)是他們公司自己所經(jīng)營(yíng)的,包含著超過(guò)三千種工具、組件。為后續(xù)的開(kāi)發(fā)工作提供了非常大的便利,特別注意的是,里面的免費(fèi)產(chǎn)品的質(zhì)量也及其高。擁有高度集成的特點(diǎn),帶有粒子、物理、簡(jiǎn)單模型系統(tǒng),調(diào)用方便,全程可視化調(diào)整。第二,所謂所見(jiàn)即所得,即便是不會(huì)編程的人也能快速適應(yīng)并上手,例如說(shuō)開(kāi)發(fā)時(shí)你并不需要對(duì)物理了解得多深,引擎的物理系統(tǒng)已經(jīng)接近完善了;當(dāng)你想有碰撞檢測(cè)時(shí),你不需要自行編輯代碼,你只需要通過(guò)組件和鼠標(biāo),就可以實(shí)現(xiàn)自己想要的效果;當(dāng)你希望你的人物可以進(jìn)行導(dǎo)航尋路,敵人可以自動(dòng)巡邏,都可以用unity里面強(qiáng)大的組件進(jìn)行設(shè)計(jì)嗎,雖然不足與3dmax相比專(zhuān)業(yè),但是unity進(jìn)行初步場(chǎng)景設(shè)計(jì)也是綽綽有余的,包括場(chǎng)景的烘焙,渲染,制作粒子效果,無(wú)論是哪個(gè)單拿出來(lái)都屬于比較有技術(shù)性的模塊功能,但在該引擎中,你只需要下載幾個(gè)組件,進(jìn)行操作設(shè)置就能實(shí)現(xiàn)大部分你想要的功能,這樣也是在減少開(kāi)發(fā)游戲的資金、資源,降低開(kāi)發(fā)游戲的難度,縮短開(kāi)發(fā)游戲的時(shí)長(zhǎng)。而官方也提供了非常詳細(xì)的文檔說(shuō)明,并且在18年版本之后新增了中文語(yǔ)言,方便我們進(jìn)行開(kāi)發(fā)游戲。第三,高度的可跨越平臺(tái)性,減少了為了適應(yīng)平臺(tái)所投入的人力物力資源。該引擎在常見(jiàn)的Win、Linux和Mac系統(tǒng)上都可以進(jìn)行開(kāi)發(fā),開(kāi)發(fā)的游戲可以發(fā)布到對(duì)應(yīng)的平臺(tái)。甚至你也可以通過(guò)他發(fā)布網(wǎng)頁(yè)游戲,支持常用系統(tǒng)的網(wǎng)頁(yè)瀏覽。它的\t"/item/Unity3D/_blank"網(wǎng)頁(yè)播放器也被Mac所支持。Unity引擎重點(diǎn)常用函數(shù)介紹表2-1函數(shù)表函數(shù)名內(nèi)容Update當(dāng)MonoBehaviour啟用時(shí),其Update在每一幀被調(diào)用。LateUpdate當(dāng)Behaviour啟用時(shí),其LateUpdate在每一幀被調(diào)用FixedUpdate當(dāng)MonoBehaviour啟用時(shí),其FixedUpdate在每一幀被調(diào)用,常用與物理引擎的調(diào)用,以及需要固定時(shí)間更新的函數(shù)Awake一個(gè)初始化函數(shù),當(dāng)一個(gè)腳本勢(shì)力被載入時(shí),Awake被調(diào)用,一般用于創(chuàng)建變量。State一個(gè)初始化函數(shù),僅在Update函數(shù)第一次被調(diào)用前調(diào)用,一般用于富裕變量值。Reset重置與默認(rèn)值。OnTriggerEnterCollider進(jìn)入trigger時(shí)調(diào)用OnTriggerEnter,一般用于判定物體碰撞到角色。OnTriggerExitCollider停止觸發(fā)trigger時(shí)調(diào)用OnTriggerExit。OnTriggerStay當(dāng)碰撞體接觸觸發(fā)器時(shí),OnTriggerStay將在每一幀都調(diào)用。插件介紹TextMeshpro:是該引擎Unity收購(gòu)的插件,足以看出他的強(qiáng)大,強(qiáng)大的UI功能受不少開(kāi)發(fā)者喜愛(ài),這款組件解決了國(guó)內(nèi)開(kāi)發(fā)者在Unity里無(wú)法進(jìn)行文字渲染,不會(huì)出現(xiàn)亂碼情況,你可以經(jīng)過(guò)網(wǎng)格渲染,也可以經(jīng)過(guò)UI渲染,其中最著名的一個(gè)技術(shù)——SDF,在我們傳統(tǒng)的渲染技術(shù)中,都是通過(guò)像素代表字符形狀,而這個(gè)新技術(shù)是是把輸入的字符串放到一個(gè)集合中,形成字符狀態(tài),它的優(yōu)點(diǎn)是字符不管如何縮放都可以精準(zhǔn)的渲染出清晰的字符。NavMeshAgent:作為尋路系統(tǒng)的核心組件,有了這個(gè)容器,可以生成導(dǎo)航網(wǎng)格,這個(gè)NavMesh可以設(shè)置我們預(yù)制體的活動(dòng)范圍。開(kāi)發(fā)過(guò)程中使用的軟件介紹1、Unity3D:功能插件資源都非常成熟,能有效的縮減開(kāi)發(fā)時(shí)間,該引擎界面交互友好,及時(shí)不懂編程的人也可以輕松做出一款小游戲,常見(jiàn)的平臺(tái)都可支持。2、3dsMax:如果說(shuō)到3dmax三維動(dòng)畫(huà)渲染和制作的軟件,我想3dmax有它自己的一席之地,開(kāi)發(fā)中可以通過(guò)他建造各種場(chǎng)景模型和人物模型,可以對(duì)材質(zhì)進(jìn)行處理。3、VisualStudio:擁有非常成熟的開(kāi)發(fā)工具,在主流的編碼軟件算得上是非常成熟了,擁有著開(kāi)發(fā)者所需要的工具,例如代碼管控、UML、IDE等等,VS對(duì)各種平臺(tái)有著高度的適應(yīng)性。4、Photoshop:PS是一款可以處理圖像的工具,可以利用他對(duì)圖片做需要的編輯操作,PS支持多個(gè)常用平臺(tái)。輸出游戲平臺(tái)通過(guò)調(diào)查,Windows平臺(tái)性能游戲在性能的限制和平臺(tái)使用量占有優(yōu)勢(shì),所以決定將會(huì)輸出為Windows。游戲需求設(shè)計(jì)游戲基本介紹主角Henry是宇宙中一萬(wàn)億顆星球中的一員,作為一名維護(hù)自己星球和平的保衛(wèi)隊(duì)員,他的日常就是在自己的領(lǐng)域上巡邏,有天他接到總部的通知,稱(chēng)Tw-1空間站失去了連接,在最后一次連接時(shí),總部收到了該空間站的求救信號(hào),信息表明,空間站被外星種族MAX突襲,并侵占了所有資源,Henry的任務(wù)就是到達(dá)Tw-1空間站,消滅所有敵人,并收集所有被搶占的資源,當(dāng)然你可以邀請(qǐng)你的戰(zhàn)友Jack與你協(xié)同作戰(zhàn)!在游戲菜單中選擇開(kāi)始游戲,一名玩家作為局域網(wǎng)中的主機(jī),以參數(shù)的形式建立主機(jī)名,其他玩家尋找該局域網(wǎng)并進(jìn)行連接,連接完成后進(jìn)行數(shù)據(jù)的傳遞與同步,聯(lián)機(jī)完成則玩家會(huì)出生在停機(jī)坪,等待小伙伴們連接成功,就可以和小伙伴控制自己的角色進(jìn)行上下左右移動(dòng),空格鍵為射擊鍵,穿過(guò)一座橋,就到達(dá)空間站,空間站里有不少敵人,玩家需要操作自己的人物消滅所有的敵人,同時(shí)玩家還需要收集空間站中因掠奪散落一地的資源,操控人物觸碰即可拾取,當(dāng)所有敵人被消滅,資源都回收,游戲就獲得勝利。游戲功能局域網(wǎng)的建立、連接主服務(wù)器端建立后,通過(guò)UDP協(xié)議廣播地址,內(nèi)容包括服務(wù)器的id、服務(wù)器組、主機(jī)的名字還有ip地址,而客戶(hù)端通過(guò)接受到廣播后,會(huì)在列表中添加相關(guān)信息,同時(shí)同步自身信息到主服務(wù)器端,從而建立連接。游戲界面游戲需要一個(gè)游戲菜單來(lái)引導(dǎo)玩家進(jìn)行開(kāi)始和退出游戲,在游戲過(guò)程中,有血條的顯示,讓玩家清晰的知道自己的血量和敵人的血量,也能知道已經(jīng)收集多少被強(qiáng)占的資源。圖3-1游戲菜單圖3-2血條設(shè)想游戲控制玩家控制鍵盤(pán),控制上下左右,空格射擊,觸碰資源即拾取。游戲設(shè)計(jì)玩家需要控制角色進(jìn)行射擊敵人,躲避敵人攻擊,通過(guò)上下左右移動(dòng),空格射出子彈,敵人自動(dòng)巡邏并檢測(cè)到角色進(jìn)入特定范圍內(nèi)會(huì)主動(dòng)進(jìn)行攻擊玩家和敵人顯示血條,當(dāng)死亡時(shí)銷(xiāo)毀并播放死亡音效當(dāng)檢測(cè)碰撞到資源時(shí),玩家資源數(shù)+1玩家清理完敵人,收集完全部空間站中的資源即游戲勝利圖3-3游戲邏輯圖游戲功能實(shí)現(xiàn)UnityNetworkNetworkManager[1](如圖1),就如他的名字,是一個(gè)網(wǎng)絡(luò)管理器,用于管理從預(yù)制體進(jìn)行實(shí)例化網(wǎng)絡(luò)對(duì)象,開(kāi)發(fā)者可從派生一個(gè)類(lèi)去繼承又HLAPI實(shí)現(xiàn)的NetworkManager,這個(gè)組件可以進(jìn)行游戲的狀態(tài)管理、游戲的派生管理、游戲的場(chǎng)景管理、游戲中網(wǎng)絡(luò)的各項(xiàng)自定義等等。UnityManager添加網(wǎng)絡(luò)管理器,NetworkManager是unity的組件(如圖1),就如他的名字是一個(gè)網(wǎng)絡(luò)管理器,開(kāi)發(fā)者可從派生一個(gè)類(lèi)去繼承又HLAPI實(shí)現(xiàn)的NetworkManager,并且可以通過(guò)自己的需求去編寫(xiě)任何他可以提供的虛擬函數(shù),這個(gè)組件可以進(jìn)行游戲的狀態(tài)管理、游戲的派生管理、游戲的場(chǎng)景管理、游戲中網(wǎng)絡(luò)的各項(xiàng)自定義等等。圖4-1網(wǎng)絡(luò)管理器UnityManagerHUD首先創(chuàng)建如圖2的網(wǎng)絡(luò)管理器,需要在Inspector面板上配置和編輯網(wǎng)絡(luò)相關(guān)狀態(tài),有一個(gè)網(wǎng)絡(luò)管理器可視化組件,后綴是HUD,為開(kāi)發(fā)者打開(kāi)了一個(gè)高效率的操作界面,十分友好,在游戲中控制顯示當(dāng)前的網(wǎng)絡(luò)狀態(tài),方便開(kāi)發(fā)時(shí)進(jìn)行測(cè)試,圖里host為本機(jī)的服務(wù)器段,client為客戶(hù)端,當(dāng)我們要處理一些事件時(shí),只需要在服務(wù)器上處理,不需要重復(fù)處理。圖4-2網(wǎng)絡(luò)可視化組件創(chuàng)建Player角色角色模型及控制腳本1、角色模型如圖,進(jìn)行注冊(cè)聯(lián)網(wǎng)對(duì)象,找到SpawnInfo屬性集從組件面板中,掛上我們的玩家預(yù)制體在playerprefab上圖4-3角色模型編寫(xiě)角色控制移動(dòng)腳本、空格發(fā)射子彈,我們的前提是UnityEngine.Networking,再改為NetworkBehaviour,識(shí)別到本地玩家后進(jìn)行區(qū)分,不然會(huì)控制到不同的客戶(hù)端的玩家對(duì)象。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)絡(luò)并進(jìn)行Transfrom同步由于是多人聯(lián)機(jī),角色不管在服務(wù)器端生成還是客戶(hù)端生成,都需要進(jìn)行角色的位置同步,而NetworkSendRate是表示網(wǎng)絡(luò)數(shù)據(jù)的同步,如果頻率太高會(huì)使游戲的幀數(shù)過(guò)高導(dǎo)致網(wǎng)絡(luò)延遲,但是頻率低又會(huì)影響玩家游玩體驗(yàn),具體代碼如下:1.
[Command]
2.
void
CmdFire()//這個(gè)方法需要在server里面調(diào)用
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.
}
角色隨機(jī)出生點(diǎn)和重生點(diǎn)有兩個(gè)隨機(jī)的出生點(diǎn)和重生點(diǎn),NetworkStartPosition組件可以用來(lái)控制玩家的出生點(diǎn),原理是訪(fǎng)問(wèn)NetworkStartPosition可以讓列表通過(guò)Network.StartPositions,幫助在NetworkManager實(shí)現(xiàn)OnServerAddPlayer,如圖圖4-4隨機(jī)出生點(diǎn)重生時(shí),第一步應(yīng)檢測(cè)是否為本地角色,第二步進(jìn)行血量檢測(cè),當(dāng)血量<=0時(shí),則死亡,代碼如下:public
void
TakeDamage(int
damage)
{
if
(isServer
==
false)
return;//
檢測(cè)血量這部分只在服務(wù)器端
currentHealth
-=
damage;
if
(currentHealth
<=
0)
{
if
(destroyOnDeath)
{
Destroy(this.gameObject);
return;
}
currentHealth
=
maxHealth;
Debug.Log("Dead");
RpcRespawn();
}
}
檢測(cè)到角色死亡后,檢測(cè)重生的隨機(jī)點(diǎn),在這里添加ClientRpc,是為了是調(diào)用雙端同步以執(zhí)行任務(wù),方法是序列化客戶(hù)端的數(shù)據(jù)并將其發(fā)送給客戶(hù)端以執(zhí)行,首先服務(wù)器將檢測(cè)到掛在對(duì)象Components上的NetworkIdentity然后將RPC命令發(fā)送大各個(gè)所監(jiān)視的客戶(hù)端上,代碼如下:[ClientRpc]
void
RpcRespawn()//客戶(hù)端調(diào)用
{
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;
}
角色血條控制并進(jìn)行檢測(cè)同步當(dāng)前角色血量為100,首先要做一個(gè)碰撞檢測(cè),當(dāng)子彈碰撞到角色后,子彈需要自我銷(xiāo)毀,再處理角色的血量,調(diào)用takedamage這個(gè)方法,把血量-10,這里有一種邏輯,當(dāng)銷(xiāo)毀某些東西時(shí),應(yīng)該調(diào)用NetworkIdentity.OnDestroy,最好的方法是在服務(wù)器端銷(xiāo)毀它,然后與每個(gè)客戶(hù)端同步,這樣就可以減少如果客戶(hù)端銷(xiāo)毀時(shí),服務(wù)器端的物體會(huì)突然消失的問(wèn)題,調(diào)用服務(wù)器檢測(cè)到后,預(yù)制件銷(xiāo)毀,服務(wù)器端也同步銷(xiāo)毀。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);
}
}
血條始終保持面向相機(jī),代碼如下:void
Update
()
{
transform.LookAt(Camera.main.transform);
}
射擊功能子彈的生成首先實(shí)例化子彈,子彈的位置,子彈的攻擊力為10,當(dāng)子彈射出并碰撞后,銷(xiāo)毀子彈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)絡(luò)并進(jìn)行同步做完前面的工作后,測(cè)試發(fā)現(xiàn),子彈射中后可以出發(fā)掉血,但是當(dāng)由于涉及后回觸發(fā)TakeDamage方法,如果其中一方接觸到對(duì)方并且銷(xiāo)毀時(shí),由于網(wǎng)絡(luò)延遲,另一方在打中對(duì)方前就進(jìn)行了銷(xiāo)毀處理,導(dǎo)致雙方數(shù)據(jù)的不同步,這是因?yàn)橄惹白訌椫皇窃诳蛻?hù)端生成,并沒(méi)有進(jìn)行同步,所以我們需要把子彈綁定網(wǎng)格再同步到各個(gè)客戶(hù)端,首先,子彈要在網(wǎng)絡(luò)生成,需要把子彈注冊(cè)到網(wǎng)絡(luò)管理器中,在此之前,要在子彈上掛上NetworkIdentify,增加Command特性,原理是代碼在服務(wù)器端運(yùn)轉(zhuǎn),但需要在客戶(hù)段調(diào)用,把子彈同步到各個(gè)客戶(hù)端,這時(shí)候可以用Spawn方法,可以把指定生成在各個(gè)客戶(hù)端,當(dāng)具有網(wǎng)絡(luò)徽標(biāo)的預(yù)制件掛在服務(wù)器Spawn上時(shí),該預(yù)制件將調(diào)用OnstarServer,而后進(jìn)行調(diào)配netid,當(dāng)完成這個(gè)注冊(cè)這個(gè)流程后,會(huì)更改對(duì)應(yīng)的網(wǎng)絡(luò)物體列表,接著查找所有客戶(hù)端帶有網(wǎng)絡(luò)標(biāo)識(shí)的物體,如果狀態(tài)為T(mén)RUE,則將MsgType.ObjectSpawn或是MsgType.ObjectSpawnScene傳遞到預(yù)制體上,在注冊(cè)列表中的預(yù)制體里面尋找對(duì)應(yīng)的物體,找到后更新注冊(cè)到NetworkScene的列表中,需要更新相關(guān)信息,這時(shí)客戶(hù)端上的子彈沒(méi)有速度,我們得先進(jìn)行數(shù)據(jù)的同步,先在子彈上掛上組件獲取他的位置和狀態(tài),同步剛體組件。因?yàn)樽訌椀乃俣炔皇菚r(shí)刻變化,所以只需要同步一次即可,從客戶(hù)端調(diào)用參數(shù)的前提條件是可以對(duì)網(wǎng)絡(luò)進(jìn)行序列化,以便可以對(duì)參數(shù)進(jìn)行反序列化。在開(kāi)發(fā)時(shí),由于我的粗心,發(fā)生了無(wú)法調(diào)用的錯(cuò)誤,在我查閱資料后發(fā)現(xiàn),我的客戶(hù)端上忘記了掛上NetworkIdentity組件,像spawn、destroy這些都需要有一個(gè)NetworkIScene為前提。SynCar特性是解決這個(gè)方法的核心,通過(guò)這個(gè)方法,如此一來(lái)可以使服務(wù)器的值同步到客戶(hù)端上,讓雙端數(shù)據(jù)保持一致,防止因?yàn)橐欢烁淖兌绊懥硗庖欢?,出現(xiàn)錯(cuò)誤。1.
[Command]
2.
void
CmdFire()//這個(gè)方法需要在server里面調(diào)用
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)建敵人預(yù)制體敵人模型設(shè)置有兩種敵人,一種血量為100,一種血量為200,為了增加難度,不同敵人的傷害也不同。圖4-5敵人模型敵人綁定網(wǎng)格并進(jìn)行同步作為網(wǎng)絡(luò)對(duì)象的一個(gè)非?;镜慕M成部分,雙端必須確定它甚少有沒(méi)有networkID,這是用來(lái)指示對(duì)象的網(wǎng)絡(luò)狀態(tài),例如它是屬于雙端中的哪一端,相對(duì)于具體是客戶(hù)端的哪個(gè),擁有什么權(quán)限等圖4-6網(wǎng)絡(luò)狀態(tài)敵人隨機(jī)生成實(shí)例化隨機(jī)生成點(diǎn),并設(shè)置隨機(jī)數(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);
}
}
美術(shù)實(shí)現(xiàn)場(chǎng)景外部場(chǎng)景游戲中的場(chǎng)景,擁有神秘的飛船和隕石,圍繞著主題科幻搭建,燈光也改為較為昏暗,讓玩家游玩時(shí)有種神秘的感覺(jué),設(shè)置玩家的出生點(diǎn)和重生點(diǎn)都在飛船坪上隨機(jī)生成,從這里開(kāi)始進(jìn)行游戲圖5-1場(chǎng)景1內(nèi)部場(chǎng)景在內(nèi)部裝飾上,從地磚到墻,再到每一樣?xùn)|西,都是一個(gè)個(gè)搭建出來(lái)的,房間內(nèi)飾有控制室、各類(lèi)科技用品圖5-2-場(chǎng)景2菜單UI開(kāi)始菜單,有PLAY、exit等按鈕,當(dāng)點(diǎn)擊PLAY即進(jìn)入場(chǎng)景2,為游戲主界面。當(dāng)通過(guò)鼠標(biāo)按下該按鈕,就可以載入所要進(jìn)行的游戲圖5-3-TEXTMESHPRO首先導(dǎo)入TEXTMESHPRO組件,設(shè)計(jì)好菜單字體與顏色如圖,其次,為了給玩家,按鈕按下后的回饋,進(jìn)行調(diào)節(jié)按鈕圖5-4-調(diào)節(jié)面板制作結(jié)束菜單,有繼續(xù)游戲和退出按鈕。圖5-5-菜單血條UI編輯血條UI永遠(yuǎn)面向攝像機(jī)的代碼using
UnityEngine;
using
System.Collections;
public
class
LookAtCamera
:
MonoBehaviour
{
void
Update
()
{
transform.LookAt(Camera.main.transform);
}
}
圖5-6-血條游戲音效本游戲的風(fēng)格關(guān)鍵詞是“外太空”、“科幻”“神秘”所以在選擇游戲音效時(shí)遵循這樣的風(fēng)格,在游戲前期和后期,菜單部分,選擇了比較舒緩的背景音樂(lè),而在游戲進(jìn)行中,選擇為比較緊張刺激的背景音樂(lè),營(yíng)造出一種十分緊張的刺激氛圍,增加玩家游戲的沉浸感和代入感[3]。為了提高玩家的用戶(hù)體驗(yàn),游戲時(shí),射擊時(shí)伴有聲音、角色和敵人死亡后的音效聲都進(jìn)行設(shè)置。游戲燈光燈光是經(jīng)常被開(kāi)發(fā)者或玩家忽視的一樣游戲感受,但是燈光在游戲中屬于非常重要的部分,好的游戲的燈光要求非常高,燈光可以被用來(lái)營(yíng)造出特定氛圍的環(huán)境,也可以引出需要被關(guān)注的物體,燈光不僅僅只是用來(lái)照亮場(chǎng)景,而是需要好好利用起來(lái),喚起一種玩家游玩時(shí)的現(xiàn)實(shí)感,有目的的照亮該場(chǎng)景的建筑與物體甚至是角色,提高玩家游玩時(shí)的沉浸感,讓玩家能更深刻的被吸引到故事和游戲情景當(dāng)中。圖是初始游戲場(chǎng)景時(shí)的燈光,圖是增加了三個(gè)燈光組件后的場(chǎng)景,對(duì)比非常明顯,由于本游戲是設(shè)定在太空當(dāng)中,神秘、科幻、夢(mèng)幻是該游戲的關(guān)鍵詞。圖5-7燈光對(duì)比游戲測(cè)試游戲測(cè)試游戲測(cè)試的重要新就相當(dāng)于人身體中的一個(gè)器官,這個(gè)器官可以保證著人體(游戲)的健康(游戲質(zhì)量),并且在現(xiàn)在的開(kāi)發(fā)行業(yè)里,游戲測(cè)試是不可或缺的一個(gè)崗位,目的是為了發(fā)現(xiàn)游戲中存在或者可能存在的缺陷,需要進(jìn)行模擬操作一遍,通過(guò)測(cè)試發(fā)現(xiàn)問(wèn)題后,有利于開(kāi)發(fā)者進(jìn)行改善??傊?,游戲測(cè)試是為了發(fā)現(xiàn)問(wèn)題后進(jìn)行提高游戲質(zhì)量,按以往我們說(shuō)的傳統(tǒng)的軟件測(cè)試包括黑盒測(cè)試或白盒測(cè)試,并且游戲比其他軟件更特殊,他的測(cè)試含有可玩性、游戲世界的平衡性、游戲文化風(fēng)格等都是游戲測(cè)試中的一部分,這是相對(duì)于其他軟件所不一樣的。從游戲的開(kāi)始需求調(diào)研時(shí),就可以進(jìn)行測(cè)試了,例如音游游戲,就可以去市面上找到相同類(lèi)型的游戲進(jìn)行測(cè)評(píng),對(duì)未來(lái)測(cè)試自己的游戲是非常大的幫助的,游戲開(kāi)發(fā)時(shí),通過(guò)游戲文檔、需求文檔等文件進(jìn)行編寫(xiě)游戲測(cè)試文檔,所謂蘿卜青菜各有所愛(ài),游戲也是如此,我們要通過(guò)進(jìn)行用戶(hù)調(diào)研,開(kāi)發(fā)出喜聞樂(lè)見(jiàn)的游戲,而后期成型后,像比如說(shuō)游戲的壓力測(cè)試、兼容測(cè)試、網(wǎng)絡(luò)測(cè)試、適配性測(cè)試等等也是非常重要.表6-1游戲信息表游戲名字:SpaceHulk游戲類(lèi)型:TPS游戲風(fēng)格:科幻是否聯(lián)網(wǎng):是表6-2游戲UI測(cè)試游戲UI部分(是否正常?)開(kāi)始菜單—PLAY是開(kāi)始菜單—QUIT是結(jié)束菜單—NEWGAME是結(jié)束菜單—QUIT是血條顯示是表6-3游戲功能測(cè)試游戲功能(是否正常?)移動(dòng)是射擊是傷害、血條計(jì)算是拾撿東西是相機(jī)跟隨是表6-3游戲音效測(cè)試游戲燈光音效(是否正常?)游戲燈光是菜單背景音樂(lè)是菜單內(nèi)音效聲是游戲背景音樂(lè)是表6-4游戲音效測(cè)試游戲場(chǎng)景模型(是否正常?)天空盒是大環(huán)境(宇宙)是建筑是內(nèi)飾是玩家模型是敵人模型是總結(jié)與期望隨著我的畢業(yè)論文到了寫(xiě)總結(jié)的部分,也意味著我四年青春歲月的大學(xué)生涯也隨之快要接近尾聲了,畢設(shè)和論文從前期設(shè)計(jì)到后期開(kāi)發(fā)測(cè)試到收尾工作,都讓我感觸頗深,在完成的過(guò)程中出現(xiàn)了許多bug,也使我對(duì)自身的能力認(rèn)識(shí)的一個(gè)過(guò)程,從提出設(shè)想,到去學(xué)習(xí)制作,這個(gè)過(guò)程讓我受益匪淺,只有每天不斷的學(xué)習(xí)充實(shí)才讓我覺(jué)得有安全感。在開(kāi)始前,我認(rèn)為的畢業(yè)設(shè)計(jì),不過(guò)就是對(duì)我四年來(lái)學(xué)習(xí)的的一個(gè)總結(jié),但昨完畢業(yè)設(shè)計(jì)的我認(rèn)為,這只是學(xué)習(xí)的一個(gè)開(kāi)始,我需要對(duì)自身水平有個(gè)清晰的定位,以前的知識(shí)需要去學(xué)習(xí),未來(lái)發(fā)展出來(lái)的知識(shí)也得去學(xué)習(xí),學(xué)習(xí)是一件長(zhǎng)期積累的過(guò)程,沒(méi)有捷徑,沒(méi)有終點(diǎn),只有不斷鞭策自己往前走,再往前走,才是生命的真諦。本論文主要介紹了多人聯(lián)機(jī)射擊游戲,在設(shè)計(jì)開(kāi)始之前,我在白紙上進(jìn)行了一次大腦風(fēng)暴,把想做的功能都羅列了出來(lái),隨著越寫(xiě)越多,發(fā)現(xiàn)自己寫(xiě)的功能都是常見(jiàn)的多人射擊游戲,不夠新穎,沒(méi)有創(chuàng)意,而且功能龐大,有點(diǎn)眼高手低,于是我把基本功能都圈了出來(lái),決定先實(shí)現(xiàn)出,有些看似簡(jiǎn)單的功能,在實(shí)現(xiàn)起來(lái)時(shí)卻遭遇困難,非常感謝我的同學(xué)們和老師,在我開(kāi)發(fā)過(guò)程中給了我許多建議,通過(guò)在網(wǎng)上查閱資料,觀(guān)看教學(xué)視頻,結(jié)合自己的理解,不斷的攻破一道道難題,從前期的需求設(shè)計(jì),開(kāi)發(fā)的準(zhǔn)備,素材的查找,開(kāi)發(fā)時(shí)自學(xué)各種軟件插件,開(kāi)發(fā)后的優(yōu)化等,都不是那么簡(jiǎn)單的,基本上完成了初始的功能,ui界面有開(kāi)始菜單,結(jié)束菜單,血條的顯示,實(shí)現(xiàn)了模型的移動(dòng)射擊,血量血條,隨機(jī)生成敵人,重生點(diǎn),子彈射擊邏輯,還有本文最重要的聯(lián)機(jī)部分,采用的是Mutiplayer的網(wǎng)絡(luò)架構(gòu),在場(chǎng)景的構(gòu)造過(guò)程中,以科幻風(fēng)格為目的去完成,界面簡(jiǎn)單友好,運(yùn)行穩(wěn)定,從開(kāi)發(fā)前期到后期漸漸總結(jié)了一個(gè)規(guī)律,所有功能在服務(wù)器端處理,比如敵人的生成位置、子彈的生成、子彈同步的邏輯,敵人自動(dòng)巡邏的邏輯、檢測(cè)范圍內(nèi)玩家自動(dòng)攻擊。一個(gè)游戲,他不僅僅只是編寫(xiě)代碼,他還需要結(jié)合邏輯,需要會(huì)處理素材,需要不斷的學(xué)習(xí)新的插件組件,利用好網(wǎng)絡(luò)資源,能讓我的游戲變得完整,在這個(gè)過(guò)程中,聯(lián)機(jī)作為我畢業(yè)設(shè)計(jì)的亮點(diǎn),也是難點(diǎn),就讓我花費(fèi)了很多時(shí)間去研究,在發(fā)開(kāi)時(shí),由于沒(méi)有經(jīng)驗(yàn),代碼比較冗雜,處理重復(fù)多,致使游戲?qū)嵭缘拖?,后?lái)以一個(gè)原則,則是先在服務(wù)器端進(jìn)行更新數(shù)據(jù),再通過(guò)客戶(hù)端進(jìn)行同步。游戲雖然制作成功,但是存在著以下問(wèn)題:?1.?場(chǎng)景制作時(shí)間過(guò)長(zhǎng),導(dǎo)致游戲功能較為單一,可玩性不高。?2.?對(duì)于模型的處理方面的知識(shí)比較欠缺,也花了些時(shí)間學(xué)習(xí)。3.?Unity中有許多強(qiáng)大的組件,沒(méi)有吃透,這塊在未來(lái)也需要一直學(xué)習(xí)。隨著技術(shù)的不斷上升,電腦配置不停的提高,游戲開(kāi)發(fā)環(huán)境越來(lái)越完善,開(kāi)發(fā)者越來(lái)越多,做出的好游戲也是數(shù)不勝數(shù),而游戲的游戲效果也是越來(lái)越精致,游戲已經(jīng)成為大眾化的一項(xiàng)魚(yú)類(lèi)項(xiàng)目,反之,由于當(dāng)代的玩家玩的游戲
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度房屋買(mǎi)賣(mài)合同小額貸款與房產(chǎn)評(píng)估機(jī)構(gòu)合作服務(wù)協(xié)議
- 2025年度高科技企業(yè)研發(fā)資金過(guò)橋借款協(xié)議
- 2025年度人工智能醫(yī)療診斷系統(tǒng)合同范本
- 體育體育課程改革與提升方案計(jì)劃
- 產(chǎn)品經(jīng)理工作回顧與市場(chǎng)需求分析計(jì)劃
- 心理科心理咨詢(xún)工作成果與發(fā)展計(jì)劃
- 建設(shè)學(xué)生藝術(shù)素養(yǎng)的美術(shù)教學(xué)工作方案計(jì)劃
- 時(shí)間管理技巧的深入探索計(jì)劃
- 加強(qiáng)醫(yī)院綠色低碳建設(shè)的實(shí)施計(jì)劃
- 2025年藥品批發(fā)零售項(xiàng)目建議書(shū)
- 2024年世界職業(yè)院校技能大賽高職組“電子商務(wù)組”賽項(xiàng)參考試題庫(kù)(含答案)
- 高速公路施工現(xiàn)場(chǎng)安全管理制度
- 復(fù)工復(fù)產(chǎn)應(yīng)急預(yù)案
- 內(nèi)滿(mǎn)堂腳手架搭設(shè)施工方案
- 報(bào)關(guān)實(shí)務(wù)-教學(xué)課件 第一章 海關(guān)概念
- 醫(yī)院生活垃圾清運(yùn)處理方案
- 老年心衰病人的護(hù)理
- 2025屆江蘇省無(wú)錫市天一中學(xué)高一上數(shù)學(xué)期末質(zhì)量檢測(cè)試題含解析
- 2024年中國(guó)解剖臺(tái)市場(chǎng)調(diào)查研究報(bào)告
- 第四單元平行與相交(單元測(cè)試)-2024-2025學(xué)年四年級(jí)上冊(cè)數(shù)學(xué)青島版
- 2024年密碼行業(yè)職業(yè)技能競(jìng)賽參考試題庫(kù)500題(含答案)
評(píng)論
0/150
提交評(píng)論