iT邦幫忙

2021 iThome 鐵人賽

DAY 9
0
Mobile Development

FPS dungeon crawler game devlog系列 第 9

Dungeon Mizarka 009

整理進入Addressable資料

前幾天利用Addressable進入載入資料時手動的將需要用到的物件放入,但隨著資料日漸增加,手動增減會變得複雜且錯誤百出,故需要有個方式將資料放入到Addressable裡。Unity官方有一套工具是可以幫助整理Addressable、AssetBundle,前一、二年官方也有推行過。前年IT鐵入賽時也有對此做過數篇的內容介紹

本來這次整理Addressble資料時有想過直接沿用,但看到目前GitHub上的最後更新已是15個月前,通常外掛1年沒有更新就不太會放入到專案裡(為二的例外就是UniRx和Zenject)。看到這麼久沒更新,想到目前又是用2021.1.x版,怕會有不預期的問題(實際上用AssetGraph有個潛在的問題會導致專案開啓時很容易卡在asset那,要重開Unity Editor才行),故還是自行寫Editor Script處理。

核心的程式碼片段如下,再依據需要被加入的資料進行撰寫

var assetPath = Path.Combine(basePath, "Scenes", "SceneName.unity");

GameResource.EditorPart.Utility.AddressableHelper.PlaceAssetInAddressble(
    assetSettings,
    assetGroup,
    assetPath,
    // Label name
    groupName,
    // Addressable name
    "SceneName");

目地是要將資料能夠如手動般放入到Addressable而進行撰寫

專案是採多場景方式進行,故對多個場景進行資料放到Addressable的工是少不了的。且一但進入到地形生成,會有更多的資料要放到Addressable,手動的效率會變得很差。

順著整理場景進入到Addressable時,開始進行地形生成的處理。

地形生成介紹

地形生成的方式其實有很多種,目前手中能夠使用現成的方案如下

除了Dungeon Maker沒有用過不清楚外,其它三毎方案都有試過,這裡稍微記錄一下使用後的心得。

TileWorldCreator是一般地形生成最廣泛的方案,以生成地形來說,它提供很多元化的選擇。包含了利用BSP,Noise和Cellular Automata。如果只是要生成地形,它提供的選擇豐富且操作上又相當直覺,是很直觀的切入選項之一

然而對於Dungeon Cralwer遊戲來說,在生成的過程當中有時不僅僅只是地形的生成,還包含了歷程,比如說在一層當中有著中頭目,要和中頭目對戰後才能再往下走,並進入到和大頭目的對戰。

對於生成地形的同時就考量並一併納入歷程的生成,這點對於才剛問世的TileWorldCreator來說,是沒有辦法處理的。

而Dungeon Architect(DA)和Dungen,都有對於地形以外的歷程進行處理。且DA採用多分支方式,而Dungen採用較線性方式處理,在本質上,若是想要比較靈活的設計DA自然是首選。然而這只是針對一般Dungeon Cralwer的遊戲地形來看。如果是要進行FPDC,DA提供的多個生成方式都不是很適合,唯一適合的方案就是DA裡的Snap Builder,這點也和Dungen提供的唯一生成方式是相同的。

簡單來說就是自己做出一個個地城房間,並定義好該房間是拿來做什麼用途的,像是

  • 普通房間
  • 中頭目房間
  • 大頭目房間

DA的Snap Builder和Dungen額外利用另一份定義的資料進行生成和串接,如果說定義中是要先走過中頭目後才能到達大頭目,則生成時道路的安排一定會讓玩家先走到中頭目房間再到大頭目房間。符合多數設計的概念。

DA和Dungen都可以利用這樣的方式生成,但DA是多分支的設計而Dungen為線性,似乎選擇上是DA勝過Dungen。然而,實際的試驗裡得到的結論並不是這樣。DA的Snap Builder肯定有地方沒有寫好,導致於在產生房間進行拼接時會讓多個房間重覆產生在多一個位置上(怎麼看都是Boundary的判定出現問題,可是一直沒有針對這塊進行處理),故在生成出來的房間會重疊的情況下,只好先放棄DA並以Dungen為主要生成工具。

房間生成製作

利用拼湊房間而生的工具換言之就是要先有一個個房間,接下來就先針對一個個房間進行製作。

房間完成後利用Dungen進行組合,看起來還算是可行,不過這裡有幾個地方要進行修正,其中一個就是房間的起始地板。打從一開始就是用4個單位進行定位,所以在進行房間製作時每個地板也是4x4單位,但這裡的位置是從(2, 0, -2)開始,而不是(0, 0, 0),中心點是否為(0, 0, 0)會影響到到後續位置轉換到Grid時的計算,不論是(0, 0, 0)或是(2, 0, 2)都是可行的,只要製作時依據一個規則即可。

然目前為了試驗,才發現起始的(2, 0, -2)是不正確的,之後要再進行調整。

將怪物Hard Code到玩家可以看的到的距離

有了初步的測試結果也比較容易進行後續的調整。

花了一些時間調整後,現在可利用生成的地形做為地城場景。但試著移動時發現了嚴重的問題。這格還是4的倍數

但往北走一格就變得不是4的倍數

而另一個問題則是可以穿牆,只要往北走就可以直接過去。

不確定是A★沒設定好還是房間製作時沒有弄好,但這應該是明天首要解決的Bug。


上一篇
Dungeon Mizarka 008
下一篇
Dungeon Mizarka 010
系列文
FPS dungeon crawler game devlog30

尚未有邦友留言

立即登入留言