网站死链接怎么删除/新闻热点事件2021(最新)
从Unity 2018.3(TextMeshPro1.4)起,添加了Font Fallback和Dynamic SDF System以实现灵活的SDF使用。
有了这个新功能后,我们可以实现以下用法:
- 预先为中文字中经常使用的字符生成普通SDF
- 根据需要追加取得使用频率低的文字、图画文字、角色名等(Font Fallback)
- 为用户输入的特殊字符动态生成SDF(Dynamic SDF System)
使用TextMesh Pro动态获取和使用字体
即使使用基于SDF的缩放,但是存在一个问题,即需要预先烘焙文本。这在使用英语的国家我认为不是一个问题,但如果是用在文化领域中的字符数较多的国家,如日本和中国和韩国等,就是一个比较大的问题。
例如,如果要显示大量的字符,由于纹理的大小,我必须使用粗字体,并且如果减少预先烘培字符的数量,则无法显示所有字符。主要原因是之前的版本中可以用于字体的纹理只有一种。
作为针对此问题的措施,TextMeshPro添加了可以通过将字体分配到多个资产来管理字体的Font Fallback,以及可以动态获取字体并将其用作SDF的Dynamic SDF System。
字体后备
简单地说,Font Fallback是一种就是从另一个FontAsset中获取不包含在当前FontAsset中的字符的系统。
例如,当我尝试使用FontAsset显示汉字时,该汉字只能显示如下的“空白或一个正方形□”。如果您使用字体后备,则只要在 数字与符号.fontAsset 中添加Font Fallback字体,就可以使用中文。


用法很简单,只需将另一种字体添加到FontAsset的Font Fallback里。
Window>TextMeshPro>FontAssetCreator
在FontFontAsset
创建(汉字)- 在需要添加Fallback的assets中将新创建的汉字FontAssets加入到里面
动态SDF系统(Dynamic SDF System)
动态SDF系统已变得实用,因为使用SDF AA可以非常快速地生成字体纹理。在运行时从字体(otf等)中获取字符,并使它们可用于游戏。
具体用法如下:
- Window >TextMeshPro >FontAssetCreator 创建 FontFontAsset资源
- 在创建好的FontAssets中,将 Atlas Population Mode改成Dynamic模式
- 将Atlas Render Mode改成SDFAA
- sampling Point Size改成合适的大小,如果太大,该图集将会很快填满


总结
从1.4preview开始,TextMeshPro暂时还没有重置机制,如果使用的字符数已满,则无法动态添加字符。
暂时,我只能在代码里手动调用TMP_FontAsset.ClearFontAssetData()
进行重置FontAsset 。但是,ClearFontAssetData
据说是“可能会更改为内部功能,仅在测试中使用”,并且似乎将来不用调用它。
也许它应该像Unity的内置FontSystem这样在内部进行管理。
希望后续的更新可以解决这个问题。
参考链接:
UWA问答-分享一下TextMesh Pro插件使用的经验