基本上牵涉到战斗的游戏都需要显示伤害效果,这里我们不谈伤害的效果如何如何华丽,我们只谈最基本的,怎么在游戏中显示伤害效果,正如用 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 对象上,如图:
最后运行游戏,查看效果。