一,字体消失
项目合并时,因为资源更替,导致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);
}
}