由于TextMeshPro的字体资源后缀是.asset,所以,需要我们借助插件的字体工具TextMeshPro-Font Asset Creator来生成新的字体资源。该工具打开路径:Window-Font Asset Creator。具体操作可见TextMeshPro/User Guide/TextMesh Pro User Guide.pdf这个文档,有详细介绍。

由于用到了中文字体,所以需要修改插件的源码。本篇博客还提供了常用的3500个字体的txt文档,下载链接:

制作字体的具体步骤如下:

1、生成txt字体文件

把你所需要的字体,粘贴复制到txt文档中,另存为,编码格式选择Unicode格式。关于字符编码格式,见上面的文章。点击打开链接 。

2、熟悉插件工具——Font Asset Creator

1)Font Source:设置字体格式,我用的是隶属,为了避免错误,尽量去Windows系统里拷贝字体过来即可。在工程目录下新建Fonts目录,拷贝进去。

2)Font Size:设置字体大小,最好是使用Auto Sizing

3)Font Padding:设置字体间距,像素为单位,512*512尺寸下,间距设置为5即可

4)Atlas Resolution:设置图集尺寸,根据字体多少来确定

5)Character Set:设置字体内容,即需要制作的字体资源包括哪些字体。(1)ASCII:仅包含ASCII的字符集;(2)ASCII Lowercase:小写ASCII字符集;(3)ASCIIUppercase:大写ASCII字符集;(4)Numbers+Symbols:数字+符号字符集;(5)Custom Range:可以定义一个范围的字符集,但是仅限于ASCII和拉丁字母,如在自定义窗口范围输入32-126或者161-255;(6)Custom Characters:自定义字符集,可以在自定义窗口输入自定义的字符;(7)Characters from File:从外部文件读入,即我们这片文章介绍的主要内容。当选择该模式时,可以拖拽一个txt文档到自定义窗口。如上图所示;

6)Font Style:字体格式设置,如加粗、下划线、outline等。但是这个设置是非必须的;

7)Font Render Mode:字体渲染模式。(1)Hinted Smooth:反锯齿渲染模式;(2)Smooth:和(1)差不多;(3)Raster Hinted:光栅渲染模式,带hinting效果;(4)Raster:光栅模式,不带hinting效果;(5)Signed Distance Field 16:创建SDF字体集的标准模式,字体采样使用16X,生成更精确的资源;(6)Signed Distance Field 32:使用32X采用,处理复杂的字体或者高频率曲线的变化,注意:这个处理方式显著低于16X的模式。

8)Get Kerning Pairs:暂时不懂,也没用到。

9)Generate Font Atlas:生成字体资源

10)Save TextMeshPro Font Asset:保存字体资源,是以.asset的后缀文件保存的。保存位置放在刚才创建的Fonts目录下即可,如果使用Signed Distance Field的渲染模式,将会生成在字体资源名称后加上SDF。

3、修改TextMeshPro源码

通过2生成的字体资源,我们在使用时会报The given key was not present in the dictionary:原因是这个插件是以ASCII为基础,处理的代码逻辑,所以需要做一些修改。通过代码我们可以看到,保存字体资源时,使用的是字典型的数据结构中,key值使用该字体当前编码方式下的10进制数。如“A"在ASCII编码格式下是65,保存时的key即为65。又如汉字”我“在Unicode编码格式下是\u6211,转换为十进制是25105,则保存时key值即为25105。而插件的源码中默认给我们添加了LineFeed(10)、Return(13)、Space(32)3个ASCII字符,所以这三个字符保存时使用的是ASCII下的编码值。因此,当我们使用Unicode时,如果插入ASCII的编码值,肯定会报错的。所以我们把它注释掉。即:TextMeshProFont.cs 151:添加 /* ; 202添加 /*; 208:65改为了12290;TMPro_Private.cs 453:Fonts/ARIAL SDF 改为UI/Fonts/SIMLI。可以自己全局搜索characterDictionary.TryGetValue,看看哪里使用到了自己没使用的key值,注释或者修改掉就可以了。保存,运行;

运行发现还是报错,再次检查发现,TextMeshPro默认给我们使用了Arial SDF,即TMPro_Private.cs 453行,把字体设置成你自己的字体资源即可。注意路径问题。

同时,TextMeshPro设置text的长度默认是8,但是当我们传入的字符串长度超出8时,会给我们新开辟一个数组,并赋值给原来的数组。详见TMPro_Private.cs 287行和792行。

4、使用到的工具

1)各种进制转换:http://jinzhi.supfree.net/

2)Unicode与中文的转换:http://app.baidu.com/2unicode

可以在工具2中将我们指定的汉字转为Unicode编码。16字节的16进制数,如\u6211,如果不足,在前面加FF,这个可以百度一下Unicode大小端的问题。然后使用工具1将上步转换成的16进制数转化为10进制数,即可在程序中打断点,找到这个key值是否包含在字体资源中。

5、字体资源的使用

使用该资源,不能通过public的方式拖拽,只可以用代码获取脚本的方式创建GameObject

如下:

首先包含命名空间using TMPro

private TextMeshPro m_Name;
private TextMeshPro m_Sign;
private GameObject headShowObj;
private GameObject headSignObj;
private Transform objTrans;
private Transform signTrans;
private Vector3 v = new Vector3(0,2.0f,0);
private Vector3 vs = new Vector3(0,2.5f,0);headShowObj = new GameObject("playerName");
objTrans = headShowObj.transform;
objTrans.parent = _controller.trans;// Camera.main.transform;
objTrans.localPosition = Vector3.zero + v;
objTrans.localRotation = Quaternion.identity;
objTrans.localScale = Vector3.one;
objTrans.LookAt(Camera.main.transform.position);
m_Name = headShowObj.AddComponent<TextMeshPro>();
m_Name.font = Resources.Load ("UI/Fonts/SIMLI",typeof(TextMeshProFont)) as TextMeshProFont;
m_Name.fontSize = 4;
m_Name.isOverlay = true;
m_Name.alignment = AlignmentTypes.Center;
m_Name.anchor = AnchorPositions.Center;
m_Name.text = ”hehe“;

运行即可看到效果,其实不懂的可以详细看看上面提到的文档。

Unity3D插件之TextMeshPro字体资源的制作相关推荐

  1. Unity3D插件 AnyPortrait 2D骨骼动画制作

    一.前言 AnyPortrait是一个创建2D角色动画制作的Unity拓展编辑器插件. AnyPortrait提供了很多功能,让你可以在Unity里面就完成动画的制作. 使用AnyPortrait插件 ...

  2. 【Unity3D插件】Build Report Tool插件,Build报告,优化包体,查看资源占用

    推荐阅读 CSDN主页 GitHub开源地址 Unity3D插件分享 简书地址 我的个人博客 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦. 一.前言 ...

  3. TextMeshPro 创建中文字体资源

    TMP组件需要FontAsset,一种类似Material的资源文件,TMP自带两个FontAsset,但是都不支持中文,本文详解怎么生成中文FontAsset. (用别人生成的字体Asset有可能无 ...

  4. python--中文分词与词云制作--入门笔记(附停用词库及Mac字体资源)

    这里写自定义目录标题 一.中文分词基本说明 二.停用词库.自定义词典的使用 (一)停用词 (二)自定义词典 三.词云绘制 四.中文字体的使用说明 (一)Mac 字体使用说明 五.附件 (一)ttf字体 ...

  5. 【Unity3D插件】KGFMapSystem插件分享《快速制作小地图插件》

    推荐阅读 CSDN主页 GitHub开源地址 Unity3D插件分享 简书地址 我的个人博客 QQ群:1040082875 一.前言 在我们开发游戏或者虚拟现实中,一般都会用到小地图,如果要我们去写小 ...

  6. 【风宇冲】Unity3D教程宝典之插件篇:Unity3D插件详细评测及教学下载

    [风宇冲]Unity3D教程宝典之插件篇:Unity3D插件详细评测及教学下载 (2012-12-09 07:27:51) 转载▼ 标签: unity3d unity unity3d教程 unity3 ...

  7. Unity3D插件评测(待续)

    Unity3D插件评测(待续) 转载自风宇冲Unity3D教程学院 本文一共分为三个部分,第一部分是插件的下载,第二部分是插件的评测,第三部分是插件的学习方法. 第二部分 插件的评测 Unity插件本 ...

  8. 【Unity3D插件】Inventory Pro插件分享《游戏背包系统》

    推荐阅读 CSDN主页 GitHub开源地址 Unity3D插件分享 简书地址 我的个人博客 QQ群:1040082875 一.前言 发现就喜欢研究这些插件,为什么呢,因为方便快捷啊.基本不用研究源代 ...

  9. 【Unity3D插件】AVPro Video插件分享《视频播放插件》

    推荐阅读 CSDN主页 GitHub开源地址 Unity3D插件分享 简书地址 我的个人博客 QQ群:1040082875 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给 ...

最新文章

  1. 使用QEMU创建虚拟机
  2. Linux查看本机外网ip
  3. 有奖竞赛 | “神策杯”高校算法大师赛揭幕,寻找最强文本处理大神
  4. Iterator to list的三种方法
  5. #6284. 数列分块 8 分块
  6. Bootstrap table列内容过长,显示固定长度,超过内容隐藏
  7. jquery $.get和$.post设置请求超时error处理
  8. FlinkCdc从Mysql指定的binlog日志offsetPos位置开始读取数据
  9. ExtJs基础知识总结:自定义弹窗和ComboBox自动联想加载(四)
  10. 云时代数据容灾的正确姿势
  11. 心情感受(倍压抑 不想上课)
  12. 解决Creo8.0许可证无效的问题
  13. 三菱服务器绝对位置,绝对位置控制指令
  14. tableau各种精典示例经验总结01
  15. js jquery新窗口打开的几种方式
  16. ROS-机器人操作系统(ROS)浅析----第三章
  17. 微信公众号头像如何修改
  18. 小程序毕设作品之微信二手交易小程序毕业设计成品(8)毕业设计论文模板
  19. 证券基础知识——一手代表多少数量?
  20. 75.android 简单的获取当前可用运行内存,总运行内存,获取包含系统软件在内的所有内存,获取系统参数显示的内存大小。

热门文章

  1. y97.第六章 微服务、服务网格及Envoy实战 -- xDS API与动态配置(八)
  2. 阿里云SSL证书格式和支持服务器类型说明
  3. 使用electron 将网页打包成应用程序
  4. 计算机台式pc机主机箱结构图,一种隔板组合台式PC机机箱制造技术
  5. 投票脚本软件制作,自动投票程序
  6. HTML5新增的标签属性以及它们的用法
  7. 技嘉Z690、B660主板VCCSA电压设计缺陷
  8. App工厂为个人及中小企业提供快捷的App解决方案
  9. 互联网快讯:猿辅导推出教育科技新品牌“飞象星球”;披头士乐队入驻TikTok;阿里平头哥发布自研CPU芯片倚天710
  10. 12 psh——execvp、fork、wait、_exit