亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于Unity3D的塔防游戲設(shè)計與實現(xiàn)

        2015-04-18 01:21:48郭祖江
        科技傳播 2015年5期
        關(guān)鍵詞:腳本單元格敵人

        劉 俊,郭祖江

        沈陽化工大學(xué)計算機科學(xué)與技術(shù)學(xué)院,遼寧沈陽 110142

        近幾年來,Android平臺游戲、iPhone平臺游戲以及Web的網(wǎng)頁游戲迅猛發(fā)展,已經(jīng)成為帶動游戲產(chǎn)業(yè)發(fā)展的中堅力量。遺憾的是目前除了少數(shù)的作品成功外,大部分的游戲?qū)傩麄鞴萃笥谄鋬?nèi)容品質(zhì),加之玩家體驗游戲時,對游戲的沉浸感和操作性的要求也逐漸提高。在這種局面下,3D游戲成為當(dāng)前游戲的發(fā)展熱點。而本文所采用的Unity3D游戲引擎提供了創(chuàng)造高質(zhì)量的3D游戲和真實視覺效果的核心技術(shù),為開發(fā)3D游戲提供了強大的驅(qū)動力。

        本文基于Unity3D游戲引擎,研究游戲中AI設(shè)計過程的主要思路和主要算法實現(xiàn),通過高效復(fù)雜的AI系統(tǒng)以及特定的shaderLab(著色器)編程開發(fā)一款基于Unity3D的3D塔防類游戲,使之具備豐富的畫面而且保證游戲運行的流暢度。實踐證明,本文所討論的關(guān)鍵技術(shù)可以應(yīng)用于增強現(xiàn)實、游戲開發(fā)等多個領(lǐng)域,具有一定的實際應(yīng)用價值。

        1 游戲場景

        塔防游戲的基本玩法比較類似,在場景中我方有一個基地,敵人從場景的一側(cè)出發(fā),沿著相對固定的路線攻打基地。我方可以在地圖上布置防守單位,攻擊前來進攻的敵人,防止他們闖入基地。

        本游戲的場景通常比較簡單,就像一個棋盤格,可以在上面擺放防守單位,并專門留給敵人一個通道。在本游戲中,使用二維數(shù)組來表示場景中的格子,每個格子只有兩種狀態(tài),允許擺放防守單位或不允許。

        這是一個使用Terrain制作的簡單場景,場景中間繪制了一條通道,敵人將從通道的左側(cè)出發(fā),目的地是通道右側(cè)的房子,它是我們的基地。在通道以外的地方我們可以設(shè)置防守單位進攻敵人

        塔防游戲的場景游戲固定的模式,它由一個二維的單元格組成,每個格子的用途可能不同,通常是下列用途之一:

        1)專用于擺放防守單位。

        2)無法擺放防守單位,也不允許敵人通過。

        3)專用于敵人通過。

        攝像機始終由上至下俯視游戲場景,按 住鼠標(biāo)左鍵并移動可以移動攝像機的位置。

        2 AI系統(tǒng)的實現(xiàn)

        在BuildMap函數(shù)中,首先創(chuàng)建保存場景信息的二維數(shù)組,默認每個單元格都是可以擺放防守單位。然后在當(dāng)前場景中找到所有Tag名為gridnode的游戲體,將其屬性賦予和它位置相同的單元格。

        在OnDrawGizmos函數(shù)中,我們使用線段繪制場景中的單元格,并將不能放置防守單位的單元格繪制為紅色,這個功能主要是幫助我們預(yù)覽場景單元格的狀態(tài)。在OnDrawGizmos中繪制的圖案并不會出現(xiàn)在最后的游戲界面中。

        我們創(chuàng)建一個游戲管理器GameManager函數(shù),它由幾個作用,包括UI顯示,控制鼠標(biāo)操作和顯示調(diào)試信息等。

        正在塔防游戲中,敵人通常不需要智能尋路,而是按照一條預(yù)設(shè)的路線行動。我們?yōu)閿橙藙?chuàng)建一條前進路線,這條路線是預(yù)設(shè)的,敵人將從一個路點到達另一個路點,在PathNode腳本中,主要是通過SetNext函數(shù)設(shè)置它的子路點。

        圖1 是否可以擺放防守單位的單元格

        圖2 路點

        敵人一共有兩種,一種在陸地上前進,另一種則會飛行。我們將先創(chuàng)建前一種,然后繼承它的大部分屬性和函數(shù),略加修改完成另一種。在Enemy腳本中,定義了敵人的一些基本屬性,如生命值、移動速度、類型等,它由一個路點屬性作為當(dāng)前的出發(fā)點。在其MoveTo函數(shù)中,敵人向當(dāng)前路點的子節(jié)點前進,當(dāng)距離子路點較近時,即將子路點作為當(dāng)前路點,再向下移個路點前進。注意這里計算敵人與子路點的距離時沒有計算Y軸,因為我們希望空中的敵人飛到路點上方即認為是到達該路點。當(dāng)敵人走到最后的路點,即是到達我方基地,銷毀自身,并使基地減少一點生命值。接下來創(chuàng)建另一個飛行敵人的腳本AirEnemy,它繼承了Enemy腳本的大部分功能,只添加一個Fly函數(shù),作用是當(dāng)高度小于2時向上飛行。

        敵人生成器(EnemySpawner):塔防游戲的敵人通常是成批出現(xiàn),一波接著一波,因為敵人數(shù)量眾多,所以需要一個生成器按預(yù)先設(shè)置的順序生成不同的敵人。為了提高工作效率,我們將在Excel中設(shè)置每一波出現(xiàn)的敵人,然后將其導(dǎo)出為XML格式,敵人生成器讀取這個XML文件,按其設(shè)置生成敵人。實際上我們也可以在Unity的Inspector窗口設(shè)置組件的數(shù)值,但對于一個復(fù)雜的項目來說,這么做會使項目的維護變得困難,而游戲策劃又偏愛使用Excel表格,所以可以先在Excel中設(shè)置數(shù)據(jù),再將其導(dǎo)入Unity,這會是一個非常好的選擇。

        本游戲中唯一的防守單位是個袍塔(Defender),我們先準備一個ArrayList,將所有敵人遍歷都存進去,這樣很容易查找到任何一個敵人,當(dāng)敵人進入它的攻擊范圍便會開火。在這個腳本中,F(xiàn)indEnemy函數(shù)主要用于查找進入其攻擊范圍的敵人,然后在這些敵人中再選出一個生命值最低的敵人作為目標(biāo)敵人。Attack函數(shù)向敵人攻擊,這里只是很簡單地調(diào)用了敵人的SetDamage函數(shù)減少敵人的生命值。當(dāng)創(chuàng)建了一個防守單位后,它所處的單元格則被當(dāng)前防守單位占據(jù),不能再創(chuàng)建其他東西,因此我們在Start函數(shù)中改變了防守單位所處單元格的屬性。

        生命條(LifeBar):敵人在受到攻擊的時候,生命條可以顯示它受到多少傷害,和提示它的剩余生命值。在Project窗口的Rawdata/Lifebar目錄下引入了一個LifeBar.fbx文件,這是一個普通的平面模型,并附有一張貼圖,貼圖由簡單的黃色和紅色組成,我們將使用改變模型UV的方式,使黃色表示剩余生命值,紅色表示失去的生命值。

        在LifeBar腳本中,Ini函數(shù)負責(zé)初始化,主要是獲取生命條模型的UV。在UpdateLife函數(shù)中,我們根據(jù)當(dāng)前生命值和最大生命值計算出一個比例,然后調(diào)用Pad函數(shù)左右移動UV的位置,當(dāng)生命值越低,黃色顯示的越少,紅色顯示的越多。SetPosition函數(shù)負責(zé)設(shè)置生命條的位置,因為生命條始終要伴隨鄉(xiāng)音敵人的移動,并出現(xiàn)在它的上方,所以這個函數(shù)設(shè)置了一個yoffset參數(shù),使生命條的位置向上偏移一定距離。

        3 UV旋轉(zhuǎn)紋理動畫shaderLab

        shaderLab主要用Cg語言來開發(fā)。Cg語言(C for Graphics)是為GPU編程設(shè)計的高級著色器語言,由NVIDIA公司開發(fā)。Cg極力保留C語言的大部分語義,并讓開發(fā)者從硬件細節(jié)中解脫出來,Cg同時也有一個高級語言的其他好處,如代碼的易重用性,可讀性得到提高,編譯器代碼優(yōu)化。下段代碼實現(xiàn)了圖片中紋理自動旋轉(zhuǎn)的功能。

        此處用到圖形旋轉(zhuǎn)三角函數(shù)數(shù)學(xué)公式

        x1=cos(angle)*x-sin(angle)*y;

        y1=cos(angle)*y+sin(angle)*x;

        其中x,y表示物體相對于旋轉(zhuǎn)點旋轉(zhuǎn)angle的角度之前的坐標(biāo),x1,y1表示物體旋轉(zhuǎn)angle后相對于旋轉(zhuǎn)點的坐標(biāo)。

        4 游戲?qū)崿F(xiàn)

        4.1 代碼實現(xiàn)

        Unity3D游戲引擎能夠快速開發(fā),并具有高的擴展性,其腳本不僅支持JavaScript,而且支持C#,還支持C編寫的DLL插件,可以提高代碼的重復(fù)使用率。本文主要采用Cg語言開發(fā)ShadeLab, C#語言開發(fā)游戲C#由Unity3D的腳本默認繼承自MonoBehavior,而MonoBehavior來源于Mono框架(屬于.Net的跨平臺框架)。

        圖3 生命條UV貼圖

        圖4 自動轉(zhuǎn)輪在場景中的顯示

        圖5 自動轉(zhuǎn)輪的UV貼圖

        4.2 游戲展示

        本文實現(xiàn)了一個塔防類游戲,玩家可以通過鍵盤鼠標(biāo)控制角色在場景中進行自由游戲。

        我方基地有10點生命值,敵人攻入基地一次減少1點生命值,當(dāng)生命值為零,游戲失敗。敵人以波數(shù)的形式向我方基地進攻,每波由若干敵人組成。在這個實例中,一共有10波,當(dāng)成功擊退敵人10波的進攻則游戲勝利。

        圖6 游戲運行過程

        敵人有兩種,一種是在陸地上行進的裝甲車,一種是飛行在空中的飛行器。每消滅一個敵人 獲取一定點數(shù),點數(shù)用于創(chuàng)建防守單位。

        我們這里只完成一種基本類型的防衛(wèi)單位,它是炮塔,一旦敵人進入它的攻擊范圍便會開火,同時每新建一個防守單位也會扣除一定點數(shù)以期望用最少的炮塔消滅最多的敵人為分數(shù)高。

        圖7 游戲運行過程

        [1]盧金浩,張帥,伍傳敏.三明學(xué)院信息工程學(xué)院.

        [2]Unity Technologies ,Unity 4.x從入門到精通.中國鐵道出版社.

        [3]宣雨松.Unity3D游戲開發(fā).人民郵電出版社.

        猜你喜歡
        腳本單元格敵人
        酒駕
        撿敵人的槍來用,靠不靠譜
        安奇奇與小cool 龍(第二回)
        玩轉(zhuǎn)方格
        玩轉(zhuǎn)方格
        數(shù)據(jù)庫系統(tǒng)shell腳本應(yīng)用
        電子測試(2018年14期)2018-09-26 06:04:24
        敵人派(下)
        淺談Excel中常見統(tǒng)計個數(shù)函數(shù)的用法
        西部皮革(2018年6期)2018-05-07 06:41:07
        快樂假期
        足夠是夠的敵人
        山東青年(2016年3期)2016-02-28 14:25:48
        午夜影视免费| 国产在线观看免费一级| 日韩十八禁在线观看视频| 丝袜美腿网站一区二区| 精品国产三级国产av| 日本av一区二区三区在线| 国产午夜福利片在线观看| 日本公妇在线观看中文版| 无遮挡中文毛片免费观看| 久久一区av蜜桃人妻| 日本不卡视频一区二区三区| 日本无遮挡真人祼交视频| 欧美xxxx色视频在线观看| 中文字幕一区二区三区乱码不卡| 午夜男女视频一区二区三区| 国产女主播福利在线观看| 欧美老妇交乱视频在线观看| 欧美aa大片免费观看视频| 久久精品国产精品亚洲婷婷| 亚洲a级视频在线播放| 国产激情艳情在线看视频| 男女野外做爰电影免费| 手机AV片在线| 日韩精品一二三区乱码| 熟妇人妻久久中文字幕| 久久尤物AV天堂日日综合| 香蕉久久夜色精品国产| 亚洲中文字幕乱码一二三| 麻豆精品国产精华液好用吗| 国产激情对白一区二区三区四| 亚洲乱码中文字幕综合| 风韵丰满熟妇啪啪区99杏| 亚洲乱亚洲乱妇无码麻豆| 高清偷自拍第1页| 欧美亚洲韩国国产综合五月天| 人妻尤物娇呻雪白丰挺| 中文字幕一区二区三区视频| 曰韩亚洲av人人夜夜澡人人爽| 无码少妇一区二区三区芒果| 中文无码免费在线| 亚洲精品在线视频一区二区|