Ue4 三维文字,汉字,中文乱码

最近在ue4中用C++实现三维文本,就是TextRender,实现本身不难,就是参照官网《创建使用定时器Actor》那一节。链接如下:
创建使用定时器Actor

过程中遇到两个坑,好几天才过去。
一、汉子字体的制作。过程乍一看挺麻烦,其实跟着做两遍就轻车熟路了。网上多数给的是一下这种方法:

  1. 资源浏览器中右键,选择User Interface->font创建字体蓝图:MyFont。
    在这里插入图片描述

  2. 双击MyFont,打开字体编辑器,进行修改。在Detail面板,找到Font Cache Type,切换为Offline模式。弹出的对话框直接点yes就行,稍后出现字库选择面板,此处选择字体:仿宋,字号:48号,点击确认。

    在这里插入图片描述

  3. 在Detail面板中chars输入需要使用的中文汉字,并勾选Alpha Only选项。
    在这里插入图片描述

  4. 执行菜单栏 Asset->Reimport MyFont 功能,此时就会生成想要的汉字字库,不过汉字顺序并不是按照输入顺序显示
    在这里插入图片描述

  5. 创建材质文件MyFontMat,双击材质,将节点的blend Mode 改为Mask模式,创建FontSampleParameter节点和VertexColor,添加如图逻辑:
    在这里插入图片描述

  6. 在Module中找到TextRender对象,放置到场景中,修改TextRender的material、Font属性为以上创建资源,并在Text属性输入:勇敢无畏的勇士。
    在这里插入图片描述

  7. 最终效果如图:
    在这里插入图片描述

这里也有两个坑:
①可以形成不同字体的某些特定文字,但是,你可以显示的文字只是“勇敢无畏的战士”这几个字,在第6步的Text中输入其他文字,会显示乱码。
如果想随意显示各种文字,可将上述第3步以下图方式替换:
在这里插入图片描述
Unicode Range为字符集范围,4E00-9FFF基本概括了所有汉字。
② 在上述第二步设置字体风格后,发现文字躺下了,这种情况只需将下图种“@黑体”中的“@”删除即可。
在这里插入图片描述

扫描二维码关注公众号,回复: 4169219 查看本文章

二、汉字字体制作完成了,下面要进行显示,但是ue4显示汉字有问题,会出现乱码。

不仅在三维字体中会出现乱码,在屏幕和控制台输出打印汉字的时候一样会出现乱码。
根据我目前的需求,我找到两种解决方法。
1、我自己定义FString并进行输出:

FString rot = “你好”; //输出乱码
FString rot = TEXT(“你好”); //输出正确

2、将std::string标准字符串行转换为FString并进行输出:

std::string str0 = "你好";
FString str1 = UTF8_TO_TCHAR(str0.c_str());

ps:还需在vs中将CPP文件的编码格式改为utf-8;
修改方法参考一下链接:https://blog.csdn.net/u014180504/article/details/46758971
若找不到上面链接中的“高级保存选项”,请参考一下链接:https://www.cnblogs.com/xiaopin/archive/2012/03/07/2383860.html

快下班了,写的乱七八糟,但是想记录的总结的东西基本都写上了。有时间再整理修改一下吧。

猜你喜欢

转载自blog.csdn.net/qq_28105601/article/details/83794275