太好了,建议官方收录改进
大佬有个问题,有个情况用插件导出之后,多个预制体用了这个组件,下次加字之后可能会达到多张贴图,但预制体里面引用是没有更新的,因为我没有重新打开那个预制体,导致运行会报错,这个有什么好的方法刷新一下吗?
之前确实没考虑到这种情况,暂时想到的思路是可以写一个插件去修改scene和prefab的数据。
- 读取有改动的字体json,得到字体json的uuid和里面记录的所有图片名
- 根据图片路径,获取所有图片的uuid
- 遍历项目内scene和prefab,在搜索到含有目标字体uuid的组件数据中将textures修正为之前获取到的图片uuid
好的,我试试
mark~~
mark~~
最近遇到一个问题,在微信小游戏平台,图片资源和JSON资源放服务器远程加载,加起来大概2M左右,会导致字体显示不出来,排查后发现是onEnable里面调用的forceUpdateRenderData感觉没有生效,加了一个延时0.2秒再调用一次forceUpdateRenderData才生效;大佬有没有什么头绪
确认下几个问题:
你用的是2.4.x版的吗?资源是拖到组件上的还是代码动态加载的,有勾选延迟加载吗?是否确定组件onEnable的时候json和图片资源都已经完成加载了?
2.4.9版本,资源是拖到一个prefab上的,这个prefab是另外一个prefab引用的,是动态加载的;没有勾选延迟加载,组件onEnable的时候看输出是都加载完成了的
可以麻烦给一个尽量精简的demo看看吗
我尝试打了个微信小游戏的包测试后没遇到问题。动态加载的prefab,上面静态引用了字体资源,字体图片和json放在资源服务器远程加载。
后续测试了下确实是延时加载的问题,打包的时候用脚本统一改了,导致网页上看着没问题;这个prefab有办法在延时加载也能立即渲染吗
延迟加载会影响texture的加载时机,用下面的代码修改一下TextMeshPro.ts文件的onEnable就行了。
protected onEnable(): void {
super.onEnable();
this.node.on(cc.Node.EventType.SIZE_CHANGED, this._nodeSizeChanged, this);
this.node.on(cc.Node.EventType.ANCHOR_CHANGED, this["setVertsDirty"], this);
// 兼容资源延迟加载
let arr: Promise<void>[] = [];
for (let i = 0; i < this.textures.length; i++) {
arr.push(this._waitTextureLoad(this.textures[i]));
}
Promise.all(arr).then(() => {
this.forceUpdateRenderData();
});
}
private _waitTextureLoad(texture: cc.Texture2D): Promise<void> {
return new Promise((resolve, reject) => {
if (texture.loaded) {
resolve();
return;
}
texture.once('load', () => {
resolve();
});
});
}
哇擦NB啊
2.4.x 描边、阴影之类的都无法合批吗?
对,描边阴影参数不同的话不能合批
牛逼克拉斯
Mac 上命令启动hiero后,传入的textStr会被替换成默认的,所以通过插件始终无法得到自己想要是字体文件,手动使用hiero生成.fnt倒是可以;
插件命令启动hiero后,通过参数传入的内容会被莫名替换成默认的