使用统一怎么将文本转换为贴图

  介绍

使用统一怎么将文本转换为贴图?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

导入字体

导入ttf字体,修改性格为自定义设置,并填入自定义字符:

使用统一怎么将文本转换为贴图

可以看的到,统一为我们生成了对应的材质和贴图:

使用统一怎么将文本转换为贴图

使用统一怎么将文本转换为贴图

从上图可以看出:

1,统一中Texture2D的坐标原点为左下角,和OpenGL相同,V坐标与DX相反。
2,某些字符被上下翻转,某些字符被顺时针旋转了90度
这两点需要特别注意。

原理分析

本文中使用的方法是创建一个纹理,然后利用Texture2D的

public 颜色[],获取像素(x, int  int  y, int  blockWidth,, int  blockHeight);

成员方法,读取字体贴图中的像素信息,然后基于特定字符,利用Texture2D的

public  void  SetPixel (int  x,, int  y, Color 颜色);

方法,将像素信息写入创建的Texrue。

确定获取像素的参数x, y时,需要注意以下两点:

1,对于被上下翻转的字符,比如数字“1”,利用CharacterInfo。uvTopLeft计算,
2,对于被顺时针旋转90度的字符,比如字母“K”,利用CharacterInfo。uvBottomRight计算。

代码实现

public  Texture2D  TextToTexture (   ,,,,,,,Font 字体,   ,,,,,,,string 文本,   ,,,,,,,int  textureWidth,, int  textureHeight,   ,,,,,,,int  drawOffsetX,, int  drawOffsetY,   ,,,,,,,int  textGap,, int  spaceGap,, int  rowHeight,   ,,,,,,,Color 输入textColor,   ,,,,,,,Color 写成backgroundColor)   ,,,{   ,,,,,,,//,创建返回的纹理   ,,,,,,,var  textTexture =, new  Texture2D (textureWidth, textureHeight,, TextureFormat.ARGB32,,真的);   ,,,,,,,颜色[],emptyColor =, new 颜色(textureWidth  *, textureHeight);   ,,,,,,,for  (int 小姐:=,0;,小姐:& lt;, emptyColor.Length;,我+ +)   ,,,,,,,{   ,,,,,,,,,,,emptyColor[我],=,写成backgroundColor;   ,,,,,,,}   ,,,,,,,textTexture.SetPixels (emptyColor);      ,,,,,,,//,字体贴图不可读,需要创建一个新的可读的   ,,,,,,,var  fontTexture =, (Texture2D) font.material.mainTexture;   ,,,,,,,var  readableFontTexture =, new  Texture2D (fontTexture.height, fontTexture.width,还以为,fontTexture.format, fontTexture.mipmapCount,,真的);   ,,,,,,,Graphics.CopyTexture (readableFontTexture fontTexture也);      ,,,,,,,//,调整偏移量   ,,,,,,,var  originalDrawOffsetX =, drawOffsetX;//,记录一下,换行用   ,,,,,,,drawOffsetY =, textureHeight 作用;drawOffsetY 作用;rowHeight;//,从上方开始画      ,,,,,,,//,逐个字符绘制   ,,,,,,,foreach  (var  @char  text.ToCharArray拷贝())   ,,,,,,,{   ,,,,,,,,,,,if  (@char ==, & # 39;, & # 39;)   ,,,,,,,,,,,{   ,,,,,,,,,,,,,,,drawOffsetX  +=, spaceGap;   ,,,,,,,,,,,,,,,继续;   ,,,,,,,,,,,}      ,,,,,,,,,,,if  (@char ==, & # 39; \ n # 39;)   ,,,,,,,,,,,{   ,,,,,,,,,,,,,,,//,换行   ,,,,,,,,,,,,,,,drawOffsetX =, originalDrawOffsetX;   ,,,,,,,,,,,,,,,drawOffsetY  -=, rowHeight;      ,,,,,,,,,,,,,,,继续;   ,,,,,,,,,,,}         null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

使用统一怎么将文本转换为贴图