欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

unity将图片转换成字体的方法

程序员文章站 2023-02-19 15:51:23
本文实例为大家分享了unity利用图片来生成字体的具体代码,供大家参考,具体内容如下开发中,可能会用到需要将图片转换成字体的需求。bmfont 插件 导入图片然后生成 .fnt 和 .png 两个文件...

本文实例为大家分享了unity利用图片来生成字体的具体代码,供大家参考,具体内容如下

开发中,可能会用到需要将图片转换成字体的需求。

bmfont 插件 导入图片

unity将图片转换成字体的方法

unity将图片转换成字体的方法

然后生成 .fnt 和 .png 两个文件 (文件格式可以在设置中更改)
将这两个文件导入unity 将png 切割成精灵
创建材质、将贴图拖上去。
创建字体、将材质拖上去。

unity将图片转换成字体的方法

数据怎么算出来的公式百度上面有,此处略去。也可以利用代码来生成

using unityengine;
using system.collections;
using system;
using system.xml;

public class customfontimportor : monobehaviour {

  public font font;
  public textasset textasset;


  void awake()
  {
    if (font == null || textasset == null)
    {
      debug.logerror("请设置font和textasset.");
      return;
    }

    xmldocument xmldocument = new xmldocument();
    xmldocument.loadxml(textasset.text);


    int totalwidth = convert.toint32(xmldocument["font"]["common"].attributes["scalew"].innertext);
    int totalheight = convert.toint32(xmldocument["font"]["common"].attributes["scaleh"].innertext);

    xmlelement xml = xmldocument["font"]["chars"];
    arraylist characterinfolist = new arraylist();


    for (int i = 0; i < xml.childnodes.count; ++i)
    {
      xmlnode node = xml.childnodes[i];
      if (node.attributes == null)
      {
        continue;
      }
      int index = convert.toint32(node.attributes["id"].innertext);
      int x = convert.toint32(node.attributes["x"].innertext);
      int y = convert.toint32(node.attributes["y"].innertext);
      int width = convert.toint32(node.attributes["width"].innertext);
      int height = convert.toint32(node.attributes["height"].innertext);
      int xoffset = convert.toint32(node.attributes["xoffset"].innertext);
      int yoffset = convert.toint32(node.attributes["yoffset"].innertext);
      int xadvance = convert.toint32(node.attributes["xadvance"].innertext);

      characterinfo info = new characterinfo();
      rect uv = new rect();
      uv.x = (float)x / totalwidth;
      uv.y = (float)(totalheight - y - height) / totalheight;
      uv.width = (float)width / totalwidth;
      uv.height = (float)height / totalheight;


      info.index = index;
      info.uvbottomleft = new vector2(uv.xmin, uv.ymin);
      info.uvbottomright = new vector2(uv.xmax, uv.ymin);
      info.uvtopleft = new vector2(uv.xmin, uv.ymax);
      info.uvtopright = new vector2(uv.xmax, uv.ymax);
      info.minx = xoffset;
      info.maxx = xoffset + width;
      info.miny = -yoffset - height;
      info.maxy = -yoffset;
      info.advance = xadvance;
      info.glyphwidth = width;
      info.glyphheight = height;


      characterinfolist.add(info);
    }
    font.characterinfo = characterinfolist.toarray(typeof(characterinfo)) as characterinfo[];


    debug.log("生成成功.");
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。