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。


<<:  如果你不规画自己的人生,那你很可能会落入别人的规画里。

>>:  Day 07 - INSERT INTO 把资料加进资料表!

[DAY21]弹性讯息

Flex Messages are messages with a customizable lay...

【第六天 - vim 备份泄漏】

Q1. vim 是什麽? 简单来说, vim 是一种纯文字编辑器,是从 vi 发展出的增强版,而 v...

[Day-15] - Spring 标示说明性注解运用与设计

Abstract 随者Spring各种嗨到爆的注解模式来势汹汹,满足所有开发者配置各类型的元件注解,...

Day20 - [丰收款] 以Django Web框架实作永丰API线上支付模拟情境(1)

我们的丰收款主题完结了吗? 今天即使达成铁人赛的2/3赛程,在先前的篇幅已完整将每一个功能都实作出来...

新新新手阅读 Angular 文件 - Get data from a server(1) - Day10

学习目标 本文章将会是阅读官方文件 Get data from a server 内容所做的笔记。 ...