Unity中制作图片字体
主要步骤:
1.新建一个字体。
2.新建一个材质。
3.把上一步新建的材质赋值给第一步创建的字体。
4.设置字体的Character Rects的大小来划分字体。
例如划分这个图片,因其要分为12个字体所以Character Rects大小为12:
Character Rects中每个单元格的计算方式如图所标记(比较的复杂,了解怎么计算就行,后期通过编辑器可以计算出来。)
5.把设置好的字体直接赋值给Text中的Font,在Text中输入对应字体便可显示了。
标题上述制作字体设置参数比较繁琐,可以直接用编辑器一键生成字体和材质。编辑器代码如下。
public class ImageFontMaker
{[MenuItem("Assets/CreateImageFont")]static void CreateImageFont() {if ( Selection.objects == null ) { return; }for (int i = 0; i < Selection.objects.Length; i++){if (Selection.objects[i].GetType() == typeof(Texture2D)) {CreateImageFont(Selection.objects[i] as Texture2D);}}}public static void CreateImageFont( Texture2D texture ) {if ( texture == null ) return;string texturePath = AssetDatabase.GetAssetPath(texture);string textureExtension = Path.GetExtension(texturePath);string filePath = texturePath.Remove(texturePath.Length - textureExtension.Length);string matPath = filePath + ".mat";string fontPath = filePath + ".fontsettings";Font myFont = AssetDatabase.LoadAssetAtPath<Font>(fontPath);if ( myFont == null ) {myFont = new Font();// 设置材质 Material mat = new Material(Shader.Find("GUI/Text Shader"));mat.SetTexture("_MainTex", texture);AssetDatabase.CreateAsset(mat, matPath);myFont.material = mat;AssetDatabase.CreateAsset(myFont, fontPath);}// 设置字符信息Sprite[] sprites = LoadSpritesByPath(texturePath);if (sprites.Length == 0 ) return;CharacterInfo[] characterInfos = new CharacterInfo[sprites.Length];for (int i = 0; i < characterInfos.Length; i++){characterInfos[i] = new CharacterInfo();// 设置 ascii 码 characterInfos[i].index = sprites[i].name[sprites[i].name.Length - 1];// 设置 字符 uv Rect rect = sprites[i].rect;characterInfos[i].uvBottomLeft = new Vector2( rect.x / texture.width , rect.y / texture.height);characterInfos[i].uvBottomRight = new Vector2((rect.x +rect.width) / texture.width, rect.y / texture.height);characterInfos[i].uvTopRight = new Vector2((rect.x + rect.width) / texture.width, (rect.y + rect.height) / texture.height);characterInfos[i].uvTopLeft = new Vector2(rect.x / texture.width,(rect.y + rect.height) / texture.height);// 字符的偏移 和 宽高 characterInfos[i].minX = 0;characterInfos[i].maxX = (int)rect.width;characterInfos[i].minY = 0 - (int)sprites[i].pivot.y;characterInfos[i].maxY = (int)rect.height - (int)sprites[i].pivot.y;characterInfos[i].advance = (int)rect.width;}myFont.characterInfo = characterInfos;EditorUtility.SetDirty(myFont);AssetDatabase.SaveAssets();AssetDatabase.Refresh();}public static Sprite[] LoadSpritesByPath(string path) {List<Sprite> sprites = new List<Sprite>();Object[] objects = AssetDatabase.LoadAllAssetsAtPath(path);foreach (var item in objects){if ( item.GetType() == typeof(Sprite) ) {sprites.Add(item as Sprite);}}return sprites.ToArray();}}
编辑器使用方法:选中要生成字体的Texture 右键选择CreateImageFont即可生成对应字体和材质。
Unity中制作图片字体相关推荐
- Unity中制作自定义字体的两种方式
Unity支持自定义图片字体(CustomFont),网上有很多教程,细节不尽相同,当概括起来基本就是两种方式.一是使用BMFont,导出图集和.fnt文件,再使用图集在Unity中设置得到字体.二是 ...
- Unity中制作游戏的快照游戏支持玩家拍快照
Unity中制作游戏的快照游戏支持玩家拍快照 有些游戏支持玩家"拍快照",也就是将游戏的精彩瞬间以图片的形式记录下来的功能.这个功能比较有趣,而且以后的用途也会很广,为此本节打算介 ...
- 在Unity中制作高质量的光照效果(上)
原创: Unity Unity官方平台 本篇专家指南将介绍在Unity中制作高质量光照效果的多种高级方法,其中使用了2D和立方体贴图的光线遮罩,并且利用了Unity高清渲染管线HDRP中的高级着色器. ...
- 在Unity中制作4种不同的游戏
流派:电子学习| MP4 |视频:h264,1280×720 |音频:AAC,48.0 KHz 语言:英语+中英文字幕(根据原英文字幕机译更准确)|大小解压后:8.6 GB 含课程素材 |时长:15h ...
- [教程] 在Unity中制作物体破碎效果
这篇教程将教大家如何在Unity中制作一个简单的碎片效果.当物体撞击或销毁时,我们将物体分裂为更小的碎片来取代之前的仅仅直接"删除"物体. 需求 这篇教程需要最新版本的Unity, ...
- 如何在unity中制作塔防游戏
塔防游戏非常流行,毫无疑问--没有什么比看着自己的防御消灭讨厌的侵略者更让人满足!在这两部分教程中,用unity来制作一个塔防游戏! 将会学习怎样...... 创建一波敌人 让它们跟随线路点 ...
- 在Unity中制作完整的技能系统(介绍篇)
在Unity中制作完整的技能系统(介绍篇) 大噶吼呀,还是我暴躁老哥酒九.最近的我遇到了游戏荒,于是我就重新去玩了玩<英雄联盟>,结果发现还是一如既往的强了(不是).对于这款游戏我就不用多 ...
- unity 字体width_Unity中制作自定义字体
使用Unity中的Sprite.Unity支持把一个Sprite切割成多个. 需要手动做的工作是将图集的TextureType设置为Sprite,然后把SpriteMode设为Multiple,打开S ...
- unity 字体width_unity制作图片字体
有时候美术会给出一系列的艺术字,例如数字0,1,2,3,4,5,6,7,8,9,这些字以图片的形式给开发人员,这时候图片的用法怎么用呢? 第一种想到的方法是把图片按字命名,然后以字为key存成字典,获 ...
- 关于Unity中的NGUI字体
NGUI字体类型 1: UIFont字体,UIFont类实现的 2: TTF动态字体的使用 3: BBCode的特殊字体的使用 4: NGUI字体制作 5: BMFont字体制作和艺术字体的制作 6: ...
最新文章
- 使用jquery在新窗口中打开外部链接
- cad线性标注命令_CAD线性标注如何使用的
- 【转】彻底理解cookie,session,token
- springboot+mybatis实现动态切换数据源
- 一步一步写算法(之查找)
- python人脸识别要怎么实现_详解如何用OpenCV + Python 实现人脸识别
- Odoo14免费开源ERP实施手册:销售功能高级应用
- 心理测评全系统设计与代码实现
- JavaScript之Ajax(一篇入门Ajax就够了)
- 乖离性暗机器人_乖离性百万亚瑟王超弩级暗机器人复刻攻略分享
- 打印机多少钱一台?购买打印机打印速度快吗
- 金工计算机测试题,金工考试题精选.doc
- HTML中的meta标签
- 生死看淡,不服就GAN(八)----WGAN的改进版本WGAN-GP
- RK3288 资源汇总
- Vue项目中设置背景图片
- python俄罗斯方块小游戏实验报告,童年的记忆——如何用python写一个俄罗斯方块小游戏!...
- 物联网平台搭建教程01
- 加速度传感器灵敏度的几种表示方式
- excel快速拆分数据的方法