林煥材 歐陽(yáng)莉 張?jiān)蕿u 王耀凱 趙崇浩
摘要:任務(wù)、成就以及存檔讀檔等模塊,在游戲中總是不可缺少。對(duì)于游戲而言,這不僅僅是必要元素,同時(shí)也是游戲的加分項(xiàng)。該文通過(guò)以Unity3D為開(kāi)發(fā)平臺(tái),以開(kāi)發(fā)的《通通站》項(xiàng)目為實(shí)例,從程序開(kāi)發(fā)者的視角闡述了在游戲的程序設(shè)計(jì)中對(duì)于任務(wù)、成就、存儲(chǔ)系統(tǒng)的理解,使開(kāi)發(fā)者在制作游戲系統(tǒng)時(shí)有明確的設(shè)計(jì)思路,研究也表明開(kāi)發(fā)游戲時(shí),提前思考游戲系統(tǒng)間聯(lián)系對(duì)制作良好的系統(tǒng)是很重要的。
關(guān)鍵詞:Unity3D;存儲(chǔ)系統(tǒng);任務(wù)系統(tǒng);成就系統(tǒng)
在完整游戲制作中,幾乎不可避免地需要在游戲中加入任務(wù)系統(tǒng),成就系統(tǒng)和保存進(jìn)度的存儲(chǔ)系統(tǒng)??梢哉f(shuō)成就為玩家提供了奮斗目標(biāo),而任務(wù)為玩家提供了完成目標(biāo)的途徑,而這個(gè)過(guò)程就需要存儲(chǔ)系統(tǒng)進(jìn)行管理數(shù)據(jù)。
本文以Unity3D為開(kāi)發(fā)平臺(tái),以實(shí)踐的形式分析成就、任務(wù)、存儲(chǔ)系統(tǒng)的構(gòu)建和聯(lián)系。Unity3D是一款熱門(mén)的游戲引擎,據(jù)Unity官方發(fā)布,每個(gè)月有28億活躍的終端用戶接觸或使用Unity解決方案制作或運(yùn)營(yíng)內(nèi)容[1]。
實(shí)踐項(xiàng)目《通通站》是一款基于企業(yè)App開(kāi)發(fā)的嵌入式項(xiàng)目,該項(xiàng)目以地鐵文化為背景,以養(yǎng)成寵物(通通)為主要玩法,通過(guò)完成任務(wù)、游玩小游戲、社交、完成成就等方式獲取培養(yǎng)寵物的資源。
1分析系統(tǒng)
1.1任務(wù)系統(tǒng)
基于實(shí)踐項(xiàng)目對(duì)任務(wù)系統(tǒng)的基本屬性進(jìn)行分析,其中包括任務(wù)名、任務(wù)完成條件、任務(wù)進(jìn)度、任務(wù)獎(jiǎng)勵(lì)、任務(wù)開(kāi)放等級(jí)等屬性。其中任務(wù)名、任務(wù)進(jìn)度、是否領(lǐng)取過(guò)獎(jiǎng)勵(lì)等屬性,是任務(wù)系統(tǒng)與存儲(chǔ)系統(tǒng)中是最常交互的數(shù)據(jù)。在任務(wù)UI上,需要提前準(zhǔn)備Unity的UI顯示組件,包括獎(jiǎng)勵(lì)圖片(Image)和獎(jiǎng)勵(lì)個(gè)數(shù)(Text)、任務(wù)進(jìn)度(Text)、任務(wù)的名字和任務(wù)詳情(Text)。任務(wù)系統(tǒng)數(shù)據(jù)的更新,包括任務(wù)屬性的進(jìn)度、任務(wù)是否完成、是否領(lǐng)取獎(jiǎng)勵(lì)和任務(wù)UI的更新等數(shù)據(jù)。而這些數(shù)據(jù)的更新和管理需要一個(gè)完整的設(shè)計(jì)思路和運(yùn)行邏輯,良好的程序思路設(shè)計(jì)可以有效地提高程序的運(yùn)行效率。當(dāng)玩家進(jìn)入《通通站》任務(wù)界面時(shí)。簡(jiǎn)單的運(yùn)行邏輯如圖1:
1.2成就系統(tǒng)
成就系統(tǒng)與任務(wù)系統(tǒng)在程序思路設(shè)計(jì)是類(lèi)似的,在屬性方面幾乎有任務(wù)系統(tǒng)的全部屬性,在更新數(shù)據(jù)上邏輯和任務(wù)系統(tǒng)是一樣的,區(qū)別的設(shè)計(jì)主要在于UI排版、美術(shù)和交互上,在實(shí)踐項(xiàng)目中,成就的交互設(shè)計(jì)和任務(wù)相比,成就交互設(shè)計(jì)難度更大,其區(qū)別在于交互細(xì)節(jié),成就的UI設(shè)計(jì)是在任務(wù)系統(tǒng)UI的基礎(chǔ)上,增添了一個(gè)新的UI面板,而所有的任務(wù)是共用這個(gè)UI面板的,面板的數(shù)據(jù)包括任務(wù)名稱(chēng)、完成條件、獲取的獎(jiǎng)勵(lì)以及成就的具體信息。當(dāng)玩家點(diǎn)擊成就列表中某一個(gè)成就時(shí),會(huì)在原來(lái)的UI面板上添加新的交互UI,同時(shí)根據(jù)所點(diǎn)擊的成就對(duì)該共用UI面板進(jìn)行數(shù)據(jù)更新,UI上顯示的詳細(xì)的成就信息和獲得獎(jiǎng)勵(lì)的記錄,對(duì)玩家有一定的激勵(lì)作用,良好的成就系統(tǒng)能調(diào)動(dòng)玩家的積極性,激發(fā)玩家內(nèi)心的游戲動(dòng)機(jī)[2]。
1.3存儲(chǔ)系統(tǒng)
存儲(chǔ)系統(tǒng)的開(kāi)發(fā),是聯(lián)系多個(gè)系統(tǒng)、不僅有任務(wù)、成就等系統(tǒng)、背包的物品、也包括游戲玩家屬性等級(jí)、名字、經(jīng)驗(yàn)等。在《通通站》的項(xiàng)目中,保存游戲數(shù)據(jù)方式,選擇了以保存Json文件的形式。在存儲(chǔ)數(shù)據(jù)的結(jié)構(gòu)上,不同的系統(tǒng)和存儲(chǔ)系統(tǒng)交互的屬性是不同的,所以需要針對(duì)不同的系統(tǒng)構(gòu)建不同的數(shù)據(jù)結(jié)構(gòu)(類(lèi)),以方便保存和解析數(shù)據(jù)。在成就,任務(wù)系統(tǒng)與存儲(chǔ)系統(tǒng)交互,其實(shí)存在著一個(gè)臨行保存物品的系統(tǒng),就是背包系統(tǒng)。在完成任務(wù)后獲得獎(jiǎng)勵(lì),儲(chǔ)存在背包系統(tǒng)里,背包系統(tǒng)以一個(gè)C#的字典進(jìn)行存儲(chǔ)物品信息的,字典值類(lèi)型使用C#列表類(lèi)型,這樣的設(shè)計(jì)可以提高查詢的效率的同時(shí),可確保多個(gè)相同的物品可以保持獨(dú)立存儲(chǔ)數(shù)據(jù)。背包物品均由一個(gè)(程序)父類(lèi)派生出來(lái),在背包中可通過(guò)該基類(lèi)進(jìn)行管理。
1.4成就,任務(wù)和存儲(chǔ)系統(tǒng)的關(guān)系
對(duì)于存儲(chǔ)系統(tǒng)而言不僅要將數(shù)據(jù)轉(zhuǎn)化為Json文件,同時(shí)需要和其他系統(tǒng)構(gòu)建聯(lián)系起來(lái),以成就和任務(wù)系統(tǒng)為例,存儲(chǔ)系統(tǒng)只需存儲(chǔ)必要信息,所以在保存數(shù)據(jù)時(shí),需要存儲(chǔ)系統(tǒng)根據(jù)成就,任務(wù)的腳本數(shù)據(jù),對(duì)系統(tǒng)的屬性進(jìn)行區(qū)分,只留下必要信息,以實(shí)踐項(xiàng)目的任務(wù)系統(tǒng)的存儲(chǔ)數(shù)據(jù)為例:必要信息有任務(wù)ID,任務(wù)進(jìn)度,是否完成過(guò)任務(wù),任務(wù)是否領(lǐng)取過(guò)獎(jiǎng)勵(lì)等數(shù)據(jù)。
三個(gè)系統(tǒng)的聯(lián)系不僅僅是在數(shù)據(jù)的傳輸上,存儲(chǔ)系統(tǒng)也對(duì)其他兩個(gè)系統(tǒng)的數(shù)據(jù)進(jìn)一步管理,同時(shí)存儲(chǔ)的數(shù)據(jù),也需要任務(wù),成就系統(tǒng)為構(gòu)建保存的數(shù)據(jù)結(jié)構(gòu)提供參考。
2制作存儲(chǔ)系統(tǒng)的思考
2.1什么是Json
Json全稱(chēng)是(JavaScript Onject Notation),這是一種輕量級(jí)的數(shù)據(jù)交換格式。文件層次結(jié)構(gòu)比較清晰,具有可讀性,可在源文件中進(jìn)行修改,同時(shí)對(duì)于計(jì)算機(jī)保存文件和數(shù)據(jù)的解析都比較友好。Json文件是一款完全獨(dú)立于語(yǔ)言的文本格式,但由于使用了類(lèi)似于C語(yǔ)言家族的習(xí)慣,使Json成為了比較理想的數(shù)據(jù)交換語(yǔ)言[3]。Json文件的結(jié)構(gòu)和寫(xiě)法是以“{}”花括號(hào)對(duì)應(yīng)程序的對(duì)象?!癧]”方括號(hào)對(duì)應(yīng)數(shù)組,“""”雙引號(hào)對(duì)應(yīng)程序里的變量名和值(Key和Value)。其寫(xiě)法如圖2。
2.2 Json的優(yōu)缺點(diǎn)
用于存儲(chǔ)系統(tǒng)比較熱門(mén)的技術(shù)分別有數(shù)據(jù)二進(jìn)制序列化,XML和Json。其中對(duì)于電腦最友好的存儲(chǔ)方式是二進(jìn)制序列化,計(jì)算機(jī)對(duì)數(shù)據(jù)的處理最終是對(duì)二進(jìn)制序列化數(shù)據(jù)的處理,這意味著數(shù)據(jù)的可靠性,穩(wěn)定性和效率是最好,但相對(duì)的以二進(jìn)制序列化保存的文件是難以解讀,或修改的。
另一個(gè)選擇是XML,其優(yōu)點(diǎn)是格式統(tǒng)一,不同系統(tǒng)可共享數(shù)據(jù),系統(tǒng)的兼容性高,文件具備可讀性,并且可進(jìn)行修改。
但這二者相對(duì)Json文件,可讀性和可進(jìn)行修改有著不可逾越的差距,二進(jìn)制化難以解讀和修改,而XML由于需要考慮父節(jié)點(diǎn)和子節(jié)點(diǎn)的復(fù)雜關(guān)系。而Json很好的管理了這些數(shù)據(jù),Json和XML在保存相同數(shù)據(jù)的情況下,從文件數(shù)據(jù)的復(fù)雜度和內(nèi)存大小分析,Json文件數(shù)據(jù)結(jié)構(gòu)更清晰,存儲(chǔ)空間更小,有研究表明當(dāng)Json,XML傳輸相同的數(shù)據(jù),XML消耗的時(shí)間更長(zhǎng)[4]。這就意味著在傳輸速度和編寫(xiě)解析程序上,最優(yōu)先選擇的保存方式為Json文件,綜合評(píng)價(jià):在保存的數(shù)據(jù)需要進(jìn)一步操作時(shí),Json文件的保存方式是個(gè)很好的選擇。