前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[Unity3D] Unity3D游戏开发之UGUI实现伤害数值显示

[Unity3D] Unity3D游戏开发之UGUI实现伤害数值显示

作者头像
bering
发布2019-12-03 15:30:35
8660
发布2019-12-03 15:30:35
举报

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/CJB_King/article/details/52876863

UGUI实现伤害数值显示的原理是在人物头顶放置空物体,然后将下面的脚本挂在空物体上,将该空物体制作为预制体;

using UnityEngine;
using System.Collections;

public class PopupDamage : MonoBehaviour {
    //目标位置  
    private Vector3 mTarget;
    //屏幕坐标  
    private Vector3 mScreen;
    //伤害数值  
    
    public int Value;

    //文本宽度  
    public float ContentWidth = 100;
    //文本高度  
    public float ContentHeight = 50;

    //GUI坐标  
    private Vector2 mPoint;

    //销毁时间  
    public float FreeTime = 1.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 * 1.5F * 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坐标进行绘制  
            GUIStyle style = new GUIStyle();
            style.fontSize = 30;
            style.normal.textColor = Color.red;
            GUI.Label(new Rect(mPoint.x, mPoint.y, ContentWidth, ContentHeight), "-"+Value.ToString(),style);
        }
    }

    IEnumerator Free()
    {
        yield return new WaitForSeconds(FreeTime);
        Destroy(this.gameObject);
    }
}

unity中的几种坐标体系:

1、根据Transform组件获取位置坐标,将此坐标转化为屏幕坐标及GUI坐标。 2、Unity3D中常见的四种坐标系: a、世界坐标:场景中物体的坐标,使用 transform.position获得。 b、屏幕坐标:以像素来定义的,以屏幕的左下角为(0,0)点,右上角为(Screen.width,Screen.height),Z的位置是以相机的世界单位来衡量的。如Input.mousePosition即为屏幕坐标。

c、视口坐标:视口坐标是标准的和相对于相机的。相机的左下角为(0,0)点,右上角为(1,1)点,Z的位置是以相机的世界单位来衡量的。 d、GUI坐标:该坐标系以屏幕的左上角为(0,0)点,右下角为(Screen.width,Screen.height)。 3、在代码中我们将世界坐标先转化为屏幕坐标,再转化为GUI坐标

在人物受到伤害是,生成该预制体,方法如下:

 GameObject damageGo = Instantiate(popupDamageGo,transform.position+new Vector3(0,10,0),Quaternion.identity) as GameObject;
        damageGo.GetComponent<PopupDamage>().Value = (int)damage;
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-10-20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档