iT邦幫忙

2026 iThome 鐵人賽

DAY 6
0
Software Development

Unity進階——做一個完整的遊戲系列 第 6

Day 6:建立 VillageScene 的 Tilemap 基礎與村莊草圖

  • 分享至 

  • xImage
  •  

前一天我已經完成 Anokolisa 素材包的匯入與基本設定,確認主村莊會用到的地板、建築、裝飾、玩家角色與 NPC 素材都可以在 Unity 中正常顯示。因此第六天開始進入主村莊場景的建立。

一開始我先檢查 Anokolisa 素材包中是否有可以直接使用的完整村莊範例圖。檢查後發現,素材包中的 MockUps 資料夾主要只有 Tavern_01.png,內容是酒館或旅店的室內配置,適合之後做室內場景參考,但並不是戶外村莊地圖。因此主村莊不能直接套用現成場景,而是需要自己使用 Tilemap 進行規劃與製作。

https://ithelp.ithome.com.tw/upload/images/20260904/20178373mKdizDyKwv.png

因為專案本身使用 Universal 2D,所以建立新場景時,我選擇的是 Lit 2D (URP) 場景模板,而不是舊版的 Built-in 2D 場景。這樣可以讓新場景和前面建立的專案設定保持一致,避免之後在燈光、相機或 2D Renderer 上出現不一致的問題。

建立場景後,我將場景儲存到 Assets/Scenes 資料夾,並命名為 VillageScene。這個場景之後會作為遊戲中的主村莊,也就是玩家從新手教學區回來後會進入的第一個主要據點。

https://ithelp.ithome.com.tw/upload/images/20260904/20178373tswx2s7nqy.png

完成場景建立後,我先確認場景中有基本的 Main Camera 與 Global Light 2D。接著開始建立村莊地圖需要的 Tilemap 分層。由於 RPG 地圖中會同時有地面、道路、建築與裝飾,如果全部放在同一層,後續會很難管理,也容易出現物件互相遮住或排序錯誤的情況。

因此我在 Grid 底下建立了四個 Tilemap,分別是 GroundTilemap、RoadTilemap、BuildingTilemap 和 DecorationTilemap。

https://ithelp.ithome.com.tw/upload/images/20260904/201783730JwSxBKI81.png

這四個 Tilemap 的用途分別如下:GroundTilemap 用來放草地、泥地或基礎地面;RoadTilemap 用來放村莊道路;BuildingTilemap 用來放房屋牆面、屋頂或建築區塊;DecorationTilemap 則用來放樹木、農田、工作站或其他裝飾物。

接著我也調整了這些 Tilemap 的顯示順序,讓地面在最下層,道路在地面上方,建築再往上,裝飾物則放在最上層。這樣之後在製作村莊時,比較不會發生道路被地板蓋住,或裝飾物被建築壓在下面的問題。

https://ithelp.ithome.com.tw/upload/images/20260904/20178373zDaL6kWIZj.png

在設定上,我將 GroundTilemap 的 Order in Layer 設為 0,RoadTilemap 設為 1,BuildingTilemap 設為 2,DecorationTilemap 設為 3。雖然目前還沒有正式開始鋪地圖,但先把分層邏輯整理好,可以讓後續 Day 7 和 Day 8 的村莊製作比較有條理。

完成 Tilemap 分層後,我先不急著開始畫地圖,而是先建立村莊的規劃點。這一步是為了先決定村莊中重要區域的大概位置,避免一開始就直接鋪地板,結果做到一半才發現道路、房屋和出口位置都不合理。

我建立了一個 VillageLayoutMarkers 空物件,並在底下放了五個標記點:PlayerEntryPoint、VillageCenterPoint、ChiefHousePoint、ShopPoint 和 ForestExitPoint。

https://ithelp.ithome.com.tw/upload/images/20260904/20178373XkZI2TUbIs.png

其中,PlayerEntryPoint 代表玩家從新手教學區回到村莊的入口;VillageCenterPoint 代表村莊中央廣場;ChiefHousePoint 代表村長家的位置;ShopPoint 代表商店或商人所在的位置;ForestExitPoint 則代表之後通往森林或遺跡方向的出口。

透過這些 Marker,我可以先把村莊的動線規劃出來。玩家從下方進入村莊後,可以先走到中央廣場,再前往村長家或商店,之後再從另一個方向前往森林或任務區域。這樣村莊就不只是單純放幾棟房子,而是有基本的遊戲流程方向。

接著,我開始測試 Anokolisa 的村莊地板素材是否能正常放入場景。我先從 Floors_Tiles.png 中拖出一個 Sprite 到場景裡,並將它命名為 Test_FloorSprite。這一步不是正式鋪地圖,而是用來確認素材的顯示比例、像素風格與切圖狀態是否正常。

https://ithelp.ithome.com.tw/upload/images/20260904/20178373hRAE5jSdHe.png

測試後可以看到,素材能夠正常顯示在場景中,像素風格也沒有變模糊。不過這張測試用 Sprite 的範圍比較大,容易遮住前面建立的村莊規劃點,所以我將 Test_FloorSprite 移到旁邊,讓中間區域保留給村莊規劃使用。
接下來我建立了第一個村莊用的 Tile Palette,命名為 Village_GroundPalette。Tile Palette 是 Unity 中用來管理 Tilemap 筆刷的工具,之後就可以用它像畫地圖一樣鋪設村莊地面。

https://ithelp.ithome.com.tw/upload/images/20260904/20178373EDvBU4hhBa.png

建立 Palette 後,我先將 Floors_Tiles.png 中切出的幾個 Sprite 加入 Palette,作為第一批可使用的地板 Tile。這一步的目標不是馬上完成村莊地圖,而是先確認 Anokolisa 的素材能不能被放進 Unity 的 Tile Palette 工作流程中。

https://ithelp.ithome.com.tw/upload/images/20260904/20178373xVuBe1kwvP.png

加入後,我發現目前 Floors_Tiles.png 只被 Unity 自動切成 6 個比較大的 Sprite,而不是完整的 16×16 小格。也就是說,雖然這些 Sprite 可以被放進 Tile Palette,但目前還不能像一般 RPG Tilemap 一樣,一格一格精準鋪出 5×5 或更細的地圖區塊。
為了確認這個問題,我試著使用 Palette 中的 Tile 在場景裡繪製地面。結果發現畫出來的是一整塊較大的區塊,而不是單格 16×16 的地板。這表示 Unity 目前的自動切圖方式不適合用來正式鋪村莊地圖。

https://ithelp.ithome.com.tw/upload/images/20260904/20178373wQf78ypb3Y.png

這個結果雖然不是最終村莊地圖,但它讓我確認了一件重要的事:Anokolisa 的地圖素材本身是可以使用的,只是需要在 Unity 中用正確的切圖方式處理。也就是說,不能依賴 Unity 的 Automatic Slice,而應該在 Sprite Editor 中使用 16×16 的 Grid 切圖,這樣才能建立真正適合 Tilemap 使用的地板、道路與牆面 Tile。
因此,第六天的成果不是完成村莊外觀,而是完成了主村莊場景的基礎架構:建立 VillageScene、整理 Tilemap 分層、設定顯示順序、建立村莊規劃點、測試 Anokolisa 地板素材,並發現目前切圖方式需要調整。
這也讓第七天的方向變得很明確:接下來要重新使用 Sprite Editor 將 Floors_Tiles.png 以 16×16 Grid 方式切圖,重新建立可用的 Tile Palette,然後正式開始鋪設主村莊的地面與道路。


上一篇
Day 5:匯入 Anokolisa 素材並檢查村莊素材
下一篇
Day 7:重新切 16×16 Tile,鋪出村莊地面與道路
系列文
Unity進階——做一個完整的遊戲7
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言