通过AssetBundle共享代码是否可行

  • Creator 版本:v2.4 RC7

如果大厅子游戏这种模式,大厅是一个工程,每个子游戏分别是独立的工程。游戏中会有很多共享代码,例如一些工具类的静态方法,我想把这部分代码打包到一个asset bundle中,为其他bundle使用。我使用ts开发,目前没有太好的思路处理,因为之前调用都是先导入,但是现在使用bundle动态加载,就不知道怎么处理比较合适,或者从根本上讲我的思路有问题。

可以共享代码。不过目前仍不支持脚本文件重名。

我刚刚测试了一下,单独把一个脚本文件放到文件下设置成bundle,然后发布之后,config.json并没有对脚本文件的描述,单独放资源文件就会有,脚本文件必须要作为节点的组件才会被打包吗?

我觉得可以把公用的脚本和大厅资源放到一个文件夹,assets下,作为一个公共仓库,每个子游戏都是独立的工程,都会引入这个公共仓库

你的意思是每个子工程都会有一份公共资源的副本?

对,反正大厅的资源也不会很大,这样就相当于每个游戏都是独立开发的,打包也分开打包

因为2.4这个asset bundle实在很吸引人,我正在做一些可行性的测试,目前遇到的一个问题就是非组件类不会被打包进入asset bundle中,这就是导致调用asset bundle中的方法报错。

不是组件也能打包的,参考下我这个demo吧
NewProject_133.zip (347.2 KB)

非常感谢,好用,就是将非component对象放入window中作为全局变量管理。

代码的话 是不是可以直接load(xx.js)???

对的,组件类可以直接通过字符串用,非组件类就放到一个你自己的命名空间下就好了

目前不行,没有单独load脚本这个操作

有一个loadScript的接口呢,但是获取脚本后能干什么没有说。

loadScript 是加载并运行脚本,什么都不返回的

我现在有一点点困惑,asset bundle对脚本有什么限制呢? 我做了一个测试,bundle中有个prefab,上面绑定了一个程序组件,组件中通过 cc.resources.load去动态加载子工程中resources下的资源,但是在bundle被加载到主工程中后,cc.resources是undefined。 我现在有一些困惑,在bundle中有哪些api可以使用,或者说bundle中用程序建议去做哪些工作,不建议做哪些工作。

最近又测试了一下,如果是远程加载bundle,使用window[xxx]这种方式是不行的。

建议你跨项目复用 asset bundle 的时候不要去加载 resources 这些bundle。你可以自定义其他名字的,因为resources是内置bundle,加载其他项目 resources ,会把本项目的覆盖了

不是组件的脚本里面还有node_module比如protobufjs,loadBundle后就会报错啊

遇到同样的问题

我现在是将一个游戏相关的资源放在一个bundle目录下,但这样一个游戏改动了,打包就会全打一遍,游戏多的话,肯定会慢很多,有没有办法只打包指定的bundle文件夹