姜帥彤 付夢(mèng)遠(yuǎn)
(長(zhǎng)春建筑學(xué)院,吉林 長(zhǎng)春 130000)
如今,手機(jī)的硬件功能正在不斷強(qiáng)化。國(guó)外的手游行業(yè)正處于黃金發(fā)展階段,特別是其他發(fā)達(dá)國(guó)家,由于其手游,手游不僅是人們?nèi)粘蕵?lè)的一種方式,更是一種文化產(chǎn)業(yè)。推動(dòng)著這些國(guó)家經(jīng)濟(jì)的發(fā)展,而我國(guó)相對(duì)于其他國(guó)家手游的起步較晚,但我國(guó)網(wǎng)絡(luò)的快速普及也為手游的發(fā)展提供了一個(gè)良好的平臺(tái)。在國(guó)家有關(guān)政策和資金的大力支持下,我高校也相繼開(kāi)設(shè)了許多相關(guān)行業(yè)來(lái)培養(yǎng)優(yōu)秀人才,在不久的將來(lái),手游也將成為我國(guó)的支柱性產(chǎn)業(yè)。
目前,手游的開(kāi)發(fā)主流引擎有三種:unity3D、UDK以及COCOS2d。其中,unity3D常用于開(kāi)發(fā)三維立體的空間和人物事物,被用于模擬真實(shí)生活中的各種場(chǎng)景,最大的特點(diǎn)就是能夠跨平臺(tái),各種主流平臺(tái),包括windows,IOS都能夠適用。UDK這是虛擬引擎的開(kāi)發(fā)工具包,能夠增強(qiáng)手機(jī)的畫(huà)面感,COCOS2d則能夠?qū)崿F(xiàn)交互和資源共享。這三大主流引擎各有各的優(yōu)勢(shì),unity3D由于其強(qiáng)大的跨平臺(tái)性和快速開(kāi)發(fā)游戲的特點(diǎn),受到了廣大手游開(kāi)發(fā)者的喜愛(ài)。三大主流開(kāi)發(fā)引擎中,unity3D開(kāi)發(fā)游戲的速度最快,并且C#,javaScript等腳本語(yǔ)言都能夠很好的適用,并且美化三維畫(huà)面的所有文件格式都能兼容。除此之外,unity3D還擁有一個(gè)強(qiáng)大的后臺(tái),在unity3D的資源商可以下載開(kāi)發(fā)軟件所用到的所有模型,貼紙,腳本及插件等。
一般來(lái)說(shuō),根據(jù)手游的運(yùn)行環(huán)境,手游可以分為單機(jī)游戲和網(wǎng)絡(luò)游戲;根據(jù)用戶體驗(yàn)可以分為:角色扮演類游戲、益智游戲和休閑游戲。與外國(guó)玩家不同,外國(guó)玩家更喜歡角色扮演游戲,而中國(guó)玩家更喜歡休閑游戲。《決戰(zhàn)大洋》是一款角色扮演類的網(wǎng)絡(luò)游戲。該款游戲?yàn)樯虡I(yè)開(kāi)發(fā)項(xiàng)目,因此為了保證能夠在進(jìn)行公測(cè)后可玩性和畫(huà)面效果能夠吸引到更多的玩家,提高下載量,所以在項(xiàng)目建成之初,對(duì)該游戲的要求就是畫(huà)面精美,可玩性高,用戶體驗(yàn)感好,除此之外,還要求對(duì)手機(jī)客戶端的大小進(jìn)行控制,這樣才能夠保證玩家在聯(lián)網(wǎng)時(shí)與服務(wù)器端能夠進(jìn)行實(shí)時(shí)高效的通信[1]。
1)游戲說(shuō)明?!稕Q戰(zhàn)大洋》是一款養(yǎng)成類游戲,同時(shí)又具有策略游戲的特征。該游戲是用第三人稱的視覺(jué)來(lái)進(jìn)行的。游戲場(chǎng)景根據(jù)實(shí)際場(chǎng)景縮小1:1。游戲環(huán)境只兼容android和iOS操作系統(tǒng),主要針對(duì)中高級(jí)硬件的智能手機(jī),需要聯(lián)網(wǎng)進(jìn)行游戲。由于該款游戲?qū)儆谏虡I(yè)開(kāi)發(fā)項(xiàng)目,因此還涉及盈利的問(wèn)題。盈利的主要來(lái)源是軟件市場(chǎng)的下載收益以及游戲玩家的投入。而由于國(guó)內(nèi)軟件應(yīng)用市場(chǎng)大多都是免費(fèi)下載,因此該款游戲也會(huì)考慮進(jìn)行海外推廣。所以在進(jìn)行開(kāi)發(fā)時(shí),除了要考慮到國(guó)內(nèi)玩家的游戲習(xí)慣和特點(diǎn)外,還要考慮海外文件,人均付費(fèi)力較高,道具的購(gòu)買(mǎi)里也遠(yuǎn)大于國(guó)內(nèi)玩家。此外還將推行出多國(guó)語(yǔ)言版本,以方便海內(nèi)外玩家。
2)通信協(xié)議的實(shí)現(xiàn)。通信協(xié)議的發(fā)展首先需要考慮安全性和高效性。因此,最重要的是數(shù)據(jù)包的結(jié)構(gòu)和數(shù)據(jù)的編碼方式?!稕Q戰(zhàn)大洋》這款游戲采用的通信協(xié)議是AGP協(xié)議,它是一種基于交互包的協(xié)議,數(shù)據(jù)通過(guò)TCP/ip協(xié)議傳輸。每個(gè)包都包含請(qǐng)求標(biāo)識(shí),表示包的用途。通信協(xié)議的編解碼方式采用緩沖協(xié)議。因此,需要根據(jù)基本數(shù)據(jù)類型定義項(xiàng)目實(shí)施過(guò)程。首先要做的是將數(shù)據(jù)以u(píng)tf-8的編碼方式寫(xiě)入定義文件,以后綴為.prooto的數(shù)據(jù)格式進(jìn)行存儲(chǔ)。然后,將這些數(shù)據(jù)的格式將轉(zhuǎn)換為以.cs后綴的訪問(wèn)類文件,將該訪問(wèn)編譯成一個(gè)動(dòng)態(tài)連接的數(shù)據(jù)庫(kù),方便游戲運(yùn)行時(shí)的調(diào)整[2]。
3)任務(wù)系統(tǒng)的實(shí)現(xiàn)。在實(shí)現(xiàn)任務(wù)系統(tǒng)時(shí),首先需要生成一個(gè)靜態(tài)場(chǎng)景,完成動(dòng)態(tài)場(chǎng)景的代碼編寫(xiě),然后完成控制邏輯代碼的編寫(xiě),從而完成功能系統(tǒng)的開(kāi)發(fā)。在游戲的日常工作部分,由三部分組成,將領(lǐng)的頭像、背景圖像以及提示文字,場(chǎng)景部分可以利用EZGUI插件的控件來(lái)實(shí)現(xiàn)。
游戲中的背景圖案建立了一個(gè)矩形面板,因此可以用UIButton實(shí)現(xiàn)。而將領(lǐng)的頭像是在游戲運(yùn)行時(shí)根據(jù)玩家的偏好生成特定數(shù)據(jù)的。由于玩家不同,將領(lǐng)的產(chǎn)生也不同。一個(gè)玩家可以產(chǎn)生幾個(gè)不同的將領(lǐng),所以,需要通過(guò)PackedSprite控件來(lái)實(shí)現(xiàn)??丶?shí)際上是一個(gè)幀動(dòng)畫(huà)控件,可以同時(shí)設(shè)置多個(gè)動(dòng)畫(huà),每個(gè)動(dòng)畫(huà)段可以包含多個(gè)幀。因此,只要將每個(gè)將領(lǐng)頭像制作成長(zhǎng)度為一的動(dòng)畫(huà),然后將所有幀動(dòng)畫(huà)放在同一個(gè)控件中就足夠了。每一幀都以將領(lǐng)的id命名的,因此很容易調(diào)用。
游戲中的提示文本由spriteText控件實(shí)現(xiàn),它相當(dāng)于一個(gè)可以移動(dòng)和縮放的文本框,該控件定義了各種屬性,如文本對(duì)齊、字體大小、字體樣式和顏色。
4)背包系統(tǒng)的實(shí)現(xiàn)。背包系統(tǒng)的實(shí)現(xiàn)首先需要生成一個(gè)基本的靜態(tài)場(chǎng)景,然后對(duì)動(dòng)態(tài)場(chǎng)景進(jìn)行編碼,最后編寫(xiě)一個(gè)能夠?qū)崿F(xiàn)背包系統(tǒng)的控制邏輯代碼。背包系統(tǒng)場(chǎng)景界面由背景圖像、功能按鈕、提示文本、項(xiàng)目圖標(biāo)和滑塊五部分組成,其中該場(chǎng)景中的滑動(dòng)條部分要設(shè)置為隱藏,結(jié)合使用EZGUI插件,可以實(shí)現(xiàn)界面場(chǎng)景。場(chǎng)景的底層的界面,可以用UIButton實(shí)現(xiàn)。首先,構(gòu)建一個(gè)空白對(duì)象,然后連接腳本,為UIButton賦予一個(gè)制作好的界面圖像,指定一個(gè)材質(zhì),然后生成貼圖。需要注意的是,在指定文本時(shí)最好創(chuàng)建一個(gè)單獨(dú)的材質(zhì)[3]。場(chǎng)景中的多個(gè)功能按鈕中,除了背包按鈕和艦船按鈕使用使用UIRadioButton控件外,其他按鈕都都可以使用UIButton控件來(lái)實(shí)現(xiàn)。
5)地圖系統(tǒng)的實(shí)現(xiàn)。在背包系統(tǒng)中,邏輯處理部分主要是GIBag類,而實(shí)際上需要調(diào)用其他類來(lái)共同實(shí)現(xiàn)這個(gè)功能。該類由若干部分邏輯函數(shù)組成,包括游戲場(chǎng)景的邏輯、玩家數(shù)據(jù)的邏輯、操作響應(yīng)的邏輯和數(shù)據(jù)通信的邏輯等。GIBag類功能的實(shí)現(xiàn)調(diào)用了幾個(gè)種類和接口,并與進(jìn)行了數(shù)據(jù)通信。檢驗(yàn)校對(duì)在類的實(shí)現(xiàn)過(guò)程中也非常重要。如果出現(xiàn)空值,游戲在運(yùn)行過(guò)程中就會(huì)崩潰退出,如果場(chǎng)景搭建或重復(fù)創(chuàng)建的界面空間,也會(huì)極大地消耗手機(jī)的硬件資源,造成游戲卡頓的現(xiàn)象,甚至造成手機(jī)死機(jī)。另外,在背包系統(tǒng)的生成中,系統(tǒng)會(huì)生成將領(lǐng)背包、艦船背包和臨時(shí)背包,而在玩家的場(chǎng)景現(xiàn)實(shí)中,臨時(shí)背包是不可見(jiàn)的,它的作用是暫時(shí)放置玩家在游戲中撿到的物品,或是將玩家正在使用和出售的物品進(jìn)行存儲(chǔ),即背包系統(tǒng)的數(shù)據(jù)緩存結(jié)構(gòu),這樣既可以方便背包的邏輯處理,又可以方便背包場(chǎng)景界面的呈現(xiàn)。
綜上所述,基于unity 3D的手機(jī)游戲開(kāi)發(fā)和功能實(shí)現(xiàn)相對(duì)于大型游戲的開(kāi)發(fā)雖然快速,但仍是一項(xiàng)漫長(zhǎng)又復(fù)雜的過(guò)程。在游戲項(xiàng)目的開(kāi)發(fā)當(dāng)中,必然會(huì)遇到許多難題。對(duì)于代碼框架結(jié)構(gòu)的設(shè)計(jì)和整個(gè)功能系統(tǒng)開(kāi)發(fā)的思路與控制都是非常困難的,需要廣大編程人員付出時(shí)間與心血。盡管,unity 3D并不能夠滿足大型游戲開(kāi)發(fā)的專業(yè)性和定制型,但隨著其軟件版本的不斷更新,這款游戲開(kāi)發(fā)引擎將更加專業(yè),也會(huì)滿足越來(lái)越多的需求。