基于Unity3D的五虎棋游戲設(shè)計(jì)與實(shí)現(xiàn)_第1頁
基于Unity3D的五虎棋游戲設(shè)計(jì)與實(shí)現(xiàn)_第2頁
基于Unity3D的五虎棋游戲設(shè)計(jì)與實(shí)現(xiàn)_第3頁
基于Unity3D的五虎棋游戲設(shè)計(jì)與實(shí)現(xiàn)_第4頁
基于Unity3D的五虎棋游戲設(shè)計(jì)與實(shí)現(xiàn)_第5頁
已閱讀5頁,還剩43頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

基于Unity3D的五虎棋游戲設(shè)計(jì)與實(shí)現(xiàn)IV前言近年來,隨著科技的飛速發(fā)展,人們在人機(jī)交互技術(shù)、虛擬現(xiàn)實(shí)技術(shù)等領(lǐng)域也得到了極大的發(fā)展,電子游戲也隨之不斷的發(fā)展。以及智能移動(dòng)設(shè)備與無線網(wǎng)絡(luò)的普及,移動(dòng)平臺(tái)游戲成為了中國的新興熱門游戲行業(yè),各種手機(jī)游戲?qū)映霾桓F,各種稀奇古怪的游戲玩法也隨之出現(xiàn),比如模仿PC平臺(tái)《絕地求生》的各種“吃雞”類手游、各種“自走棋”手游。本次畢業(yè)設(shè)計(jì)靈感源自本人童年時(shí)期與玩伴們一起玩的一種棋類游戲,想通過Unity3D把“它”實(shí)現(xiàn),重現(xiàn)童年的歡樂時(shí)光。剛開始做的時(shí)候有一些異想天開,對如何制止一款游戲只有一些模糊的概念,但是隨著不斷的學(xué)習(xí)與積累,明白了制作一款游戲不是那么容易就能夠做出來的,需要考慮的因素與需要實(shí)現(xiàn)的東西其實(shí)很復(fù)雜,只能慢慢學(xué)習(xí)理論知識(shí)通過實(shí)踐來驗(yàn)證理論知識(shí),然后把想要的東西通過代碼表達(dá)出來,還有就是五虎棋游戲構(gòu)成最重要的部分就是游戲規(guī)則的實(shí)現(xiàn),所以只要熟悉了腳本的編寫就可以實(shí)現(xiàn)這最為重要的構(gòu)成部分,剩下一些小問題也就迎刃而解了。下面將講述項(xiàng)目的背景以及項(xiàng)目使用的Unity3D游戲引擎,闡明五虎棋的游戲總體的策劃方案、游戲UI與游戲的具體設(shè)計(jì)和實(shí)現(xiàn)。1項(xiàng)目概述及可行性這款五虎棋游戲是一款基于Unity3D游戲引擎的棋類手機(jī)游戲,決定通過Unity3D來制作這款游戲的時(shí)候也只是對Unity3D游戲引擎有一個(gè)簡單的了解而已,由于水平有限,期間一邊學(xué)習(xí)一邊制作,所以本項(xiàng)目的游戲界面會(huì)比較簡潔,但是會(huì)盡力完善這款棋類游戲。1.1項(xiàng)目背景最開始的手機(jī)游戲出現(xiàn)在1997年,是諾基亞手機(jī)推出的諾基亞6110內(nèi)置的貪吃蛇游戲,以那時(shí)候諾基亞手機(jī)的銷量,讓《貪吃蛇》這款游戲迅速的走紅,所以這款游戲就成為了手機(jī)游戲歷史上最為具有影響力的作品之一,之后手機(jī)游戲就開始遍及在大眾層面當(dāng)中。而隨著科技的發(fā)展,彩屏手機(jī)也隨之出現(xiàn),出現(xiàn)了具備彩色圖像的手游,這也使得手機(jī)游戲迎來新一輪的迭代更新,一方面是彩色屏幕對于游戲畫面的呈現(xiàn)有著質(zhì)的飛躍,色彩與內(nèi)容的豐富,讓手機(jī)可以呈現(xiàn)出一些比較復(fù)雜的內(nèi)容了,當(dāng)然這也有手機(jī)性能提升帶來的因素,這一時(shí)期的手機(jī)游戲大多以JAVA語言編寫,游戲主要特點(diǎn)就是畫面比較簡潔、操作也相對簡單,用戶的體驗(yàn)也不是特別好。隨著智能手機(jī)時(shí)代的到來,才出現(xiàn)了我們所真正熟悉的手機(jī)游戲。智能手機(jī)的大尺寸屏幕與傳統(tǒng)手機(jī)相比也是一大特點(diǎn),傳統(tǒng)的手機(jī)游戲局只有手機(jī)按鍵,但是智能手機(jī)出現(xiàn)后,打破了這種局限于按鍵的操作方式,除了可以觸屏進(jìn)行操作,還可以利用手機(jī)自帶的陀螺儀、感應(yīng)聲音等方式來實(shí)現(xiàn)對游戲的操控。當(dāng)然在智能機(jī)初期的手機(jī)游戲,依舊是以比較簡單的游戲操控方式在進(jìn)行著的,比如《地鐵跑酷》、《越野摩托》、《滑雪大冒險(xiǎn)》、《憤怒的小鳥》等等經(jīng)典手機(jī)游戲均是如此。這些經(jīng)典手機(jī)游戲即使在現(xiàn)在也依然有很多人在玩,但是我們必須承認(rèn)這些游戲方式比較單一,畫面上也沒有那么完美缺少3D效果,還缺少關(guān)鍵的社交屬性,造成這些問題的關(guān)鍵,除了有手機(jī)游戲處于初級(jí)開發(fā)階段,還與那時(shí)候手機(jī)的性能所限有著很大的關(guān)系。近年來,隨著智能手機(jī)性能的不斷提高與普及,以及國內(nèi)的4G移動(dòng)通信網(wǎng)絡(luò)的覆蓋,手機(jī)游戲也出現(xiàn)了質(zhì)的飛躍,使得移動(dòng)手機(jī)游戲平臺(tái)成為目前最熱門的游戲開發(fā)平臺(tái),越來越多的國內(nèi)游戲企業(yè)把重心轉(zhuǎn)移到手機(jī)游戲上。在最新出爐的《2018年中國游戲產(chǎn)業(yè)報(bào)告》中顯示2018年中國游戲市場的實(shí)際銷售收入達(dá)2144.4億元,同比增長5.3%,2018年中國游戲市場實(shí)際的銷售收入占全球游戲市場比例約為23.6%。在其中,移動(dòng)游戲市場實(shí)際的銷售收入1339.6億元,同比份額繼續(xù)增加,占比為62.5%;客戶端游戲市場實(shí)際銷售收入619.6億元,同比份額減少,占比為28.9%;網(wǎng)頁游戲市場實(shí)際銷售收入126.5億元,同步份額大幅減少,占比為5.9%;家庭游戲機(jī)游戲市場實(shí)際銷售收入10.5億元,占比為0.5%。2018年中國移動(dòng)游戲用戶為6.05億人[1],這說明移動(dòng)游戲市場正在以爆發(fā)式的形勢增長。文化創(chuàng)意產(chǎn)業(yè)中涵蓋了游戲產(chǎn)業(yè),創(chuàng)意是知識(shí)經(jīng)濟(jì)中的核心內(nèi)容,更是其主要表現(xiàn)形式,沒有創(chuàng)意就沒有新經(jīng)濟(jì)。游戲是文藝和商品生產(chǎn)的結(jié)合品,游戲產(chǎn)業(yè)的發(fā)展是中國經(jīng)濟(jì)發(fā)展不可或缺的一部分,作為新興產(chǎn)業(yè),在體現(xiàn)出時(shí)代特色發(fā)展的今天,也具有極大的市場。與傳統(tǒng)的客戶端游戲相比,手機(jī)游戲操作簡練、內(nèi)容簡略風(fēng)趣,不局限于空間,便于攜帶,適宜碎片化時(shí)間,因此被不同的人群所喜歡。其中有工作繁忙缺少時(shí)間的上班族,空閑時(shí)間多的學(xué)生黨,還有以傳統(tǒng)棋牌為娛樂的中老年群眾。國內(nèi)龐大的手機(jī)擁有量,也使得手機(jī)游戲用戶誕生出的大量需求成為中國移動(dòng)游戲市場爆發(fā)的原因。手機(jī)游戲平臺(tái)主要有Android與IOS這兩大主流操作系統(tǒng)。當(dāng)前手機(jī)游戲主要有角色扮演類(RPG)、多人在線戰(zhàn)術(shù)競技類(MOBA)、動(dòng)作格斗類、射擊類、戰(zhàn)爭策略類、體育競速類、休閑益智類、模擬經(jīng)營類等。手機(jī)游戲從渲染的效果來分主要有2D和3D游戲,隨著手機(jī)性能的提高與普及,手機(jī)游戲逐漸向中重度發(fā)展,3D手機(jī)游戲大熱,出現(xiàn)了大批3D精品游戲,諸如《楚留香》、《崩壞3》、《和平精英》、《戰(zhàn)爭藝術(shù):赤潮》等產(chǎn)品。目前Unity引擎開發(fā)的手游占了全球3D手游60%的市場份額,在中國3D手游市場占比更是高達(dá)75%。當(dāng)然3D游戲也存在著不足,就是渲染所造成的功耗太大對手機(jī)硬件要求比較高,但是隨著科技的發(fā)展,未來手機(jī)硬件設(shè)備的性能還會(huì)繼續(xù)提升,將會(huì)彌補(bǔ)不足,3D手機(jī)游戲的發(fā)展會(huì)越來越好。1.2項(xiàng)目簡介本次畢業(yè)設(shè)計(jì)決定使用Unity3D游戲引擎制作一款棋類游戲。區(qū)別于傳統(tǒng)的棋類游戲,將下棋與走棋結(jié)合起來,做一款上手簡單、有趣味的棋類游戲。游戲的立項(xiàng)參考童年時(shí)期的游戲以及網(wǎng)上的資料,本游戲可以進(jìn)行雙人對戰(zhàn)。五虎棋對局分為兩個(gè)階段:布子階段、走子階段。下子階段控制形式削弱對方的實(shí)力、限制對方的勢力;走子階段消滅對方的殘兵敗將,擊敗對方。1.3研究現(xiàn)狀智能手機(jī)的快速普及,與4G網(wǎng)絡(luò)的覆蓋,移動(dòng)互聯(lián)網(wǎng)的相關(guān)業(yè)務(wù),已經(jīng)成為國內(nèi)手機(jī)游戲各大廠商關(guān)注的焦點(diǎn),從整體行業(yè)上來看,手機(jī)游戲產(chǎn)業(yè)正處于高速發(fā)展時(shí)期,在電信運(yùn)營商和游戲開發(fā)商的聯(lián)合推動(dòng)下,中國的手機(jī)游戲行業(yè)更是如虎添翼。隨著中國與臺(tái)灣、日本、新加坡、韓國、等國家和地區(qū)在移動(dòng)通信業(yè)務(wù)上深入合作,中國乃至亞洲地區(qū)慢慢發(fā)展成為全球范圍內(nèi)最具潛力也是最大的移動(dòng)互聯(lián)網(wǎng)市場?,F(xiàn)在手機(jī)游戲?qū)嶋H銷售收入已經(jīng)遠(yuǎn)超客戶端游戲的銷售收入。由于國內(nèi)游戲技術(shù)起步較晚,技術(shù)方面與外國相比還是有不小的差距,不管是設(shè)計(jì)理念還是開發(fā)制作,擁有自主研發(fā)的游戲引擎只有屈指可數(shù)的大公司比如騰訊和網(wǎng)易,其他游戲公司和開發(fā)者還在使用國外大型游戲公司開發(fā)的游戲引擎,比如Unity3D、虛幻4、寒霜、起源、銀河等。比如知名的《爐石傳說》、《神廟逃亡》、《王者榮耀》等游戲就是使用Unity3D引擎開發(fā)的手機(jī)游戲。隨著智能手機(jī)性能的提升,也產(chǎn)生了大量應(yīng)用的需求。目前手機(jī)游戲平臺(tái)主要有Android和IOS這兩大操作系統(tǒng),由于WindowsPhone占有量實(shí)在太少,所以需求很低。然而在開發(fā)手機(jī)游戲的過程中,游戲的跨平臺(tái)移植也會(huì)帶來大量的問題,比如開發(fā)語言的不同以及需要移植的代價(jià)太高等等不便,但是由國外UnityTechnologies開發(fā)的一款游戲引擎則很好的排除了跨平臺(tái)開發(fā)的這一難題,這款游戲引擎就是Unity3D游戲引擎,對Unity3D的使用國內(nèi)還處于初級(jí)階段,所以需要多加研究,為開發(fā)自主游戲引擎做準(zhǔn)備。與此同時(shí)國家也在積極的扶持中國的游戲產(chǎn)業(yè),相信在不久的未來我們國家自己的手機(jī)游戲也會(huì)越做越好,為我們帶來快樂。1.4研究意義手機(jī)游戲行業(yè)的發(fā)展是不可阻擋的,手機(jī)游戲已經(jīng)成為人們線上娛樂生活不可或缺的載體而存在,這個(gè)新興的游戲產(chǎn)業(yè)已經(jīng)帶動(dòng)了信息業(yè)新的形勢發(fā)展,日益顯示出巨大的市場潛力。在2018年第18屆雅加達(dá)亞運(yùn)會(huì)電子體育項(xiàng)目名單中,不少大家熟悉的電競游戲入選,雅加達(dá)亞運(yùn)會(huì)電競項(xiàng)目名單:《英雄聯(lián)盟》、《爐石傳說》、《皇室戰(zhàn)爭》、《星際爭霸2》、《實(shí)況足球》還有《王者榮耀國際版》,這表明在國際傳統(tǒng)體育也開始接納了電子游戲成為主流比賽項(xiàng)目。可以看出,游戲越來越被大家所熟知,回顧和總結(jié)我國手機(jī)游戲產(chǎn)業(yè)研究的現(xiàn)狀,分析存在的問題以及未來研究的趨勢,有著十分重要的意義。完成本次畢業(yè)設(shè)計(jì)的同時(shí)不僅可以鍛煉個(gè)人的技術(shù)能力,加深對Unity引擎的了解,還可以讓大家了解一個(gè)游戲是如何制作的,體驗(yàn)開發(fā)游戲的樂趣,在開發(fā)游戲的過程中帶來不同的體驗(yàn)。2可行性研究進(jìn)行可行性研究,主要是對將要開發(fā)的游戲進(jìn)行詳細(xì)的調(diào)查研究,判斷游戲在各個(gè)方面的可行性,這將決定游戲能否進(jìn)行開發(fā),然后在可以開發(fā)的情況下,完善整個(gè)游戲系統(tǒng)。下面將要從以下四個(gè)方面來分析本游戲的可行性。2.1經(jīng)濟(jì)可行性從經(jīng)濟(jì)可行性的角度上講,在硬件上本游戲可以運(yùn)行在PC電腦端以及手機(jī)端,在后期的發(fā)展上不需要經(jīng)費(fèi),在軟件上,只需要在對應(yīng)的平臺(tái)安裝即可運(yùn)行,不需要額外的經(jīng)濟(jì)花銷。2.2技術(shù)可行性在技術(shù)上的可行性上,分析當(dāng)前的技術(shù)條件可不可以完成開發(fā),開發(fā)軟件能否滿足游戲開發(fā)的需要。本游戲開發(fā)使用Unity3D游戲引擎,腳本的編寫軟件采用VisualStudio2017,開發(fā)語言使用C#。游戲引擎與技術(shù)成熟,所以從技術(shù)上講,在游戲開發(fā)中不存在問題。2.3操作可行性雖然本游戲只是一款手機(jī)游戲,但是本游戲基于Unity3D引擎開發(fā),由于Unity3D的跨平臺(tái)特性,可以發(fā)布到各個(gè)平臺(tái),不限于Android手機(jī)與IOS手機(jī)。玩家不用擔(dān)心游戲的操作,在游戲的操作上,只需要點(diǎn)擊屏幕即可,沒有復(fù)雜的操作,本游戲操作簡單,方便使用。2.4法律可行性從法律角度上來說,本游戲的開發(fā)并不會(huì)引起任何的侵權(quán)行為以及責(zé)任問題。而且本游戲作為畢業(yè)設(shè)計(jì),是獨(dú)立開發(fā)的,所以不會(huì)構(gòu)成侵權(quán)行為,法律角度上可行。2.5可行性總結(jié)所以從上面來看,本游戲在經(jīng)濟(jì)可行性、技術(shù)可行性等四個(gè)方面上都達(dá)到了可行的要求,所以本游戲完全可以進(jìn)行開發(fā)。3項(xiàng)目的開發(fā)環(huán)境及主要開發(fā)工具簡介項(xiàng)目的開發(fā)主要使用了Windows7操作系統(tǒng),本章將介紹本次設(shè)計(jì)用到的開發(fā)工具,首先介紹Unity3D游戲引擎的結(jié)構(gòu)框架組成與供開發(fā)者使用的各種功能以及主要特點(diǎn),隨后介紹開發(fā)工具VisualStudio。在本次設(shè)計(jì)中,Unity3D負(fù)責(zé)整個(gè)游戲的場景搭建,使用VS2017負(fù)責(zé)進(jìn)行腳本的編寫,開發(fā)語言選用C#。3.1Unity3D游戲引擎簡單來說游戲引擎就是專門為游戲開發(fā)而設(shè)計(jì)的軟件框架,提供游戲開發(fā)所需要的基礎(chǔ)功能。利用游戲引擎開發(fā)游戲省去了重復(fù)造輪子的工作,能夠極大方便游戲開發(fā)者,所以游戲引擎極大加快了游戲項(xiàng)目的開發(fā)效率,這樣一來開發(fā)者們就可以節(jié)省大量的時(shí)間,將更多的精力放在游戲的玩法突破上,創(chuàng)造更多的樂趣。本節(jié)將介紹Unity3D的游戲引擎的主要特點(diǎn)以及跨平臺(tái)的開發(fā)方法。Unity3D是由UnityTechnologies研發(fā)的跨平臺(tái)2D/3D游戲引擎,同時(shí)它可以幫助游戲開發(fā)者輕松完成諸如建筑可視化、實(shí)時(shí)3D動(dòng)畫、3D視頻游戲等類型互動(dòng)內(nèi)容的開發(fā),還可以提高游戲運(yùn)行的效率,是一個(gè)全面整合的專業(yè)游戲引擎。Unity最初于2005年在蘋果公司的全球開發(fā)者大會(huì)上對外公布并開放使用,當(dāng)時(shí)只是一款面向OSX平臺(tái)的游戲引擎,這標(biāo)志著Unity的誕生,至2018年為止,該引擎所支持的研發(fā)平臺(tái)已經(jīng)達(dá)到27個(gè)。Unity3D引擎具有相當(dāng)強(qiáng)大的功能,除外還有一個(gè)顯著的優(yōu)點(diǎn)就是游戲開發(fā)者們可以進(jìn)行跨平臺(tái)的游戲開發(fā)。在實(shí)際開發(fā)的時(shí)候,由于龐大的手機(jī)市場存在不同尺寸的手機(jī)屏幕、不同的操作方式、還有硬件條件的不同,游戲開發(fā)者經(jīng)常需要花費(fèi)大量的時(shí)間和精力去研究如何適配與移植,這在很大程度上影響了開發(fā)的效率。而Unity為游戲開發(fā)者解決了這個(gè)問題,推出了相應(yīng)的功能,大大提高了游戲開發(fā)者的開發(fā)效率。因?yàn)樗囊子讷@取、簡單易學(xué),以及強(qiáng)大的功能,Unituy成為一個(gè)非常流行的游戲引擎,同時(shí)Unity還為用戶提供了一個(gè)知識(shí)分享和問答交流的社區(qū),大大方便了游戲開發(fā)者的學(xué)習(xí)與交流。Unity3D的項(xiàng)目是由一個(gè)或者多個(gè)場景(Scene)組成的,在場景中可以添加和保存不同的游戲?qū)ο螅℅ameObject)比如人物、房子、植物、光源等,這些游戲?qū)ο罂梢酝ㄟ^Unity3D來添加不同的屬性組件,例如貼圖、碰撞檢測、粒子特效還有聲音等等,然后在Scene中可以直接觀察各個(gè)對象的顯示效果。Unity分為個(gè)人版(Personal)、進(jìn)階版(Plus)、專業(yè)版(Pro)以及面向大型用戶的企業(yè)版,個(gè)人版是免費(fèi)的,進(jìn)階版與專業(yè)版需要付費(fèi)使用。大部分引擎內(nèi)容都是一致的,但是進(jìn)階版,專業(yè)版與個(gè)人版相比提供了很多額外服務(wù)與功能。剛剛學(xué)習(xí)使用Unity或者一般的獨(dú)立游戲開發(fā)者較為適合使用個(gè)人版,而一旦資金總和超過10萬美元個(gè)人版就不允許被使用了,必須購買UnityPro專業(yè)版進(jìn)行開發(fā)。3.1.1Unity3D的組成及主要特性Unity3D有很多功能強(qiáng)大的模塊使開發(fā)者更有效率的解決問題,從宏觀角度來說可分為下面七個(gè)部分:圖形模塊(Graphics):負(fù)責(zé)Unity3D游戲引擎中顯示圖像的處理,主要包括攝像機(jī)、Shader、粒子系統(tǒng)、光照等。音頻模塊(Audio):在Unity3D游戲引擎中處理音頻的部分,包括音效分段、發(fā)送接收裝置等。物理模塊(Physics):負(fù)責(zé)在Unity3D游戲引擎中處理物理效果的相關(guān)內(nèi)容,包括剛體與碰撞器等。動(dòng)作模塊(Animation):負(fù)責(zé)在Unity3D游戲引擎中的動(dòng)作效果。導(dǎo)航模塊(Navigation):在Unity3D游戲引擎中處理AI以及尋路效果。UI模塊:負(fù)責(zé)在Unity3D游戲引擎中游戲項(xiàng)目的UI界面編輯。腳本模塊:在Unity3D游戲引擎負(fù)責(zé)為各個(gè)游戲?qū)ο筇砑幽_本。這幾個(gè)模塊共同組成了Unity3D游戲引擎,接下來介紹Unity3D游戲引擎的一些主要特性:Unity3D擁有層級(jí)式的綜合開發(fā)環(huán)境,可以直觀看到效果的可視化編輯,詳細(xì)的屬性編輯器以及可以進(jìn)行動(dòng)態(tài)的游戲預(yù)覽。這些優(yōu)點(diǎn)可以使開發(fā)者快速的進(jìn)行游戲開發(fā)或者開發(fā)游戲原型。支持多平臺(tái)的應(yīng)用與游戲開發(fā),不僅支持MicrosoftWindows與MacOSX,還支持一些在線內(nèi)容諸如InternetExplorer、Firefox、Mozilla、Opera等,還有Wii程序、Android程序以及IPhone程序等,支持平臺(tái)太多在此不一一列舉。快捷的資源導(dǎo)入,在Unity3D中項(xiàng)目的資源會(huì)被自動(dòng)導(dǎo)入,還會(huì)依照資源的變化自動(dòng)更新。還支持各種三維建模軟件,相對來說Unity對3dsMax、Maya、Blemder、Cinema4D的支持力度更大一些。Unity3D使用的圖形引擎包括Direct3D、OpenGL以及APIs,可以對圖像進(jìn)行高質(zhì)量的優(yōu)化與渲染,并且內(nèi)置了對Nvidia的PhysX物理引擎的支持。Unity可以自己編寫著色器(Shaders)來進(jìn)行圖像的濃淡處理比如光照、顏色與亮度等,除了通過ShaderLab語言來編寫,還支持Cg、GLSL語言編寫或者是自有工作流中的編程方式。在實(shí)際開發(fā)中,一個(gè)Shader可以囊括多種變量以及一個(gè)參數(shù)接口,通過Unity來判定當(dāng)前的參數(shù)是不是當(dāng)前最適配的參數(shù),并且選擇適配性最好的Shader類型。Unity的游戲腳本是基于Mono的,Mono基于通用語言架構(gòu)和C#的ECMA標(biāo)準(zhǔn),提供了.NET框架的另一種實(shí)現(xiàn),與.NET框架不同的是具備了跨平臺(tái)的能力,同時(shí)還與.NETFramework2.0兼容,所以開發(fā)者可以使用C#、JavaScript或者Boo開發(fā)。Unity在音頻與視頻方面,音頻系統(tǒng)是基于跨平臺(tái)音效API的OpenAL程序庫,支持播放OggVorbis的壓縮音效,視頻播放采用了同為Xiph.Org基金會(huì)開發(fā)的Theora編碼。Unity還有自帶的地形編輯器、光線映射以及全局光照。Unity的多人網(wǎng)絡(luò)通信功能是第三方包所提供的,采用Raknet、Photon、SmartFoxServer等。使網(wǎng)絡(luò)游戲開發(fā)的效率有了很大提升。3.1.2Unity3D的編輯器游戲開發(fā)引擎,最重要的就是工具,Unity3D提供了可視化的3D場景編輯器,在編輯器中可以實(shí)時(shí)預(yù)覽各類編輯器諸如動(dòng)作編輯器、地形編輯器、粒子編輯器、游戲模擬器等等的實(shí)際效果。Unity除了提升開發(fā)速度提供可視化操作環(huán)境外,還擁有容錯(cuò)功能。使得開發(fā)者的開發(fā)工作不能超過特定的的范圍,比如說在配置變量上與選擇類型。編輯器可以讓初學(xué)者也能快速的找到方法來制作游戲。如果是人為配置的,在配置每個(gè)參數(shù)時(shí)都需要參照完善的文檔,在加載文件的時(shí)候,也需要提供完善的報(bào)錯(cuò)功能。Unity3D除了本身編輯器功能的強(qiáng)大之外,Unity還有就是令人喜歡的高度的擴(kuò)展特性。它向開發(fā)者們開放了絕大多數(shù)操作的接口,諸如自定義編輯器窗口、場景編輯窗口、工程資源的管理、物體控制面板還有所有的對象管理接口和所有的輸入事件等等。開發(fā)者們可以運(yùn)用這些開放的接口開發(fā)功能更加完善的關(guān)于Unity3D的插件。比如Unity中最為實(shí)用的UI編輯器插件NGUI。3.1.3Unity3D的游戲腳本系統(tǒng)游戲腳本是游戲開發(fā)過程中最重要部分之一。游戲?qū)ο笾g的邏輯需要通過腳本來實(shí)現(xiàn)。游戲常見的事件觸發(fā)、游戲?qū)ο蟮膭?chuàng)建與銷毀等都需要通過腳本來控制,就算是簡單的游戲也需要通過腳本來處理游戲與玩家之間的互動(dòng)。腳本除了實(shí)現(xiàn)游戲邏輯規(guī)則外,還可以實(shí)現(xiàn)圖像效果和控制游戲?qū)ο蟮男袨椋?dāng)然游戲腳本也必須綁定在游戲?qū)ο笊喜趴梢詧?zhí)行。由此可以看出游戲腳本決定了一個(gè)游戲的好壞。游戲腳本并不是一個(gè)新出現(xiàn)的名稱或技術(shù),在早些年人們就知道了一個(gè)名字叫做Lua的腳本語言,很多網(wǎng)絡(luò)游戲都采用Lua為腳本語言。不止Unity3D在內(nèi),其他的游戲引擎也提供了腳本接口,讓開發(fā)者在開發(fā)游戲的時(shí)候擺脫自身的限制。在Unity3D游戲引擎中允許游戲開發(fā)者使用的編程語言有三種,分別是C#、UnityScript、Boo。其中C#是一種安全穩(wěn)定的,由C和C++衍生的面向?qū)ο缶幊陶Z言,相對來說更符合Unity3D。UnityScript是專為Unity3D設(shè)計(jì)的語言,與JavaScript十分相似,從編程技巧難度來看,更容易上手。Boo語言是語法與Python相似的.NET語言,從Unity5.0版本開始就停止了對Boo語言的文檔支持。由于Unity3D是可以在Windows系統(tǒng)以及MacOSX系統(tǒng)下運(yùn)行的,那么就需要一個(gè)可以跨平臺(tái)的編輯器,Unity3D使用MonoDevelop腳本編輯器,Mono可以運(yùn)行在多個(gè)平臺(tái),例如Windows、MacOSX、Linux,甚至是一些游戲平臺(tái)。在Unity中游戲腳本有著自己的生命周期,無論添加什么腳本都必須遵循自己的生命周期。Unity為開發(fā)者提供了大量的接口,游戲開發(fā)者可以通過編寫腳本來啟用Unity提供的管理控制接口與事件響應(yīng)接口,然后達(dá)到對游戲進(jìn)行控制的目的。Unity中腳本程序與其他普通的程序不同,它不會(huì)從頭開始執(zhí)行到結(jié)束而是以Unity的場景為資源、內(nèi)存管理為單位。在Unity3D中開發(fā)時(shí)進(jìn)行場景切換時(shí),場景中的資源和內(nèi)存都會(huì)被釋放,然后切換到下一個(gè)場景中加載資源以及進(jìn)行對象的實(shí)例化。此外場景中的實(shí)體都是游戲?qū)ο螅螒驅(qū)ο笥袃煞N通過腳本來控制的方式,可以在腳本代碼中編寫相應(yīng)的程序來進(jìn)行動(dòng)態(tài)的腳本綁定與刪除,也可以手動(dòng)的將腳本綁定到對應(yīng)的游戲?qū)ο笊稀MǔT赨nity中,開始運(yùn)行游戲時(shí)Unity會(huì)為游戲?qū)ο蠼壎ǖ哪_本也制造一個(gè)對象,游戲?qū)ο蟊淮輾Ш螅琔nity生成的對象也會(huì)被摧毀。Unity腳本執(zhí)行時(shí)會(huì)調(diào)用聲明好的事件函數(shù),這些事件函數(shù)屬于MonoBehavior所提供的框架事件回調(diào)接口。常用的有Awake()用來進(jìn)行整個(gè)實(shí)例的初始化、Start()在第一次啟動(dòng)時(shí)執(zhí)行,用于游戲?qū)ο蟮某跏蓟?,在Awake函數(shù)之后執(zhí)行,只執(zhí)行一次、OnEnable()用來喚醒對象、OnDisable()用來對象的休眠、OnDestroy()用來摧毀對象、Update()用來刷新場景、FixeUpdate()更新物理引擎渲染場景、OnApplicationPause()暫停應(yīng)用、OnApplicationQuit()退出應(yīng)用等等。在Unity3D中游戲腳本是默認(rèn)繼承MonoBehavior基類的,而且編碼調(diào)試方便,思維順暢,可視化,速度快。因此在編寫腳本的過程中要熟悉MonoBehavior,此外如果你的類不需要引擎提供的初始化,各種物理,渲染,著色器的回調(diào)等,也可以不使用MonoBehavior基類,通過自定義類來達(dá)成自己的需求。3.1.4Unity3D的跨平臺(tái)特點(diǎn)Unity3D最突出的特點(diǎn)就是可以跨平臺(tái)開發(fā),這也是Unity3D成為游戲市場上主流游戲開發(fā)引擎的原因之一。截至2018年,Unity3D支持發(fā)布的平臺(tái)有Windows、MacOSX、Linux、Android、iOS、WindowsPhone、XboxOne、PlayStation4、WiiU等27個(gè)平臺(tái),實(shí)現(xiàn)了從PC端、主機(jī)端、手機(jī)端等在各個(gè)平臺(tái)的覆蓋。開發(fā)者通過一次開發(fā),就可以在不同的平臺(tái)上發(fā)布自己的游戲作品。在早期的游戲開發(fā)中,跨平臺(tái)的游戲需求很小,因?yàn)樵诓煌钠脚_(tái)操作的方式和性能有很大差異,比如說PC端與主機(jī)端一個(gè)用鍵盤鼠標(biāo)一個(gè)用手柄,不同平臺(tái)游戲的玩法也有所不同。所以早期幾乎沒有游戲廠商開發(fā)可以跨平臺(tái)運(yùn)行的游戲。但是隨著智能手機(jī)的出現(xiàn),移動(dòng)平臺(tái)快速崛起,手機(jī)的性能不斷提高,3D游戲源源不斷的出現(xiàn),使得許多游戲廠商轉(zhuǎn)向手機(jī)游戲市場,而Unity3D跨平臺(tái)的特性使得它從游戲引擎中脫穎而出。Unity3D的跨平臺(tái)特性也讓游戲開發(fā)者開發(fā)不同平臺(tái)的游戲應(yīng)用變得更加簡單。Unity3D是UnityTechnologies公司用C++開發(fā)的,這樣可以使Unity保證自身的效率和可以移植的特性。Unity3D可以跨平臺(tái)的原理就是使用了一種叫作通用中間語言CIL(CommonIntermediateLanguage)的代碼指令集,CIL可以在任何支持通用語言基礎(chǔ)結(jié)構(gòu)CLI的環(huán)境中運(yùn)行。在開發(fā)游戲的時(shí)候,開發(fā)者只需要一次編寫代碼,通過Unity的編譯器將程序的框架和編寫的腳本共同編譯成將要發(fā)布平臺(tái)的平臺(tái)語言,然后開發(fā)者發(fā)布游戲時(shí)Unity會(huì)將項(xiàng)目中的各種資源統(tǒng)一整合形成將要發(fā)布平臺(tái)的支持格式。以上就是Unity如何實(shí)現(xiàn)跨平臺(tái)開發(fā)的原理。除了將程序的框架和編寫的腳本共同編譯成將要發(fā)布平臺(tái)的平臺(tái)語言,跨平臺(tái)開發(fā)還需要解決不同I/O設(shè)備接口的兼容和對相應(yīng)平臺(tái)的特性功能的問題。在I/O設(shè)備兼容的問題來說主要是輸入設(shè)備和圖形渲染。有關(guān)輸入設(shè)備的問題,由于各個(gè)平臺(tái)操作方式不同造成輸入差異,考慮到這些Unity也提供了相應(yīng)的解決方案,設(shè)計(jì)出了有關(guān)鍵鼠與多點(diǎn)觸控的API,而且還可以通過自定義的輸入事件來支持不同平臺(tái)相應(yīng)的游戲手柄或外設(shè)。3.2MicrosoftVisualStudioMicrosoftVisualStudio是微軟公司開發(fā)的一款完整的開發(fā)工具集,它包括了大部分關(guān)于一款軟件整個(gè)生命周期的工具,并且支持所有Microsoft支持的平臺(tái),同時(shí)它也是當(dāng)下最流行的用于進(jìn)行Windows平臺(tái)應(yīng)用開發(fā)的集成開發(fā)環(huán)境??梢陨勺烂鎽?yīng)用程序、ASP.NETWeb程序和移動(dòng)應(yīng)用程序。VisualStudio97是VisualStudio第一款作品在1997年發(fā)布,它幾乎包括了當(dāng)時(shí)所有微軟的程序設(shè)計(jì)工具。本項(xiàng)目采用的是VisualStudio2017版本,VS2017支持創(chuàng)建自定義的離線安裝包、可以在同一PC安裝不同版本的VS2017、添加了對VS擴(kuò)展的性能監(jiān)控、可以安裝離線的幫助查看器、加強(qiáng)了代碼導(dǎo)向功能、還支持了更多的編程語言以及直接支持創(chuàng)建.NETCore程序了,可以選擇.NetCore1.0or.netCore1.1。使用VisualStuido2017開發(fā)可以提高開發(fā)效率,在開發(fā)過程中調(diào)試程序與程序的診斷都很輕松,并且可以開發(fā)適用于各個(gè)平臺(tái)的應(yīng)用。4游戲系統(tǒng)以及需求的分析4.1游戲規(guī)則介紹五虎棋是一個(gè)具有較強(qiáng)挑戰(zhàn)性和趣味性的棋類游戲。五虎棋的棋盤由是橫5條、縱5條直線垂直交叉成16個(gè)方格組成的,棋盤上有5*5共25個(gè)可以布子的點(diǎn),先手方13個(gè)棋子后手方12個(gè)。棋子每局對弈時(shí)共有兩個(gè)階段:布子階段和行棋階段。在布子階段,黑白雙方輪流執(zhí)子,把棋子下在25個(gè)點(diǎn)的任一點(diǎn)上,已經(jīng)有子的地方不能再布子。布子過程中,如果成項(xiàng),就可以立即吃對方一子,被吃掉的子會(huì)被標(biāo)記上,將在布子階段結(jié)束時(shí)從棋盤上拿掉,吃子后對方再下子。在布子階段,被吃子的位置不能再布子。布子結(jié)束后,進(jìn)入行棋階段。一般情況下,先摘掉布子階段被標(biāo)記的吃掉的子,然后由后手方先行選中一枚棋子走向旁邊的空位(上下左右沒有空位的棋子不能移動(dòng)),移動(dòng)的目的也是成項(xiàng),然后可以吃掉對方棋子。勝負(fù)判斷,在行棋階段當(dāng)一方棋子不能成項(xiàng)(少于三子)則獲勝。成項(xiàng)(棋子組成的特殊陣型)有以下五種:通天:一方棋子占滿棋盤的任一條對角線,就是連續(xù)五個(gè)子在對角線上,是最難達(dá)成的棋型,在棋盤上也只可以形成兩種通天。五虎:棋盤上連續(xù)五個(gè)子占滿橫線或者豎線,可以把對方棋子分隔開,一共有十種五虎陣型,是除了小斗外最多的一種陣型。四斜:任一方的連續(xù)四個(gè)子連接兩個(gè)鄰邊組成四斜,在棋盤上可以達(dá)成的四斜一共有四種,四斜也是容易被初學(xué)者忽視的陣型。三斜:任一方的連續(xù)三個(gè)字連接兩個(gè)鄰邊可以組成三斜,在棋盤上可以達(dá)成四種三斜,由于需要的棋子最少,也是最容易完成的陣型。小斗:在棋盤上橫豎交叉組成的小格子有16個(gè),小斗就是占據(jù)任一小格子的四個(gè)頂點(diǎn)所形成的陣型。4.2需求分析研究本游戲的受眾群體,以及本游戲的特點(diǎn),列出以下幾點(diǎn):1)游戲的屬性:有較強(qiáng)挑戰(zhàn)性和趣味性的棋類游戲。2)游戲受眾:適用于各個(gè)年齡段的群眾。3)游戲界面:界面簡潔美觀。4)用戶體驗(yàn):上手即玩,而且操作簡單方便。4.3游戲系統(tǒng)分析與設(shè)計(jì)本游戲是一個(gè)偏向休閑益智類型的棋類游戲,游戲可以進(jìn)行雙人對戰(zhàn)。要制作一款游戲就要了解游戲需要滿足的要素,本設(shè)計(jì)是一款棋類游戲,那么棋類游戲就需要以下幾個(gè)最基本的要素。包括可以讓玩家對陣下棋的棋盤、與棋類游戲相關(guān)的游戲規(guī)則、以及游戲與用戶之間交互的UI界面。本游戲的系統(tǒng)功能圖如下圖4-1所示:圖4-1系統(tǒng)功能圖Figure4-1SystemFunctionDiagram本游戲主要由三個(gè)場景組合而成,一個(gè)是游戲場景,游戲場景包括棋盤、棋子等游戲?qū)ο?,一個(gè)就是游戲的UI場景,UI場景即是用戶交互界面,包括主菜單的各個(gè)選項(xiàng)與功能,還有就是主菜單下的幫助場景。此外,進(jìn)行場景之間的切換是通過游戲腳本來實(shí)現(xiàn)的。以上兩個(gè)游戲中的場景都是棋類游戲包含的最基本的組件。在游戲開發(fā)的過程中,首先就要進(jìn)行游戲棋盤的搭建,游戲場景中的游戲棋盤是玩家與玩家之間對陣的基礎(chǔ),在棋盤上需要建立相應(yīng)的坐標(biāo)來確定棋子的位置,而且方便后面游戲規(guī)則邏輯的制定。完成搭建棋盤后接下來就需要編寫游戲腳本,使玩家們可以在棋盤上下子,以及實(shí)現(xiàn)相應(yīng)的游戲規(guī)則如五虎棋游戲中三斜、四斜、五虎等各種陣型的判定吃子,還有完成布子階段與行棋階段的轉(zhuǎn)換,及之后棋子的移動(dòng)。以上就是游戲場景需要完成的設(shè)計(jì)。而在Unity3D中UI場景界面同樣需要游戲腳本來編寫完成,在UI場景中需要完成的功能有“開始游戲”、“幫助”、“退出游戲”點(diǎn)擊“開始游戲”時(shí),會(huì)進(jìn)入游戲狀態(tài)。初次進(jìn)入游戲,玩家可能不清楚游戲的規(guī)則,點(diǎn)擊“幫助”,游戲會(huì)提示玩家如何操作以及說明游戲規(guī)則等。點(diǎn)擊“退出游戲”則退出游戲。4.4游戲后期擴(kuò)展鑒于時(shí)間有限以及初次開發(fā)游戲水平有限,所以在當(dāng)前版本中人機(jī)模式(AI對戰(zhàn)),以及網(wǎng)絡(luò)對戰(zhàn)將不會(huì)在本次畢業(yè)設(shè)計(jì)上實(shí)現(xiàn)。所以在之后的開發(fā)中可能會(huì)實(shí)現(xiàn)人機(jī)對戰(zhàn)與網(wǎng)絡(luò)對戰(zhàn),即便自己一個(gè)人也可以進(jìn)行游戲,也會(huì)對游戲進(jìn)行UI界面的美化與功能的完善。5五虎棋游戲的具體實(shí)現(xiàn)本章以上一章的內(nèi)容為基礎(chǔ),將會(huì)介紹本游戲各個(gè)功能模塊的具體實(shí)現(xiàn)過程,例如棋盤的搭建、游戲規(guī)則的制定、UI界面等等。5.1開發(fā)的準(zhǔn)備工作首先,考慮五虎棋游戲的基本因素,在網(wǎng)上尋找五虎棋游戲需要的資源,例如棋盤、棋子、按鈕、背景等貼圖資源,以及背景音樂。當(dāng)然Unity3D也提供了資源商店,在其中可以購買各種各樣的3D模型、貼圖資源、腳本等資源,甚至是完整的游戲項(xiàng)目。資源商店中也有不錯(cuò)的免費(fèi)資源共開發(fā)者使用。5.1.1導(dǎo)入資源將網(wǎng)上收集的資源導(dǎo)入U(xiǎn)nity3D中,在項(xiàng)目資源下創(chuàng)建文件夾存放各類資源,fonts儲(chǔ)存字體、Prefabs儲(chǔ)存預(yù)制體、Res儲(chǔ)存網(wǎng)上的貼圖資源、Scenes儲(chǔ)存場景、Scripts用來儲(chǔ)存腳本文件。資源文件夾如圖4-1所示:圖5-1資源文件夾Figure5-1Resourcefolders圖5-2為導(dǎo)入的各種資源:圖5-2資源文件Figure5-2Resourcefiles5.2棋盤的創(chuàng)建首先,在Unity3D的Hierarchy(層級(jí)視圖)中創(chuàng)建Canvas,然后在Canvas下新建兩個(gè)Image,分別為其貼上棋盤與背景圖片。效果如圖5-3所示:圖5-3棋盤效果圖Figure5-3Chessboardeffectdiagram接下來進(jìn)行對棋盤與背景圖的RectTransform組件進(jìn)行設(shè)置,需要設(shè)置Anchors(錨點(diǎn))與Pivot(中心)的位置以及棋盤與背景的長寬。屬性設(shè)置參見圖5-4、圖5-5。圖5-4背景的屬性Figure5-4Propertiesofthebackground圖5-5棋盤的屬性Figure5-5Propertiesofchessboard這樣基礎(chǔ)的棋盤就搭建好了,接下來需要完成下棋與走棋以及游戲規(guī)則的制定。5.3游戲規(guī)則的制定本節(jié)將制定五虎棋的游戲規(guī)則與限制,游戲規(guī)則是游戲中最重要的組成部分,在五虎棋當(dāng)中涉及到下棋與走棋、吃子、判斷棋子的陣型組成、還有游戲的勝負(fù)判斷。這些都需要通過編寫游戲腳本來實(shí)現(xiàn)。5.3.1棋盤上的下子與走子下子功能通過編寫腳本來實(shí)現(xiàn),采用Input.GetMouseButtonDown()獲取鼠標(biāo)點(diǎn)擊的位置,判斷鼠標(biāo)點(diǎn)擊位置與棋盤上的交叉點(diǎn)距離,在最近的點(diǎn)并繪制棋子。同時(shí)也需要將腳本綁定到棋盤上,C#腳本核心代碼如下:publicvoidPlayerChess(){if(Input.GetMouseButtonDown(0)){Vector2pos=Camera.main.ScreenToWorldPoint(Input.mousePosition);if(pos.x<=3.75&&pos.x>=-3.75){if(pos.x>=-0.75&&pos.x<=0.75){pos_x=0;}elseif(pos.x>=0.75&&pos.x<=2.25){pos_x=1;}elseif(pos.x>=2.25&&pos.x<=3.75){pos_x=2;}elseif(pos.x>=-2.25&&pos.x<=-0.75){pos_x=-1;}elseif(pos.x>=-3.75&&pos.x<=-2.25){pos_x=-2;}if(pos.y>=-0.75&&pos.y<=0.75){pos_y=0;}elseif(pos.y>=0.75&&pos.y<=2.25){pos_y=1;}elseif(pos.y>=2.25&&pos.y<=3.75){pos_y=2;}elseif(pos.y>=-2.25&&pos.y<=-0.75){pos_y=-1;}elseif(pos.y>=-3.75&&pos.y<=-2.25){pos_y=-2;}go[pos[0]+2,pos[1]+2]=Instantiate(prefabs[1],newVector3(pos[0]*1.5f,pos[1]*1.5f),Quaternion.identity)asGameObject;下子效果如圖5-6所示:圖5-6下棋效果Figure5-6Chesseffect走子階段移動(dòng)棋子的核心代碼如下:if(grid[(int)(goPoint.transform.position.x/1.5f+2),(int)(goPoint.transform.position.y/1.5f+2)]==1){//當(dāng)前位置無棋子//當(dāng)空白處為上下八個(gè)點(diǎn)時(shí)floatxdwz_x=goPoint.transform.position.x-(pos[0]*1.5f);floatxdwz_y=goPoint.transform.position.y-(pos[1]*1.5f);if(xdwz_x==-1.5f||xdwz_x==1.5f||xdwz_y==-1.5f||xdwz_y==1.5f){//當(dāng)空白處為上下四個(gè)點(diǎn)時(shí)floatXDWZ=goPoint.transform.position.x-(pos[0]*1.5f)+goPoint.transform.position.y-(pos[1]*1.5f);//移動(dòng)當(dāng)前位置到指定點(diǎn)擊的位置if(XDWZ==1.5||XDWZ==-1.5){//當(dāng)前的位置還原初始值grid[gridC_x,gridC_y]=0;str[gridC_x,gridC_y]=0;Destroy(go[gridC_x,gridC_y]);//消除當(dāng)前點(diǎn)的物體go[pos[0]+2,pos[1]+2]=Instantiate(prefabs[0],newVector3(pos[0]*1.5f,pos[1]*1.5f),Quaternion.identity)asGameObject;goPoint.transform.position=newVector3(pos[0]*1.5f,pos[1]*1.5f);grid[pos[0]+2,pos[1]+2]=1;str[pos[0]+2,pos[1]+2]=1;}}}5.3.2陣型的判斷與吃子五虎棋與其他棋類游戲不同的就是擁有獨(dú)特的陣型,需要通過判斷達(dá)成的陣型來進(jìn)行攻擊也就是吃掉對方的棋子,陣型的判斷是通過判斷棋子的坐標(biāo)來完成的,下面將介紹各種陣型的判斷方法以及核心代碼。由于相同的陣型判斷方法相似所以每種陣型只列出一種代碼。通天陣型判斷核心代碼:voidFive_B(){if(str[0,4]==1&&str[1,3]==1&&str[2,2]==1&&str[3,1]==1&&str[4,0]==1&&lx[0]==0){for(inti=0;i<3;i++){GameObjectgoPoint04=Instantiate(prefabs[i+2],newVector3(-3,3),Quaternion.identity)asGameObject;//生成棋子效果GameObjectgoPoint13=Instantiate(prefabs[i+2],newVector3(-1.5F,1.5F),Quaternion.identity)asGameObject;//生成棋子效果GameObjectgoPoint22=Instantiate(prefabs[i+2],newVector3(0,0),Quaternion.identity)asGameObject;//生成棋子效果GameObjectgoPoint31=Instantiate(prefabs[i+2],newVector3(1.5F,-1.5F),Quaternion.identity)asGameObject;//生成棋子效果GameObjectgoPoint40=Instantiate(prefabs[i+2],newVector3(3,-3),Quaternion.identity)asGameObject;//生成棋子效果goPoint04.transform.SetParent(parent);goPoint13.transform.SetParent(parent);goPoint22.transform.SetParent(parent);goPoint31.transform.SetParent(parent);goPoint40.transform.SetParent(parent);}GameControl.lx_true=true;}}通天陣型判斷效果圖如圖5-7所示:圖5-7通天陣型Figure5-7Throughskyformation五虎陣型判斷核心代碼:voidFive_b(){if(str[0,0]==1&&str[0,1]==1&&str[0,2]==1&&str[0,3]==1&&str[0,4]==1&&lx[2]==0){for(inti=0;i<3;i++){GameObjectgoPoint00=Instantiate(prefabs[i+2],newVector3(-3,-3),Quaternion.identity)asGameObject;//生成棋子效果GameObjectgoPoint01=Instantiate(prefabs[i+2],newVector3(-3,-1.5F),Quaternion.identity)asGameObject;//生成棋子效果GameObjectgoPoint02=Instantiate(prefabs[i+2],newVector3(-3,0),Quaternion.identity)asGameObject;//生成棋子效果GameObjectgoPoint03=Instantiate(prefabs[i+2],newVector3(-3,1.5F),Quaternion.identity)asGameObject;//生成棋子效果GameObjectgoPoint04=Instantiate(prefabs[i+2],newVector3(-3,3),Quaternion.identity)asGameObject;//生成棋子效果goPoint00.transform.SetParent(parent);goPoint01.transform.SetParent(parent);goPoint02.transform.SetParent(parent);goPoint03.transform.SetParent(parent);goPoint04.transform.SetParent(parent);}GameControl.lx_true=true;}五虎陣型判斷效果圖如圖5-8所示:圖5-8五虎陣型Figure5-8Wuhuformation四斜陣型判斷核心代碼:voidFour_b(){if(str[0,1]==1&&str[1,2]==1&&str[2,3]==1&&str[3,4]==1&&lx[6]==0){for(inti=0;i<3;i++){GameObjectgoPoint01=Instantiate(prefabs[i+2],newVector3(-3,-1.5f),Quaternion.identity)asGameObject;//生成棋子效果GameObjectgoPoint12=Instantiate(prefabs[i+2],newVector3(-1.5f,0),Quaternion.identity)asGameObject;//生成棋子效果GameObjectgoPoint23=Instantiate(prefabs[i+2],newVector3(0,1.5f),Quaternion.identity)asGameObject;//生成棋子效果GameObjectgoPoint34=Instantiate(prefabs[i+2],newVector3(1.5f,3),Quaternion.identity)asGameObject;//生成棋子效果goPoint01.transform.SetParent(parent);goPoint12.transform.SetParent(parent);goPoint23.transform.SetParent(parent);goPoint34.transform.SetParent(parent);}GameControl.lx_true=true;}四斜陣型判斷效果圖如圖5-9所示:圖5-9四斜陣型Figure5-9Fourobliqueformation三斜陣型判斷核心代碼:voidThree_b(){if(str[0,2]==1&&str[1,3]==1&&str[2,4]==1&&lx[10]==0){for(inti=0;i<3;i++){GameObjectgoPoint02=Instantiate(prefabs[i+2],newVector3(-3,0),Quaternion.identity)asGameObject;//生成棋子效果GameObjectgoPoint13=Instantiate(prefabs[i+2],newVector3(-1.5f,1.5f),Quaternion.identity)asGameObject;//生成棋子效果GameObjectgoPoint24=Instantiate(prefabs[i+2],newVector3(0,3),Quaternion.identity)asGameObject;//生成棋子效果goPoint02.transform.SetParent(parent);goPoint13.transform.SetParent(parent);goPoint24.transform.SetParent(parent);}GameControl.lx_true=true;}三斜陣型判讀效果圖如圖5-10所示:圖5-10三斜陣型Figure5-10Tripletformation小斗陣型判斷核心代碼:voidFour_B(){if(str[0,0]==1&&str[1,0]==1&&str[0,1]==1&&str[1,1]==1&&lx[14]==0){for(inti=0;i<3;i++){GameObjectgoPoint00=Instantiate(prefabs[i+2],newVector3(-3,-3),Quaternion.identity)asGameObject;//生成棋子效果GameObjectgoPoint10=Instantiate(prefabs[i+2],newVector3(-1.5f,-3),Quaternion.identity)asGameObject;//生成棋子效果GameObjectgoPoint01=Instantiate(prefabs[i+2],newVector3(-3,-1.5f),Quaternion.identity)asGameObject;//生成棋子效果GameObjectgoPoint11=Instantiate(prefabs[i+2],newVector3(-1.5f,-1.5f),Quaternion.identity)asGameObject;//生成棋子效果goPoint00.transform.SetParent(parent);goPoint10.transform.SetParent(parent);goPoint01.transform.SetParent(parent);goPoint11.transform.SetParent(parent);}GameControl.lx_true=true;}小斗陣型判斷效果圖如圖5-11所示:圖5-11小斗陣型Figure5-11Squareformation當(dāng)完成特殊的陣型時(shí)就可以標(biāo)記對方棋子,標(biāo)記的棋子會(huì)在走棋階段去除,下面是完成陣型后吃子的核心代碼:publicboolDestroyChess(int[]pos){ if(!gameStart)returnfalse;pos[0]=Mathf.Clamp(pos[0],-2,2);pos[1]=Mathf.Clamp(pos[1],-2,2);//約束只能在棋盤范圍boolv=grid[pos[0]+2,pos[1]+2]!=0;if(!v){returnfalse;}{Destroy(go[pos[0]+2,pos[1]+2]);//消除被選中的棋子//新增新的打了X的棋子go[pos[0]+2,pos[1]+2]=Instantiate(prefabs[6],newVector3(pos[0]*1.5f,pos[1]*1.5f),Quaternion.identity)asGameObject;//生成棋子go[pos[0]+2,pos[1]+2].transform.SetParent(parent);grid[pos[0]+2,pos[1]+2]=3;str[pos[0]+2,pos[1]+2]=3;GameControl.Time_hc=0;//緩存的時(shí)間}圖5-12為吃子效果:圖5-12吃子Figure5-12DestroyChess當(dāng)棋子占滿棋盤時(shí),游戲?qū)南缕咫A段轉(zhuǎn)入走棋階段,被標(biāo)記的棋子會(huì)被去除,同時(shí)棋盤不會(huì)再進(jìn)行下棋而是改為移動(dòng)棋子,下面是消除棋子以及進(jìn)入走棋階段的核心代碼:publicvoidDestroyQZ(){for(intDes_x=0;Des_x<5;Des_x++){for(intDes_y=0;Des_y<5;Des_y++){if(grid[Des_x,Des_y]==3){Destroy(go[Des_x,Des_y]);grid[Des_x,Des_y]=0;str[Des_x,Des_y]=0;}}}}if(GameControl.lx_true==false){if(GameControl.Move_true==false){//成項(xiàng)不構(gòu)成成功ChessBoard.Instance.PlayChess(newint[2]{pos_x,pos_y});//下棋子}else{ChessBoard.Instance.MoveChess(newint[2]{pos_x,pos_y});//移動(dòng)棋子}}5.3.3游戲勝負(fù)判定游戲勝負(fù)判定是通過判斷雙方剩余棋子的數(shù)量進(jìn)行的,通過腳本中判斷剩余棋子數(shù),當(dāng)一方棋子小于3時(shí)即為失敗,或者點(diǎn)擊認(rèn)輸按鈕,這時(shí)會(huì)出現(xiàn)一方勝利的提示消息。如圖5-13所示:圖5-13勝負(fù)判定Figure5-13Judgmentofvictoryordefeat由于判斷棋子剩余數(shù)量代碼相似所以只列出一種。判斷勝利條件的核心代碼如下:if(int_W==2){GameControl.OverTimeWait=true;//三秒后啟動(dòng)黑子勝利GameControl.Gameover=true;//游戲結(jié)束GameControl.Win=1;//黑子勝利}voidUpdate(){if(OverTimeWait==true){OverTimeWait_time+=Time.deltaTime;if(OverTimeWait_time>=3){OverTimeWait=false;OverTimeWait_time=0;Time_hc=0;//緩存的時(shí)間//顯示勝利方if(Win==1){Win_B.SetActive(true);}elseif(Win==2){Win_W.SetActive(true);}}}}5.4UI界面的創(chuàng)建本游戲的UI界面分為兩部分,一部分是游戲場景中的UI界面,另外一部分則是新創(chuàng)建的場景中,其中有開始界面場景以及幫助頁面場景,這樣做方便游戲進(jìn)行場景之間的轉(zhuǎn)換,當(dāng)然如果想在一個(gè)場景中建立不同的UI界面也可以,不過在同一場景下建立UI界面比較復(fù)雜,所以我選擇了在不同的場景中實(shí)現(xiàn)UI界面。5.4.1主菜單界面建立UI界面采用Unity3D自帶的UGUI來進(jìn)行創(chuàng)建,首先在場景中的層級(jí)視圖中創(chuàng)建一個(gè)Canvas畫布,在其下建立一個(gè)Image并命名為背景,然后為背景貼上貼圖,右鍵單擊背景在其中創(chuàng)建一個(gè)文本Text控件以及三個(gè)按鈕控件。其中Text為游戲名稱,為其加載方正黃草字體,并設(shè)置大小與位置,屬性圖如下圖所示:圖5-14標(biāo)題屬性Figure5-14Titleattribute三個(gè)按鈕控件分別為其命名Button_Play、Button_Help、Button_Quit,對應(yīng)的分別是開始游戲、游戲幫助、退出游戲,然后在其子頁面修改Text文件為對應(yīng)的功能并貼上貼圖資源。在層級(jí)式圖中效果如圖5-15所示:圖5-15主菜單層級(jí)視圖Figure5-15Mainmenulevelview完成以上設(shè)置后主菜單界面的效果圖如下所示:圖5-16主菜單效果圖Figure5-16Mainmenueffectdiagram5.4.2幫助界面建立幫助界面的建立與主菜單相似,首先在場景中的層級(jí)視圖中創(chuàng)建一個(gè)Canvas畫布,在其下建立一個(gè)Image并命名為背景,然后為背景貼上貼圖,右鍵單擊背景在其中創(chuàng)建一個(gè)Image命名為子背景,在子背景下建立Text文本控件并輸入文本,之后在子背景中建立Image,為其貼圖。然后在背景下創(chuàng)建一個(gè)按鈕控件命名為Button_back,然后在其子頁面修改Text文件為對應(yīng)的功能并貼上貼圖資源。最后效果如下所示:圖片5-17幫助界面Figure5-17Helpinterface5.4.3UI中的按鈕功能Unity3D中按鈕功能的實(shí)現(xiàn)需要編寫腳本來實(shí)現(xiàn),將腳本綁定到游戲?qū)ο蠛螅瑫?huì)出現(xiàn)對應(yīng)功能的位置,需要將按鈕組件拖動(dòng)到對應(yīng)的位置,按鈕才能正常使用。屬性視圖如下圖所示:圖5-18腳本的屬性Figure5-18Propertiesofthescript主菜單開始游戲的按鈕功能實(shí)際上就是將場景跳轉(zhuǎn)到游戲場景,幫助按鈕則為跳轉(zhuǎn)到幫助場景,退出游戲按鈕直接退出游戲。并且在腳本編寫的時(shí)候要注意導(dǎo)入U(xiǎn)nityEngine.UI包,否則UI中的方法不能使用。下面為開始頁面按鈕功能的核心代碼:publicclassStartGame:MonoBehaviour{publicButtonGameStartButton;//游戲開始按鈕publicButtonGameHelpButton;//游戲幫助按鈕publicButtonGameQuitButton;//游戲退出按鈕voidStart(){GameStartButton.onClick.AddListener(GameStartListener);//添加開始游戲按鈕事件GameHelpButton.onClick.AddListener(GameHelpButtonClickListener);//添加幫助游戲按鈕事件GameQuitButton.onClick.AddListener(GameQuitButtonClickListener);//添加游戲退出按鈕事件}voidUpdate(){}voidGameStartListener(){SceneManager.LoadScene(1);//跳轉(zhuǎn)到游戲界面}voidGameHelpButtonClickListener(){SceneManager.LoadScene(2);//跳轉(zhuǎn)到幫助界面}voidGameQuitButtonClickListener(){#ifUNITY_EDITORUnityEditor.EditorApplication.isPlaying=false;#elseApplication.Quit();#endif}}下面是幫助界面返回按鈕功能的核心代碼:publicclassGameHelp:MonoBehaviour{publicButtonGameHelpButton;//游戲幫助按鈕voidStart(){GameHelpButton.onClick.AddListener(GameHelpButtonClickListener);}voidUpdate(){}voidGameHelpButtonClickListener(){SceneManager.LoadScene(0);//跳轉(zhuǎn)到主菜單界面}5.4.4游戲場景中的UI在五虎棋游戲場景下的UI界面主要由黑白方顯示,黑白方棋子數(shù)量、認(rèn)輸按鈕、退出按鈕、重新開始按鈕組成。首先在游戲場景中的Canvas畫布下建立兩個(gè)Image分別命名為黑色方以及白色方,在黑色與白色方組件下創(chuàng)建多個(gè)Image、分別用來顯示黑白雙方的棋子數(shù)量、下棋的狀態(tài)以及代表陣營的圖標(biāo)。然后在黑色方下創(chuàng)建兩個(gè)按鈕組件,分別是黑方認(rèn)輸按鈕以及返回按鈕,在白色方下創(chuàng)建兩個(gè)按鈕組件,分別是白方認(rèn)輸按鈕以及重新開始按鈕。層級(jí)視圖如下所示:圖5-19畫布的層級(jí)視圖Figure5-19Hierarchicalviewofcanvas游戲場景UI界面如圖5-20所示:圖5-20游戲UI界面Figure5-20GameUIinterface下面是游戲UI界面按鈕功能的C#核心代碼:voidStart(){GameAgainButton.onClick.AddListener(GameAgainButtonClickListener); GameQuitButton.onClick.AddListener(GameQuitButtonClickListener);GameOverB.onClick.AddListener(GameOverBClickListener);GameOverW.onClick.AddListener(GameOverWClickListener);} voidUpdate(){if(OverTimeWait==true){OverTimeWait_time+=Time.deltaTime;if(OverTimeWait_time>=3){OverTimeWait=false;OverTimeWait_time=0;Time_hc=0;//緩存的時(shí)間//Gam

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論