在前面的章节我们有提到,Unity的TiledMap功能是在2017.2版本首次规划,并且在2018版本进行完善的。而Tiled2Unity是作者在5年前制作的,所以实现和性能上自然是没有充分利用新版Unity的特性。其性能和功能还原程度也是有所欠缺。并且作者对这个版本也放弃维护了。




unity地图导出 unity导入地图数据_unity 脚本中 调用另一个脚本


1 SuperTiled2Unity

SuperTiled2Unity是Tiled2Unity的升级版本,最低支持的Unity版本是2018。SuperTiled2Unity依赖了新版的2个重要特性,一是趋于完善的TiledMap机制,能够对标Tiled的相关功能。二是2017版本开始支持的,比较重要的特性升级叫Scripted Importers。相关的介绍我们放在下一个小节。

SuperTiled2Unity利用脚本导入器监听资源格式,一旦tmx类型的资源进入到Assets目录,即可触发指定的监控函数,完成资源处理和转换,将tmx的格式转译为Unity的TiledMap格式。当然因为这是自定义的接口,所以你可以在代码里做任何你想要的修改,非常的方便。

SuperTiled2Unity作者仍然在维护。https://seanba.com/donate


unity地图导出 unity导入地图数据_unity 脚本中 调用另一个脚本_02


2 脚本导入器

脚本导入器是SuperTiled2Unity用来将tmx(实际上是一个xml格式)格式转化为UnityTiledMap格式的工具。相比于Unity的Eidtor类型的API而言,它能自动监控资源类型,并触发指定的API来完成资源处理。相较于传统的菜单需要点击触发具有比较大的优势,至少它会解决开发人员从源码服务器上拉取最新资源代码之后,忘记更新而带来的各种问题。

当然除了转化Tmx之外,其实我们工程里还做了非常多的类似资源监测的工具,以便检查各种美术资源规范,同时还可以做成各种扫描工具,用以批量检查和处理资源。

既然已经提到了它,那么就顺便再扩展介绍一下它。

2.1 Scripted Importer

前面的文章里其实有介绍过Unity的资产管线,也就是说Unity对一些原生支持的资源类型,诸如fbx,纹理、材质等资源有监控行为,一旦这些资源进入到Unity工程目录,就会触发Unity对资源的检测和处理。但以前的缺陷是这些处理都是随着Unity版本内置的,也就是说没有办法扩展支持其他的资源类型。

而Scripted Importers就是扩展了这个机制,让开发者可以自定义监听指定资源类型,自定义扩展资产管线的处理机制。不过需要注意的是,为了安全起见,Unity不允许自定义处理它已经原生支持的资源类型。

举个例子,我们把一个后缀名为cube的文件导入Unity,利用扩展的资产管线将其转化为一个Prefab,并给它添加一个材质和Shader。


unity地图导出 unity导入地图数据_unity 脚本中 调用另一个脚本_03


注意几个地方:

  • 通过在类的上方放置ScriptedImporter 属性来注册成为Untiy的扩展资产管线。
  • CubeImporter 继承自虚基类ScriptedImporter
  • OnImportAsset 的ctx参数包含了导入和导出数据。
  • 每一个导入事件,必须也只能进行一次SetMainAsset调用
  • 每一个导入事件,可以根据需求生成多个AddSubAsset 调用

2.2 ScriptedImporterEditor

当然除了资源的自定导入之外,也可以自定资源的显示。比如:


unity地图导出 unity导入地图数据_unity 脚本api pdf_04


Unity Editor下的GUI相关的内容就不展开了,其实就是决定某个资源如何在inspector下进行显示。

2.3 使用Scripted Importer

当你给你工程添加了一个Scripted Importer之后,你就可以像使用其他原生资源一样使用Unity相关支持,比如:

  • 会把被支持的资源显示在Asset目录的层次结构中
  • 重新启动编辑器的时候,会和其他原生资源类型一样,检查是否有新的更新或者升级
  • 在磁盘上编辑了资产文件,再回到Unity会触发资源重导入。
  • 可以使用Asset->Import New Asset… 来创建新资源
  • 可以被Asset -> Reimport 触发
  • 点击某个资产,可以在Inspector窗口查看相关属性,如果修改了某些设置会触发窗口的Apply按钮。


unity地图导出 unity导入地图数据_unity 批量导入模型工具_05


3 结尾

本节大概介绍了SuperTiled2Unity所依赖的重要特性,第一个在本系列第一节已经介绍过了。由于SuperTiled2Unity的相关资料不多,并且也是我们目前所采用的工具,所以接下去几章我会先介绍下它的大致用法。

Git地址:https://github.com/Seanba/SuperTiled2Unity

Scripted Importers 脚本导入器:https://docs.unity3d.com/Manual/ScriptedImporters.html