李愛軍
(蘇州職業(yè)大學(xué)計算機工程學(xué)院,蘇州 215104)
主要游戲方式便是酷跑。以一個成功的酷跑游戲《神廟逃亡》為例,我們可知酷跑類游戲的主要功能。玩家不能控制角色的移動速度,隨著游戲時間的推移,角色移動的速度越來越快,玩家操作的時間越來越短,考驗玩家的反應(yīng)能力來達到增加游戲難度的目的。
游戲有很多種類,主要有策略游戲、動作游戲、競速游戲、卡牌游戲、冒險游戲、體育游戲、休閑游戲、音樂游戲、模擬游戲、射擊游戲等。
本游戲為酷跑游戲,應(yīng)歸為競速游戲或休閑游戲。
本游戲的運行環(huán)境為手機Android 6.0 及以上系統(tǒng)版本,它的優(yōu)點是游戲界面非常簡潔,且占用的內(nèi)存資源少,操作起來很方便。
本游戲主要靠滑動屏幕控制角色移動來操作游戲,控制角色躲避障礙拾取金幣。游戲地圖分為三個跑道,向左滑為向左跑道移動,向右滑為向右跑道移動,向上滑為跳躍,向下滑為滾動,當角色在空中時向下滑動可以使角色快速落地滾動。
玩家運行主程序進入游戲畫面,出現(xiàn)開始菜單。開始菜單包含兩個按鈕,開始和退出。點擊開始按鈕,游戲開始運行,點擊退出按鈕,退出主程序。開始游戲后彈出暫停按鈕,點擊暫停按鈕游戲暫停,出現(xiàn)暫停菜單。暫停菜單包含兩個按鈕,返回游戲和退出游戲。點擊返回游戲,游戲繼續(xù);點擊退出按鈕,游戲退出。當游戲角色死亡時,出現(xiàn)結(jié)束菜單。結(jié)束菜單包含兩個按鈕,再次開始游戲和退出游戲。點擊再次開始游戲,游戲重新開始;點擊退出游戲,退出主程序。
本游戲是采用3D 虛擬技術(shù)和游戲物理引擎進行開發(fā)的,游戲的現(xiàn)場布景具有很強的真實感、立體感以及逼真的光影效果,用戶能夠在游戲中感受到絢麗多彩且富有沖擊感的感官體驗。
2.1.1 酷跑角色與場景搭建
在Scene 界面通過導(dǎo)入模型,拖拽搭建等步驟完成場景的初步搭建。
2.1.2 金幣組
將8個金幣設(shè)為一組,布置在跑道上。
2.1.3 障礙物與碰撞監(jiān)測器
障礙物有木板、小汽車、大巴,分別添加碰撞檢測器。
2.1.4 道具
將道具模型導(dǎo)入,制作碰撞動畫粒子特效。
2.1.5 游戲文本菜單
游戲菜單用來開始或退出游戲以控制游戲進程,右側(cè)為道具buff 剩余時間,右下角為音樂控制按鈕,左上角為收集的金幣數(shù)。
2.2.1 道路設(shè)置
游戲只有一個游戲場景,為一條無限長的馬路。通過交替移動兩段足夠長的道路實現(xiàn)“無限”道路的功能。
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 角色奔跑
作為一個酷跑類游戲,首先要讓游戲主角跑起來,我們通過在主角的模型上掛載一個主角控制腳本來實現(xiàn)。主角的控制腳本名為PlayerController。
通過在z軸正方向給主角添加一個正值,使主角可以沿z 軸正方向勻速跑動。然后在y 軸負方向,也就是默認的地面方向添加正值,使主角可以穩(wěn)定在地面上,不會違背物理常識。這里沒有選用unity3d 自帶的物理系統(tǒng),因為其系統(tǒng)在應(yīng)用時發(fā)生明顯的錯誤效果,所以進行了變量的賦值使其實現(xiàn)較真實的物理效果。
游戲主角以默認速度奔跑:
moveDirection.z=speed;
moveDirection.y-=gravity*Time.deltaTime;
characterController.Move((xDirection*10+moveDirection)*Time.deltaTime);
酷跑類游戲在游戲過程中會通過緩慢增加主角的奔跑速度來減少躲避障礙物的反應(yīng)時間,從而起到加大游戲難度的效果。本游戲中主角每奔跑一段固定長度的路程時增加一點奔跑速度,同時為了防止某些實力過于強的玩家在游戲中長時間不失敗導(dǎo)致的主角奔跑速度過高,游戲中還為主角的奔跑速度設(shè)置了最大值,使其速度不能無限制增長。
限制游戲主角的最大奔跑速度:
private void SetSpeed(float newSpeed)
{ if(newSpeed <=maxSpeed)
speed=newSpeed;
else
speed=maxSpeed; }
2.2.3 滑動檢測
本游戲的操作非常簡單,用指針在屏幕上進行上下左右的滑動即可控住主角的移動,一共設(shè)置了4個操作檢測,分別為“向上”“向下”“向左”“向右”。
首先創(chuàng)建一個枚舉類來存放上下左右空5種滑動狀態(tài)。
滑動方向枚舉類:
public enum InputDirection
{ NULL,
Left,
Right,
Up,
Down }
當玩家沒有觸摸屏幕時,屏幕沒有檢測到指針,滑動狀態(tài)默認為空值,即游戲主角以默認速度勻速奔跑。當玩家向上滑動屏幕時,屏幕檢測到指針,將狀態(tài)更新為“開始滑動”并記錄當前的指針位置。
當指針以某一個反向持續(xù)滑動20個單位時,記錄此位置與開始滑動位置時的向量,并將其轉(zhuǎn)化為角度,根據(jù)角度分析此次滑動的方向,同時將滑動狀態(tài)更新為“未開始滑動”。
2.2.4 玩家移動
當游戲中檢測到玩家的控制輸入后,角色要根據(jù)控制指令進行相應(yīng)的移動。當玩家向左滑動時,如果角色不在最左邊的道路上,那么角色向左移動一格。當玩家向右滑動時,如果角色不在最右邊的道路上,那么角色向右移動一格。
當玩家向上滑動時,角色進行一次跳躍。通過給角色y軸正方向添加正值來改變角色的豎直方向的位置。
當玩家向下滑動時,如果角色此時在地面上,那么角色進行一次翻滾,如果角色測試在跳躍中,那么角色迅速落到地面。與跳躍類似,通過給角色y軸負方向添加正值來改變角色在豎直方向的位置。
翻滾動作代碼:
if(inputDirection==InputDirection.Down)
{ AnimationManager.instance.animationHandler=AnimationManager.instance.PlayRoll; }
當主角已經(jīng)到達最左或最右的位置時不能再往左或往右移動,需要限制主角的移動以免跑出地圖。
2.2.5 道具效果
本游戲一共設(shè)置了4種道具,分別為磁鐵道具、加速道具、雙倍積分道具和二連跳道具。
磁鐵道具的效果為:角色自動吸取道路上的金幣,持續(xù)一段時間。實現(xiàn)原理為,為角色添加一個大小等于磁鐵作用范圍的碰撞檢測器,當碰撞檢測器碰撞到金幣時,觸發(fā)金幣的事件。拾取到磁鐵道具時激活該碰撞檢測器,持續(xù)時間結(jié)束時自動關(guān)閉。
二連跳道具效果為,玩家可以在跳躍過程中再次跳躍,當角色拾取到二連跳道具時,可以在道具持續(xù)時間內(nèi)進行二次跳躍。
二連跳道具代碼:
void JumpDouble()
{ AnimationManager.instance.animationHandler=AnimationManager.instance.PlayDoubleJump;
moveDirection.y+=jumpValue*1.3f; }
雙倍積分道具的效果為:將拾取金幣時獲得的積分翻倍,持續(xù)一段時間。實現(xiàn)原理為:增加積分的數(shù)值。
加速道具的效果為:大幅度提升角色的速度,持續(xù)一段時間。實現(xiàn)原理:增加奔跑速度的數(shù)值。
2.2.6 相機跟隨
本游戲為第三人稱視角游戲,為了使角色始終處于畫面中央,需要將顯示游戲畫面的相機對象設(shè)置為始終跟隨角色移動,位置處于角色身后的斜上方。
相機跟隨效果代碼:
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 碰撞檢測
碰撞檢測是非常重要的功能,游戲內(nèi)幾乎所有的物體交互都要依靠碰撞檢測來觸發(fā)。在游戲制作中,給需要碰撞檢測功能的物體添加碰撞檢測器組件boxcolliger便可實現(xiàn)碰撞檢測。
當角色觸碰到4 個具有特殊效果的道具時,激活特殊效果,銷毀道具,開啟效果持續(xù)時間計時器。
當角色觸碰到金幣時,銷毀金幣,增加玩家的積分。如果角色此時擁有磁鐵道具,那么當代表磁鐵效果返回的碰撞檢測器觸碰到金幣時,先使金幣平滑地飛向角色,制作磁鐵吸引的效果,當金幣觸碰到角色時,金幣銷毀,增加玩家的積分。
當角色觸碰到障礙物時,角色死亡,執(zhí)行死亡動畫。
障礙物碰撞。障礙物用來阻擋游戲角色的前進,并且在游戲角色碰撞到障礙物時結(jié)束游戲。對于大部分障礙物,都可以直接添加碰撞器使其在碰撞時觸發(fā)死亡效果。有兩種障礙物是特例,一種是車輛,游戲中的兩種車輛在玩家碰撞到時會觸發(fā)死亡效果,但是當游戲角色跳躍到車的頂部時,是可以在上面行走的,所以在添加碰撞器時要注意這一點;而另一種是下方有空間的擋板,游戲角色在沒有二連跳時無法越過,只能通過從下方空間翻滾經(jīng)過,在游戲制作中,翻滾動作雖然會播放翻滾動畫,但是碰撞器并不會播放翻滾動畫,所以要在播放翻滾動畫時短暫地關(guān)閉碰撞器,防止碰撞到障礙物,在經(jīng)過障礙物后再次將碰撞器開啟。
2.2.8 路面隨機生成障礙物
酷跑類游戲通常沒有通關(guān)功能,所以只要玩家可以保持游戲不失敗,就可以無限進行游戲。而前面講到本游戲?qū)崿F(xiàn)無限道路的方法為交替移動兩塊足夠長的道路,玩家需要在道路上使用道具或躲避障礙物。為了增加游戲的趣味性,游戲制作中需要在道路上隨機生成各種障礙物或道具。但是在制作過程中發(fā)現(xiàn),如果道具的生成完全隨機化,那么會出現(xiàn)大量的物品重疊或沒有通路等問題。所以為了保證在相對隨機的環(huán)境下也能正常游戲,解決辦法為手動制作多組道路上的障礙物排列,每當角色移動到新的道路時,隨機選取一組預(yù)先制作好的障礙物排列。
2.2.9 界面顯示
除了游戲主要的環(huán)境和角色以外,還需要多個UI 界面來顯示一些游戲內(nèi)數(shù)值。本游戲設(shè)置了積分顯示,道具持續(xù)時間顯示。積分顯示為記錄玩家拾取金幣的數(shù)值,普通情況下玩家每拾取1 個金幣,積分+1,在雙倍積分道具效果持續(xù)時間內(nèi),玩家每拾取一個金幣,積分+2。道具持續(xù)時間顯示為記錄玩家當前已激活道具的效果剩余時間,當玩家觸碰到道具時開始計時,當計時時間結(jié)束時道具效果結(jié)束。
金幣積分計數(shù)代碼:
public override void HitItem()
{ base.HitItem();
GameAttribute.instance.AddCoin(1); }
2.2.10 游戲進程控制
所有單機都必不可少地設(shè)置開始暫停等游戲進程控制。本游戲一共設(shè)置了開始游戲、暫停游戲、恢復(fù)游戲、重新開始游戲和退出游戲五個選項。第一次打開游戲時彈出開始游戲和退出游戲。點擊開始游戲按鈕,游戲開始并彈出暫停按鈕;點擊退出游戲按鈕,游戲關(guān)閉;點擊暫停按鈕,游戲暫停并彈出恢復(fù)游戲按鈕和退出按鈕;點擊恢復(fù)游戲按鈕,游戲繼續(xù);點擊退出游戲按鈕,游戲關(guān)閉。當角色死亡時,彈出重新開始游戲按鈕和退出游戲按鈕。點擊重新開始按鈕,游戲重新開始,開始界面與第一次進入時一致;點擊退出游戲按鈕,游戲退出。通過封裝方法到按鍵,由點擊事件激活。
當游戲重新開始時,需要將一切數(shù)值清空,包括玩家已獲得的積分,當前已激活道具的剩余時間等,還要重置角色的位置和道路的位置。
2.2.11 動畫與聲音播放
游戲過程中角色需要切換不同的動畫,正常跑步時播放跑步動畫,向左或向右移動時播放移動動畫,跳躍時播放跳躍動畫,翻滾時播放翻滾動畫,碰撞障礙物時播放倒地動畫。
本游戲一共有五種不同的音效,分別為菜單鍵點擊音效,金幣拾取音效,觸發(fā)道具音效,碰撞障礙物音效和滑動操作音效。
在游戲制作完成后,需要進行游戲測試,用來測試游戲中是否有與預(yù)期不符的異常。因為Unity3D 引擎可以實時測試的優(yōu)點,我們可以在游戲發(fā)布前先進行初步的流程測試。
首先測試游戲主角是否能根據(jù)玩家的操作進行正確的動作,然后是游戲中的4個道具是否可以正確地激發(fā)效果。同時,道具在激活時,游戲界面右上角的道具效果計時界面也要正確地為道具效果計時,在倒計時結(jié)束時道具效果也要同時消失。然后是游戲主角在拾取金幣時是否能正確地記錄金幣數(shù),在雙倍積分效果的持續(xù)時間內(nèi)拾取金幣是否可以正確地增加雙倍金幣數(shù)。還有游戲場景內(nèi)的各個障礙物測試,不同的障礙物擁有不用的碰撞區(qū)域,游戲角色在碰撞到障礙物時能否順利觸發(fā)死亡效果。最后是游戲菜單,對所有的游戲菜單按鍵測試,例如開始、暫停、退出等按鍵能否正確地實現(xiàn)。
游戲無論是在汽車的選擇、關(guān)卡的選擇還是在音效這一感官體驗上,都能給玩家?guī)聿灰粯拥囊曈X感受與聽覺感受。主菜單界面的幫助界面能夠幫助新手玩家更好地了解本游戲的玩法,選擇不同的車輛進行游戲會給玩家?guī)頍ㄈ灰恍碌母杏X,不同的關(guān)卡具有不同的難易程度,能夠適合不同的玩家群體,震撼的游戲背景音樂能夠帶來刺激的聽覺享受。