unity3d实现动态显示伤害值
今天介绍Unity3D使用OnGUI()的方法来实现伤害数值的显示,在战斗系统中我们常用于敌人和我方的伤害显示,在后面做敌人AI的时候会用到。下面我们看脚本!
首先我们创建一个Damage的脚本。好的,我们打好代码后,在场景中新建一个空的游戏对象,并且命名为Damage,把脚本绑定在这个对象上,并且把它作为预设体。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;public class Damage : MonoBehaviour
{//目标位置private Vector3 mTarget;//屏幕坐标private Vector3 mScreen;//伤害数值public int Value;//文本宽度public float ContentWidth = 100f;//文本高度public float ContentHeight = 3f;//文本偏移速度public float ContentSpeed = 10.0f;//GUI坐标private Vector2 mPoint;//销毁时间public float FreeTime = 5f;void Start () {//获取目标位置mTarget = transform.position;//获取屏幕坐标mScreen=Camera.main.WorldToScreenPoint(mTarget);//将屏幕坐标转化为GUI坐标mPoint = new Vector2(mScreen.x, Screen.height - mScreen.y);//开启自动销毁线程StartCoroutine("Free");}void Update () {//使文本在垂直方向上产生一个偏移transform.Translate(Vector3.up * ContentSpeed * Time.deltaTime);//重新计算坐标mTarget = transform.position;//获取屏幕坐标mScreen = Camera.main.WorldToScreenPoint(mTarget);//将屏幕坐标转化为GUI坐标mPoint = new Vector2(mScreen.x, Screen.height - mScreen.y);}void OnGUI(){//保证目标在摄像机前方if (mScreen.z >0){GUI.color = Color.red;GUI.skin.label.fontSize = 25;//内部使用GUI坐标进行绘制GUI.Label(new Rect(mPoint.x, mPoint.y, ContentWidth, ContentHeight), Value.ToString());}}IEnumerator Free(){yield return new WaitForSeconds(FreeTime);Destroy(this.gameObject);}
}
下面我们为敌人写一个脚本Enemy,并且把脚本绑定在敌人上。把刚才做好的Damage预设体拖拽到脚本面板中。这里需要注意的是要为敌人添加一个碰撞器作为碰撞检测,并且勾选Is Trigger。
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;public class Enemy : MonoBehaviour
{public GameObject PopupDamage;void OnTriggerEnter(Collider mCollider){if (mCollider.gameObject.name=="Player"){GameObject mObject = (GameObject)Instantiate(PopupDamage, transform.position, Quaternion.identity);mObject.GetComponent().Value = Random.Range(20, 40);}}
}
我们下面来看效果,这里还有一个问题,就是当“主角”进入碰撞范围才显示一次伤害值,想要再显示必须离开敌人再靠近敌人。这里介绍主要显示伤害值效果而已,在后面做敌人AI的时候,我会完善敌人Enemy脚本,再此脚本中传入伤害值。
(脚本来自秦元培博客)
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
