UNITY3D 脑袋顶血顶名
杨航最近在学Unity3D
using UnityEngine;
using System.Collections;
public class NPC : MonoBehaviour {
//主摄像机对象
public Camera camera;
//NPC名称
private string name = "我是doudou";
//主角对象
public GameObject hero;
//NPC模型高度
float npcHeight;
//红色血条贴图
public Texture2D blood_red;
//黑色血条贴图
public Texture2D blood_black;
//默认NPC血值
private int HP = 100;
void Start ()
{
根据Tag得到主角对象
//hero = GameObject.FindGameObjectWithTag("Human");
得到摄像机对象
//camera = Camera.main;
blood_red = new Texture2D(100, 10,TextureFormat.RGBA32,false);
blood_red.SetPixel(100,10, Color.red);
blood_black = new Texture2D(100, 10, TextureFormat.RGBA32, false);
blood_black.SetPixel(100,10, Color.black);
//注解1
//得到模型原始高度
float size_y = collider.bounds.size.y;
//得到模型缩放比例
float scal_y = transform.localScale.y;
//它们的乘积就是高度
npcHeight = (size_y *scal_y) ;
}
void Update ()
{
//保持NPC一直面朝主角
// transform.LookAt(hero.transform);
}
void OnGUI()
{
//得到NPC头顶在3D世界中的坐标
//默认NPC坐标点在脚底下,所以这里加上npcHeight它模型的高度即可
Vector3 worldPosition = new Vector3 (transform.position.x , transform.position.y + npcHeight,transform.position.z);
//根据NPC头顶的3D坐标换算成它在2D屏幕中的坐标
Vector2 position = camera.WorldToScreenPoint (worldPosition);
//得到真实NPC头顶的2D坐标
position = new Vector2 (position.x, Screen.height - position.y);
//注解2
//计算出血条的宽高
Vector2 bloodSize = GUI.skin.label.CalcSize(new GUIContent(blood_red));
//通过血值计算红色血条显示区域
int blood_width = blood_red.width * HP / 100;
//先绘制黑色血条
GUI.DrawTexture(new Rect(position.x - (bloodSize.x / 2), position.y - bloodSize.y, bloodSize.x, bloodSize.y), blood_black);
//在绘制红色血条
GUI.DrawTexture(new Rect(position.x - (bloodSize.x / 2), position.y - bloodSize.y, blood_width, bloodSize.y), blood_red);
//注解3
//计算NPC名称的宽高
Vector2 nameSize = GUI.skin.label.CalcSize(new GUIContent(name));
//设置显示颜色为黄色
GUI.color = Color.yellow;
//绘制NPC名称
GUI.Label(new Rect(position.x - (nameSize.x / 2), position.y - nameSize.y - bloodSize.y, nameSize.x, nameSize.y), name);
}
//下面是经典鼠标点击对象的事件,大家看一下就应该知道是什么意思啦。
void OnMouseDrag ()
{
Debug.Log("鼠标拖动该模型区域时");
}
void OnMouseDown()
{
Debug.Log("鼠标按下时");
if(HP >0)
{
HP -=5 ;
}
}
void OnMouseUp()
{
Debug.Log("鼠标抬起时");
}
void OnMouseEnter()
{
Debug.Log("鼠标进入该对象区域时");
}
void OnMouseExit()
{
Debug.Log("鼠标离开该模型区域时");
}
void OnMouseOver()
{
Debug.Log("鼠标停留在该对象区域时");
}
}
UNITY3D 脑袋顶血顶名相关推荐
- 生日游戏html,小朋友过生日室内游戏
小朋友过生日室内游戏(一): 1.顶气球,两人拿一根绳隔开,两边各一组,一组两人,准备一个气球,两边的人用脑袋顶,不许用手,不能掉地,不能碰绳,不能出界,否则算对方赢. 2.击鼓传花,一人敲一个东西, ...
- 天猫高管全面解读大快消2018新零售打法
"两个礼拜增长了80万粉丝.过去4年我们累计了41万粉丝,现在用新零售的一个策略,两个礼拜干出了4年的两倍."林清轩创始人孙春来说:"天猫旗舰店是一个流量低成本获取入口. ...
- (转载)IT职场故事:新人如何菜鸟变凤凰
IT职场故事:新人如何菜鸟变凤凰 张锦喜 眼下,又一批毕业生走进了职场.换下学生时代一贯的T恤牛仔,穿上职业套装,由学生变身为职业人.在这些职场新鲜人的心里,除了满怀的兴奋和憧憬,还有一点对职场的忐忑 ...
- 美团技术面1小时,我看出了和月薪3w的差距
今年年初,一个朋友的公司辞退了 10 多个程序员. 老板找员工面谈时,为了让员工相对容易接受(说白了就是想让你尽快走人),会说公司效益不好要倒闭了.大环境不好.行业趋势下滑,唯独不会说: 你的能力或许 ...
- 乔布斯的64周年诞辰,苹果滞销的第N天
今天(美国时间 2 月 24 日)是乔布斯的 64 岁诞辰,愿这位苹果公司的创始人在天堂一切安好. 写在前面 十几个小时前,苹果公司 CEO Tim·Cook 在 Twitter 发表推文纪念乔布斯的 ...
- unity menuitem_Unity热更_打AssetBundles包
Unity热更_打AssetBundles包 Unity开发离不了热更新,现在市面上有很多的热更方案,XLua.ToLua以及C#热更方案ILRuntime,以腾讯的XLua为例,若要实现热更新,As ...
- 创业公司死亡公式:人越多死得越快!
来源 | 土匪投资日记(tufei-plus) 公司人数是创业公司的第一大天敌. 中国有句古话叫"人多力量大",但放在公司里可能是个伪命题. 现在的创业不比以前,创业都会争取拿一笔 ...
- 魏鹏机器人_痴迷农业科技,他发明智能分拣机器人给胡萝卜照CT
"自动按照国际标准对果蔬的大小.果形.颜色.缺陷进行品质分级,颜值高的胡箩卜装箱出口销售,颜值低的可以进行再加工."日前,在位于莱西市店埠镇的青岛有田农业发展有限公司,记者看到一台 ...
- 直播回顾:准确性提升到 5 秒级,ssar 独创的 load5s 指标有多硬核?| 龙蜥技术
简介: 你还在为分析机器负载高而苦恼?这款 ssar 工具独创 load5s 指标精准定位超硬核. 编者按:本文整理自龙蜥SIG技术周会,作者闻茂泉,阿里云计算平台事业部SRE运维专家,是龙蜥社区跟踪 ...
最新文章
- 面向过程(或者叫结构化)分析方法与面向对象分析方法到底区别在哪里?
- AI换脸鉴别率超99.6%,微软用技术应对虚假信息
- How to bind multiple properties with formatter on one control
- 没有外层实列可以访问_这糕点外层香酥,内馅香甜可口,让人吃一次就爱上了,做起来...
- sklearn 常用模块及类与方法
- 【算法】剑指 Offer 47. 礼物的最大价值
- 14、ASP.NET MVC入门到精通——Ajax
- 用pyqt5做个图书馆数据管理客户端!--pyqt+mysql的使用(入门必看!)
- python中常用库_Python运维中20个常用的库和模块,总有一个用的到~
- 基于特征全埋点的精排ODL实践总结
- 计算机弹出虚拟U盘,我们通过工具所自带的电脑模拟器对我们u盘制作启动盘进行模拟启动测试...
- ConcurrentHashMap源码分析,轻取面试Offer(二)
- centos7 crontab未执行问题排查
- 【UE4】物理材质(蓝图)
- Android 手机上获取手机当前上网IP地址(手机网关给手机号分配的IP)
- solr读取word,pdf
- 利用selenium尝试爬取豆瓣图书
- 他99年出生,本科身份摘FOCS 2021最佳学生论文奖,曾4刷NOI金牌
- 老闪创业那些事儿(39)——有梦想的春雷
- “EasyUEFI只能在基于(U)EFI启动的Windows操作系统上安装”解决方案
热门文章
- java获取mysql执行计划_好程序员Java学习路线之MySQL的执行计划
- 《MySQL——主备一致性六问六答》
- 【设计模式之美】<Reading Notes>抽象类与接口
- system.setin_Java System类setIn()方法及示例
- kotlin 或 运算_Kotlin程序对两个数字执行算术运算
- 密码学加密算法分类_密码学中的国际数据加密算法(IDEA)
- Anaconda中下载速度贼慢?
- 编写一个汇编语言程序,完成以下要求。从BUF单元处定义有10个带符号字数据:-1,3,24,94,62,72,55,0,-48,99,试找出他们中的最大值和平均值,并以此分别存放至该数据区的后两个单元
- java调用 solr集群_Solr集群安装Version5.5.2(cloud模式)
- 笨小熊 -- ACM解决方法