项目合并后,font字体资源被替换导致TextMeshPro不能显示文字,抢救方法

一,字体消失

项目合并时,因为资源更替,导致TextMeshPro不能找到自己原来使用的font资源,以致不能显示文字。

二、抢救方式

  • 1、找到所有用到TextMeshPro的物体
  • 2、把他们的字体重新设置成你要的字体

关键步骤:

  • 1、找到组件
var textMeshProObjects = GameObject.FindObjectsOfType<TMPro.TextMeshProUGUI>(true).Select(x=>x.gameObject).ToList();
  • 2、拖上字体
    在这里插入图片描述
  • 3、设置字体
    在这里插入图片描述

三、代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
using TMPro;
using System.Linq;

/*
 * 一、找到所有的包含textMeshPro的物体
 * 二、把他们的字体设置成指定的字体
 */

public class SetFontOfTextMeshPro : MonoBehaviour
{
    
    
    [Header("textMeshPro的字体")]
    [SerializeField]
    public TMP_FontAsset fontOfTextMeshPro;

    [Header("找到的包含textMeshPro的物体")]
    [SerializeField]
    public List<GameObject> textMeshProObjects = new List<GameObject>();

#if UNITY_EDITOR
    [ContextMenu("寻找TextMeshPro的物体")]
#endif
    void FindTextMeshProObject()
    {
    
    
        textMeshProObjects.Clear();
        textMeshProObjects = GameObject.FindObjectsOfType<TMPro.TextMeshProUGUI>(true) //查找包含组件《TMPro.TextMeshProUGUI》的所有物体,包含隐藏的
            .Select(x=>x.gameObject).ToList();
    }

#if UNITY_EDITOR
    [ContextMenu("设置找到字体")]
#endif
    void SetTextMeshProObject()
    {
    
    
        //textMeshProObjects.ForEach(x => x.GetComponent<TextMeshPro>().font = fontOfTextMeshPro);

        Debug.Log(textMeshProObjects.Count);

        textMeshProObjects.ForEach(x => Debug.Log(x.name));  //TextMeshProUGUI

        textMeshProObjects.ForEach(x => x.GetComponent<TextMeshProUGUI>().font = fontOfTextMeshPro);
    }
}

猜你喜欢

转载自blog.csdn.net/dzj2021/article/details/128655693
今日推荐