在Unity中如何通过脚本修改文本框内单个字符的字体
Unity单文本框单字符字体修改实现方案
核心结论
可以实现,优先使用TextMeshProUGUI(TMP)组件,原生UGUI Text没有开放单字符样式控制接口,实现成本极高,不推荐。
前期准备
- 导入需要用到的5种字体文件到Unity项目
- 为每个字体生成对应的TMP字体资产:选中字体文件右键 →
Create→TextMeshPro→Font Asset - 给场景中的TextMeshProUGUI组件勾选
Rich Text选项,启用富文本支持
脚本实现
using UnityEngine; using TMPro; public class RandomCharFont : MonoBehaviour { // 拖入场景中的TMP文本组件 public TextMeshProUGUI targetText; // 拖入提前生成好的5种TMP字体资产 public TMP_FontAsset[] presetFonts; // 固定显示的原文本,保证内容不会变更 private readonly string _originalContent = "Hello World"; // 每次组件激活时触发刷新,可根据需求修改触发时机(比如应用切回前台、定时刷新等) private void OnEnable() { RefreshRandomCharFont(); } private void RefreshRandomCharFont() { int charCount = _originalContent.Length; // 1. 随机选中一个字符的索引 int randomCharIndex = Random.Range(0, charCount); // 2. 随机选中一种预设字体 TMP_FontAsset randomFont = presetFonts[Random.Range(0, presetFonts.Length)]; // 构建富文本:给选中字符套上font标签 string finalContent = _originalContent.Insert(randomCharIndex + 1, "</font>"); finalContent = finalContent.Insert(randomCharIndex, $"<font=\"{randomFont.name}\">"); // 赋值给文本组件 targetText.text = finalContent; } }
注意事项
- 所有TMP字体资产的名称需唯一,避免富文本标签识别错误
- 如果需要同时修改多个字符的字体,只需循环执行插入标签的逻辑即可
- 若有特殊符号需求,需提前对原文本做富文本转义处理,避免标签冲突
内容的提问来源于stack exchange,提问作者stevemn
相关产品推荐
相关产品推荐

