[Unity3D] Unity3D游戏开发之UGUI实现伤害数值显示
来源:互联网 发布:广电网络一年多少钱 编辑:程序博客网 时间:2024/05/21 10:07
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即为屏幕坐标。
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坐标
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;
0 0
- [Unity3D] Unity3D游戏开发之UGUI实现伤害数值显示
- Unity3D游戏开发之伤害数值显示
- [Unity3D]Unity3D游戏开发之伤害数值显示
- Unity3D游戏开发之分页效果在uGUI中的实现
- Unity3D游戏开发之分页效果在uGUI中的实现
- unity3d实现动态显示伤害值
- unity3d实现动态显示伤害值
- [Unity3D]Unity3D游戏开发之鼠标滚轮实现放大缩小
- [Unity3D]Unity3D游戏开发之再话小地图的实现
- [Unity3D]Unity3D游戏开发之刀光剑影特效的实现
- [Unity3D]Unity3D游戏开发之换装系统的实现
- [Unity3D]Unity3D游戏开发之《愤怒的小鸟》弹弓实现
- [Unity3D]Unity3D游戏开发之《愤怒的小鸟》弹弓实现
- [Unity3D]Unity3D游戏开发之鼠标滚轮实现放大缩小
- [Unity3D]Unity3D游戏开发之MatchTarget实现角色攀爬效果
- [Unity3D]Unity3D游戏开发之Logo渐入渐出效果的实现
- Unity3D游戏开发之在Unity3D中实现视频播放
- [Unity3D]Unity3D游戏开发之鼠标滚轮实现放大缩小
- 【面试题】
- hibernate缓存学习之【二级缓存】
- 浅谈如何提高服务器并发处理能力(来自某位大牛的博客)
- 随机数解析
- Ubuntu环境下实现MySQL与C连接
- [Unity3D] Unity3D游戏开发之UGUI实现伤害数值显示
- 怎么学汇编---dosbox 环境配置,怎么用
- linux后台开发常用调试工具
- 网络后台开发面试题
- 2016最热门的编程语言与薪资
- SSDT的例子1-inlineHook的jmp验证
- 2016年收入最高的5个编程语言
- 为什么游戏引擎大多选择使用 C++ 而不是 C 开发?
- linux常用的内核参数的设置