[求助] 关于字体加载的方案

引擎版本: 3.3
平台: Web

场景上有Label组件挂载了TFF字体…该场景使用ab包加载…
但是当场景加载完成回调…并且运行该场景后…
ui上的Label还是默认字体…需要过一段时间才会切换成自定义字体…
请问一下各位大佬…有没有方案让场景加载时…判断字体是否完全加载好…?

ab 包加载完毕,优先再加载一下字体就行了

ab包里面是场景…字体就依赖在场景上…
加载场景的控制器根本不知道里面有没有字体…怎么优先加载字体呢…?

兄弟,有没有解决,碰到一样的问题了

没有 :upside_down_face:

用啥字体,,用fnt才对

很简单,字体文件不挂载到组件上,采用自己加载的方式,自己加载完毕以后,通过以下方法进行字体变更:

        let oldLabelOnEnable = Label.prototype.onEnable;
        Label.prototype.onEnable = function () {
            let ttf = appContext.resManager.getTTF();
            if (ttf && !this.font) {
                this.font = ttf;
            }
            oldLabelOnEnable.call(this);
        }
  • 富文本同理
  • 你只需要在字体、场景都预加载完毕的时候,切换场景即可

assetManager.loadBundle(‘Fonts’,
{ onFileProgress: function (finish, total) { console.log(finish, total); } },
(err, bundle) => {
bundle.load(‘FontName’, (finish, total) => { console.log(finish, total) }, () => {
console.log(bundle, ‘加载完成’);
});
});

但我用loadBundle方法加载,提示加载完成,但其实还在加载中,是哪里不对吗?onFileProgress也只是执行一次,没有进度过程显示从0到实际加载完这样。

哪个平台?

3.6.1 PC WEB

你这样,字体放到resources文件夹里,走resources.load,先不用assetManager,我web平台这样使用没遇到问题

这种就打破了正常的编辑器流程了…
场景有多种字体就的靠配置表维护…
而且编辑时也没有预览字体的能力…

这个看需求吧,我是感觉创建个label还要拖一个字体的行为很繁琐也容易忘记,才做的这种一劳永逸的方式。如果项目字体比较多,可以优化一下面向多字体的方式。

就挺奇怪的,加载图片资源,不管是用resources.load还是assetManager,都会在真正加载完后提示加载完成,但只要是ttf字体文件,都会加载小部分就提示加载完成了,但网络还在加载当中 :rofl: :joy:
考虑用FNT,但文字动态的,也不是太适合。

也不算很奇怪了(当你发现AudioClip也是延迟的时候) :upside_down_face: