最近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边调用也一样。
方案优化:文章来源:https://www.toymoban.com/news/detail-599138.html
前面的部分字体带描边,部分字体不带描边,也可以使用material属性在同一种字体中切换不同的材质来实现。即:字体默认材质不带描边,需要带描边的通过富文本标签来切换。只需要将上面方案的富文本字体标签<font></font>换成<material></material>。然后这个材质需不需要热更就看你自己需要,热更的思路和字体一样,方法API如下:文章来源地址https://www.toymoban.com/news/detail-599138.html
TMPro.MaterialReferenceManager.AddFontMaterial
到了这里,关于Unity使用TextMeshPro多字体和材质热更的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!