UI3D转2D平面显示UI3DTo2D血条显示
UI3D转2D平面显示UI3DTo2D血条显示:
using UnityEngine;
using System.Collections;
public class UI3DTo2D : MonoBehaviour
{
private GameObject _TargetEnemyObj; //目标物体
private Camera worldcamera; //世界相机
private Camera guiCamera; //UI相机
private Slider uiSlider; //敌人的血条
public float FloHPPrefabsLength = 2F; //血条预设长度
public float FloHpPrefabsHeight = 1F; //血条预设高度
public float FloHpHeightPosset = 1.5F; //血条高度偏移量
//敌人生命数值
private float _FloCurrentHP = -999; //当前生命数值
private float _FloMaxHP = -999; //最大生命数值
// 设置目标敌人
public void SetTargetEnemy(GameObject goEnemy)
{
_TargetEnemyObj = goEnemy;
}
//初始化目标对象变量
void Start()
{
//本UI Label 对象尺寸
this.transform.localScale = new Vector3(FloHPPrefabsLength, FloHpPrefabsHeight, 0);
//得到UI Slider 控件
uiSlider = this.gameObject.GetComponent<Slider>();
//世界摄像机(主摄像机)
worldcamera = Camera.main.gameObject.GetComponent<Camera>();
//带标签Tag_UICamera的UI摄像机
guiCamera = GameObject.FindGameObjectWithTag(Tag.Tag_UICamera).GetComponent<Camera>();
//参数检查
if (_TargetEnemyObj == null)
{
return;
}
}
// 计算敌人血量
void Update()
{
//判断帧数
if (Time.frameCount % 2 == 0)
{
try
{
//当前与最大生命值
_FloCurrentHP = _FloCurrentHP; //变化的生命值(实时更新)
_FloMaxHP = _FloMaxHP; //变化的生命值(实时更新)
//计算敌人血量
uiSlider.value = _FloCurrentHP / _FloMaxHP;
//本UI Label 对象尺寸
this.transform.localScale = new Vector3(FloHPPrefabsLength, FloHpPrefabsHeight, 0);
if (_FloCurrentHP <= (_FloMaxHP * 0.05))
{
//死亡销毁
Destroy(this.gameObject);
}
}
catch (System.Exception)
{
throw;
}
}
}
// 敌人血量计算后,实时的把_TargetEnemyObj的世界坐标转换为UI世界坐标,通过世界摄像机,转屏幕坐标,再把3D敌人(世界摄像机)屏幕坐标,转UI摄像机的屏幕坐标
void LateUpdate()
{
if (_TargetEnemyObj != null)
{
if (Time.frameCount % 2 == 0)
{
//获取目标物体的屏幕坐标
Vector3 pos = worldcamera.WorldToScreenPoint(_TargetEnemyObj.transform.position);
//将屏幕坐标转换为UI的世界坐标
pos = guiCamera.ScreenToWorldPoint(pos);
//由于NGUI 2D界面的Z轴都为0,只取其X,Y坐标
pos.z = 0;
//将修改过的坐标赋给UI界面
transform.position = new Vector3(pos.x - 0.1f, pos.y + FloHpHeightPosset, pos.z);
}
}
}
}
注:void LateUpdate()方法为摄像机转换坐标,是具体实现的过程,此方法为世界坐标和平面坐标之间的转换,可逆向操作实现
UI3D转2D平面显示UI3DTo2D血条显示的更多相关文章
- unity如何显示血条(不使用NGUI)
用unity本身自带的功能,如何显示血条? 显示血条,从资源最小化的角度,只要把一个像素的色点放大成一个矩形就足够,三个不同颜色的矩形,分别显示前景色,背景色,填充色,这样会消耗最少的显存资源. un ...
- Unity3D人物头顶名称与血条更新与绘制
using UnityEngine; using System.Collections; public class NPC : MonoBehaviour { //主摄像机对象 private Cam ...
- Unity UGUI实现分段式血条
我们可以看到像英雄联盟等游戏里英雄头顶的血条显示并非是纯色的,而是根据血量的多少而显示一定量的格子,这种方式明显是比较友好.比较美观的,事实上我们的游戏里面也想实现这样的效果,那该怎么办呢?根据血量的 ...
- pygame 笔记-7 生命值/血条处理
通常游戏中的角色都有所谓的生命值,而且头顶上会有一个血条显示.生命值无非就是一个属性而已,很容易在Player.py类中增加,头顶上的血条其实就是绘制二个矩形,叠加在一起. 以上节的Player.py ...
- unity3d-游戏实战突出重围,第二天 制作血条
using UnityEngine; using System.Collections; public class xt : MonoBehaviour { //红色血条 public Texture ...
- 制作Unity中的单位血条
本文章用于记录Unity的学习过程,如有疑问,欢迎交流. 1.血条的显示 在Unity场景中创建空物体,然后新建两个Image(图片),当然只用一个也行,一个作为填充来显示血量,一个作为血条的外框. ...
- NGUI研究之3D模型坐标转2D屏幕坐标-血条
刚好今天有朋友问我,比較典型的样例就是游戏里面人物的血条. 原理非常easy就是把3D点换算成2D的点.可是因为NGUI自身是3D所以我们须要先把NGUI下的点转成2D点.然后在把他转成3D的点 ...
- Shader实例:NGUI制作网格样式血条
效果: 思路: 1.算出正确的uv去采样过滤图,上一篇文章说的很明白了.Shader实例:NGUI图集中的UISprite正确使用Shader的方法 2.用当前血量占总血量的百分比来设置shader中 ...
- Unity NGUI弧形血条的制作
unity版本:4.6 NGUI版本:3.6. (转载请注明参考链接及作者) 参考链接:http://www.cnblogs.com/louissong/p/3841656.html,作者:博客园 L ...
随机推荐
- mysql双机热备份的实现步骤
MySQL 提供了数据库的同步功能,这对我们实现数据库的冗灾.备份.恢复.负载均衡等都是有极大帮助的.本文描述了常见的同步设置方法.<?xml:namespace prefix = o /> ...
- 搭建 pytorch框架
Pytorch 发布了1.0,对windows的支持效果更好,因此,今天试了一下安装Pytorch.安装速度确实很快,安装也很方便. 进入pytorch的官网,选择对应的版本 根据版本输入相应命令 注 ...
- Python3中简单的迭代器程序
1.迭代器程序(实现菲比那次数列并且可以抛出与接收异常) def fib(max): n,a,b = 0,0,1 while n < max: #print(b) yield b a,b = b ...
- Java异常处理方式
前言 平时在开发的时候避免不了的出一些大大小小的不同类型的错误,这时候,对于这些异常怎么处理呢,显得至关重要了. 内容 分类 Trowable:有两个重要的子类,Exception(异常)和Error ...
- 洛谷P3604 美好的每一天(莫队)
传送门 由乃的题还是一如既往的可怕…… 先放上原题解 标解: 一个区间可以重排成为回文串,即区间中最多有一个字母出现奇数次,其他的都出现偶数次 发现这个和 类似 这样如果一个区间的 和为 或者 ...
- Python发送邮件代码
Python发送带附件的邮件代码 #coding: utf-8 import smtplib import sys import datetime from email.mime.text impor ...
- left jion on和where条件的区别
1.on是在生成临时表时()起作用,而且不管on中的条件是否为真,都会返回(left join)左边所有的数据,如果不匹配也是返回空. 2.where 是在生成了临时表后,再对表进行过滤 个人理解:先 ...
- 《图解HTTP》阅读笔记--第四章--HTTP状态码
第四章.返回结果的HTTP状态码前言:状态码的职责是告诉用户服务器端描述返回的请求,以便用户判断服务器处理是否正常. 状态码由三位数字和原因短语组成,其中三位数字的首位指定了响应类别:---1xx 接 ...
- 牛客寒假算法基础集训营4 G Applese 的毒气炸弹
链接:https://ac.nowcoder.com/acm/contest/330/G来源:牛客网 众所周知,Applese 是个很强的选手,它的化学一定很好. 今天他又AK了一套题觉得很无聊,于是 ...
- 小程序渲染问题:ios显示安卓不显示
问题描述: 测试库转到正式库后添加数据,小程序数据渲染不出来,但是测试库没问题,ios数据能显示,没问题,但是安卓显示没数据. 排除是服务器https证书问题,如果是证书问题,小程序会直接调不了接口. ...