項目 divider 尚未註冊或是沒有一個 view.php 檔案.

如何使用Unity Tilemap快速排列2D遊戲關卡

文章最後更新於2022-09-28

大家好,我是吉橙數位學院的Colin TPL。

知名的2D平台遊戲《Celeste》具有700多個關卡!

但是,他們的開發團隊僅有2位美術,那他們是如何做到大量製作關卡?

尤其繪製一個關卡是很耗費時間,更不用提還要做修正的話,會花上更多的時間。

所以如果有一種工具,可以使用規劃好的素材進行排列、組合,快速創造出不同樣貌的關卡,便能大大增加工作效率。

而筆者今天要分享的Unity Tilemap,便能幫助各位達成這個目的!

Tilemap的圖片素材
Tilemap的圖片素材

以下是吉橙使用素材所製作出的遊戲,可點擊下方連結試玩!
2D Platformer by DelightCollab (itch.io)

用Unity Tilemap排列出的遊戲關卡
用Unity Tilemap排列出的遊戲關卡

要了解如何使用Tilemap,以及它的一些眉眉角角,就讓我們從安裝(Install)開始!

※文章中所使用的圖片素材來自:Pixel Adventure 1 | 2D Characters | Unity Asset Store

Install Tilemap

選擇2D Template

如果在新增專案時,選擇的模板(Template)是2D的話,那在開啟專案後,就會安裝在裡面了。

在Unity Hub選擇2D專案模板

選擇URP Template

如果選擇的是URP的Template的話,則需要在Unity編輯器裡再做安裝。

在Unity Hub選擇URP專案模板

專案開啟後,從上方打開Window→Package Manager視窗。

專案如何開啟Package Manager視窗

找到2D Tilemap Editor的Package後,按下右下角的Install。

Install Tilemap的Package

Tilemap的使用流程

新增Tilemap物件

在Hierachy視窗,點擊滑鼠右鍵開啟選單後,新增一個Rectangular的Tilemap。

新增Tilemap物件

首先,我們將會看到的是Grid物件。

該物件身上的Grid元件,可以調整Cell (網格單元) 大小與間隔。

也可以調整網格排列方式,與轉換座標平面,通常是設定為XYZ軸。

而真正的Tilemap物件在Grid物件裡。

檢視Grid物件身上之Grid元件

準備材料

新增Tile Palette

要使用Tilmap建置場景前,需要準備好素材。

首先,從Window→2D,打開TilePalette視窗。

接著,創建一個TilePalette物件。

在TilePalette視窗中,點擊左上方Create New Palette按鈕,接著會彈出選單。

在選單中,可以設定新的Palette的名字、網格的形式、網格單元大小等等。

完成設定後,按下右下方的Create按鈕,並選擇儲存在專案的哪個位置。

如何在TilePalette視窗新增Palette

設定要做成Tile的圖片

(1). Texture Type:

在Project視窗中,選擇要做成Tile的圖片,先設定好Texture Type為Sprite 2D。

設定圖片的Texture Type
(2). 圖片切割:

如果一張圖片裡面,有包含好幾張的圖,那在丟入視窗前要裁切好。

裁切步驟如下:

a. 選擇在Project視窗中的圖片,將Sprite Mode設定成Multiple,並點擊下方Sprite Editor的按鈕,打開Sprite Editor視窗。

設定圖片的Sprite Mode

b. 在Sprite Editor視窗的左上角選擇Sprite Editor及Slice。

可以選擇三種圖片裁切方式:

automatic:自動切割

Grid By Call Size:每一個Sprite Cell(單元)的像素大小切割

Grid By Call Count:整張圖片分成幾欄(Column)幾列(Row)作切割

Sprite Editor視窗的三種切割方式

第一張圖片是顯示按照幾欄幾列作切割。

按照幾欄幾列進行切割之示意圖

第二張圖片是顯示按照每一單元(Cell)長寬的像素大小作切割。

按照單元大小進行切割之示意圖
(3). 設定圖片Pixels Per Unit的數值大小:

Pixels Per Unit是指圖片多少個像素,對應一個Unity Unit。

所以你的Tile的圖片大小是16*16像素的話,那就將Pixels Per Unit設定成16。

這樣圖片放到場景上,它的大小會剛好符合Unity座標軸上的1格。

設定圖片的Pixels Per Unit
(4). 設定圖片的Max Size:

調整好Texture的Max Size,可以看Inspector視窗底下的數字,在Max Size選擇比其長寬,都更大的最小數字。

設定圖片的Max Size
(5). 製作Tile並做調整:

把要做成Tile的圖片,拉進去TilePalette視窗裡,選擇Tile檔案要儲存在哪裡。

TilePalette視窗

生成Tile後,我們可以編輯TilePalettle上的Tile,只要點擊Edit按鈕後,選擇要修改的Tile做調整。

Tile Palette視窗有製作的Tile之示意圖

可以用滴管工具選擇Tile,然後用畫筆工具在Palette上繪製。

可以用選取工具來選擇Tile。

然後,在Inspector視窗上,對Tile做縮放、旋轉等變化。

說明用甚麼工具選擇Tile Palette視窗中的Tile,並可在Inspector視窗上做何種修改

開始用Tile排列關卡

設定好Palette上的Tile後,就可以開始設計關卡。

記得先取消Tile Palette視窗上的Edit模式。

可以選擇當前要用的Tile Palette,跟要修改的Tilemap(Active Tilemap),然後在Scene視窗上去編輯關卡。

或是,可以用選取工具來選擇在Tilemap上的Tile,然後在Inspector視窗上對該Tile做縮放、旋轉等變化。

說明用甚麼工具選擇Tilemap上的Tile,並可在Inspector視窗上做何種修改

Tilemap的常見問題

 設計過程調整Tilemap或Tile位置

設計過程中,想要改變整個Tilemap的位置,可以調整他Transform元件的位置數值,或是Tilemap元件上的Tile Anchor。

想要調整圖片出現的位置的話,可以修改Sprite的Pivot,來調整圖片顯示的位置。

Tilemap元件上的Tile Anchor欄位示意圖

Tilemap中有縫隙的處理方式

有可能會遇到這種有縫隙的狀況,解決方法是創建一個Sprite Atlas。

Tilemap上的Tile中間有縫隙之示意圖

在Project視窗,新增一個Sprite Atlas物件。

在Objects For Packing的位置,把Tile單獨的Sprite都放進去,或是放入整張Texture。

再點擊Pack Preview,這時候看向Game視窗的遊戲畫面,還是會有縫隙存在,這是因為Sprite Atlas只有在執行時才被創建。

如何設定Sprite Atlas

加上Tilemap Collider2D後,角色會卡住

假如,要用Tilemap來排列地板的話,當給Tilemap加上Tilemap Collider後,如果操作使用Box Collider的角色在Tilemap上移動的話,有可能會卡住。

要解決這個問題,要給Tilemap再加上Composite Collider,讓這個元件把每個Tile的Collider做成一個大的Collider。

Tilemap所需要的Collider元件們

覺得用Tilemap拼還是不夠快的一種解決方案–Auto Tiling

然而,用Tilemap來排列關卡,在不斷修修改改、切換使用的Tile的過程中,仍然會用上不少的時間。

如果能更方便一點,由系統判斷該在甚麼地方,用甚麼Tile就好了…

還真的有這樣工具!

就是2d-extras中的Rule Tile!

要取得這個工具呢,我們首先要打開下方的連結:
Unity-Technologies/2d-extras: Fun 2D Stuff that we’d like to share! (github.com)

進到網站後,先查看我們使用的Unity版本,然後去找2d-extras對應的分支檔案來用。

展示如何在Github網頁上開啟選擇分支的選單

要把檔案放進Unity來用,有兩個方式。

第一種,在網站上取得檔案的連結。

如何在Github網頁上取得檔案的連結

在Unity的Package Manager視窗,找到Add package form git URL,並貼上網址以把Package載下。

要這麼做的前提是,電腦必須先安裝Git,如果沒有的話,可以從下方連結去安裝。
Git (git-scm.com)

如何在Unity的Package Manager視窗,找到Add package form git URL
在Package Manager視窗,輸入連結
輸入連結的結果

第二種,把檔案以ZIP檔的形式下載下來。

如何在Github網頁上取得檔案的壓縮檔

到專案的Packages資料夾裡,新增一個叫做com.unity.2d.tilemap.extras的資料夾。

新增一個叫做com.unity.2d.tilemap.extras的資料夾

然後,把剛剛下載的檔案,放入新增的資料夾裡,並解壓縮於此。

於新資料夾內,解壓縮剛剛下載的檔案

接著,進入解壓縮後的資料夾,剪下裡面所有檔案。

進入解壓縮後的資料夾,剪下裡面所有檔案

把剪下的檔案,放入com.unity.2d.tilemap.extras資料夾裡,並刪除ZIP檔與沒有檔案的2d-extras空資料夾。

於新增的資料夾貼上剪下的檔案,並刪除不需要的檔案

再回到Unity…

噹噹!!

就有了。

經過處理壓縮檔後的結果

雖然說載好了,但在哪裡、要怎麼用呢?

到Project視窗,點擊滑鼠右鍵叫出選單,選擇新增Rule Tile。

如何新增Rule Tile

可以設定Rule Tile的預設Sprite,Rule Tile下方Tiling Rules的部分,則是可以設定在甚麼條件下會是顯示哪個Sprite。

設定的方式就是在Rule右邊的九宮格中,點擊對應的格子去做設定。

點一下是綠色箭頭,表示此Tile的該方向是有其他Tile連接著的。點第二下是紅色叉叉,表示該方向沒有其他Tile連接著。

設定Rule Tile

之後,我們打開Tile Palette視窗,把Rule Tile檔案放到想要的Tile Palette裡面,再選取他跟要用的筆刷在Tilemap上測試,就可以看到Tile會根據周圍有沒有其他Tile來顯示對應的Sprite。

把Rule Tile檔案放到想要的Tile Palette裡面

結論

希望這篇文章能幫助你,更了解Unity Tilemap的使用方式,以及Rule Tile的方便性,讓你更快速地設計關卡。

然後,如果在開發過程中,還沒有美術素材可以做Tile的話,建議先到Asset Store搜尋免費素材使用。

不錯的免費素材:
2D Dev Sprites | 2D Environments | Unity Asset Store

另外,要使用上述素材的話,可以設定其圖片的Pixels Per Unit為32。

當然2d-extras中,還有更多種Tile等你去探索,如果不想自己動手研究,也可以等在下我再寫一篇來為各位說明。

參考文獻

  1. Unity’s Tilemap problem, some gaps between tiles. – Unity Forum
  2. Tilemap in Unity (Build Worlds Easily) – YouTube
  3. 彻底解决 Unity 中 Tilemap 缝隙问题 | 我是妖怪~廖宇雷 (dualface.github.io)
  4. https://docs.unity3d.com/Manual/class-TextureImporter.html
  5. https://www.youtube.com/watch?v=eJik78bWSg0
  6. How To Use Auto Tiling in Unity 2020 – YouTube
  7. Unity-Technologies/2d-extras: Fun 2D Stuff that we’d like to share! (github.com)
  8. CS1061 被選中錯誤。沒有什麼可以修復它。·第308期 ·Unity-Technologies/2d-extras ·GitHub

Colin TPL
Colin TPL

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *