基本上牵涉到战斗的游戏都需要显示伤害效果,这里我们不谈伤害的效果如何如何华丽,我们只谈最基本的,怎么在游戏中显示伤害效果,正如用 TextMesh 显示角色名字(查看详情)那样,使用 TextMesh 显示伤害一点也不复杂,但是与角色名称不同的是,伤害效果会运行一段轨迹然后消失,更多的情况下,还应该把伤害效果的对象放入对象池,减少创建与销毁带来的性能损耗!
最终效果如下,点击舞台,伤害数字会随机在角色周围出现,然后几秒之后会自动销毁,如图:

搭建测试场景,这儿就不仔细记录详细步骤了,如图:

新建立一个 HurtItem 的空对象,然后给这个空对象添加 TextMesh 组件,并且设置好相关属性,如图:

新建立一个 C# 脚本,取名 HurtItem.cs,代码如下:

using UnityEngine;
using System.Collections;

public class HurtItem : MonoBehaviour
{
    private Color[] colors = new Color[]{Color.red, Color.yellow, Color.blue, Color.green, Color.white};
    private TextMesh textMesh;
    private Camera mainCamera;
    private Vector3 targetPosition;
    private float destoryTime;
    void Awake()
    {
        this.textMesh = this.GetComponentInParent<TextMesh> ();
    }
    public void ChangeData(int hurt, Vector3 position, Camera mainCamera)
    {
        this.mainCamera = mainCamera;
        this.textMesh.text = "- " + hurt.ToString();
        this.textMesh.color = this.colors[Random.Range(0, this.colors.Length)];
        this.targetPosition = position + new Vector3 (Random.Range(-0.1f, 0.1f), Random.Range(-0.1f, 0.1f), 0f) * 15f;
        this.transform.position = position;
        this.destoryTime = Time.time;
    }
    void Update()
    {
        if(this.destoryTime == 0) return;
         // 1秒钟后消失
        if(Time.time - this.destoryTime <= 1f)
        {
            Vector3 direction = this.transform.position - this.mainCamera.transform.position;
            direction.y = 0f;
            this.transform.rotation = Quaternion.LookRotation (direction);
            this.transform.position = Vector3.Lerp (this.transform.position, this.targetPosition, Time.deltaTime);
        }else{
            Destroy(this.gameObject);
        }
    }
}

然后把 HurtItem.cs 挂载到 HurtItem 对象上,如图:

最后运行游戏,查看效果。