Unity 自定义艺术字 CustomFont
unity其实一直就有一个custom font功能,网上也能找到很多博客. 官方链接Unity - Manual: Font assets
然后我们只要设置相关信息
有多少个文字,就设置相应size大小
-
Index: ascii索引,也就是字符十进制索引
-
UV:文字在图片中的UV信息
-
Vert:垂直大小取决于字符的像素大小,例如 您的字符均为128x128,在Vert Width和Height中分别输入128和–128将得到适当比例的字母。 垂直Y必须为负。(从图片的左上角开始读取)
-
Advance:将从此字符的原点到下一个字符的原点的所需水平距离(以像素为单位)。在计算实际距离时,它乘以 Tracking 。(可以理解为每个字的间距,如果字符宽高都是50,Advance也是50,那么间距就是0)
主要 就是每个字的Index
具体可以看看unity的官方文档和另一个文章
例如我们在制作数字(0-9)字体的时候就需要 一张数字图片,然后设置Character Rects
,文档中说的很清楚,Index
就是指的当前字的 ASCII码的索引(十进制),例如0=48 1=49…..
如果我们想设置更多的文字,也是可以的,因为Unity支持Unicode,但是我们需要一些步骤,`将文字->16进制->十进制
关于编码可以查看这篇文章:字符编码笔记:ASCII,Unicode 和 UTF-8 - 阮一峰的网络日志
代码
string content = "你好";
for (int i = 0; i < content.Length; i++)
{
var bytes = Encoding.Unicode.GetBytes(content[i].ToString());
var stringBuilder = new StringBuilder();
for (var j = 0; j < bytes.Length; j += 2)
{
//x2是十六进制 两位如果没有用 0补充
stringBuilder.AppendFormat("{0:x2}{1:x2}", bytes[j + 1], bytes[j]);
}
Debug.Log(stringBuilder.ToString());
//你->4f60
//好->597d
int index = Convert.ToInt32(stringBuilder.ToString(), 16);
Debug.Log(index);
//你->20320
//好->22909
}
或者
string str = "你好";
for (int i = 0; i < str.Length; i++)
{
Debug.Log(System.Convert.ToInt32(str[i]));
//log: 20320
//log: 22909
}
然后我们把字体的”你”的Index设置成20320即可.
- 要一个text文本确保是utf-8格式,里面文字内容
- 要一个艺术字图片,图片大小随便定义,但是要规整的图片 而且自己要知道每个图片字的长宽
简单说明:
相关链接:Unity自定义字体