2016年10月16日 星期日

2011.08 2D地圖自動拼接(實作紀錄)

製作 2D RPG 遊戲免不了需要編輯地圖,而 2D 地圖通常就是一張一張地圖切塊拼接組合起來的,只是,如果地圖比較大或者想要地形變化豐富一點,光靠手動一片一片的拼接是相當辛苦的,而且容易會有人為疏忽發生拼錯的情形,所以就需要使用一些讓程式幫忙拼接的技巧。



影片網址:https://youtu.be/S3K6yfawDLw

影片所示,是在大約 2011 年 8 月左右,嘗試使用 Unity 來實現 2D 地圖自動拼接的測試專案,依照時間推算,當時的 Unity 版本應該是 3.4 或者更早以前的版本。

在 Unity 4.3 之前,因為還沒有 Native 2D Tools,所以想要實現 2D 遊戲製作的話,需要處理的手續會比較多一些,基本上,就是固定視角的 3D 遊戲場景。

而如今的 Unity 遠比當時方便、強大很多,想要實現相同的功能,可選擇的做法也更多;雖然,影片錄製是使用 Unity 5.4.1f1 來展示,但該專案內容仍保持是 Unity 3.x 的製作內容,同時,程式是使用 Unity 的 Javascript 撰寫的,所以,其中的製程可能已不太值得借鏡。

以下,就大致說明一下這個實作裡所使用的原理。



首先,編排一張如下圖編號的地形圖片:
灰色代表地圖圖素,白色為透明簍空區域
圖中的灰色區域代表地圖的圖素,白色區域代表簍空的透明區域。

每次點擊到編輯區域內,會一次貼上四個圖片,基本上,如果是在空白區域,就是貼上號碼為 4、8、1、2 的圖片來組合出最小塊的地圖。
組合最小地圖塊
如果被貼上的這四個圖片的位置,原本就有其他圖存在,則是將該圖的圖號與 4、8、1、2 這幾個基本圖依照所相對的位置做 OR 邏輯運算,那麼,就能求得此時地形在這個位置應該置換上哪個圖片的圖號,然後直接依照圖號將圖片置換上去,這樣子,每個點擊或者拖動滑鼠指標時,就可以根據指定位置更換適當的圖片,而達到自動拼接的目的。

另外,在刪除地圖的部分,需要挖空不要的區域,又要能使保留的區域圖片能夠正常拼接,所以,基本上在挖除地圖的位置上也是貼上一組基本的 11、7、14、13 圖片來組合出地圖的空洞。
組合最小空洞
在被貼上這四個圖片的位置,則是將該圖的圖號與 11、7、14、13 這幾張基本圖依照相對位置做 AND 邏輯運算,那麼,就能同樣獲得該位置應該換上哪個圖片的圖號,如此,在刪除地圖時也能夠達到自動拼接的目的。

以上,雖然沒有提供程式碼與檔案下載,但主要還是希望能透過一些展示與說明來分享開發上的想法與經驗,還請大家未來也能多多關注新的分享。