Unity脚本通过TextMesh添加世界空间文字不显示问题
Unity世界空间显示TextMesh无内容的问题修复
问题根源及修正要点:
- 空字体无法渲染:直接
new Font()创建的字体无字形数据,需使用Unity内置字体或自定义字体资源。 - 缺少MeshRenderer组件:原代码未给文本GameObject添加MeshRenderer就赋值材质,需先添加组件再关联。
- 位置/缩放不合理:默认文本位置可能与相机重叠,且默认缩放太小,需调整到相机前方并放大字符。
- 冗余方法调用:
mat.SetPass(0)是渲染管线专用方法,设置TextMesh材质时无需调用。
修正后的完整代码:
using UnityEngine; public class WorldSpaceText : MonoBehaviour { void Start() { // 创建文本对象 GameObject textObj = new GameObject("WorldSpaceText"); // 添加TextMesh组件 TextMesh textMesh = textObj.AddComponent<TextMesh>(); // 添加MeshRenderer组件(必须,否则无法渲染) MeshRenderer meshRenderer = textObj.AddComponent<MeshRenderer>(); // 初始化材质 Shader shader = Shader.Find("Hidden/Internal-Colored"); Material mat = new Material(shader); mat.hideFlags = HideFlags.HideAndDontSave; mat.SetInt("_Cull", (int)UnityEngine.Rendering.CullMode.Off); mat.SetInt("_ZWrite", 0); mat.SetColor("_Color", Color.blue); // 绑定材质 meshRenderer.material = mat; // 使用Unity内置Arial字体(避免空字体) textMesh.font = Resources.GetBuiltinResource<Font>("Arial.ttf"); textMesh.text = "Hello World!"; // 设置文本居中对齐 textMesh.anchor = TextAnchor.MiddleCenter; // 放大字符,适配世界空间显示 textMesh.characterSize = 0.2f; // 将文本放在相机前方2米处,避免重叠 textObj.transform.position = transform.position + transform.forward * 2; // 让文本始终朝向相机 textObj.transform.LookAt(transform); textObj.transform.Rotate(0, 180, 0); } }
额外说明:
- 将脚本挂载到主相机上,运行后文本会显示在相机前方2米处,且自动朝向相机。
- 若使用自定义字体,导入字体资源后,直接替换
Resources.GetBuiltinResource<Font>("Arial.ttf")为你的字体引用即可。
内容的提问来源于stack exchange,提问作者aarelovich
相关产品推荐
相关产品推荐

