UNITY3D 脑袋顶血顶名
来源:互联网 发布:it行业发展前景ppt 编辑:程序博客网 时间:2024/05/16 01:22
杨航最近在学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 脑袋顶血顶名
- 从瀑布到敏捷(二)瀑布的脑袋顶着敏捷的旗号进行裸奔的疯狂
- 顶
- 顶!!
- 顶 ~
- 顶
- 敲脑袋
- 脑袋空白
- 脑袋开花
- 南瓜做的脑袋
- 拒绝“拍脑袋”决策
- 低下脑袋做程序员
- .NET 木瓜脑袋
- 成功靠脑袋
- 论拍脑袋!!
- 突然探出的脑袋
- 脑袋都大了
- 我的脑袋
- Android高手进阶教程(十七)之---Android中Intent传递对象的两种方法(Serializable,Parcelable)!
- 判断一个int型数字是否是自守数
- MDK5 错误
- u-boot的Makefile分析
- maya python api中引用作为形参的使用方法
- UNITY3D 脑袋顶血顶名
- 将固态硬盘作为缓存的设置方法
- Android侧滑菜单DrawerLayout的使用
- OC键值监听(KVO)
- Android 高手进阶教程(十四)之----Android Location的使用!!
- 多个摄像机之间的切换
- 代開鹤岗钢材發票
- 网页内联图片 html inline image
- 数字模式的识别