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

?

基于Unity 3D 酷跑游戲的設(shè)計(jì)與實(shí)現(xiàn)

2022-03-24 04:11:00李愛(ài)軍
現(xiàn)代計(jì)算機(jī) 2022年19期
關(guān)鍵詞:金幣障礙物滑動(dòng)

李愛(ài)軍

(蘇州職業(yè)大學(xué)計(jì)算機(jī)工程學(xué)院,蘇州 215104)

0 引言

主要游戲方式便是酷跑。以一個(gè)成功的酷跑游戲《神廟逃亡》為例,我們可知酷跑類游戲的主要功能。玩家不能控制角色的移動(dòng)速度,隨著游戲時(shí)間的推移,角色移動(dòng)的速度越來(lái)越快,玩家操作的時(shí)間越來(lái)越短,考驗(yàn)玩家的反應(yīng)能力來(lái)達(dá)到增加游戲難度的目的。

1 游戲主要設(shè)計(jì)

1.1 游戲類型定位

游戲有很多種類,主要有策略游戲、動(dòng)作游戲、競(jìng)速游戲、卡牌游戲、冒險(xiǎn)游戲、體育游戲、休閑游戲、音樂(lè)游戲、模擬游戲、射擊游戲等。

本游戲?yàn)榭崤苡螒?,?yīng)歸為競(jìng)速游戲或休閑游戲。

1.2 運(yùn)行環(huán)境

本游戲的運(yùn)行環(huán)境為手機(jī)Android 6.0 及以上系統(tǒng)版本,它的優(yōu)點(diǎn)是游戲界面非常簡(jiǎn)潔,且占用的內(nèi)存資源少,操作起來(lái)很方便。

1.3 游戲玩法

本游戲主要靠滑動(dòng)屏幕控制角色移動(dòng)來(lái)操作游戲,控制角色躲避障礙拾取金幣。游戲地圖分為三個(gè)跑道,向左滑為向左跑道移動(dòng),向右滑為向右跑道移動(dòng),向上滑為跳躍,向下滑為滾動(dòng),當(dāng)角色在空中時(shí)向下滑動(dòng)可以使角色快速落地滾動(dòng)。

1.4 游戲流程

玩家運(yùn)行主程序進(jìn)入游戲畫(huà)面,出現(xiàn)開(kāi)始菜單。開(kāi)始菜單包含兩個(gè)按鈕,開(kāi)始和退出。點(diǎn)擊開(kāi)始按鈕,游戲開(kāi)始運(yùn)行,點(diǎn)擊退出按鈕,退出主程序。開(kāi)始游戲后彈出暫停按鈕,點(diǎn)擊暫停按鈕游戲暫停,出現(xiàn)暫停菜單。暫停菜單包含兩個(gè)按鈕,返回游戲和退出游戲。點(diǎn)擊返回游戲,游戲繼續(xù);點(diǎn)擊退出按鈕,游戲退出。當(dāng)游戲角色死亡時(shí),出現(xiàn)結(jié)束菜單。結(jié)束菜單包含兩個(gè)按鈕,再次開(kāi)始游戲和退出游戲。點(diǎn)擊再次開(kāi)始游戲,游戲重新開(kāi)始;點(diǎn)擊退出游戲,退出主程序。

1.5 開(kāi)發(fā)技術(shù)

本游戲是采用3D 虛擬技術(shù)和游戲物理引擎進(jìn)行開(kāi)發(fā)的,游戲的現(xiàn)場(chǎng)布景具有很強(qiáng)的真實(shí)感、立體感以及逼真的光影效果,用戶能夠在游戲中感受到絢麗多彩且富有沖擊感的感官體驗(yàn)。

2 游戲界面搭建

2.1 酷跑角色與場(chǎng)景搭建

2.1.1 酷跑角色與場(chǎng)景搭建

在Scene 界面通過(guò)導(dǎo)入模型,拖拽搭建等步驟完成場(chǎng)景的初步搭建。

2.1.2 金幣組

將8個(gè)金幣設(shè)為一組,布置在跑道上。

2.1.3 障礙物與碰撞監(jiān)測(cè)器

障礙物有木板、小汽車、大巴,分別添加碰撞檢測(cè)器。

2.1.4 道具

將道具模型導(dǎo)入,制作碰撞動(dòng)畫(huà)粒子特效。

2.1.5 游戲文本菜單

游戲菜單用來(lái)開(kāi)始或退出游戲以控制游戲進(jìn)程,右側(cè)為道具buff 剩余時(shí)間,右下角為音樂(lè)控制按鈕,左上角為收集的金幣數(shù)。

2.2 游戲邏輯實(shí)現(xiàn)

2.2.1 道路設(shè)置

游戲只有一個(gè)游戲場(chǎng)景,為一條無(wú)限長(zhǎng)的馬路。通過(guò)交替移動(dòng)兩段足夠長(zhǎng)的道路實(shí)現(xiàn)“無(wú)限”道路的功能。

void Update(){

if(transform.position.z>floorOnRunning.transform.position.z+32)

{ RemoveItem(floorOnRunning);

Addtem(floor0nRunning);

floorOnRunning. transform. position=new Vector3(0,0,floorforsard.transform.position.z+32);

Game0bject temp=floorOnRunning;

floorOnRunning=floorForward;

floorForward=temp;}}

2.2.2 角色奔跑

作為一個(gè)酷跑類游戲,首先要讓游戲主角跑起來(lái),我們通過(guò)在主角的模型上掛載一個(gè)主角控制腳本來(lái)實(shí)現(xiàn)。主角的控制腳本名為PlayerController。

通過(guò)在z軸正方向給主角添加一個(gè)正值,使主角可以沿z 軸正方向勻速跑動(dòng)。然后在y 軸負(fù)方向,也就是默認(rèn)的地面方向添加正值,使主角可以穩(wěn)定在地面上,不會(huì)違背物理常識(shí)。這里沒(méi)有選用unity3d 自帶的物理系統(tǒng),因?yàn)槠湎到y(tǒng)在應(yīng)用時(shí)發(fā)生明顯的錯(cuò)誤效果,所以進(jìn)行了變量的賦值使其實(shí)現(xiàn)較真實(shí)的物理效果。

游戲主角以默認(rèn)速度奔跑:

moveDirection.z=speed;

moveDirection.y-=gravity*Time.deltaTime;

characterController.Move((xDirection*10+moveDirection)*Time.deltaTime);

酷跑類游戲在游戲過(guò)程中會(huì)通過(guò)緩慢增加主角的奔跑速度來(lái)減少躲避障礙物的反應(yīng)時(shí)間,從而起到加大游戲難度的效果。本游戲中主角每奔跑一段固定長(zhǎng)度的路程時(shí)增加一點(diǎn)奔跑速度,同時(shí)為了防止某些實(shí)力過(guò)于強(qiáng)的玩家在游戲中長(zhǎng)時(shí)間不失敗導(dǎo)致的主角奔跑速度過(guò)高,游戲中還為主角的奔跑速度設(shè)置了最大值,使其速度不能無(wú)限制增長(zhǎng)。

限制游戲主角的最大奔跑速度:

private void SetSpeed(float newSpeed)

{ if(newSpeed <=maxSpeed)

speed=newSpeed;

else

speed=maxSpeed; }

2.2.3 滑動(dòng)檢測(cè)

本游戲的操作非常簡(jiǎn)單,用指針在屏幕上進(jìn)行上下左右的滑動(dòng)即可控住主角的移動(dòng),一共設(shè)置了4個(gè)操作檢測(cè),分別為“向上”“向下”“向左”“向右”。

首先創(chuàng)建一個(gè)枚舉類來(lái)存放上下左右空5種滑動(dòng)狀態(tài)。

滑動(dòng)方向枚舉類:

public enum InputDirection

{ NULL,

Left,

Right,

Up,

Down }

當(dāng)玩家沒(méi)有觸摸屏幕時(shí),屏幕沒(méi)有檢測(cè)到指針,滑動(dòng)狀態(tài)默認(rèn)為空值,即游戲主角以默認(rèn)速度勻速奔跑。當(dāng)玩家向上滑動(dòng)屏幕時(shí),屏幕檢測(cè)到指針,將狀態(tài)更新為“開(kāi)始滑動(dòng)”并記錄當(dāng)前的指針位置。

當(dāng)指針以某一個(gè)反向持續(xù)滑動(dòng)20個(gè)單位時(shí),記錄此位置與開(kāi)始滑動(dòng)位置時(shí)的向量,并將其轉(zhuǎn)化為角度,根據(jù)角度分析此次滑動(dòng)的方向,同時(shí)將滑動(dòng)狀態(tài)更新為“未開(kāi)始滑動(dòng)”。

2.2.4 玩家移動(dòng)

當(dāng)游戲中檢測(cè)到玩家的控制輸入后,角色要根據(jù)控制指令進(jìn)行相應(yīng)的移動(dòng)。當(dāng)玩家向左滑動(dòng)時(shí),如果角色不在最左邊的道路上,那么角色向左移動(dòng)一格。當(dāng)玩家向右滑動(dòng)時(shí),如果角色不在最右邊的道路上,那么角色向右移動(dòng)一格。

當(dāng)玩家向上滑動(dòng)時(shí),角色進(jìn)行一次跳躍。通過(guò)給角色y軸正方向添加正值來(lái)改變角色的豎直方向的位置。

當(dāng)玩家向下滑動(dòng)時(shí),如果角色此時(shí)在地面上,那么角色進(jìn)行一次翻滾,如果角色測(cè)試在跳躍中,那么角色迅速落到地面。與跳躍類似,通過(guò)給角色y軸負(fù)方向添加正值來(lái)改變角色在豎直方向的位置。

翻滾動(dòng)作代碼:

if(inputDirection==InputDirection.Down)

{ AnimationManager.instance.animationHandler=AnimationManager.instance.PlayRoll; }

當(dāng)主角已經(jīng)到達(dá)最左或最右的位置時(shí)不能再往左或往右移動(dòng),需要限制主角的移動(dòng)以免跑出地圖。

2.2.5 道具效果

本游戲一共設(shè)置了4種道具,分別為磁鐵道具、加速道具、雙倍積分道具和二連跳道具。

磁鐵道具的效果為:角色自動(dòng)吸取道路上的金幣,持續(xù)一段時(shí)間。實(shí)現(xiàn)原理為,為角色添加一個(gè)大小等于磁鐵作用范圍的碰撞檢測(cè)器,當(dāng)碰撞檢測(cè)器碰撞到金幣時(shí),觸發(fā)金幣的事件。拾取到磁鐵道具時(shí)激活該碰撞檢測(cè)器,持續(xù)時(shí)間結(jié)束時(shí)自動(dòng)關(guān)閉。

二連跳道具效果為,玩家可以在跳躍過(guò)程中再次跳躍,當(dāng)角色拾取到二連跳道具時(shí),可以在道具持續(xù)時(shí)間內(nèi)進(jìn)行二次跳躍。

二連跳道具代碼:

void JumpDouble()

{ AnimationManager.instance.animationHandler=AnimationManager.instance.PlayDoubleJump;

moveDirection.y+=jumpValue*1.3f; }

雙倍積分道具的效果為:將拾取金幣時(shí)獲得的積分翻倍,持續(xù)一段時(shí)間。實(shí)現(xiàn)原理為:增加積分的數(shù)值。

加速道具的效果為:大幅度提升角色的速度,持續(xù)一段時(shí)間。實(shí)現(xiàn)原理:增加奔跑速度的數(shù)值。

2.2.6 相機(jī)跟隨

本游戲?yàn)榈谌朔Q視角游戲,為了使角色始終處于畫(huà)面中央,需要將顯示游戲畫(huà)面的相機(jī)對(duì)象設(shè)置為始終跟隨角色移動(dòng),位置處于角色身后的斜上方。

相機(jī)跟隨效果代碼:

void LateUpdate()

{ if(!isShaking

&&GameController.instance.isPlay

&&!GameController.instance.isPause)

{ pos.x=target.transform.position.x;

pos.y=Mathf.Lerp(pos.y,target.transform.position.y+height,Time.deltaTime*5);

pos.z=target.transform.position.z-distance;

transform.position=pos; }

2.2.7 碰撞檢測(cè)

碰撞檢測(cè)是非常重要的功能,游戲內(nèi)幾乎所有的物體交互都要依靠碰撞檢測(cè)來(lái)觸發(fā)。在游戲制作中,給需要碰撞檢測(cè)功能的物體添加碰撞檢測(cè)器組件boxcolliger便可實(shí)現(xiàn)碰撞檢測(cè)。

當(dāng)角色觸碰到4 個(gè)具有特殊效果的道具時(shí),激活特殊效果,銷毀道具,開(kāi)啟效果持續(xù)時(shí)間計(jì)時(shí)器。

當(dāng)角色觸碰到金幣時(shí),銷毀金幣,增加玩家的積分。如果角色此時(shí)擁有磁鐵道具,那么當(dāng)代表磁鐵效果返回的碰撞檢測(cè)器觸碰到金幣時(shí),先使金幣平滑地飛向角色,制作磁鐵吸引的效果,當(dāng)金幣觸碰到角色時(shí),金幣銷毀,增加玩家的積分。

當(dāng)角色觸碰到障礙物時(shí),角色死亡,執(zhí)行死亡動(dòng)畫(huà)。

障礙物碰撞。障礙物用來(lái)阻擋游戲角色的前進(jìn),并且在游戲角色碰撞到障礙物時(shí)結(jié)束游戲。對(duì)于大部分障礙物,都可以直接添加碰撞器使其在碰撞時(shí)觸發(fā)死亡效果。有兩種障礙物是特例,一種是車輛,游戲中的兩種車輛在玩家碰撞到時(shí)會(huì)觸發(fā)死亡效果,但是當(dāng)游戲角色跳躍到車的頂部時(shí),是可以在上面行走的,所以在添加碰撞器時(shí)要注意這一點(diǎn);而另一種是下方有空間的擋板,游戲角色在沒(méi)有二連跳時(shí)無(wú)法越過(guò),只能通過(guò)從下方空間翻滾經(jīng)過(guò),在游戲制作中,翻滾動(dòng)作雖然會(huì)播放翻滾動(dòng)畫(huà),但是碰撞器并不會(huì)播放翻滾動(dòng)畫(huà),所以要在播放翻滾動(dòng)畫(huà)時(shí)短暫地關(guān)閉碰撞器,防止碰撞到障礙物,在經(jīng)過(guò)障礙物后再次將碰撞器開(kāi)啟。

2.2.8 路面隨機(jī)生成障礙物

酷跑類游戲通常沒(méi)有通關(guān)功能,所以只要玩家可以保持游戲不失敗,就可以無(wú)限進(jìn)行游戲。而前面講到本游戲?qū)崿F(xiàn)無(wú)限道路的方法為交替移動(dòng)兩塊足夠長(zhǎng)的道路,玩家需要在道路上使用道具或躲避障礙物。為了增加游戲的趣味性,游戲制作中需要在道路上隨機(jī)生成各種障礙物或道具。但是在制作過(guò)程中發(fā)現(xiàn),如果道具的生成完全隨機(jī)化,那么會(huì)出現(xiàn)大量的物品重疊或沒(méi)有通路等問(wèn)題。所以為了保證在相對(duì)隨機(jī)的環(huán)境下也能正常游戲,解決辦法為手動(dòng)制作多組道路上的障礙物排列,每當(dāng)角色移動(dòng)到新的道路時(shí),隨機(jī)選取一組預(yù)先制作好的障礙物排列。

2.2.9 界面顯示

除了游戲主要的環(huán)境和角色以外,還需要多個(gè)UI 界面來(lái)顯示一些游戲內(nèi)數(shù)值。本游戲設(shè)置了積分顯示,道具持續(xù)時(shí)間顯示。積分顯示為記錄玩家拾取金幣的數(shù)值,普通情況下玩家每拾取1 個(gè)金幣,積分+1,在雙倍積分道具效果持續(xù)時(shí)間內(nèi),玩家每拾取一個(gè)金幣,積分+2。道具持續(xù)時(shí)間顯示為記錄玩家當(dāng)前已激活道具的效果剩余時(shí)間,當(dāng)玩家觸碰到道具時(shí)開(kāi)始計(jì)時(shí),當(dāng)計(jì)時(shí)時(shí)間結(jié)束時(shí)道具效果結(jié)束。

金幣積分計(jì)數(shù)代碼:

public override void HitItem()

{ base.HitItem();

GameAttribute.instance.AddCoin(1); }

2.2.10 游戲進(jìn)程控制

所有單機(jī)都必不可少地設(shè)置開(kāi)始暫停等游戲進(jìn)程控制。本游戲一共設(shè)置了開(kāi)始游戲、暫停游戲、恢復(fù)游戲、重新開(kāi)始游戲和退出游戲五個(gè)選項(xiàng)。第一次打開(kāi)游戲時(shí)彈出開(kāi)始游戲和退出游戲。點(diǎn)擊開(kāi)始游戲按鈕,游戲開(kāi)始并彈出暫停按鈕;點(diǎn)擊退出游戲按鈕,游戲關(guān)閉;點(diǎn)擊暫停按鈕,游戲暫停并彈出恢復(fù)游戲按鈕和退出按鈕;點(diǎn)擊恢復(fù)游戲按鈕,游戲繼續(xù);點(diǎn)擊退出游戲按鈕,游戲關(guān)閉。當(dāng)角色死亡時(shí),彈出重新開(kāi)始游戲按鈕和退出游戲按鈕。點(diǎn)擊重新開(kāi)始按鈕,游戲重新開(kāi)始,開(kāi)始界面與第一次進(jìn)入時(shí)一致;點(diǎn)擊退出游戲按鈕,游戲退出。通過(guò)封裝方法到按鍵,由點(diǎn)擊事件激活。

當(dāng)游戲重新開(kāi)始時(shí),需要將一切數(shù)值清空,包括玩家已獲得的積分,當(dāng)前已激活道具的剩余時(shí)間等,還要重置角色的位置和道路的位置。

2.2.11 動(dòng)畫(huà)與聲音播放

游戲過(guò)程中角色需要切換不同的動(dòng)畫(huà),正常跑步時(shí)播放跑步動(dòng)畫(huà),向左或向右移動(dòng)時(shí)播放移動(dòng)動(dòng)畫(huà),跳躍時(shí)播放跳躍動(dòng)畫(huà),翻滾時(shí)播放翻滾動(dòng)畫(huà),碰撞障礙物時(shí)播放倒地動(dòng)畫(huà)。

本游戲一共有五種不同的音效,分別為菜單鍵點(diǎn)擊音效,金幣拾取音效,觸發(fā)道具音效,碰撞障礙物音效和滑動(dòng)操作音效。

3 游戲測(cè)試

在游戲制作完成后,需要進(jìn)行游戲測(cè)試,用來(lái)測(cè)試游戲中是否有與預(yù)期不符的異常。因?yàn)閁nity3D 引擎可以實(shí)時(shí)測(cè)試的優(yōu)點(diǎn),我們可以在游戲發(fā)布前先進(jìn)行初步的流程測(cè)試。

首先測(cè)試游戲主角是否能根據(jù)玩家的操作進(jìn)行正確的動(dòng)作,然后是游戲中的4個(gè)道具是否可以正確地激發(fā)效果。同時(shí),道具在激活時(shí),游戲界面右上角的道具效果計(jì)時(shí)界面也要正確地為道具效果計(jì)時(shí),在倒計(jì)時(shí)結(jié)束時(shí)道具效果也要同時(shí)消失。然后是游戲主角在拾取金幣時(shí)是否能正確地記錄金幣數(shù),在雙倍積分效果的持續(xù)時(shí)間內(nèi)拾取金幣是否可以正確地增加雙倍金幣數(shù)。還有游戲場(chǎng)景內(nèi)的各個(gè)障礙物測(cè)試,不同的障礙物擁有不用的碰撞區(qū)域,游戲角色在碰撞到障礙物時(shí)能否順利觸發(fā)死亡效果。最后是游戲菜單,對(duì)所有的游戲菜單按鍵測(cè)試,例如開(kāi)始、暫停、退出等按鍵能否正確地實(shí)現(xiàn)。

4 結(jié)語(yǔ)

游戲無(wú)論是在汽車的選擇、關(guān)卡的選擇還是在音效這一感官體驗(yàn)上,都能給玩家?guī)?lái)不一樣的視覺(jué)感受與聽(tīng)覺(jué)感受。主菜單界面的幫助界面能夠幫助新手玩家更好地了解本游戲的玩法,選擇不同的車輛進(jìn)行游戲會(huì)給玩家?guī)?lái)煥然一新的感覺(jué),不同的關(guān)卡具有不同的難易程度,能夠適合不同的玩家群體,震撼的游戲背景音樂(lè)能夠帶來(lái)刺激的聽(tīng)覺(jué)享受。

猜你喜歡
金幣障礙物滑動(dòng)
嘩啦啦,下金幣啦
水中的金幣
幼兒100(2021年8期)2021-04-10 05:39:40
高低翻越
SelTrac?CBTC系統(tǒng)中非通信障礙物的設(shè)計(jì)和處理
一種新型滑動(dòng)叉拉花鍵夾具
誰(shuí)偷了我的金幣
Big Little lies: No One Is Perfect
找金幣
讀者(2017年8期)2017-03-29 19:06:34
滑動(dòng)供電系統(tǒng)在城市軌道交通中的應(yīng)用
一種基于變換域的滑動(dòng)聚束SAR調(diào)頻率估計(jì)方法
桂林市| 阿克苏市| 教育| 汉中市| 临桂县| 通州市| 大竹县| 绥中县| 烟台市| 堆龙德庆县| 平江县| 简阳市| 永福县| 神农架林区| 黑龙江省| 镇远县| 沙雅县| 镇安县| 香格里拉县| 库伦旗| 台湾省| 井陉县| 凤翔县| 桑植县| 嘉荫县| 巴马| 蕲春县| 吐鲁番市| 凤翔县| 济宁市| 甘泉县| 呼和浩特市| 黄陵县| 丹阳市| 滨州市| 达孜县| 昭苏县| 浑源县| 南涧| 南投市| 甘孜县|