You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 14:15:04