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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 19:30:57