场景和资源由于一直使用 uuid 进行保存,不需要升级。
代码的升级会给出 3 个版本的缓冲时间,这段时间内新旧代码同时兼容。普通用户不需要看文档,旧代码会自动触发警告,只要看到警告信息就照着修改代码即可。
RawAsset 是当初 Cocos2d-html5 融合 Fireball 0.5 时,为了兼容大量 Cocos API 而发明的一个概念(当初我也不熟悉 Cocos 的 API 不敢乱改)。这个概念和 Creator 现在的主流资源管理流程相悖,成为了一个影响引擎和编辑器开发效率的技术债(脑力减速带)。
为了更充分的利用人力资源,加快后续的资源相关功能实现,我打算从 1.7 开始加速 RawAsset 废除工作,最终彻底去除预计在 2.0 完成。
如果你直接在代码中使用到了 RawAsset,升级到 1.7 - 1.9 中的任意版本,可能会出现不少警告,警告不影响游戏运行和发布,只要照着警告修复代码警告就会消失。但如果是从 1.6 直接升级到 2.0,项目可能无法运行。
目前想到要升级的代码主要是 CCClass 中的属性定义,以 Texture2D 这个最常见的 RawAsset 为例:
ES5 支持两种定义方式:
cc.Class({
properties: {
texture1: {
url: cc.Texture2D, // declared as url string
default: "",
},
texture2: cc.Texture2D, // auto declared as url string
}
});
从 1.7 开始 texture1 将出现 log,texture2 将出现 warning,提示用户全部改成
texture: {
type: cc.Texture2D, // declared as Texture2D object
default: null,
}
注意 url: 变成了 type:,修改后变量将会变成 Texture2D 对象,而不再是一个 url 字符串。(现在你们能理解为什么之前一直不肯大家直接写 type: cc.Texture2D 了吧,都那么写现在我就只能跪厕所哭了)
从 2.0 开始旧的 texture1 的写法将会报错。旧的 texture2 的写法将会重新支持,不过反序列化后得到的值就是一个对象而不再是 url 了。
同样的,之前如果在 ES6 或 TS 中定义
@property(cc.Texture2D)
texture1 = ""; // auto declared as url string
@property(cc.Texture2D)
texture2 = null; // auto declared as url string
@property({
url: cc.Texture2D, // declared as url string
default: ""
})
texture3 = "";
从 1.7 开始 texture2 将出现 warning,texture1 和 texture3 将出现 log,提示用户全部改成
@property({
type: cc.Texture2D, // declared as Texture2D object
default: null,
})
texture = null;
修改后变量将会变成 Texture2D 对象,而不再是一个 url 字符串。
从 2.0 开始旧的 texture1 和 texture3 的写法将报错。旧的 texture2 的写法将会重新支持,不过反序列化后得到的值就是一个对象而不再是 url 了。

。