摘 要:Unity是一個(gè)用于創(chuàng)建諸如三維視頻游戲、建筑可視化、實(shí)時(shí)三維動(dòng)畫等類型互動(dòng)內(nèi)容的綜合型創(chuàng)作工具。Unity是一個(gè)游戲開發(fā)生態(tài)系統(tǒng):強(qiáng)大的渲染引擎,完全集成一整套直觀工具和快速工作流程,可以創(chuàng)建互動(dòng)式3D、2D內(nèi)容;文章以一款翻轉(zhuǎn)匹配記憶游戲?yàn)槔?,從游戲的策劃?gòu)思設(shè)計(jì)和程序具體實(shí)現(xiàn)等進(jìn)行介紹。游戲開發(fā)人員可以基于此文章,利用Unity開發(fā)多平臺(tái)的游戲。
關(guān)鍵詞:Unity;C#;用戶圖形界面;翻轉(zhuǎn)匹配記憶游戲
中圖分類號(hào):TP311.52
對(duì)于獨(dú)立開發(fā)者和工作室,Unity做為大眾化開發(fā)系統(tǒng),掃除了創(chuàng)造獨(dú)特游戲的時(shí)間和成本上的障礙。使用Unity可以在創(chuàng)建在任意平臺(tái)上(Web Player,PC,MAC,Linux,iOS,Android等)吸引和愉悅玩家的游戲。Unity的游戲腳本為基于Mono的Mono腳本,一個(gè)基于.NET Framework的開源語言,因此程序員可用C#,JavaScript等加以編寫。C#是微軟推出的一種面向?qū)ο蟮母呒?jí)編程語言,具有適合快速上手開發(fā)的優(yōu)勢(shì)。在介紹游戲?qū)崿F(xiàn)也用C#代碼進(jìn)行補(bǔ)充說明。翻轉(zhuǎn)匹配記憶類型游戲是一種考驗(yàn)記憶力的游戲,這種游戲不僅適合小孩,也可以鍛煉成人的記憶力。本人以機(jī)器人修復(fù)游戲?yàn)槔榻B如果在Unity引擎和C#語言的幫助下,開發(fā)用Web Player發(fā)布的網(wǎng)絡(luò)游戲。
1 游戲設(shè)計(jì)
1.1 玩法介紹
玩家在背面向上(未知內(nèi)容)的網(wǎng)格卡片里,通過翻開查看的方式尋找匹配的兩張卡片,并且必須同時(shí)找出來。即玩家第一次翻轉(zhuǎn)A卡片,第二次必須翻轉(zhuǎn)與A卡片匹配的B卡片,如果翻轉(zhuǎn)的是C卡片(不與A卡片匹配),則兩張卡片再次翻轉(zhuǎn)回去,呈現(xiàn)背面向上(未知內(nèi)容)的形式。用機(jī)器人修復(fù)游戲說明,玩家修復(fù)機(jī)器人的意思是:玩家第一次翻開的是一種類型機(jī)器人的部分身體,下一次必須翻開的是這種類型機(jī)器人與之配對(duì)的另一部分身體,以此用來修復(fù)機(jī)器人。當(dāng)翻轉(zhuǎn)的卡片為配對(duì)卡片時(shí),兩張卡片從游戲區(qū)域移除,當(dāng)玩家移除掉所有卡片后,游戲勝利。玩家通過不停的翻轉(zhuǎn)卡片,在腦海里記憶卡片位置,從而快速找出配對(duì)卡片。
1.2 界面設(shè)計(jì)
1.2.1 游戲標(biāo)題
在標(biāo)題里需要有游戲名字,游戲基本背景說明,開始按鈕。在這個(gè)標(biāo)題里需要用圖片的藝術(shù)形式來展現(xiàn)整體游戲風(fēng)格,以此來吸引玩家。
1.2.2 游戲區(qū)界面
游戲區(qū)主要需要確定卡片的數(shù)量,考慮到以后的擴(kuò)展設(shè)計(jì)(卡片數(shù)量能方便的調(diào)整),所以需要用動(dòng)態(tài)加載卡片的方式進(jìn)行加載。除此之外,因?yàn)橛螒驑?biāo)題和游戲區(qū)界面是兩個(gè)不同的場(chǎng)景顯示,需要有雙向的通道,在標(biāo)題里有“開始按鈕”做為通向游戲區(qū)的通道,在游戲區(qū)里需要有返回標(biāo)題的按鈕作為通道。
1.3 游戲關(guān)鍵判斷邏輯
游戲的關(guān)鍵是消去配對(duì)的卡片。必須設(shè)定不讓玩家翻轉(zhuǎn)超過兩張卡片,當(dāng)玩家翻轉(zhuǎn)第二張卡片后,進(jìn)入判斷流程:如果卡片相匹配,則消去兩張卡片,如果不匹配,則翻轉(zhuǎn)回未知狀態(tài)。之后,繼續(xù)翻轉(zhuǎn)流程。
1.4 游戲性的探索
1.4.1 游戲聲音運(yùn)用
當(dāng)卡片翻轉(zhuǎn)成功后,需要有提示音反饋給玩家,以此來提示配對(duì)成功,增加游戲的體驗(yàn)。同時(shí)游戲進(jìn)行時(shí),增加了背景音樂來增強(qiáng)游戲性。
1.4.2 游戲時(shí)間限制
為了增加游戲緊張氣氛和給予玩家一定的刺激度,可以增加限定時(shí)間的設(shè)置,規(guī)定玩家必須在限定時(shí)間里完成全部配對(duì),當(dāng)增加時(shí)間限定后,可以充分起到鍛煉記憶力的目的。游戲里增加一個(gè)逐漸減少的時(shí)間條用以標(biāo)識(shí)時(shí)間的流逝。
1.4.3 難度設(shè)置
為了讓游戲適合不同能力的玩家,引入難度機(jī)制。難度機(jī)制可以讓初級(jí)玩家和高級(jí)玩家體驗(yàn)到游戲的樂趣。
2 游戲主要功能實(shí)現(xiàn)及運(yùn)行效果
2.1 卡片類實(shí)現(xiàn)
為了實(shí)現(xiàn)游戲邏輯,定義了Card類。isFaceUp表明卡片是否為翻開狀態(tài),游戲邏輯檢測(cè)到這個(gè)狀態(tài)時(shí),會(huì)把卡片顯示為翻開的狀態(tài)。isMatched表明卡片是否已經(jīng)匹配成功,游戲邏輯檢測(cè)到此狀態(tài)時(shí),在卡片位置顯示一塊白色區(qū)域,并且不能再被點(diǎn)擊,表明卡片已被移走。img變量記錄Assets里的資源文件的名字,用來指明顯示圖片。
設(shè)置相同的id變量在兩張匹配的卡片里,為了匹配邏輯使用。
class Card:System.Object
{public bool isFaceUp=1;//檢查是否為翻開狀態(tài)
public bool isMatched=1;//檢查是否匹配成功
public string img;//定義卡片顯示的圖片
public int id;//唯一標(biāo)示卡片,為匹配卡片時(shí)使用}
2.2 隨機(jī)性放置卡片
游戲一般在每次運(yùn)行時(shí),卡片區(qū)的卡片會(huì)有不同的順序顯示,需要實(shí)現(xiàn)隨機(jī)功能來實(shí)現(xiàn)。在BuildDeck()函數(shù)里把需要顯示的卡片數(shù)加載到Deck(卡片組)里,之后用Random.Range實(shí)現(xiàn)按照隨機(jī)的順序從Deck選出卡片。
BuildDeck();
for(int i=0;i for(int j=0;j int someNum= Random.Range(0,aCards.Count); aGrid[i,j]=aCards[someNum];aCards.RemoveAt(someNum);}} 2.3 用戶圖形界面 用Unity自帶GUI(用戶圖形界面)動(dòng)態(tài)生成多個(gè)按鈕形成卡片,行數(shù)(rows)和列數(shù)(cols)需要提前設(shè)定。代碼位于OnGUI函數(shù)(程序每運(yùn)行一幀會(huì)執(zhí)行)中: for(int i=0;i for(int j=0;j Texture t= Resources.Load(strShow) as Texture; if(GUILayout.Button(t,GUILayout.Width(cardW))) {//按鈕按下后處理邏輯}}} 2.4 游戲關(guān)鍵判斷邏輯 游戲關(guān)鍵邏輯是限制每次只能點(diǎn)擊2張不同的卡片,之后需要進(jìn)行判斷,用一個(gè)容器來獲得這2張卡片,當(dāng)下次再需要加入時(shí),進(jìn)行判斷,拒絕加入。 //判斷如果是選擇的同一張圖.不加入aCardsFlipped. If (aCardsFlipped.IndexOf(each)<0){ aCardsFlipped.Add(each);} if (aCardsFlipped.Count==2){ //如果有2個(gè)對(duì)象加入.不能再按鍵. playerCanClick=1;} 2.5 選擇Web Play發(fā)布 當(dāng)游戲調(diào)試通過后,在File菜單里選擇Build Setting進(jìn)行設(shè)定,選擇Web Player發(fā)布,當(dāng)Unity圖標(biāo)在Web Player右側(cè)時(shí)代表選中。游戲運(yùn)行效果截圖如下: 圖1 Web Player發(fā)布 圖2 游戲運(yùn)行畫面 3 結(jié)束語 該機(jī)器人修復(fù)游戲可以在任何安裝Unity web player插件的網(wǎng)絡(luò)瀏覽器里運(yùn)行,因此具有跨平臺(tái)的先天優(yōu)勢(shì)。除能實(shí)現(xiàn)基本的翻轉(zhuǎn)游戲功能以外,還能實(shí)現(xiàn)限時(shí),難度設(shè)置,聲音提示等擴(kuò)展功能。經(jīng)過實(shí)驗(yàn)測(cè)試,界面美觀,結(jié)果正確,各項(xiàng)功能達(dá)到游戲要求。該實(shí)現(xiàn)方法可以對(duì)其他基于Unity開發(fā)的Web游戲起到拋磚引玉的作用。作者已經(jīng)發(fā)布游戲如下:讀者可以進(jìn)行參考。 http://www.kongregate.com/games/Moomlight/training-game 參考文獻(xiàn): [1][美]ANDRE LAMOTHE.Windows游戲編程大師技巧[M].北京:中國(guó)電力出版社,2001. [2][美]Ryan Henson Creighton.Unity 3D Game Development by Example Beginner's Guide[M].Packt Publishing Limited,2011. [3][美]Will Goldstome.Unity 3.x游戲開發(fā)經(jīng)典教程[M].北京:科學(xué)出版社,2013. [4]優(yōu)美締軟件(上海)有限公司.Unity4.X從入門到精通[M].北京:中國(guó)鐵道出版社,2013. 作者簡(jiǎn)介:俞亮(1984-),男,四川綿陽人,計(jì)算機(jī)科學(xué)與技術(shù)專業(yè),助教,碩士研究生,研究方向:數(shù)字娛樂技術(shù)、計(jì)算機(jī)動(dòng)畫、人工智能;俞文心,男,四川綿陽人,博士后研究員,博士研究生,研究方向:3D圖像合成、立體視差估算、兼容快速編碼、H.264編解碼。 作者單位:西南科技大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,四川綿陽 621010;早稻田大學(xué) 情報(bào)生產(chǎn)系統(tǒng)研究院,日本福岡 807-0815