2D Game Kit概述與基本功能導覽 Featured

作為2018年開年的首推套件,2D Game Kit依然遵循了以往的方式,提供預製的遊戲物件與工具面板,讓初學者不寫代碼也能夠快速製作遊戲關卡,並且在操作過程中逐步適應Unity的遊戲架構以及工作流程。

本套件適合剛接觸Unity的群體,無論你是美術、程式設計或是單純對遊戲製作感興趣的人,都可以在了解基本操作與軟體界面之後快速上手。

以前的我很少會對官方教程類套件有如此這般的關注,不僅是因為遊戲資源看起來漂亮,更重要的是這個套件里的Demo本身就是一個比較完整的遊戲,其腳本的功能拆分更是值得Unity程序員認真研究與討論的優秀示例──如果你對遊戲代碼的開發模式或拆分模式有過了解,那麼這個套件可以把你從枯燥的理論與數據對比中解脫出來;如果你沒有了解所謂的開發模式,也同樣可以在分析套件資源和腳本關聯的時候學到很多實用技巧。這個套件的便利程度堪比剛開始學習3D動畫的學生直接拿到了“ANIMSCHOOL”的範本模型一樣,不用耗時間在建模、拆UV、畫貼圖、綁骨架等前置作業上,直接就在優秀人體模型的基礎上開始動畫的學習與創作,任何時候來看,這都是保持學習熱情的最佳實踐方法之一。

 

從Asset Store下載2D Game Kit並導入Unity后,可以從“2DGamekit”檔案夾中找到Scenes → Start場景,直接運行就是用本套件打造的橫版捲軸解密遊戲。遊戲的5個場景相互串聯,AD控制主角Ellen去收集鑰匙,期間需要觸碰開關,避開水塘,躲避/攻擊怪物以及Boss戰,可謂內容全面。遊戲地圖關聯如下圖:

map of 2D Game Kit

建議一開始先通關一次,否則貿然跟著官方教程一上來就開始新建場景會讓你對套件功能產生許多誤解。

1、新建場景:

從頂部菜單選擇 “Kit Tools → Create New Scene...”,在彈出的面板中填寫場景的名字然後點擊“Create”按鈕;

Ellen

2、新的場景中主角Ellen
可以用A鍵左移,D鍵右移,S下蹲,Space鍵跳躍,S+Space向下穿越一級平台,O鍵射擊,K鍵揮錘,E鍵開啟機關,按F12可以開啟Debug面板,設置O與K鍵的功能呢是否開啟;

3、繪製場景:

從頂部菜單選擇“Window → Tile Palette”開啟繪圖面板,面板提供用於水塘的“TilesetRockWaterBlockers”與普通地形的“TilesetGamekit”,切換到後者,可以選擇繪製岩石地形或是草地地形。

Tile Palette window

選中畫筆工具和其中一個圖案,就可以在場景中繪製想要的地形了,繪製的地形會自動合併成一個名為Tilemap的物件,藏在Hierarchy中的TilemapGrid裡面。畫錯的地形可以用橡皮擦去,但有時會擦不乾淨殘留一些碰撞體,當運行遊戲時發現角色可以凌空站立的時候,可以在Hierarchy中選擇Tilemap查看全部的地形的碰撞體分佈,這種情況往往出現在Tilemap上名叫“Tilemap Collider 2D”的控件取消了默認的“Used By Composite”勾選狀態,只要重新勾選讓系統重新計算地形碰撞體的分佈通常都可以解決。

4、美化場景

遊戲中可以跟主角自帶的燈光交互的場景物件可以在“Project → 2DGamekit → Art → Sprites → Environment”里找到,拖拽到Scene窗口中,開始為關卡添加美化元素。

5、傷血的場景物件

遊戲中可交互的物件則都在“Project → 2DGamekit → Prefabs”裡面,其中“Environment”資料夾中的酸水池“Acid”和地刺“Spikes”都掛載了名為“Damager”的腳本,可以與主角身上掛載的腳本“Damageable”發生交互。角色踩到地刺會減少一滴血並且小幅後跳,掉入了酸水池同樣也是減少一滴血,但是位置會重置在最近的岸邊。

Acid Spikes

6、移動平台

在場景中添加一個移動平台,好讓主角安全通過酸水池,從“Project → 2DGamekit → Prefabs → Interactables”中把“MovingPlatform”拖到場景中,在掛載的腳本“Moving Platform”中“Add Node”添加移動的節點,調整Speed旁邊的數值可以改變平台移動的速度,勾選Start Moving並將Looping設置成“BACK_FORTH”,會讓平台在各節點之間來回移動。
Moving Platform

7、可破壞的物件

 “Project → 2DGamekit → Prefabs → Interactables”中有DestructableColumn和DestructableWall是可以被K鍵攻擊打碎的物件,將後一個墻拖進場景中,在Hierarchy里查看它的子物件之一“DestructibleWall_Whole”,它跟主角一樣掛載了“Damageable”腳本,說明可以被擊碎,生命數值可以在“Starting Health”里調整,默認生命為5,而主角K鍵攻擊默認攻擊力為1,所以需要大5次才能破壞它。
destructable Pad Door

8、機關門

同樣在“Project → 2DGamekit → Prefabs → Interactables”中有一個名為Door的預製物件,將它拖動到場景中,注意它的圖片下方有一個同樣大小的格子(高度是4格多一點,主角身高才不到兩格而已),這個格子如果擋住了下方的道路主角是無法通過的。Door物件無法被攻擊打破,必須使用機關“PressurePad”與大門建立關聯才能“開啟大門”(開啟大門是一個已經預先做好設定的動畫)。

將一個“PressurePad”放在大門左側(假設你的遊戲也是從左向右進行的),在其掛載的“Pressure Pad”腳本里找到“On Pressed()”區域,裡面已經有“踩下去發亮”與“播放聲音”的設定,點擊下面的“+”號添加新的欄位,並從Hierarchy里把Door物件拖動到新欄位左下角的空格里(左鍵按下去不要鬆開直接拖動到目的地,否則Inspector會從PressurePad替換成Door的參數),然後就可以在右上角的下拉菜單里將“No Function”改成“Animator → Play(String)”,然後在右下角填寫字串“DoorOpening”(注意大小寫),這裡填寫的文字其實是Animator的預製動畫文件“DoorOpening”的文件名,它存在“Project → 2DGamekit → Art → Animations → AnimationClips → Interactables”里,所以這個新增的區塊其實就是告訴系統在主角踩在踏板上的時候用“Animator → Play(DoorOpening)”播放這段開門的動畫。

9、敵人

在“Project → 2DGamekit → Prefabs → Enemies”裡面有兩個敵人的Prefab,粉色的Chomper為近戰怪物,藍色的SpitterPrefab為遠程怪物,近戰怪物自帶移動和攻擊功能,遠程怪物則不能移動,有偵測範圍與攻擊的指令。敵人的參數都可以在其掛載的“Enemy Behaviour”里做調整,例如偵測範圍、偵測角度、攻擊範圍等,也可以為其添加跟可推動的石塊間的關聯,讓墜落的石塊將怪物砸死。Enemies10、可推動的石塊

在“Project → 2DGamekit → Prefabs → Interactables”中有一個名為PushableBox的預製物件,默認狀況可以被主角左右推動,如果從高處落下,下方恰好有敵人的話,會以下圖的方式略微彈跳幾下然後疊在敵人的頭上。

PushableBox crush SpitterPrefab

給它添加“Damager”腳本,把碰撞體的外框設置到石塊四周,並且將參數Damage的數值設置為大於敵人生命的數值(在敵人身上的Damageable腳本中的Starting Health,默認血量是1),然後將“Hittable Layers”設置成“Nothing”取消所有選擇,然後再設置為“Enemy”,那麼會在落下時對敵人造成傷害,壓扁它。

heal Key Switch teleporter

11、醫療包(HealthPickup)

默認狀態下,主角在滿血狀態下不會撿起醫療包,醫療包的參數可以在其掛載的“Health Pickup”腳本中調整,比如將回復量改成更大的數值。

12、一次性開關(SingleUseSwitch)

與多次使用的開關一樣是通過“Interact On Trigger 2D”腳本來實現功能綁定的,差別之一是Layers的參數不同。一次性開關可以被槍激活是因為其Layers的參數設定為Bullet。

在OnEnter區域點擊“+”號,並將移動平台拖動到左下角,然後在右上角的下拉菜單中,將“No Function”改為“MovingPlatform → StartMoving()” 就可以把開關用於啟動移動平台了。

13、撿鑰匙與倉庫系統

首先在場景中再添加一個Door,暫且叫它Door2,它是要跟鑰匙綁定的物件。

將鑰匙拖動到場景中,並且擺放在主角可抵達的位置上,然後為其添加“Inventory Item”腳本。此時鑰匙周圍的白色圓圈為主角可以撿到鑰匙的範圍,通過減小“Circle Collider 2D”腳本中的“Radius”數值來縮減偵測的半徑,讓它緊緊圍繞在鑰匙周圍即可;

將“Inventory Key”的參填入“Key1”,然後把“Layers”裡的設定清空,只勾選“Player”選項;

接著從“Project → 2DGamekit → Audio → Interactables”里找到一個合適的音效把它拖給鑰匙“Inventory Item”腳本中的“clip”欄位;

最後,勾選“Disable On Enter”,完成設定。

那這個Key1是什麼東東呢?
選中場景中的主角Ellen,在其掛載的腳本中找到最下面的“Inventory Controller”里可以看到它有Key1~3以及Staff和Gun著5個倉庫系統事件。點擊Key1左側的箭頭展開面板,在“Add()”下面點擊“+”號添加一個事件,把Door2拖動到左下角,然後將右上角的下拉菜單里從“No Function”改成“Animator → Play(String)”,然後在右下角填寫字串“DoorOpening”(注意大小寫),讓主角撿到鑰匙的時候開啟大門Door2。

14、如果鑰匙和Door2距離很遠,無法出現在同個畫面中,要怎麼呈現兩者的聯繫呢?

從“Project → 2DGamekit → Prefabs → UIPrefabs”找到“KeyCanvas”將其拖動到Hierarchy里“--- UI ---”下面(注意,是下面,不是其子物件),這時候運行遊戲,如果撿到鑰匙的話,右上角的鑰匙圖標會亮起。

“KeyCanvas” 掛載的最後一個腳本“Key UI”里的“Key Names”參數恰好對應著主角身上的Key1~3,如果將Size從3改成1,則只剩下一個欄位“Element 0”,其值為“Key1”,這時再運行遊戲會發現右上角的空鑰匙圖標只剩下一個了,而這個空鑰匙圖標仍然跟key1腳本保持聯繫。

15、傳送門

從“Project → 2DGamekit → Prefabs → Interactables”里把一個“Teleporter”放到場景終點,接下來的設定會讓主角Ellen通過傳送門后傳送回遊戲關卡的起點,所以在起點處也放置一個“Teleporter”,方便起見,終點的叫傳送門1,起點的叫傳送門2。

先從傳送門1所掛載的腳本“Transition Point”里將“Transition Type”改成“Same Scene”,從場景中把Ellen拖給“Transitioning Game Object”,再將傳送門2拖給“Destination Transform”設定傳送后的位置。

“Transition When”欄位里有三個選項,將其設置成“Interact Pressed”,就可以讓角色停留在傳送門1上不做任何動作,按下鍵盤上的E鍵之後才將Ellen傳送回起點。

16、提示文字窗口

從“Project → 2DGamekit → Prefabs → UIPrefabs”中找到“DialugueCanvas”拖動到Hierarchy的“--- UI ---”下面,默認狀態下它是未被激活的狀態,接下來要在傳送門1上添加觸發開關來顯示該文字畫布。

選中傳送門1,為其添加一個“Interaction On Button 2D”腳本,首先將其中的“Layers”改成只有“Player”被勾選,來確保只有主角站在門口才會觸發事件。

 在“On Enter()”區域下方點擊“+”號添加一個事件,把場景中的“DialoguiCanvas”拖動到左下角,然後把右上角的“No Function”改成“DialogueCanvasController.ActivateCanvasWithText”,右下角欄位填寫的內容會作為顯示文字出現在“DialogueCanvas”里,先填寫英文“Press E to teleport to begining....”;

接下來繼續設定傳送門1的事件,在“On Exit()”區域添加事件並且把“DialogueCanvas”拖進左下角,然後把右上角的“No Function”改成“DialogueCanvasController.DeactivateCanvasWithDelay”,右下角的數字表示延後幾秒才執行消失的指令,填入0.8;

這時候運行遊戲,Ellen站在傳送門1里的時候,“DialogueCanvas”會顯示,顯示內容為上面填入的“Press E to teleport to begining....”,但在傳送之後或離開傳送門1範圍后,經過0.8秒文字畫布會消失。

總結:

有了以上的基本模塊新手就可以開始製作自己的關卡了。

至於角色從平台墜落不會死亡、角色死掉后沒有顯示也無法重啟遊戲等需要更進一步優化的功能我們會再之後陸續補充。如果等不及或是英文水平還不錯的話,可以在套件的“Documentation”里對照參考文檔來學習如何製作。

如果你是程序員,那麼除了閱讀文檔以外,多花些時間搞清楚各種交互物件的腳本是如何運作、如何獨立卻又保持可相互關聯的特性對於你理解代碼結構非常有幫助哦。

Last modified on 週日, 04 三月 2018 12:45
Rate this item
(0 votes)
back to top