Unity使用TextMeshPro多字体和材质热更

最近Unity项目中使用到TextMeshPro做聊天,需要支持部分字体带描边,部分字体不带描边。想到的决解方案是:TextMeshPro支持多字体展示(具体可以查看组件的官方案例Link Example),就做了两个字体一个是带描边的一个是不带描边的。

但是有个问题是多出来的一个字体需要放在Resources目录下生效,为了决解这个问题查看了TextMeshPro组件字体加载的源码,可以采用对资源字体热更加载,再缓存到TextMeshPro组件的字体管理器中TMPro.MaterialReferenceManager.AddFontAsset

       BaseAssetAsyncLoader loader = AssetBundleManager.Instance.LoadAssetAsync("fontname", typeof(TMPro.TMP_FontAsset));
        TMPro.MaterialReferenceManager.AddFontAsset((TMPro.TMP_FontAsset)loader.asset);

代码思路如上LoadAssetAsync是热更资源加载封装方法,TMPro.MaterialReferenceManager是组件字体管理类。在lua边调用也一样。

方案优化:

前面的部分字体带描边,部分字体不带描边,也可以使用material属性在同一种字体中切换不同的材质来实现。即:字体默认材质不带描边,需要带描边的通过富文本标签来切换。只需要将上面方案的富文本字体标签<font></font>换成<material></material>。然后这个材质需不需要热更就看你自己需要,热更的思路和字体一样,方法API如下:

 TMPro.MaterialReferenceManager.AddFontMaterial

猜你喜欢

转载自blog.csdn.net/waterdsm/article/details/128701472
今日推荐