一.准备字体(最好是免费的字体,如果有用到中文要找有中文的字体)
- 一般在C:\Windows\Fonts下有windows有很多可以测试的字体,如:msyh.ttf
二.把msyh.ttf文件导入unity
- 一般在unity的Assets下新建一个Fonts文件夹来存放msyh.ttf
三.打开unity的Font Asset Creator
- 1>.点击菜单 windows -> TextMeshPro -> Font Asset Creator
- 2>.如果是第一次打开会弹出TMP Importer框,点 Import TMP Essentials 即可,下面的 Import TMP Examples & Extras 不用点击
- 3>.点击菜单 windows -> TextMeshPro -> Font Asset Creator打开Font Asset Creator 窗口
– (1).Source Font File 拖入需要使用的字体(msyh.ttf)
– (2).Character Set 选择预定义的字符集(Custom Characters)
– (3).Custom Characters List 输入要显示的字符(全部显示的都输进去)
– (4).点击Generate Font Atlas 按钮(可以看看按钮下的提示有没有错误)
– (5).点击Save 按钮保存msyh SDF.asset文件(msyh SDF也可以定义别的名字)
四.创建unity的TextMeshPro对象
- 在unity的Hierarchy里右键菜单里 UI -> Text - TextMeshPro 即可创建(也可以右键菜单里3D Object -> Text - TextMeshPro创建)
- 在对象的TextMeshPro - Text(UI)组件里(3D对象的是TextMeshPro - Text)
– (1).在Text Input输入显示内容
– (2).在Font Asset 点后面的 圆圈 后的下拉框里选刚刚保存的 msyh SDF.asset
五.最后在场景就可以看到效果了
六.其它的参数设置可以尝试调一下看看效果
七.可以给TextMeshPro对象挂下面的FlutterText脚本实现飘字效果
using TMPro;
using UnityEngine;
public class FlutterText : MonoBehaviour
{
public float MoveSpeed = 3f; //移动速度
public float MoveSpeedDamping = 0.2f; //移动速度阻尼
public float ScaleIncreaseAddSpeed = 0.3f;//放大增速
public float ScaleDecreaseAddSpeed = 0.3f;//缩小增速
public float DisappearSpeed = 3;//透明速度
public float MoveTime = 1;//移动时间
public int LayerSortingOder = 10;//层级
protected TextMeshPro mTextMeshPro;//记录TextMeshPro 对象
protected float mPassTime;//记录时间
protected float mMoveSpeed;//记录移动速度
private Vector3 mMoveVector = new Vector3(0, 1);//记录移动向量
private void Awake()
{
mTextMeshPro = GetComponent<TextMeshPro>();
//
mMoveSpeed = MoveSpeed;
mTextMeshPro.sortingOrder = LayerSortingOder;
}
void Update()
{
// 偏移
transform.position += mMoveVector * mMoveSpeed * Time.deltaTime;
// 阻尼
mMoveSpeed -= MoveSpeed * MoveSpeedDamping * Time.deltaTime;
// 先变大,后缩小
if (mPassTime < MoveTime * 0.5f)
{
transform.localScale += Vector3.one * ScaleIncreaseAddSpeed * Time.deltaTime;
}
else
{
transform.localScale -= Vector3.one * ScaleDecreaseAddSpeed * Time.deltaTime;
}
// 变透明直到消失
if (mPassTime >= MoveTime)
{
Color textColor = mTextMeshPro.color;
textColor.a -= DisappearSpeed * Time.deltaTime;
mTextMeshPro.color = textColor;
if (textColor.a < 0)
{
Destroy(gameObject);
}
}
mPassTime += Time.deltaTime;
}
public void SetText(string text)
{
mTextMeshPro.text = text;
}
public TextMeshPro GetTextMeshPro()
{
return mTextMeshPro;
}
/// <summary>
/// 静态显示飘字函数
/// </summary>
public static FlutterText ShowFlutterText(GameObject flutterTextPerfab, Vector3 showWorldPoint, string text)
{
GameObject t = Instantiate(flutterTextPerfab, showWorldPoint, Quaternion.identity);
FlutterText flutterText = t.GetComponent<FlutterText>();
flutterText.SetText(text);
return flutterText;
}
}