【CocosTextMeshPro】一个文本渲染解决方案——支持字体颜色渐变、斜体、下划线、删除线、描边、镂空、阴影、辉光、顶点动画、新的排版模式

支持字体颜色渐变、斜体、下划线、删除线、描边、镂空、阴影、辉光、顶点动画、新的排版模式

你这是在递归吗

mark!!

大佬牛啤!

来了,好用啊

mmmark.

2022.8.25更新

新增v3.6.0原生支持,需要注意的是:

  • 对native的支持需要修改c++层。请到GitHub仓库v3.6.0分支内用cpp目录下的文件替换引擎源码中对应的c++文件
  • Cocos Creator3.x的合批判断过于严格,只要不是同一个材质的引用,就不会合批。在JS层我做了一些hack的写法,修改了合批判断,使得相同uniform参数的材质实例得以合批。而native上的合批判断实现在c++层,暂未进行修改,所以目前如果希望将相同uniform参数的进行合批,请自行屏蔽掉组件内使用材质实例动态修改材质宏和uniform参数的代码,并尽可能的使用共享材质
1赞

已更新原生支持,但是由于3.x合批判断过于严格,且原生的合批判断也在c++层,在c++层改合批判断比js层麻烦,所以如果希望在原生上能让相同uniform参数的材质合批的话,还是请屏蔽textmeshpro组件内使用材质实例动态修改材质宏和uniform参数的代码,并多使用共享材质吧。

大佬,在mac上试了试,发现导出fnt出错,查了一下好像是运行jar文件在mac上前面要加java -jar;改了之后可以正常导出fnt,但是没有json文件,不知道咋回事

你是直接用hiero导出的fnt吗,还是通过我的插件导出的,我是在下图框出的这行代码(插件的main.js文件)将fnt转成json的。如果是用的插件导出,有报错信息可以提供一下吗?

用的插件导出,之前会提示exec format error,改成前面加java -jar后好了,今天我又试了一下,发现下面的回调没走,我再看看是什么问题

麻烦能不能在这个回调第一行加一个Editor.log输出点东西,看看是不是进了回调但是后续执行出错了

确实是里面代码出错了,是utils.parse里面的正则匹配错误,主要是spacing匹配错误,大概如下

let arr =  ["size=48 bold=0 italic=0 charset=\"\" unicode=0 stretchH=100 smooth=1 aa=1 padding=5,5,5,5 spacing=-10,-10"]
let size = Number(arr[0].match(/(?<=size=)([\S]+?)(?=[\s])/)[0]);
let bold = Number(arr[0].match(/(?<=bold=)([\S]+?)(?=[\s])/)[0]);
let italic = Number(arr[0].match(/(?<=italic=)([\S]+?)(?=[\s])/)[0]);
let padding = arr[0].match(/(?<=padding=)([\S]+?)(?=[\s])/)[0];
let spacing  = arr[0].match(/(?<=spacing=)([\S]+?)(?=[\s\r])/)[0];  //报错

我改了一下匹配规则好了,后续我在看看有没问题

谢谢了,有空我就去把这改了

主要是因为之前没考虑不同系统换行符不同的问题,现在已经改掉了,顺带优化了一下面板的样式。再次感谢指正!

太好了,建议官方收录改进

大佬有个问题,有个情况用插件导出之后,多个预制体用了这个组件,下次加字之后可能会达到多张贴图,但预制体里面引用是没有更新的,因为我没有重新打开那个预制体,导致运行会报错,这个有什么好的方法刷新一下吗?

之前确实没考虑到这种情况,暂时想到的思路是可以写一个插件去修改scene和prefab的数据。

  1. 读取有改动的字体json,得到字体json的uuid和里面记录的所有图片名
    image
  2. 根据图片路径,获取所有图片的uuid
  3. 遍历项目内scene和prefab,在搜索到含有目标字体uuid的组件数据中将textures修正为之前获取到的图片uuid
    image

好的,我试试

mark~~