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

Unity中如何绘制与TextMesh尺寸匹配(带内边距)的黑色矩形?

Unity 2D中为TextMesh添加匹配尺寸的黑色背景矩形

原代码问题分析

  • 混淆Sprite像素坐标与世界单位:创建Sprite时传入的Rect参数是纹理像素范围,但你用了TextMesh的世界单位尺寸(textSize.x +0.3f),远大于1x1纹理的像素范围,导致Sprite无法正确渲染。
  • 冗余缩放设置:同时修改spriteRenderer.transform.localScale和result.transform.localScale,属于重复操作。
  • 未处理文本与背景的位置对齐、排序层适配。

修复后的完整代码

TextMesh textMesh = GetComponent<TextMesh>();
Renderer textRenderer = textMesh.GetComponent<Renderer>();
Vector3 textSize = textRenderer.bounds.size;

// 自定义背景内边距,可按需调整
float paddingX = 0.3f;
float paddingY = 0.1f;
Vector2 backgroundSize = new Vector2(textSize.x + paddingX, textSize.y + paddingY);

// 创建背景GameObject
GameObject background = new GameObject("TextBackground");
SpriteRenderer bgRenderer = background.AddComponent<SpriteRenderer>();

// 创建1x1纯色纹理(无需放大尺寸,靠UV拉伸实现任意大小)
Texture2D texture = new Texture2D(1, 1);
texture.SetPixel(0, 0, Color.black);
texture.Apply();
// 关键:Sprite的Rect使用纹理全部像素范围(0到1像素)
Sprite bgSprite = Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), new Vector2(0.5f, 0.5f));
bgRenderer.sprite = bgSprite;

// 通过缩放控制背景的世界单位尺寸
bgRenderer.transform.localScale = new Vector3(backgroundSize.x, backgroundSize.y, 1f);
// 对齐背景与文本位置
background.transform.position = textMesh.transform.position;
// 确保背景在文本下方(复用TextMesh的排序层,排序顺序减1)
bgRenderer.sortingLayerName = textRenderer.sortingLayerName;
bgRenderer.sortingOrder = textRenderer.sortingOrder - 1;

// 可选:同步文本的旋转/缩放,将背景设为文本子对象自动跟随
background.transform.rotation = textMesh.transform.rotation;
background.transform.parent = textMesh.transform;

核心说明

  1. Sprite创建逻辑:Sprite的Rect仅定义纹理截取的像素区域,1x1纹理直接使用new Rect(0,0,1,1),通过localScale控制世界空间尺寸,彻底区分像素与世界单位。
  2. 2D排序适配:利用SpriteRenderer的sortingLayerName和sortingOrder属性,完美适配2D场景的排序需求,解决3D Quad无法设置排序层的问题。
  3. 自动同步变换:将背景设为TextMesh的子对象,可自动跟随文本的移动、旋转等操作,无需额外维护位置关系。

内容的提问来源于stack exchange,提问作者VidyaNeedsBetterTesting

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 04:27:17