如何在Unity引擎中绘制一个文本网格大小的黑色矩形?

问题描述 投票:0回答:1

我在 UnityEngine 中有一个 TextMesh,它在 2D 平台游戏的游戏场景中显示文本。

我现在想向白色文本添加一个黑色背景矩形。它必须与文本具有相同的大小(加上一些填充)。

这就是我尝试创建它的方式

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

GameObject result = new GameObject("BackgroundRectangle");
SpriteRenderer spriteRenderer = result.AddComponent<SpriteRenderer>();

Texture2D texture = new Texture2D(1, 1);
texture.SetPixel(0, 0, Color.black);
texture.Apply();

Rect rect = new Rect(0, 0, textSize.x + 0.3f, textSize.y + 0.1f);
Vector2 pivot = new Vector2(0.5f, 0.5f);
Sprite sprite = Sprite.Create(texture, rect, pivot);
spriteRenderer.sprite = sprite; 

spriteRenderer.transform.localScale = new Vector3(textSize.x + 0.3f, textSize.y + 0.1f, 1.0f);       
result.transform.localScale = new Vector3(textSize.x + 0.3f, textSize.y + 0.1f, 1.0f);

这不会画任何东西。如果我尝试

Texture2D texture = new Texture2D(1, 1);

并将其设置为例如

Texture2D texture = new Texture2D(100, 100);

它画了一个矩形。所以我想我必须这样使用它?或者有什么其他办法可以解决吗?

我设置纹理尺寸时遇到的问题是文本边界以引擎单位为单位,而纹理尺寸以像素为单位。

使用 3D Quad 也可以。但由于这是一款 2D 游戏,我想将所有内容放在适当的排序层中,以便在所有情况下获得正确的绘图顺序。这对于 3D 对象来说是不可能的。

也尝试过使用GenAI来修复它,但那东西也没有任何线索。

unity-game-engine
1个回答
0
投票

Sprite.Create
有更多参数,其中
pixelsPerUnit

默认情况下,这是afaik

100f
,这意味着例如尺寸为
Texture2D
100 x 100
将产生世界单位尺寸为
1 x 1
的正方形。但你基本上可以选择并传入任何

所以这应该是足够的信息来计算所需的像素尺寸通过这样做

var backgroundPixelSize = textSize * desiredPixelsPerUnit;

然后将相同的因子传入

Sprite sprite = Sprite.Create(texture, rect, pivot, desiredPixelsPerUnit);
© www.soinside.com 2019 - 2024. All rights reserved.