生命条
为了能够更加直观的观察敌人的生命值,我们制作一个生命条在每个怪物的正上方。
1、生命条Prefab
1、这里采用的是使用UI控件中的Slder控件实现生命条。创建Slider控件。
2、重命名Canvas为Canvas3D。
3、将Canvas的Render Mode设置为Word Space。使这个UI成为一个3D的控件。
3、在Slider中的background添加图片。图片必须使Sprite格式。
4、在Slider中的Fill Area添加图片。图片必须使Sprite格式。
5、把滑块隐藏
6、将其制作成Prefab,并添加到Resources目录下,命名为Canvas3D。
2、添加代码
1、添加Enemy.cs代码如下:
void Start()
{
GameManager.instance.m_enemyList.Add(this);
//读取生命条prefab
GameObject go = Resources.Load<GameObject>("Canvas3D");
//创建生命条,将当前的Transform设置为父物体
m_lifeBar = ((GameObject)Instantiate(go, this.transform.position, Camera.main.transform.rotation, this.transform)).transform;
//设置位置,和大小
if (this.transform.name.CompareTo("boar(Clone)") == 0)
{
m_lifeBar.localPosition = new Vector3(0, 120.0f, 0);
m_lifeBar.localScale = new Vector3(1.0f, 2.0f, 1.0f);
}
else if(this.transform.name.CompareTo("bird(Clone)") == 0)
{
m_lifeBar.localPosition = new Vector3(0, 1.3f, 0);
m_lifeBar.localScale = new Vector3(0.01f, 0.02f, 0.01f);
}
m_lifeObj = m_lifeBar.GetComponentInChildren<UnityEngine.UI.Slider>();
//更新生命值
StartCoroutine(UpdateLifebar());
}
//协程更新滑动条
IEnumerator UpdateLifebar()
{
//更新生命条的值
m_lifeObj.value = (float)m_life / (float)m_maxLife;
//更新角度,始终面向照相机
m_lifeBar.transform.eulerAngles = Camera.main.transform.eulerAngles;
//没有任何等待
yield return 0;
//循环执行
StartCoroutine(UpdateLifebar());
}