v2.4 定制项目构建流程升级指南

文:Santy-Wang、Xunyi0

本文将详细介绍定制过项目构建流程的旧项目升级到 v2.4 时的注意事项。从 v2.4 开始,我们对项目构建流程做出了一些调整,事件回调时传入的参数也做了一定的改动。如果开发者在 v2.4 之前,有根据文档 定制项目构建流程 对项目进行过扩展,注册了 before-change-filesbuild-finished 事件来定制项目构建流程,那么:

  • 美术策划 而言,项目中的所有资源,例如场景、动画、Prefab 都不需要修改,也不用升级。
  • 程序 而言,影响主要体现在需要修改扩展包中注册事件的回调函数的参数。

升级步骤

  • 备份旧项目的插件扩展包。
    • 全局(所有项目)插件扩展包位于 C:\Users\用户\.CocosCreator\packages 目录(Windows)或者 用户/.CocosCreator/packages 目录(Mac)。
    • 单个项目专用插件扩展包位于项目的 packages 目录下。
  • 打开代码编辑器,进行代码升级。

参数变化

事件回调时传入的参数 options不再有 buildResults,而是提供了一个 bundles 数组。

  1. // 修改前
  2. function onBeforeBuildFinish (options, callback) {
  3. var prefabUrl = 'db://assets/cases/05_scripting/02_prefab/MonsterPrefab.prefab';
  4. var prefabUuid = Editor.assetdb.urlToUuid(prefabUrl);
  5. // 通过 options.buildResults 访问 BuildResults
  6. var buildResults = options.buildResults;
  7. // 获得指定资源依赖的所有资源
  8. var depends = buildResults.getDependencies(prefabUuid);
  9. for (var i = 0; i < depends.length; ++i) {
  10. var uuid = depends[i];
  11. // 获得项目中的资源相对 URL(如果是自动图集生成的图片,由于项目中不存在对应资源,将返回空)
  12. var url = Editor.assetdb.uuidToUrl(uuid);
  13. // 获取资源类型
  14. var type = buildResults.getAssetType(uuid);
  15. // 获得项目中的资源绝对路径(如果是自动图集生成的图片,同样将返回空)
  16. var rawPath = Editor.assetdb.uuidToFspath(uuid);
  17. // 获得构建后的原生资源路径(原生资源有图片、音频等,如果不是原生资源将返回空)
  18. var nativePath = buildResults.getNativeAssetPath(uuid);
  19. Editor.log(`${prefabUrl} depends on: ${rawPath || nativePath} (${type})`);
  20. }
  21. callback();
  22. }
  23. // 修改后
  24. function onBeforeBuildFinish (options, callback) {
  25. var prefabUrl = 'db://assets/cases/05_scripting/02_prefab/MonsterPrefab.prefab';
  26. var prefabUuid = Editor.assetdb.urlToUuid(prefabUrl);
  27. options.bundles.forEach(bundle => {
  28. // 通过 bundle.buildResults 访问 BuildResults
  29. var buildResults = bundle.buildResults;
  30. // 获得指定资源依赖的所有资源
  31. var depends = buildResults.getDependencies(prefabUuid);
  32. for (var i = 0; i < depends.length; ++i) {
  33. var uuid = depends[i];
  34. // 获得项目中的资源相对 URL(如果是自动图集生成的图片,由于项目中不存在对应资源,将返回空)
  35. var url = Editor.assetdb.uuidToUrl(uuid);
  36. // 获取资源类型
  37. var type = buildResults.getAssetType(uuid);
  38. // 获得项目中的资源绝对路径(如果是自动图集生成的图片,同样将返回空)
  39. var rawPath = Editor.assetdb.uuidToFspath(uuid);
  40. // 获得构建后的原生资源路径(原生资源有图片、音频等,如果不是原生资源将返回空)
  41. var nativePath = buildResults.getNativeAssetPath(uuid);
  42. Editor.log(`${prefabUrl} depends on: ${rawPath || nativePath} (${type})`);
  43. }
  44. });
  45. callback();
  46. }

更多 bundle 中的对象,详细请参考 定制项目构建流程