unity3d学习笔记(十九)--ngui制作3d人物头顶的头像和血条
原地址:http://blog.csdn.net/lzhq1982/article/details/18793479
本系列文章由Aimar_Johnny编写,欢迎转载,转载请标明出处,谢谢。
http://blog.csdn.net/lzhq1982/article/details/18793479
先上张图,自己做的一个demo。
这里的人物头像和血条是在3d世界生成的,所以有真正的纵深感和遮挡关系,废话不多说,看我是怎么实现的。
第一步,先在UI Root里制作头像和血条。
这个制作步骤基本和我前面一篇文章介绍头像血条的制作步骤一致,下面我截个图。
就是上面的HeroPanel,东西很简单,创建一个主面板HeroPanel,然后在里面创建一个Slider,用来显示血条,再创建一个sprite,用来显示头像,我这里还有一个sprite是头像的背景框,然后调整位置和血条的颜色,不知道怎么做的看我前面的头像血条的文章,做完是这个样子:
第二步,把头像和血条做成prefab。
把上面制作的HeroPanel拖到Project的Resources文件夹下(Project->Assets->Resources),没有Resources文件夹的自己创建一个,为了将来的加载。这样就生成了HeroPanel的prefab,然后就可以把之前UI Root下的那个删掉了。
第三步,进入程序。
上面的准备工作OK后,就是编程环节了。我的每个角色下挂了一个Npc脚本,在Npc脚本的Start里加载HeroPanel的prefab。
- GameObject heroPanel = Resources.Load("HeroPanel") as GameObject;
- _heroPanel = Instantiate(heroPanel, transform.position, transform.rotation) as GameObject;
- _heroPanel.transform.localScale = new Vector3(0.006f, 0.006f, 0.006f);
- _bloodSlider = _heroPanel.GetComponentInChildren<UISlider>();
- _heroHeight = gameObject.collider.bounds.size.y;
上面代码很简单,先是加载HeroPanel的prefab,然后生成实例_heroPanel,然后调整大小,这个一定要调成自己想要的大小,不然大的不忍直视啊,接着获取里面的UISlider脚本,赋给变量_bloodSlider,后面用得到。如果想改变头像图片可以在这里操作,我就不改了。最后获取该角色的身高,用其碰撞盒获取,后面Update里计算坐标用得到。
然后就是Update部分:
- Vector3 pos = new Vector3(transform.position.x, transform.position.y+_heroHeight+HEAD_OFFSET, transform.position.z);
- _heroPanel.transform.position = pos;
- _heroPanel.transform.rotation = Camera.main.transform.rotation;
在Update里要随时获得角色的坐标,最重要的就是y坐标,因为要放到角色头顶上,所以这时就用到了前面的_heroHeight,后面又加了个HEAD_OFFSET,是偏移量,我这是1.0,然后把这个坐标赋给_heroPanel,这样头像血条就跟着角色走了,但还有一点别忘了,就是它的朝向问题,你要时刻保持这个面板朝向摄像机,这就是第三句代码的作用。
好了,到这里你已经实现了基本功能,很简单吧,剩下的就是血条的slider了,这个和我前面介绍血条文章的用法一样,在这里就是改变_bloodSlider的value值,就是百分比,在这里我就不介绍了。哈哈,打完收工。
unity3d学习笔记(十九)--ngui制作3d人物头顶的头像和血条的更多相关文章
- python3.4学习笔记(十九) 同一台机器同时安装 python2.7 和 python3.4的解决方法
python3.4学习笔记(十九) 同一台机器同时安装 python2.7 和 python3.4的解决方法 同一台机器同时安装 python2.7 和 python3.4不会冲突.安装在不同目录,然 ...
- (C/C++学习笔记) 十九. 模板
十九. 模板 ● 模板的基本概念 模板(template) 函数模板:可以用来创建一个通用功能的函数,以支持多种不同形参,进一步简化重载函数的函数体设计. 语法: template <<模 ...
- Java基础学习笔记十九 IO
File IO概述 回想之前写过的程序,数据都是在内存中,一旦程序运行结束,这些数据都没有了,等下次再想使用这些数据,可是已经没有了.那怎么办呢?能不能把运算完的数据都保存下来,下次程序启动的时候,再 ...
- Java基础学习笔记十九 File
IO概述 回想之前写过的程序,数据都是在内存中,一旦程序运行结束,这些数据都没有了,等下次再想使用这些数据,可是已经没有了.那怎么办呢?能不能把运算完的数据都保存下来,下次程序启动的时候,再把这些数据 ...
- Unity3D学习笔记(九):摄像机
3D数学复习 using System.Collections; using System.Collections.Generic; using UnityEngine; public class w ...
- JavaScript权威设计--跨域,XMLHttpRequest(简要学习笔记十九)
1.跨域指的是什么? URL 说明 是否允许通信 http://www.a.com/a.jshttp://www.a.com/b.js 同一域名下 允许 http://www.a.com/lab/a. ...
- python 学习笔记十九 django深入学习四 cookie,session
缓存 一个动态网站的基本权衡点就是,它是动态的. 每次用户请求一个页面,Web服务器将进行所有涵盖数据库查询到模版渲染到业务逻辑的请求,用来创建浏览者需要的页面.当程序访问量大时,耗时必然会更加明显, ...
- SharpGL学习笔记(十九) 摄像机漫游
所谓的摄像机漫游,就是可以在场景中来回走动. 现实中,我们通过眼睛观察东西,身体移动带动眼睛移动观察身边的事物,这也是在漫游. 在OpenGL中我们使用函数LookAt()来操作摄像机在三维场景中进行 ...
- yii2源码学习笔记(十九)
view剩余代码 /** * @return string|boolean the view file currently being rendered. False if no view file ...
随机推荐
- Android之ORMLite实现数据持久化的简单使用
Android中内置了sqlite,但是常用的开发语言java是面向对象的,而数据库是关系型的,二者之间的转化每次都很麻烦.(作为程序员,应该学会偷懒)而Java Web开发中有很多orm框架(其实我 ...
- 【转】MySQL的安装与配置
一.MySQL的安装 1.在线安装: 命令:sudo apt-get install mysql-server 在安装的过程中将提示为“root”用户设置密码,输入自己的密码即可,安装按成后已自动配置 ...
- MSSQL 数字钱转化为大写
--说明: --1.本函数范围从 毫 ~ 兆 --2.有四种精度(元,角 ,分,厘 ,毫) --3.有三种进位规则(四舍五入,接舍去,非0就入) --参数说明:dbo.MoneyToCapital( ...
- echarts标准饼图(二)——标题(title)配置
标题(title)配置 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...
- Php的安装与配置
PHP的安装 php不需要安装,只是一个软件包,在Apache启动的过程中加载即可 PHP的配置 php是一个软件包,只需要在apache启动过程中加载即可,Php对于apache是一个功能模块. 测 ...
- easyloader [easyui_1.4.2] 分析源码,妙手偶得之
用easyui很久了,但是很少去看源码. 有解决不了的问题就去百度... 今日发现,easyui的源码不难懂. 而且结合 easyloader 可以非常方便的逐个研究easyui的组件. 但是, ea ...
- Visual Studio通过Web Deploy发布网站报错:An error occurred when the request was processed on the remote computer.
这个问题很奇怪,不管我怎么重启服务器和自己的开发机,都没有用. 在网上找了很多资料,有说可以尝试去读Windows的错误日志,然后通过日志找原因…(详见Stackoverflow:http://sta ...
- 你早该这么玩Excel 读书笔记
1. Excel用来分析数据,至少要有一份原始数据和对于的分类汇总数据,这两种数据在一项任务中,应该是存放在同一个Excel文档中的,在书籍中,把他们叫做源数据表和分类汇总表.用户输入源数据表,根据相 ...
- 反编译.o到.cpp
反编译.o到.cpp 现在有很多反编译是对Java的,而.cpp的很少 因为不同的平台.cpp生成的.o是不一样的,但是Java因为有虚拟机的中间作用,生成的.o在不同平台是一样的 反编译的机理 (通 ...
- C++ sizeof操作符的用法和strlen函数的区别
摘要:本人首先介绍了C++中sizeof操作符的用法和注意事项,其次对比了和strlen的区别和使用,方便大家在写代码的时候查阅,和面试.笔试的时候复习. 目录: sizeof的用法: sizeof和 ...