在網(wǎng)路游戲中做任務(wù)已經(jīng)成為游戲很重要的一個(gè)核心功能和玩法输拇,如何做好一個(gè)靈活可擴(kuò)展的任務(wù)系統(tǒng)的架構(gòu)與設(shè)計(jì)娶视,今天來給大家分享一些我們的設(shè)計(jì)經(jīng)驗(yàn)峭火。接下來我把整個(gè)的任務(wù)系統(tǒng)分成以下6個(gè)模塊:
(1) 任務(wù)配置表設(shè)計(jì)與管理;
(2) 游戲任務(wù)的解鎖與生成;
(3) 任務(wù)完成判定;
(4) 任務(wù)完成后的獎(jiǎng)勵(lì)生成;
(5) 獎(jiǎng)勵(lì)的領(lǐng)取;
(6) 客戶端的界面展示;
對于單機(jī)游戲而言钥庇,這6個(gè)模塊都放在客戶端直接處理哥放,對于網(wǎng)路游戲而言歼指,模塊1~5實(shí)現(xiàn)在服務(wù)端,模塊6實(shí)現(xiàn)在客戶端甥雕。
對啦踩身!這里有個(gè)游戲開發(fā)交流小組里面聚集了一幫熱愛學(xué)習(xí)unity的零基礎(chǔ)小白,也有一些正在從事unity開發(fā)的技術(shù)大佬社露,歡迎你來交流學(xué)習(xí)挟阻。
任務(wù)配置表設(shè)計(jì)與管理
任務(wù)配置表主要是給策劃來編輯游戲任務(wù)的具體內(nèi)容,同時(shí)程序根據(jù)策劃編輯的任務(wù)配置來生成游戲的任務(wù),獲取任務(wù)描述, 獲取獎(jiǎng)勵(lì)描述, 任務(wù)完成判定,游戲獎(jiǎng)勵(lì)領(lǐng)取峭弟。對于程序而言附鸽,要充分的調(diào)研游戲任務(wù)系統(tǒng)的功能需求,并設(shè)計(jì)出管理代碼+策劃編輯游戲任務(wù)的工作方式瞒瘸。我們拿一個(gè)比較通用的任務(wù)配置表的需求來進(jìn)行分析坷备,將一個(gè)任務(wù)配置設(shè)計(jì)下列字段:
任務(wù)ID:唯一代表該任務(wù)類型的ID號;
任務(wù)解鎖的條件: 解鎖該任務(wù)的條件(這里有N種完全不同的規(guī)則)
任務(wù)的文字描述: 描述改任務(wù)的內(nèi)容,主要用于客戶端UI界面的顯示;
任務(wù)完成達(dá)成的條件: 完成該任務(wù)要達(dá)成的條件(這里有N種不同的規(guī)則);
任務(wù)完成獲得的獎(jiǎng)勵(lì): 完成該任務(wù)可獲的獎(jiǎng)勵(lì)(這里有N種不同的獎(jiǎng)勵(lì)規(guī)則);
任務(wù)獎(jiǎng)勵(lì)描述: 完成任務(wù)后可獲得哪些獎(jiǎng)勵(lì)的文字描述挨务,主要用戶客戶端UI展示;
任務(wù)解鎖條件击你,任務(wù)達(dá)成條件玉组,任務(wù)獎(jiǎng)勵(lì)谎柄,不同任務(wù)都有不同的規(guī)則,那么這個(gè)如何設(shè)計(jì)呢惯雳?這里就需要充分的調(diào)查任務(wù)系統(tǒng)的需求,然后總結(jié)出規(guī)則朝巫,做一個(gè)規(guī)則描述表給策劃,方便策劃填寫數(shù)據(jù)石景,同時(shí)方便程序按照規(guī)則解析條件表達(dá)式劈猿,例如解鎖任務(wù)A拙吉,需要達(dá)到10等級。解鎖任務(wù)B揪荣,需要收集10張卡, 這里解鎖任務(wù)就有2種不同的規(guī)則筷黔,就需要定規(guī)則給策劃填寫,給程序解析,就可以生成一個(gè)這樣的解鎖條件表:
解鎖方式ID 解鎖條件描述, 解鎖參數(shù)解析模板,如
10000 策劃填寫ulevel=10, 達(dá)到等級10后解鎖, type=10000, ulevel=%d
20000 策劃填寫cards=10, 收集10張卡后解鎖, type=20000, ucards = %d
…
在策劃的任務(wù)配置表里面就可以按照這個(gè)規(guī)則來填寫仗颈,程序根據(jù)type類型來對應(yīng)解析規(guī)則佛舱,解析解鎖條件。如下:
任務(wù)ID 任務(wù)解鎖條件 任務(wù)文字描述 任務(wù)完成條件, 達(dá)成獎(jiǎng)勵(lì)
10001 type=10000,ulevel=10 挖10個(gè)寶石, …
10002 type=10000,ulevel=20 挖10個(gè)水晶, …
10003 type=10000,uelvel=30 挖10個(gè)金幣, …
20001 type=20000,ucards=10 合成初級戰(zhàn)衣 …
20002 type=20000,ucards=20 合成中級戰(zhàn)衣 …
任務(wù)完成條件與達(dá)成獎(jiǎng)勵(lì)條件也可以按照解鎖條件類似的方式來編寫和制定規(guī)則挨决。所以這里在設(shè)計(jì)的時(shí)候一定要充分的調(diào)研任務(wù)系統(tǒng)的需求,程序根據(jù)type類型來解析規(guī)則的參數(shù)獲得對應(yīng)的條件規(guī)則请祖。
游戲任務(wù)的解鎖與生成
任務(wù)配置表的設(shè)計(jì)完成后,策劃就會給游戲編輯好任務(wù)配置表脖祈,在游戲運(yùn)行中要給每個(gè)玩家來解鎖對應(yīng)的任務(wù)并生成任務(wù)肆捕,這個(gè)時(shí)候還需要有一個(gè)玩家任務(wù)表,這個(gè)表描述了所有玩家的所有任務(wù)盖高,這個(gè)表的設(shè)計(jì)如下:
ID: 任務(wù)的唯一ID號
uid: 這個(gè)任務(wù)對應(yīng)的玩家ID號
tid: 標(biāo)識玩家正在進(jìn)行的任務(wù)慎陵,根據(jù)tid可在任務(wù)配置表里面找到對應(yīng)的任務(wù)和描述;
status: 當(dāng)前任務(wù)的狀態(tài):
未解鎖【0】
已解鎖,待執(zhí)行【1】
進(jìn)行中【2】
已結(jié)束【3】
獎(jiǎng)勵(lì)未領(lǐng)取【4】
獎(jiǎng)勵(lì)已領(lǐng)取【5】
例如:
ID uid tid status
1 玩家A 10001 1
2 玩家B 10001 1
3 玩家C 20001 2
…
玩家任務(wù)表定義好后,任務(wù)系統(tǒng)監(jiān)聽與任務(wù)解鎖觸發(fā)相關(guān)的游戲事件,比如玩家升級了,升級的同時(shí)通過事件訂閱模塊拋出一個(gè)事件出來或舞,任務(wù)系統(tǒng)監(jiān)聽到這個(gè)事件后根據(jù)事件類型,玩家的游戲數(shù)據(jù)荆姆,以及策劃編輯的任務(wù)配置表看是否有新任務(wù)被觸發(fā)解鎖(根據(jù)解鎖規(guī)則表里面配置的判定),如果有映凳,就往任務(wù)表里面插入一條記錄胆筒,這樣該玩家解鎖了某個(gè)任務(wù)。當(dāng)玩家打開任務(wù)列表的時(shí)候诈豌,就從這個(gè)表里面檢索出來屬于這個(gè)玩家的所有正在進(jìn)行中的任務(wù)仆救。
任務(wù)進(jìn)行中與任務(wù)完成判定
玩家解鎖了任務(wù)以后,在任務(wù)表里面就有這個(gè)玩家所對應(yīng)的任務(wù)記錄了,狀態(tài)也改成了正在進(jìn)行中矫渔,當(dāng)玩家觸發(fā)一個(gè)游戲事件后拋出一個(gè)事件彤蔽,任務(wù)系統(tǒng)監(jiān)聽對任務(wù)判定有影響的事件。當(dāng)有這樣的事件拋出后庙洼,就去看下是哪個(gè)玩家觸發(fā)的顿痪,然后根據(jù)任務(wù)配置表中任務(wù)的完成判斷條件規(guī)則進(jìn)行判斷,如果條件成立,修改任務(wù)的狀態(tài)油够。
任務(wù)完成后的獎(jiǎng)勵(lì)生成
達(dá)到任務(wù)的判定條件后, 如果這個(gè)任務(wù)的類型是有獎(jiǎng)勵(lì)的蚁袭,這個(gè)時(shí)候根據(jù)任務(wù)類型的描述配置表的獎(jiǎng)勵(lì)規(guī)則來生成對應(yīng)的獎(jiǎng)勵(lì)。任務(wù)配置表里面有獎(jiǎng)勵(lì)的類型石咬,以及獎(jiǎng)勵(lì)的數(shù)據(jù)揩悄,程序根據(jù)獎(jiǎng)勵(lì)規(guī)則表中獎(jiǎng)勵(lì)的類型來解析對應(yīng)的獎(jiǎng)勵(lì)數(shù)據(jù)生成獎(jiǎng)勵(lì)。如果是直接給獎(jiǎng)勵(lì)鬼悠,根據(jù)任務(wù)的獎(jiǎng)勵(lì)內(nèi)容給玩家的數(shù)據(jù)加上對應(yīng)的獎(jiǎng)勵(lì)即可删性,并通知前端來播放獎(jiǎng)勵(lì)動畫亏娜。并標(biāo)記任務(wù)已完成。如果獎(jiǎng)勵(lì)需要玩家自己去領(lǐng)取蹬挺,可以將任務(wù)的狀態(tài)改成”獎(jiǎng)勵(lì)未領(lǐng)取”,這樣玩家拉去任務(wù)列表的時(shí)候维贺,就可以根據(jù)這個(gè)”獎(jiǎng)勵(lì)未領(lǐng)取”狀態(tài)來顯示還有獎(jiǎng)勵(lì)可以領(lǐng)取,客戶端顯示領(lǐng)取按鈕。
獎(jiǎng)勵(lì)的領(lǐng)取
獎(jiǎng)勵(lì)分為直接獎(jiǎng)勵(lì)與玩家主動領(lǐng)取的獎(jiǎng)勵(lì)巴帮,這個(gè)根據(jù)游戲的需求來就可以了幸缕,對于任務(wù)系統(tǒng)而言,如果是直接獎(jiǎng)勵(lì)晰韵,那么直接給玩家加上對應(yīng)的數(shù)據(jù)屬性就可以了发乔,比如獎(jiǎng)勵(lì)金幣,獎(jiǎng)勵(lì)寶石等雪猪,獎(jiǎng)勵(lì)的時(shí)候可以通知客戶端栏尚,這樣客戶端可以播放一個(gè)獎(jiǎng)勵(lì)動畫出來讓玩家知道自己獲得了獎(jiǎng)勵(lì),如果獎(jiǎng)勵(lì)需要玩家主動領(lǐng)取只恨,當(dāng)玩家拉取任務(wù)列表的時(shí)候译仗,可以根據(jù)任務(wù)的狀態(tài)”獎(jiǎng)勵(lì)未領(lǐng)取”,把沒有領(lǐng)取獎(jiǎng)勵(lì)的任務(wù)拉去下來官觅,并展示一個(gè)”領(lǐng)取”按鈕纵菌。當(dāng)玩家點(diǎn)擊領(lǐng)取的時(shí)候,服務(wù)器根據(jù)任務(wù)ID來獲取任務(wù)數(shù)據(jù)休涤,檢查任務(wù)的狀態(tài)是否為”獎(jiǎng)勵(lì)未領(lǐng)取”咱圆,如果是,再獲取任務(wù)的ID號功氨,根據(jù)任務(wù)的ID號獲取具體的獎(jiǎng)勵(lì)數(shù)值序苏,給對應(yīng)的數(shù)值加上對應(yīng)的獎(jiǎng)勵(lì),并修改任務(wù)的狀態(tài)未獎(jiǎng)勵(lì)已領(lǐng)取,并通知客戶端展示動畫捷凄。
客戶端的界面展示
任務(wù)系統(tǒng)的后臺邏輯設(shè)計(jì)好了以后忱详,剩下的就是任務(wù)系統(tǒng)的界面展示《宓樱客戶端登錄以后向服務(wù)器拉取這個(gè)玩家的所有任務(wù),一般狀態(tài)包含”已解鎖待執(zhí)行”,”正在進(jìn)行中”與”獎(jiǎng)勵(lì)未領(lǐng)取”的任務(wù)匈睁。拉取下來,客戶端顯示的時(shí)候還需要顯示任務(wù)的描述和獎(jiǎng)勵(lì)描述等桶错,所以需要把策劃的任務(wù)配置表從服務(wù)端拉取下來航唆,或者通過資源更新的方式來更新下來,這樣我們就能根據(jù)任務(wù)的tid來從描述表里面獲取任務(wù)描述與獎(jiǎng)勵(lì)描述,這樣客戶端就完整的展現(xiàn)出任務(wù)來了牛曹。當(dāng)有”領(lǐng)取獎(jiǎng)勵(lì)”佛点,”領(lǐng)取任務(wù)”按鈕的時(shí)候醇滥,通過向服務(wù)端發(fā)送對應(yīng)的請求來做對應(yīng)的處理黎比,服務(wù)端來更新任務(wù)的狀態(tài)即可超营。
以上就從6個(gè)維度詳細(xì)的描述了一個(gè)大型網(wǎng)絡(luò)游戲的任務(wù)系統(tǒng)應(yīng)該如何設(shè)計(jì),關(guān)注我可以學(xué)習(xí)到更多的大型網(wǎng)路游戲的架構(gòu)與設(shè)計(jì)相關(guān)知識分享阅虫。