暗黑战神学习笔记
暗黑戰(zhàn)神游戲開(kāi)發(fā)游戲?qū)W習(xí)筆記
- 第一章:初始場(chǎng)景與UI界面制作
- 光照系統(tǒng)
- 有哪些參數(shù)可以設(shè)置光源?
- 1、點(diǎn)光源
- 2、window界面下的LightSetting
- 光照系統(tǒng)的優(yōu)化方法
- Animation系統(tǒng)
- 第二章:UI邏輯框架與配置文件
- 第三章:網(wǎng)絡(luò)通信與服務(wù)器邏輯框架
- 第四章:數(shù)據(jù)庫(kù)與服務(wù)器緩存層
- 第五章:主城UI邏輯及角色控制
- 光照渲染烘焙
- UI搭建(經(jīng)驗(yàn)進(jìn)度條自增長(zhǎng)、UI動(dòng)畫)
- 進(jìn)度條的實(shí)現(xiàn):
- 動(dòng)畫的UI實(shí)現(xiàn)
- 搖桿制作
- 主角人物控制
- 主場(chǎng)景加載配置
- 第六章:角色展示系統(tǒng)與任務(wù)引導(dǎo)系統(tǒng)
- 常規(guī)信息顯示
- 任務(wù)引導(dǎo)系統(tǒng)開(kāi)發(fā)
- 人物的自動(dòng)尋路
- NPC對(duì)話界面
- 新增服務(wù)器數(shù)據(jù)交互
- 第七章:強(qiáng)化升級(jí)系統(tǒng)
- 第八章:世界聊天系統(tǒng)與資源交易系統(tǒng)
- 世界聊天系統(tǒng)
- 資源交易系統(tǒng)
- 第九章:任務(wù)獎(jiǎng)勵(lì)系統(tǒng)與副本業(yè)務(wù)系統(tǒng)
- 任務(wù)系統(tǒng)
- 副本業(yè)務(wù)
- 第十章:戰(zhàn)斗系統(tǒng)之資源制作與架構(gòu)設(shè)計(jì)
- 場(chǎng)景制作
- 架構(gòu)設(shè)計(jì)
- 第十一章:戰(zhàn)斗系統(tǒng)之技能效果與技能位移
- 第十二章:戰(zhàn)斗系統(tǒng)之技能配置與技能傷害
- 玩家使用技能之后如何判斷
- 第十三章:戰(zhàn)斗系統(tǒng)之?dāng)?shù)值顯示與普攻連招
- 怪物血條顯示
- 普攻連招
第一章:初始場(chǎng)景與UI界面制作
光照系統(tǒng)
有哪些參數(shù)可以設(shè)置光源?
1、點(diǎn)光源
2、window界面下的LightSetting
光照系統(tǒng)的優(yōu)化方法
光照系統(tǒng)渲染可以分為實(shí)時(shí)渲染和預(yù)渲染
對(duì)于動(dòng)態(tài)物體可以進(jìn)行實(shí)時(shí)渲染,但是對(duì)于一些不動(dòng)的物體,可以設(shè)置為預(yù)渲染模式,會(huì)將一部分內(nèi)容預(yù)先保存到貼圖文件。
Animation系統(tǒng)
制作最簡(jiǎn)易的動(dòng)畫,每一幀幾率下需要更改組件的內(nèi)容,游戲運(yùn)行的時(shí)候自動(dòng)播放。
第二章:UI邏輯框架與配置文件
本章內(nèi)容主要是講解UI、場(chǎng)景切換的相關(guān)API,以及調(diào)用xml文件,都是一些API調(diào)用,沒(méi)有什么技術(shù)含量,百度查詢相關(guān)文章即可。
第三章:網(wǎng)絡(luò)通信與服務(wù)器邏輯框架
主要使用PESocket插件,沒(méi)有什么難度,也是API調(diào)用。
第四章:數(shù)據(jù)庫(kù)與服務(wù)器緩存層
這一章比較復(fù)雜,首先梳理一下簡(jiǎn)易流程。
1、用戶輸入完賬號(hào)密碼點(diǎn)擊進(jìn)入游戲。
2、服務(wù)器端接收到用戶發(fā)來(lái)的請(qǐng)求,判斷當(dāng)前要求是哪種類型,分發(fā)給網(wǎng)絡(luò)服務(wù)層,網(wǎng)絡(luò)服務(wù)判斷是否可以執(zhí)行,然后再回傳給客戶端。
3、客戶端接收到服務(wù)端返回的數(shù)據(jù),本地網(wǎng)絡(luò)服務(wù)判斷服務(wù)器返回的數(shù)據(jù)是何種類型,(是登錄則切換界面,是。。則。。)
第五章:主城UI邏輯及角色控制
光照渲染烘焙
和第一章內(nèi)容差不多,對(duì)靜態(tài)物體進(jìn)行渲染,沒(méi)啥好總結(jié)的。
UI搭建(經(jīng)驗(yàn)進(jìn)度條自增長(zhǎng)、UI動(dòng)畫)
需要實(shí)現(xiàn)如圖以下效果:
進(jìn)度條的實(shí)現(xiàn):
定義一個(gè)空物體作為父類,掛在Grid Layout組件,通過(guò)代碼定義好參數(shù),下面有十個(gè)子類,每個(gè)子類分別是一個(gè)藍(lán)色的方塊。
需要注意的點(diǎn):不同分辨率情況下極其容易出錯(cuò),在這種情況下,我們要根據(jù)放大的比例算出父類的寬,然后去掉中間9個(gè)黑色部分的寬度,然后除以10,即可獲得每個(gè)藍(lán)色小方塊的寬高。然后判斷當(dāng)前百分比,遍歷藍(lán)色小方塊的顯示。
動(dòng)畫的UI實(shí)現(xiàn)
定義兩個(gè)動(dòng)畫,一個(gè)關(guān)閉,一個(gè)開(kāi)啟。
開(kāi)啟動(dòng)畫:兩幀:第一幀保持原樣,第二幀將所有圖標(biāo)回歸原點(diǎn)(與父類相對(duì)位置為0),開(kāi)關(guān)按鈕旋轉(zhuǎn)45°。
關(guān)閉動(dòng)畫:兩幀,與開(kāi)啟動(dòng)畫反著來(lái)即可。window腳本中定義一個(gè)bool變量判斷是開(kāi)啟還是關(guān)閉。
搖桿制作
搖桿有三個(gè)關(guān)鍵地方,點(diǎn)擊,拖拽,松手。
定義一個(gè)監(jiān)聽(tīng)工具類如下:
在windowroot基類中定義獲取組件的方法,傳入需要監(jiān)聽(tīng)的游戲物體。
在MainCityWindow中調(diào)用。
點(diǎn)擊,和抬起都很簡(jiǎn)單,只是顯示初始位置以及復(fù)位。
拖拽有一點(diǎn)小麻煩,偏移量可以通過(guò)當(dāng)前位置減去最初位置獲得,然后可以限制一下移動(dòng)的范圍(有現(xiàn)成的API可以調(diào)用,但是此處也需要算入不同分辨率的寬高比)即可。
主角人物控制
主角在場(chǎng)景中只有兩個(gè)動(dòng)作,一個(gè)待機(jī),一個(gè)移動(dòng),可以通過(guò)添加Animator組件控制。
難點(diǎn)是算出主角的移動(dòng)方向。
由圖可以看出,主角是朝向Z軸,所以主角想要轉(zhuǎn)向,應(yīng)該更改Y軸的值。
此時(shí)通過(guò)玩家的操作,拿到玩家希望移動(dòng)的方向,然后算出偏移量,再將值賦給Y軸即可。
至于移動(dòng),以及動(dòng)作切換就相對(duì)來(lái)說(shuō)比較簡(jiǎn)單了。為了提高平滑度,可以設(shè)置一下Animator中的blend。
需要注意一下攝像機(jī)的相對(duì)偏移,讓相機(jī)一直跟隨主角。
運(yùn)行流程:palyerController掛載在角色上,移動(dòng)方法寫在update中,palyerController是MainCitySys的成員,MainCityWindow移動(dòng)時(shí),調(diào)用MainCitySys的單例給palyerController設(shè)置方向以及Blend參數(shù),palyerController的update中檢測(cè)到狀態(tài)以及方向的改變,開(kāi)始移動(dòng)。
Blend參數(shù)會(huì)在拖拽時(shí)變成1,手抬起時(shí)變成0。
主場(chǎng)景加載配置
這部分沒(méi)有啥好說(shuō)的,將主角,攝像頭應(yīng)該加載的相關(guān)數(shù)據(jù)寫入xml文件中,加載的時(shí)候讀取賦值即可。
第六章:角色展示系統(tǒng)與任務(wù)引導(dǎo)系統(tǒng)
常規(guī)信息顯示
沒(méi)啥好講解的,都是UI搭建,需要注意一點(diǎn)的是,個(gè)人信息顯示頁(yè)面應(yīng)該顯示當(dāng)前角色。
這里,我們可以使用renderTexture配上多攝像頭的用法。
任務(wù)引導(dǎo)系統(tǒng)開(kāi)發(fā)
人物的自動(dòng)尋路
任務(wù)引導(dǎo)系統(tǒng)是新手教程必被內(nèi)容,當(dāng)玩家點(diǎn)擊自動(dòng)引導(dǎo)時(shí),角色自動(dòng)跑到目標(biāo)地點(diǎn),并觸發(fā)相應(yīng)事件。
實(shí)現(xiàn)過(guò)程:
1、首先烘焙場(chǎng)景。
需要注意:需要烘焙的場(chǎng)景中的物體,Mesh Render需打開(kāi)。傳入目標(biāo)地點(diǎn)。
2、給玩家操縱角色添加NavMeshAgent組件。
NavMeshAgent與已經(jīng)存在的CharacterController組件可能存在沖突,因此只有在玩家點(diǎn)擊引導(dǎo)時(shí)才將NavMeshAgent組件設(shè)置為true。
注意點(diǎn):
1、玩家在自動(dòng)跑路過(guò)程中如果自己移動(dòng),需要解除自動(dòng)尋路功能。
2、需要寫一個(gè)判斷是否已經(jīng)到達(dá)目標(biāo)點(diǎn)的方法,并且定義一個(gè)相關(guān)參數(shù)在update中循環(huán)判斷。如下圖所示:
當(dāng)玩家點(diǎn)擊尋路時(shí),是否已經(jīng)到達(dá)目標(biāo)地點(diǎn),如果到了觸發(fā)相應(yīng)事件,如果沒(méi)到,那么繼續(xù)跑路,此時(shí)一直判斷循環(huán)調(diào)用自身,直到到了觸發(fā)事件。
NPC對(duì)話界面
沒(méi)啥好說(shuō)的,UI搭建,根據(jù)參數(shù)判斷當(dāng)前是誰(shuí)在說(shuō)話,切換相應(yīng)的UI即可。
此處讀取xml,根據(jù)#區(qū)分, 0 1分別是NPC與玩家,|后的內(nèi)容是對(duì)話。
新增服務(wù)器數(shù)據(jù)交互
這一點(diǎn)很重要,玩家完成任務(wù)之后,獎(jiǎng)勵(lì)應(yīng)該是從服務(wù)端發(fā)送到客戶端,而不能直接調(diào)用客戶端XML文件。避免數(shù)據(jù)異常,客戶端XML文件數(shù)據(jù)的任務(wù)只是顯示而已。
第七章:強(qiáng)化升級(jí)系統(tǒng)
本章沒(méi)有啥技術(shù)點(diǎn),全是業(yè)務(wù)系統(tǒng)。
角色有六個(gè)裝備,#0#0這樣分開(kāi),有10個(gè)等級(jí),客戶端傳過(guò)來(lái)需要強(qiáng)化的裝備參數(shù),服務(wù)端執(zhí)行強(qiáng)化方法,然后返回強(qiáng)化的數(shù)據(jù)。
注意點(diǎn):客戶端本地需要驗(yàn)證是否滿足強(qiáng)化條件,避免不必要的帶寬消耗,另外只需要傳入關(guān)鍵參數(shù)即可,例如只需要傳入需要強(qiáng)化裝備的索引。
服務(wù)端會(huì)根據(jù)傳過(guò)來(lái)參數(shù),從緩存層拿到賬戶數(shù)據(jù),判斷能否強(qiáng)化,然后將數(shù)據(jù)返回給客戶端,客戶端UI界面進(jìn)行相應(yīng)的更新。
第八章:世界聊天系統(tǒng)與資源交易系統(tǒng)
世界聊天系統(tǒng)
功能非常簡(jiǎn)單,客戶端搭建相應(yīng)的UI,用戶輸入內(nèi)容點(diǎn)擊發(fā)送之后服務(wù)器收到消息之后給所有在線的人廣播。
注意點(diǎn):
1、因?yàn)槭菑V播,所以會(huì)發(fā)給很多人,網(wǎng)絡(luò)數(shù)據(jù)傳輸只能使用二進(jìn)制,所以在發(fā)送前需要將數(shù)據(jù)轉(zhuǎn)換成二進(jìn)制,避免資源消耗。
2、世界聊天信息的頻率,可以添加個(gè)參數(shù)用協(xié)程控制,保證每幾秒只能發(fā)送一條。
協(xié)程的使用介紹
資源交易系統(tǒng)
功能也很簡(jiǎn)單,搭建UI,客戶端傳輸局,服務(wù)端接收處理再返回。
注意點(diǎn):
用戶點(diǎn)擊之后應(yīng)該有相應(yīng)的機(jī)制避免連續(xù)點(diǎn)擊,因?yàn)榫W(wǎng)絡(luò)交互存在延時(shí),此時(shí)可以將按鈕設(shè)置不可觸發(fā),等接收到服務(wù)器的消息之后再設(shè)置為可以觸發(fā)。
第九章:任務(wù)獎(jiǎng)勵(lì)系統(tǒng)與副本業(yè)務(wù)系統(tǒng)
任務(wù)系統(tǒng)
內(nèi)容相對(duì)簡(jiǎn)單,客戶端傳送完成的任務(wù)ID號(hào),服務(wù)器端根據(jù)ID去配置文件讀取,給予賬號(hào)相對(duì)應(yīng)的獎(jiǎng)勵(lì),然后將需要更新的數(shù)據(jù)發(fā)回客戶端,客戶端定義相關(guān)的方法對(duì)數(shù)據(jù)進(jìn)行更新。
副本業(yè)務(wù)
內(nèi)容相對(duì)簡(jiǎn)單,搭建對(duì)應(yīng)的UI,點(diǎn)擊UI中的場(chǎng)景切換場(chǎng)景,讀取xml文件,將角色加載到對(duì)應(yīng)的界面即可。
第十章:戰(zhàn)斗系統(tǒng)之資源制作與架構(gòu)設(shè)計(jì)
場(chǎng)景制作
內(nèi)容相對(duì)簡(jiǎn)單,沒(méi)啥好介紹的,燈光烘焙等,參考第一章
架構(gòu)設(shè)計(jì)
個(gè)人覺(jué)得非常重要。
先看下結(jié)構(gòu)圖:
問(wèn)題1:都是戰(zhàn)斗系統(tǒng)的內(nèi)容,為什么要單獨(dú)弄出一個(gè)BattleMgr管理類,直接讓BattleSys管理不好嗎?
答:與前面UI界面內(nèi)容不同,戰(zhàn)斗系統(tǒng)相對(duì)復(fù)雜,全部交給Sys負(fù)責(zé)不是不可以,但是會(huì)導(dǎo)致代碼太混亂。
詳細(xì)架構(gòu):
BattleMgr類:狀態(tài)管理器,技能管理器,玩家邏輯實(shí)體類都是他的成員。
玩家邏輯實(shí)體類:BattleMgr,StateMgr,SkillMgr,Controller都是他的成員。
狀態(tài)接口
需要傳進(jìn)來(lái)邏輯實(shí)體,以及相對(duì)應(yīng)的參數(shù)。
例如,玩家由靜止?fàn)顟B(tài)變成了跑步狀態(tài),會(huì)將自身傳入到該狀態(tài)中,然后由狀態(tài)管理類調(diào)用相對(duì)應(yīng)的方法。
即,運(yùn)行流程是:進(jìn)入戰(zhàn)斗場(chǎng)景先創(chuàng)建一個(gè)玩家邏輯實(shí)體類,以及相對(duì)應(yīng)的初始化。
在戰(zhàn)斗場(chǎng)景中,假設(shè)玩家按了1技能,PlayerCtrlWnd會(huì)調(diào)用BattleSys的單例,執(zhí)行使用技能的方法。BattleSys會(huì)下發(fā)到內(nèi)部的BattleMgr的調(diào)用技能方法,BattleMgr在發(fā)給自身的玩家邏輯實(shí)體類成員,玩家類再交給自身的狀態(tài)管理類,技能管理類的執(zhí)行進(jìn)入,執(zhí)行,退出狀態(tài)的方法,傳入玩家邏輯實(shí)體類,狀態(tài)類調(diào)用自身的方法,在調(diào)用傳進(jìn)來(lái)的玩家邏輯實(shí)體類調(diào)用自身的方法,玩家類在調(diào)用自身的技能管理器去執(zhí)行技能(此處也需要傳入玩家類),玩家類再根據(jù)當(dāng)前技能調(diào)用controller類調(diào)用動(dòng)畫組件執(zhí)行相應(yīng)的操作。至此,完成一系列的操作。
玩家控制界面調(diào)用點(diǎn)擊方法,BattleSys調(diào)用單例執(zhí)行技能方法。
進(jìn)入到BattleSys類中,調(diào)用自身battleMrg執(zhí)行技能方法。
BattleMgr調(diào)用自身的玩家類。
玩家類調(diào)用技能管理類。
技能管理類下發(fā)到某個(gè)詳細(xì)的狀態(tài)類。
此處攻擊類調(diào)用玩家類的方法。
玩家類調(diào)用技能類的方法。
技能類讀取XML文件,獲取技能相關(guān)的數(shù)據(jù),再交給玩家類調(diào)用。
玩家類再交給控制類調(diào)用動(dòng)畫組件
至此一套流程運(yùn)行完成。
第十一章:戰(zhàn)斗系統(tǒng)之技能效果與技能位移
主要運(yùn)行流程都在第十章內(nèi)容,本章主要是具體實(shí)現(xiàn)邏輯,讀取xml,調(diào)用組件做相關(guān)事情,沒(méi)有啥好說(shuō)的,偏向于業(yè)務(wù)層。
技能特效:將組件拖到角色下,控制setActive即可。
第十二章:戰(zhàn)斗系統(tǒng)之技能配置與技能傷害
此章內(nèi)容與10、 11差不多,補(bǔ)充了數(shù)值以及人物戰(zhàn)斗與怪物的交互
玩家使用技能之后如何判斷
在玩家使用攻擊技能之后增加一個(gè)傷害的方法。
在BattleMgr中寫一個(gè)獲取所有當(dāng)前怪物的方法,然后根據(jù)玩家的技能,判斷距離等條件判斷怪物是否會(huì)被攻擊。
經(jīng)過(guò)一系列閃避、穿甲的暴擊計(jì)算之后,判斷怪物是進(jìn)入被攻擊狀態(tài)還是死亡狀態(tài)。
第十三章:戰(zhàn)斗系統(tǒng)之?dāng)?shù)值顯示與普攻連招
本章主要內(nèi)容是怪物血條、暴擊等顯示,與連招系統(tǒng)
怪物血條顯示
搭建相應(yīng)的UI,血條有倆種背景,一種紅色,另一種黃色,紅色瞬間掉血,然后黃色緊隨其后,實(shí)現(xiàn)一個(gè)類似于lol英雄血條被打的效果。
問(wèn)題是,血條在UI層,然而怪物實(shí)體在3D層,此時(shí)應(yīng)該怎么辦呢?
答案是調(diào)用Camer中的左邊轉(zhuǎn)換方法,將游戲物體左邊轉(zhuǎn)換為屏幕坐標(biāo)(要注意UI的適配比例)。
普攻連招
普攻效果有五段,當(dāng)玩家快速點(diǎn)擊的時(shí)候,應(yīng)該按照順序執(zhí)行。
連擊時(shí)間是0.5S,如果0.5S內(nèi)玩家沒(méi)有點(diǎn)擊,那么將連擊歸0并且重新計(jì)時(shí)。
此時(shí)有五個(gè)參數(shù),假設(shè)是1-5,根據(jù)當(dāng)前傳入的參數(shù)執(zhí)行不同的動(dòng)作。每按一次都將這個(gè)參數(shù)加入到隊(duì)列中。
在另一個(gè)類中,不停地對(duì)這個(gè)隊(duì)列進(jìn)行判斷,如果Count不為0,那么就執(zhí)行下一個(gè)動(dòng)作。否則歸0。
總結(jié)
- 上一篇: 收货地址组件封装
- 下一篇: MergeSort(合并排序)