中南民族大學(xué)計(jì)算機(jī)科學(xué)學(xué)院 黃 俊
基于U n i t y 3 d拼圖游戲的設(shè)計(jì)與實(shí)現(xiàn)
中南民族大學(xué)計(jì)算機(jī)科學(xué)學(xué)院 黃 俊
Unity3D是由Unity Technologies公司開(kāi)發(fā)的專業(yè)跨平臺(tái)游戲開(kāi)發(fā)的虛擬現(xiàn)實(shí)引擎,其打造了一個(gè)完美的夸平臺(tái)程序開(kāi)發(fā)生態(tài)鏈,用戶可以通過(guò)他輕松完成各種游戲創(chuàng)意和三維互動(dòng)開(kāi)發(fā),創(chuàng)作出精彩的游戲和虛擬仿真內(nèi)容。本文在介紹Unity 3D引擎的基礎(chǔ)上,以一款《拼圖游戲》為例,詳細(xì)講述了拼圖游戲中顯示碎片,打亂碎片,移動(dòng)控制,游戲結(jié)束檢測(cè)等C#腳本的編寫方法與技巧。
Unity3d;游戲開(kāi)發(fā);拼圖游戲;C#
Unity3D是一款國(guó)際領(lǐng)先的專業(yè)游戲引擎,其精簡(jiǎn)、直觀的工作流程,功能強(qiáng)大的工具集,使得游戲開(kāi)發(fā)周期大幅度縮短。Unity3d編輯器可以運(yùn)行在Windows、Mac OS X以及Linux平臺(tái)。其最主要的特點(diǎn)如下:一次開(kāi)發(fā)就可以部署到時(shí)下所有主流游戲平臺(tái),目前Unity能夠支持發(fā)布的平臺(tái)有23個(gè)之多。用戶無(wú)須二次開(kāi)發(fā)好移植,就可以輕松部署到相應(yīng)的平臺(tái),節(jié)省了大量的開(kāi)發(fā)時(shí)間和精力。在移動(dòng)互聯(lián)網(wǎng)大行其道的今天,Unity正吸引著越來(lái)越多人的關(guān)注。本案例以Unity 5.3為例開(kāi)發(fā)游戲。
在此次要完成的射擊類項(xiàng)目中,由于人力物力等各種客觀條件的限制,沒(méi)有特別明確的分工,包括策劃、美術(shù)和程序基本都是作者一個(gè)人完成的,特別需要指出的是,在美術(shù)和聲音資源方面借助了一部分網(wǎng)絡(luò)上的資源。具體制作流程圖如下所示圖2.1所示。
圖2.1 項(xiàng)目制流程
拼圖游戲策劃內(nèi)容是:游戲由以下兩個(gè)場(chǎng)景組成,第一個(gè)場(chǎng)景是初始界面設(shè)計(jì)兩個(gè)按鈕“開(kāi)始”和“退出”,單機(jī)“開(kāi)始”進(jìn)入第二游戲界面,在拼圖游戲界面上方有3個(gè)按鈕“3×3”,“4×4”, “5×5”可以設(shè)置游戲的難度,界面下方有一個(gè)關(guān)閉按鈕,單機(jī)鼠標(biāo)左鍵能夠移動(dòng)可移動(dòng)的拼圖碎片,當(dāng)拼圖被拼好時(shí)屏幕會(huì)顯示完成的時(shí)間。
設(shè)計(jì)拼圖游戲之前,初步設(shè)定了 600*960 的屏幕分辨率,這個(gè)分辨率基本上能和市面上主流的智能手機(jī)屏幕分辨率相匹配。在確定好了游戲的屏幕分辨率之后,游戲項(xiàng)目中所有的U圖片的尺寸都是圍繞這個(gè)標(biāo)準(zhǔn)來(lái)設(shè)計(jì)的。在制作這些 UI界面的時(shí)候,借助了目前最流行的平面設(shè)計(jì)軟件Photoshop。主要的制作效果會(huì)在后面展示,具體的制作流程就不在一一贅述。
2.3.1 主要UI界面展示
圖2.2所示為游戲開(kāi)始界面,圖2.3所示為3×3難度界面,圖2.4所示為4×4難度界面,圖2.5所示為5×5難度界面,圖2.6所示為拼圖完成界面。
圖2.2 開(kāi)始界面
圖2.3 3難度界面
圖2.4 4 難度界面
圖2.5 5難度界面
圖2.6 完成界面
2.3.2 游戲UI之間的邏輯關(guān)系
在游戲開(kāi)始界面(上圖2.2)點(diǎn)擊開(kāi)始進(jìn)入游戲界面(上圖2.3),在游戲界面選擇不同的難度進(jìn)入相對(duì)應(yīng)的界面(上圖2.3,2.4.2.5),如果拼圖完成則進(jìn)入游戲完成界面(上圖2.6),點(diǎn)擊關(guān)閉按鈕則退出游戲。
為了實(shí)現(xiàn)這款游戲,筆者共編寫了3個(gè)C#腳本程序,如下圖2.7所示,每個(gè)程序都有各自的分工,分別實(shí)現(xiàn)對(duì)應(yīng)的功能。GridData類是拼圖游戲中的格子類,Start MenuController類是游戲開(kāi)始界面的控制類,MainController類是游戲界面的控制類。
圖2.7 游戲中C#腳本
2.5.1 屏幕分辨率自適應(yīng)功能的實(shí)現(xiàn)
為了此款拼圖游戲項(xiàng)目能夠適應(yīng)不同分辨率的智能手機(jī),筆者采用了固定寬高比的方法,實(shí)現(xiàn)了屏幕的自適應(yīng)功能。在此只需要將Resolusion的腳本掛在到不同的Scene的Main Camera上面即可。Resolusion腳本的核心代碼是如下:main Camera.aspect = 0.625f。
2.5.2 拼圖碎片類
GridData.cs是拼圖碎片類,為了處理碎片類的點(diǎn)擊事件,所以這個(gè)類要繼承于IPointerClickHandler類。在碎片類中有三個(gè)字段分別是顯示數(shù)字的Text字段,初始位置ID的int字段,當(dāng)前所在位置ID的int字段。此外還有一個(gè)判斷碎片是否到達(dá)正確位置的屬性IsFinish,如果當(dāng)前位置ID和初始位置ID相等,則該碎片已經(jīng)到達(dá)正確的位置。GridData.cs類中的InitData(int id)方法是用來(lái)初始化碎片信息的。
2.5.3 拼圖碎片移動(dòng)功能的實(shí)現(xiàn)
在拼圖游戲界面中,如果被點(diǎn)擊拼圖在空格子周圍,則被點(diǎn)擊的拼圖會(huì)移動(dòng)到空的給子上,否則則不能移動(dòng)。
2.5.4 創(chuàng)建拼圖功能的實(shí)現(xiàn)
創(chuàng)建拼圖的功能是在MainController.cs類中CreateMap()方法實(shí)現(xiàn)的。確定創(chuàng)建的碎片個(gè)數(shù)MaxID之后,循環(huán)創(chuàng)建拼圖碎片預(yù)設(shè)體prefab,然后為創(chuàng)建的游戲?qū)ο筇砑覩irdData組件,并將創(chuàng)建的游戲?qū)ο蟠鎯?chǔ)到數(shù)組中以便管理。
2.5.5 打亂拼圖碎片順序功能的實(shí)現(xiàn)
在拼圖游戲中,打亂拼圖順序的功能是在MainController.cs類中Rank()方法實(shí)現(xiàn)的。其原理是讓空的格子和隨機(jī)和周圍的拼圖碎片隨機(jī)的交換位置,交換很多次之后拼圖的順序就會(huì)自然打亂,這里筆者的交換次數(shù)是行數(shù)乘以1000次。
游戲發(fā)布是研發(fā)游戲的最后一個(gè)環(huán)節(jié),前面筆者講到了游戲發(fā)布的相關(guān)知識(shí),在這里筆者把游戲項(xiàng)目發(fā)布成.apk格式的Android手機(jī)游戲。各種環(huán)境都配置好之后,就不需要做任何改動(dòng),點(diǎn)擊Build 就可以發(fā)布了。
目前,由于智能手機(jī)硬件的快速發(fā)展、智能手機(jī)的普及以及很多年輕人對(duì)于游戲的需求,手機(jī)游戲行業(yè)具有不可估量的市場(chǎng)潛力。Unity3D 引擎為快速開(kāi)發(fā)跨平臺(tái)的移動(dòng)游戲提供了完美的解決方案,未來(lái)幾年必定是移動(dòng)游戲和 Unity3D 引擎大行其道的時(shí)代。在對(duì) Unity3D 引擎研究的這段時(shí)間,筆者學(xué)到了很多有用的東西,繼續(xù)學(xué)習(xí)新的知識(shí),并希望能做出更多更有益的游戲,豐富人們的業(yè)余生活。
[1]吳志達(dá).一個(gè)基于 Unity3D 游戲引擎的體感游戲研究與實(shí)現(xiàn)[D].廣州:中山大學(xué),2012.
[2]陳俊峰.基于 Unity3D 的跨平臺(tái)手機(jī)網(wǎng)絡(luò)游戲的研究與實(shí)現(xiàn)[D].廣州:中山大學(xué),2013.