国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于Unity3D開發(fā)Survival shooter的實(shí)現(xiàn)

2018-01-15 09:52:06王濤王曉博
智富時(shí)代 2018年11期

王濤 王曉博

【摘 要】本文闡述了一個(gè)基于Unity3D開發(fā)的射擊類游戲,重點(diǎn)實(shí)現(xiàn)了碰撞檢測(cè)、敵人智能跟蹤、動(dòng)畫設(shè)置、聲音播放等功能,UI搭建方面實(shí)現(xiàn)了界面的制作、玩家血量條、玩家分?jǐn)?shù)記錄和音量界面的制作。

【關(guān)鍵詞】Unity3D軟件;射擊類游戲;UI界面

1.引言

小游戲作為電子游戲家族中的一個(gè)獨(dú)特成員,在其中扮演著重要的角色。通常以休閑益智類為主,主要分為單機(jī)版和網(wǎng)絡(luò)版。本次開發(fā)的噩夢(mèng)射手就是屬于休閑小游戲,正是迎合了當(dāng)前游戲產(chǎn)業(yè),具備良好的發(fā)展前景。

2.游戲系統(tǒng)設(shè)計(jì)

2.1 場(chǎng)景搭建

游戲素材來(lái)自于Unity引擎中自帶的資源商店,在搜索界面輸入Survival shooter就可以搜索到本題的素材,通過(guò)下載導(dǎo)入就可將游戲素材導(dǎo)入到Unity資源文件中。根據(jù)原場(chǎng)景進(jìn)行場(chǎng)景搭建,搭建場(chǎng)景的所有游戲?qū)ο蠖紩?huì)在Hierarchy視圖中顯示出來(lái),方便開發(fā)者對(duì)場(chǎng)景隨時(shí)進(jìn)行更改與調(diào)整。

2.2 場(chǎng)景中的物理檢測(cè)設(shè)置

游戲中能夠發(fā)生碰撞的物理引擎是Collider組件,受到重力、摩擦力和角摩擦力的是Rigidbody組件,當(dāng)給游戲中的對(duì)象加上這些組件的時(shí)候,他們就會(huì)模擬出現(xiàn)實(shí)世界中的一些物理現(xiàn)象。

在物理引擎中,兩個(gè)物體發(fā)生碰撞的條件是:兩個(gè)物體都具有碰撞器,并且一個(gè)物體必須帶剛體,而且兩個(gè)物體發(fā)生相對(duì)運(yùn)動(dòng),這是在Unity的物理引擎中產(chǎn)生物理碰撞的必要條件。

2.3 UI界面的制作

在本題中游戲界面中顯示的有玩家的血量和得到的分?jǐn)?shù)記錄,當(dāng)按下ESC鍵會(huì)彈出聲音控制面板和結(jié)束暫停重新開始界面。

3.游戲功能實(shí)現(xiàn)

3.1 主角的移動(dòng)

通過(guò)獲取虛擬軸來(lái)實(shí)現(xiàn)主角的移動(dòng),水平虛擬軸和垂直虛擬軸,水平虛擬軸對(duì)應(yīng)了鍵盤上的A、D,垂直虛擬軸對(duì)應(yīng)了鍵盤的W、S。獲取到他們,將它們賦值給主角的位置,這樣就可以在按下W、A、S、D讓主角移動(dòng)了,其本質(zhì)就是改變了主角在三維世界中的位置來(lái)達(dá)到移動(dòng)的目的。

3.2 主角的轉(zhuǎn)向

主角的轉(zhuǎn)向是通過(guò)鼠標(biāo)來(lái)控制的,由于鼠標(biāo)是在屏幕上的,因此首先要將鼠標(biāo)的位置轉(zhuǎn)換到世界坐標(biāo)中,在本題中通過(guò)射線檢測(cè)的方法與四元數(shù)的轉(zhuǎn)向的方法來(lái)讓主角轉(zhuǎn)向并且很自然的轉(zhuǎn)向。

3.3 主角的動(dòng)畫播放

通過(guò)直接拖拽的方式將主角的動(dòng)畫添加到這個(gè)面板中,在游戲剛開始時(shí),不移動(dòng)主角時(shí),我們就會(huì)讓主角執(zhí)行一個(gè)閑置的狀態(tài),當(dāng)按下W、A、S、D中的任何一個(gè)時(shí),主角就會(huì)播放移動(dòng)的動(dòng)畫,此時(shí)在主角的這個(gè)游戲?qū)ο蟮膶傩悦姘迳霞由弦粋€(gè)Animator組件,然后將我們創(chuàng)建的這個(gè)動(dòng)畫狀態(tài)機(jī)添加給Animator組件,這樣就這兩個(gè)組件連接在一起了,最后在主角的這個(gè)腳本中將這個(gè)組件拿到,加上一些判定,在適當(dāng)?shù)臅r(shí)候來(lái)播放這個(gè)動(dòng)畫就可以了。

3.4 主角的射擊

主角的射擊是通過(guò)鼠標(biāo)來(lái)控制的,當(dāng)玩家按下鼠標(biāo)左鍵的時(shí)候,主角會(huì)對(duì)敵人進(jìn)行射擊,在本題中,主角射出是一條線段,這個(gè)線段有一個(gè)最遠(yuǎn)距離,也會(huì)給場(chǎng)景中的所有對(duì)象添加一個(gè)層(ShootableMask),也會(huì)將敵人添加這個(gè)層中,當(dāng)主角打到這個(gè)層中的任何一個(gè)對(duì)象是,這個(gè)線段就會(huì)以這個(gè)對(duì)象作為終點(diǎn),否則射線就會(huì)打到最遠(yuǎn)的距離。

4.敵人的產(chǎn)生、移動(dòng)和動(dòng)畫播放

4.1 敵人的產(chǎn)生

先在已經(jīng)搭建好的場(chǎng)景中創(chuàng)建三個(gè)空的游戲?qū)ο?,將它們放置在想要敵人生成的地方,然后再?chuàng)建一個(gè)空的游戲?qū)ο髞?lái)管理這三個(gè)位置,將在這個(gè)空的游戲?qū)ο髵煸谝粋€(gè)實(shí)例化敵人的腳本,其次要將素材中的敵人設(shè)置好做成預(yù)設(shè)體,在腳本中拿到預(yù)設(shè)體和將要產(chǎn)生敵人的位置,這樣敵人的生成就可以了。

4.2 敵人的移動(dòng)是通過(guò)自動(dòng)尋路來(lái)尋找主角的。

使用Unity中自帶的導(dǎo)航系統(tǒng),可以讓敵人自動(dòng)尋路,只要在一開始的時(shí)候給敵人一個(gè)主角位置,之后就會(huì)跟著主角的移動(dòng)來(lái)移動(dòng)。

4.3 敵人的動(dòng)畫播放

敵人的動(dòng)畫的邏輯是,當(dāng)游戲開始時(shí),給敵人加上移動(dòng)的動(dòng)畫,動(dòng)畫參數(shù)選擇Trigger類型的參數(shù),這是從移動(dòng)的動(dòng)畫到閑置狀態(tài)的動(dòng)畫之間的切換,它的觸發(fā)條件就是當(dāng)玩家死亡的時(shí)候,而敵人死亡的動(dòng)畫是無(wú)論是在移動(dòng)狀態(tài)下還是閑置狀態(tài)都會(huì)觸發(fā),所以要將死亡的動(dòng)畫加在任何狀態(tài)的狀態(tài)上,這樣就可以隨時(shí)觸發(fā)這個(gè)動(dòng)畫了。

4.4 主角與敵人攻擊邏輯的實(shí)現(xiàn)

主角攻擊與主角的健康,在前面提到過(guò)主角的射擊,而主角攻擊就是用槍來(lái)射擊敵人,并且給槍設(shè)置的每發(fā)子彈是20點(diǎn)傷害,玩家的血量設(shè)置的是100點(diǎn)血量,在實(shí)現(xiàn)開始前記錄一個(gè)當(dāng)前玩家的血量和初始血量。

敵人的攻擊與健康,每一個(gè)敵人的游戲?qū)ο笊砩隙紩?huì)具有一個(gè)觸發(fā)器,當(dāng)敵人接近主角的一定范圍時(shí),敵人就會(huì)對(duì)玩家發(fā)起攻擊,本題中,敵人的攻擊是10點(diǎn)傷害,血量也是100點(diǎn)上限,在開始前也記錄一個(gè)當(dāng)前敵人的血量和初始血量。

4.5 UI界面的搭建與代碼之間的關(guān)聯(lián)

UI界面的搭建也是游戲制作的重要部分,首先我們先創(chuàng)建一個(gè)Panel,并且將它的大小設(shè)置與畫布大小一樣,它有一個(gè)Image組件,里面有一個(gè)Color的屬性,將顏色改變?yōu)榧t色,然后將它的透明度設(shè)置為0,這樣我們?cè)谟螒蜷_始時(shí)就會(huì)看不到。顏色的改變我們就通過(guò)主角的健康腳本用代碼來(lái)實(shí)現(xiàn),首先我們先獲取到這個(gè)能改變這個(gè)Panel顏色的組件Image組件,并且要給這個(gè)組件賦一個(gè)初始值,就是主角受到攻擊以后,顏色顯示為這個(gè)初始值,如果沒(méi)有受到攻擊,我們就讓顏色通過(guò)一個(gè)Color.Lerp()的方法漸變?yōu)橥该?,其中,這個(gè)方法有三個(gè)參數(shù),第一個(gè)參數(shù)就是主角受到攻擊時(shí)的顏色,第二個(gè)參數(shù)就是Color.clear,第三個(gè)參數(shù)我們會(huì)給一個(gè)這個(gè)顏色從主角受到攻擊時(shí)的顏色到透明的一個(gè)漸變的速度,因此我們會(huì)在剛開始的時(shí)候給一個(gè)漸變速度,讓這個(gè)速度在乘以一個(gè)Time.deltaTime,這樣就是顯得很平滑,不至于突兀。

接下來(lái)是主角的血條制作,我們使用的一個(gè)是叫Slider的游戲組件,他是一個(gè)滑動(dòng)條,這個(gè)組件上有Interactable、Min Value、Max Value、Value屬性,其中第一個(gè)屬性是是否可交互,默認(rèn)為True,如果將其改為False將不能與代碼鼠標(biāo)完成交互,第二個(gè)是這個(gè)滑塊的最小值,第三個(gè)是這個(gè)滑塊的最大值,第四個(gè)是這個(gè)滑塊的值,默認(rèn)是0到1,在本題中,我們將主角的值設(shè)置為了100,因此我們將這個(gè)滑塊的最大值改為100,用來(lái)現(xiàn)實(shí)主角的血量。

在主角健康的腳本中將主角當(dāng)前的血量賦值給這個(gè)Slider組件,這樣在游戲開始時(shí)主角受到攻擊時(shí),那個(gè)血量就會(huì)根據(jù)敵人的攻擊來(lái)減少。

主角所得分?jǐn)?shù)的計(jì)算,寫一個(gè)腳本掛載到顯示分?jǐn)?shù)的文本上,通過(guò)這個(gè)腳本來(lái)獲取每個(gè)敵人死亡后的分?jǐn)?shù)。

最后就是我們的音量面板和游戲暫停面板,跟上面的做法一樣,在畫布上選擇一些Slider游戲,不過(guò)在這又用了兩個(gè)新的游戲?qū)ο螅粋€(gè)Button游戲?qū)ο?,一個(gè)Toggle游戲?qū)ο螅珺utton游戲?qū)ο笫强牲c(diǎn)擊的按鈕,在這通過(guò)ESC鍵可以呼出這個(gè)面板,最下方有一個(gè)繼續(xù)游戲(Resume)按鈕,一個(gè)離開游戲按鈕(Quit Game),在上面就是一個(gè)是否開關(guān)聲音的Toggle游戲組件,當(dāng)取消這個(gè)按鈕時(shí),我們的游戲界面將沒(méi)有聲音,在上面就是通過(guò)我們的Slider游戲?qū)ο髞?lái)實(shí)現(xiàn)的。通過(guò)與代碼的交互,我們就可以實(shí)現(xiàn)以上所說(shuō)的這些。

5.總結(jié)

本次設(shè)計(jì)的第一人稱射擊的休閑類小游戲,功能單一,后期會(huì)逐步完善。

【參考文獻(xiàn)】

[1]吳志達(dá).基于Unity3D游戲引擎的游戲研究與實(shí)現(xiàn)[D].中山大學(xué),2012.

[2]李錦榮,郭磊,譚忠揚(yáng).基于Unity3D平臺(tái)的射擊游戲的開發(fā)[J].福建電腦,2015(02)171-173.

蓬安县| 德令哈市| 丁青县| 务川| 灵寿县| 贡觉县| 沅陵县| 峡江县| 湘乡市| 农安县| 彭阳县| 芮城县| 昌都县| 鹤壁市| 门头沟区| 鹿邑县| 宁河县| 西平县| 思茅市| 鄯善县| 阿巴嘎旗| 涪陵区| 玉屏| 昌江| 康保县| 甘德县| 宜川县| 凤冈县| 天门市| 河曲县| 江孜县| 广昌县| 墨脱县| 阿拉善右旗| 广丰县| 盐津县| 定兴县| 泽州县| 清苑县| 师宗县| 桃园县|