一键生成UGUI艺术字体

转载 2018年04月17日 17:59:29






需要注意的是:字体文件的名字要对应相应的艺术字体,比如 1->1的艺术字体,中->对应中的艺术字体等等。

并且在生成字体文件后,要修改一下字体,然后再回去保存,才能让字体文件生效


[html] view plain copy
  1. using UnityEditor;  
  2. using UnityEngine;  
  3. using System.Collections;  
  4. using System.Collections.Generic;  
  5. using System.IO;  
  6. using System;  
  7. public class MakeArtFont  
  8. {  
  9.   
  10.     [MenuItem("Assets/LoadFont(选中目标文件夹)")]  
  11.     static void CarteNewFont()  
  12.     {  
  13.   
  14.         UnityEngine.Object obj = Selection.activeObject;  
  15.         string setImgPath = AssetDatabase.GetAssetPath(obj);  
  16.         CombinImage(setImgPath.Replace("Assets/", ""), obj.name);  
  17.   
  18.     }  
  19.   
  20.     /// <summary>  
  21.     /// 调用此函数后使此图片合并  
  22.     /// </summary>  
  23.     /// <param name="sourceImg">粘贴的源图片</param>  
  24.     /// <param name="destImg">粘贴的目标图片</param>  
  25.     public static void CombinImage(string sourceImg, string fileName)  
  26.     {  
  27.         string[] pngs = Directory.GetFiles(Application.dataPath + "/" + sourceImg, "*.png");  
  28.   
  29.         string texturePath = Application.dataPath + "/" + sourceImg + "/" + fileName + "_texture.png";  
  30.   
  31.         int maxWidth = 0;  
  32.         int maxHeight = 0;  
  33.   
  34.         foreach (string path in pngs)  
  35.         {  
  36.             string subPngPath = path.Replace(Application.dataPath, "Assets");  
  37.   
  38.             if (subPngPath.IndexOf("texture") == -1)  
  39.             {  
  40.                 Texture tex2D = AssetDatabase.LoadAssetAtPath(subPngPath, typeof(Texture)) as Texture;  
  41.                 maxWidth += tex2D.width;  
  42.                 if (maxHeight < tex2D.height)  
  43.                 {  
  44.                     maxHeight = tex2D.height;  
  45.                 }  
  46.             }  
  47.         }  
  48.   
  49.         Texture2D fullTexture = new Texture2D(maxWidth, maxHeight, TextureFormat.RGBA32, false);  
  50.   
  51.         Color[] fullTcolors = fullTexture.GetPixels();  
  52.   
  53.         for (int i = 0; i < fullTcolors.Length; i++)  
  54.         {  
  55.             fullTcolors[i].a = 0;  
  56.             fullTcolors[i].r = 0;  
  57.             fullTcolors[i].g = 0;  
  58.             fullTcolors[i].b = 0;  
  59.   
  60.         }  
  61.         fullTexture.SetPixels(fullTcolors);  
  62.   
  63.         int posX = 0;  
  64.   
  65.   
  66.         List<BmInfo> bmInfoList = new List<BmInfo>();  
  67.   
  68.         foreach (string path in pngs)  
  69.         {  
  70.             string subPngPath = path.Replace(Application.dataPath, "Assets");  
  71.   
  72.             if (subPngPath.IndexOf("texture") == -1)  
  73.             {  
  74.   
  75.                 SetTextureImporter(subPngPath);  
  76.   
  77.                 Texture2D tex2D = AssetDatabase.LoadAssetAtPath(subPngPath, typeof(Texture2D)) as Texture2D;  
  78.                 Color[] colors = tex2D.GetPixels();  
  79.                 fullTexture.SetPixels(posX, 0, tex2D.width, tex2D.height, colors);  
  80.   
  81.                 BmInfo bmInfo = new BmInfo();  
  82.   
  83.                 bmInfo.index = Uncode(tex2D.name);  
  84.                 bmInfo.width = tex2D.width;  
  85.                 bmInfo.height = tex2D.height;  
  86.                 bmInfo.x = posX;  
  87.                 bmInfo.y = 0;  
  88.   
  89.                 bmInfoList.Add(bmInfo);  
  90.   
  91.                 posX += tex2D.width;  
  92.   
  93.             }  
  94.   
  95.         }  
  96.   
  97.         byte[] full = fullTexture.EncodeToPNG();  
  98.         File.WriteAllBytes(texturePath, full);  
  99.   
  100.         AssetDatabase.Refresh();  
  101.   
  102.         texturePath = texturePath.Replace(Application.dataPath, "Assets");  
  103.   
  104.         SetTextureImporter(texturePath);  
  105.   
  106.         Texture texture = AssetDatabase.LoadAssetAtPath(texturePath, typeof(Texture)) as Texture;  
  107.         CreateBitmapFont(fileName, texture, bmInfoList, maxWidth, maxHeight);  
  108.   
  109.   
  110.     }  
  111.   
  112.     public static void SetTextureImporter(string subPngPath)  
  113.     {  
  114.         TextureImporter ti = AssetImporter.GetAtPath(subPngPath) as TextureImporter;  
  115.         ti.textureType = TextureImporterType.Sprite;  
  116.         ti.mipmapEnabled = false;  
  117.         ti.isReadable = true;  
  118.         ti.filterMode = FilterMode.Trilinear;  
  119.         ti.textureFormat = TextureImporterFormat.AutomaticTruecolor;  
  120.         AssetDatabase.ImportAsset(subPngPath, ImportAssetOptions.ForceUpdate | ImportAssetOptions.ForceSynchronousImport);  
  121.     }  
  122.   
  123.   
  124.     /// <summary>  
  125.     /// 创建新的美术字体  
  126.     /// </summary>  
  127.     /// <param name="texture"></param>  
  128.     /// <param name="bmInfoList"></param>  
  129.     /// <param name="columnNum"></param>  
  130.     /// <param name="lineNum"></param>  
  131.     public static void CreateBitmapFont(string fileName, Texture texture, List<BmInfo> bmInfoList, int maxWidth, int maxHeight)  
  132.     {  
  133.   
  134.         string assetPath = GetAssetPath(AssetDatabase.GetAssetPath(texture));  
  135.         string fontPath = assetPath + "/" + fileName + "_1.fontsettings";  
  136.         string materialPath = assetPath + "/" + fileName + "_2.mat";  
  137.   
  138.   
  139.         Material fontMaterial = AssetDatabase.LoadAssetAtPath(materialPath, typeof(Material)) as Material;//new Material(Shader.Find("UI/Default"));  
  140.         if (fontMaterial == null)  
  141.         {  
  142.             fontMaterial = new Material(Shader.Find("UI/Default"));  
  143.             fontMaterial.mainTexture = texture;  
  144.             AssetDatabase.CreateAsset(fontMaterial, materialPath);  
  145.         }  
  146.         else  
  147.         {  
  148.             fontMaterial.mainTexture = texture;  
  149.         }  
  150.   
  151.         Font assetFont = AssetDatabase.LoadAssetAtPath(fontPath, typeof(Font)) as Font;  
  152.   
  153.         string ApplicationDataPath = Application.dataPath.Replace("Assets", "") + fontPath;  
  154.   
  155.         if (assetFont == null)  
  156.         {  
  157.             assetFont = new Font();  
  158.             AssetDatabase.CreateAsset(assetFont, fontPath);  
  159.         }  
  160.   
  161.         assetFont.material = fontMaterial;  
  162.         CharacterInfo[] characters = new CharacterInfo[bmInfoList.Count];  
  163.         for (int i = 0; i < bmInfoList.Count; i++)  
  164.         {  
  165.   
  166.             BmInfo bmInfo = bmInfoList[i];  
  167.   
  168.             CharacterInfo info = new CharacterInfo();  
  169.             info.index = bmInfo.index;  
  170.             info.uv.width = (float)bmInfo.width / (float)maxWidth;  
  171.             info.uv.height = (float)bmInfo.height / (float)maxHeight;  
  172.             info.uv.x = (float)bmInfo.x / (float)maxWidth;  
  173.             info.uv.y = (1 - (float)bmInfo.y / (float)maxHeight) - info.uv.height;  
  174.   
  175.   
  176.             info.vert.x = 0;  
  177.             info.vert.y = 0;  
  178.             info.vert.width = (float)bmInfo.width;  
  179.             info.vert.height = -(float)bmInfo.height;  
  180.             info.width = (float)bmInfo.width;  
  181.   
  182.             characters[i] = info;  
  183.   
  184.         }  
  185.   
  186.         assetFont.characterInfo = characters;  
  187.   
  188.   
  189.   
  190.     }  
  191.     private static string GetAssetPath(string path)  
  192.     {  
  193.         return path == "" || path == null ? "Assets/" : path.Substring(0, path.LastIndexOf("/"));  
  194.     }  
  195.   
  196.     //将中文字符转为10进制整数  
  197.     public static int Uncode(string str)  
  198.     {  
  199.         int outStr = 0;  
  200.         if (!string.IsNullOrEmpty(str))  
  201.         {  
  202.   
  203.             if (str == "。")  
  204.             {  
  205.                 outStr = (int)"."[0];  
  206.             }  
  207.             else  
  208.             {  
  209.                 outStr = ((int)str[0]);  
  210.             }  
  211.         }  
  212.   
  213.         return outStr;  
  214.     }  
  215. }  
  216.   
  217. public class BmInfo  
  218. {  
  219.     public int index = 0;  
  220.     public float width = 0;  
  221.     public float height = 0;  
  222.     public float x = 0;  
  223.     public float y = 0;  
  224. }  


UGUI艺术字制作

艺术字制作流程1、下载BMFont官网 2、首先你还得有美术制作的艺术字,或者自己做几个艺术字。好吧,全部奉上 3、使用BMFont制作艺术字图集 4、将生成的.fnt文件和图集.png文件导入到项目...
  • u013120715
  • u013120715
  • 2017-02-23 09:36:39
  • 208

【UGUI】制作艺术字体

参考链接:  http://blog.csdn.net/kaitiren/article/details/47281533 http://www.unity.5helpyou.com/3211.ht...
  • qq_28221881
  • qq_28221881
  • 2017-05-04 20:03:07
  • 611

Unity3D ugui艺术字方案

  • 2015年07月31日 17:06
  • 440KB
  • 下载

UGUI运用美术字体

在游戏的制作中,美术字的运用是美化游戏的常用手段。比如普攻,暴击打出的战斗飘字就常常利用不同的美术字来做出区别。那么在Unity中如何把美术字运用起来呢?且看下文: 1、道具准备。 BMFont:位...
  • akak2010110
  • akak2010110
  • 2016-02-27 14:52:24
  • 3828

Unity3D 【编辑器扩展】一键批量修改预设UGUI Text字体

我们做项目的时候经常会遇到要换个字体的工作情况,比如美工同学觉着字体不好看或者要做其它语言版本什么的。遇到这种情况我们总不能一个标签一个标签的去找到它们把字体换了,累不累就不说了,万一漏了也是麻烦事。...
  • andyhebear
  • andyhebear
  • 2016-05-13 10:35:56
  • 2780

Unity-【编辑器扩展】一键批量修改预设UGUI Text字体

我们做项目的时候经常会遇到要换个字体的工作情况,比如美工同学觉着字体不好看或者要做其它语言版本什么的。遇到这种情况我们总不能一个标签一个标签的去找到它们把字体换了,累不累就不说了,万一漏了也是麻烦事。...
  • wlz1992614
  • wlz1992614
  • 2016-07-04 12:22:38
  • 2370

3D艺术字生成器

  • 2012年11月20日 15:37
  • 3.03MB
  • 下载

【Unity】UGUI无法修改字体大小

取消勾选Best FIt属性
  • qq_18995513
  • qq_18995513
  • 2016-12-19 19:03:35
  • 795

Unity 一键更换字体工具

using UnityEngine; using System.Collections; using System.Collections.Generic; using UnityEditor; us...
  • BattleTiger
  • BattleTiger
  • 2018-01-25 16:35:43
  • 84

UGUI中使用位图艺术字(使用BMfont的两种方式)

第一种方式实现:   NGUI中有 动态字体, BMFont (从官网下载就是一个  .exe  文件! http://www.angelcode.com/products/bmfont/  ) BM...
  • u010019717
  • u010019717
  • 2016-08-18 09:32:02
  • 6567
收藏助手
不良信息举报
您举报文章:一键生成UGUI艺术字体
举报原因:
原因补充:

(最多只允许输入30个字)