做像素游戏的时候,你通常会自定义字体,或者绘制像素字体。
字体画好,或者像我们一样直接从 FC 游戏里面抠出图集来之后,怎么样来做成BitmapFont呢?
网上的内容通常教你怎么从安装好的ttf来导出,现在我们手上只有 PNG 怎么办呢?
用到的工具
假设
- 我们的字符图集中文字大小都是 8 X 8,并且无间隔(也可以是其他大小,总之Unity可以自动按格子大小来切就行)
步骤
- 我们从FC Dump 下来的字体图集,一般都是8x8的字符集,为了能够使用BMFont来导出Bitmap Font,我们需要先把这个图集打成单个的字符。
- 打开 Unity,导入字符集图片,导入设置为 压缩->无,并把可读写打开,Sprite类型为多个
- 打开 Sprite Editor ,切片方式 By Cell Size 大小 8 x 8,切好图集
- 使用如下脚本导出为单个的图片
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| using UnityEditor; using UnityEngine; static class BitmapFontTool { [MenuItem ("BitmapFontTool/导出切好的Sprite")] static void SaveSprite () { //每一张贴图类型Advanced下 Read/Write Enabled打上勾才能进行文件读取 //导入类型不能是压缩过的 string bitMapfontPath = @"Assets/BitmapFontTool/"; foreach (Object obj in Selection.objects) {
string selectionPath = AssetDatabase.GetAssetPath (obj); string selectionExt = System.IO.Path.GetExtension (selectionPath); string fileName = System.IO.Path.GetFileNameWithoutExtension (selectionPath); string loadPath = selectionPath.Substring (0, selectionPath.Length - selectionExt.Length); if (selectionExt.Length == 0) continue;
//加载此文件下的所有资源 Object[] spriteList = AssetDatabase.LoadAllAssetsAtPath (selectionPath);
if (spriteList.Length > 0) { //创建导出文件夹 string outPath = bitMapfontPath + "/SpriteExportOutput/" + fileName; System.IO.Directory.CreateDirectory (outPath);
foreach (var sprite in spriteList) { try { var sprite_ = (Sprite) sprite; Texture2D tex = new Texture2D ((int) sprite_.rect.width, (int) sprite_.rect.height, sprite_.texture.format, false); tex.SetPixels (sprite_.texture.GetPixels ((int) sprite_.rect.xMin, (int) sprite_.rect.yMin, (int) sprite_.rect.width, (int) sprite_.rect.height)); tex.Apply (); //写出成png文件 System.IO.File.WriteAllBytes (outPath + "/" + sprite_.name + ".png", tex.EncodeToPNG ()); Debug.Log ("SaveSprite to" + outPath); } catch (System.Exception e) { Debug.Log (e); }
} Debug.Log ("保存图片完毕!" + outPath); } } // } } }
|
- 网上搜索 BMFont 教程,按教程使用导出的图片,创建 fnt 字体
- 把输出的文件导入 Unity ,下载 BitmapFontImporter 插件
- Assets -> Bitmap Font -> build 创建 Unity 自定义字体
- 使用字体
缺点
- BMFont 导入大量图片文件的时候非常的难用,不适合批量使用
- 既然已经有图集了,何不在图集上自己创建fnt文件呢?
思考
在Unity下,自己写个工具来制作fnt也并不难
挖个坑留着以后来尝试