unity如何显示血条(不使用NGUI)
用unity本身自带的功能,如何显示血条?
显示血条,从资源最小化的角度,只要把一个像素的色点放大成一个矩形就足够,三个不同颜色的矩形,分别显示前景色,背景色,填充色,这样会消耗最少的显存资源。
unity 有GUITexture,可以用来显示色块。但GUITexture有个问题是,每个GUITexture都会消耗一个drawcall,如果画面上就数百个单位,就会消耗数百个drawcall,drawcall是昂贵的资源,一个手游也就只能允许200个左右的drawcall,显然这个方案只能用来做demo,无法用来实际开发使用。
然后就是ugui的Image和RawImage,这个似乎不错,只要Image拼接在一张图上,就只消耗一个DrawCall,这样无论多少个单位,也只要一个drawcall就可以显示所有的血条。
但血条有个要求,是单位移动的时候,血条显示的顺序,要满足单位的遮挡关系。而ugui的控件,都无法按照z-index去显示,它们是“平面”的,想要调整前后关系,必须检测每个单位的z-index,然后对其进行排序,再按排序结果,调整血条的显示顺序,这个动作每帧都要做,显然,这个运算的负荷也不可接受。
还有其他办法吗?还有两种,都可以满足要求。
第一种,用sprite。unity可以把多个sprite打包到一个texutre中。sprite可以满足显示顺序的要求。只要让三个矩形都面向摄像机就可以了,显示时,让前景色离摄像机距离最近,填充色次之,最后是背景色。多个sprite,如果其texture是一个,那么可以用1个drawcall就可以显示。
第二种,用四个点的矩形来显示,也看向摄像机,其实本质上跟sprite原理相似。
这里面还有个问题,就是透明问题。如果要求背景色不透明,而填充色透明,则用第一种方法无法实现。第二种方法也需要改进,必须让第二种的矩形,变成八个顶点,有内框和外框,内框使用透明色,而外框则是不透明色。
更进一步,如果想让血条在不同的状态显示不同的颜色,则会有更加复杂的算法,但都要满足最少drawcall原则,所有的血条都只用1个drawcall。
如果想在血条边上显示文字,出于类似的原理,也无法使用GUIText和UGui的控件。可以用TextMesh实现,这个也是多个文字使用一个drawcall。
unity如何显示血条(不使用NGUI)的更多相关文章
- 【FairyGUI & Unity】实现血条UI扣血与加血的缓动效果
组件设计 创建一个进度条组件,作为血条. bar是实际血量条 DownBar是扣血缓动背景图层 UpBar是加血缓动背景图层 LowBar是低血量变色(和控制器配合,本文不讲) n11组合是血量参考线 ...
- unity制作简单血条
学习Unity已经10天了,也没发现有什么长进,真的急.昨天仿着官方Demo做了个射击游戏轮廓,其中需要给每个怪做一个血条. 搜了一些,挺复杂的,用NGUI或者UGUI,外加很长的代码...不过还是找 ...
- Unity中制作血条2.0
##1.血量显示 不必像之前那样添加Slider组件 直接创建Image 在添加Source Image之后,将Image Type 修改为Filled 通过修改Fill Mode就可以显示不同效果 ...
- 制作Unity中的单位血条
本文章用于记录Unity的学习过程,如有疑问,欢迎交流. 1.血条的显示 在Unity场景中创建空物体,然后新建两个Image(图片),当然只用一个也行,一个作为填充来显示血量,一个作为血条的外框. ...
- Unity NGUI弧形血条的制作
unity版本:4.6 NGUI版本:3.6. (转载请注明参考链接及作者) 参考链接:http://www.cnblogs.com/louissong/p/3841656.html,作者:博客园 L ...
- Unity NGUI 血条制作
NGUI 血条制作步骤 实现过程: 模拟血条的变化当点击按钮Button是血条会实时发生变化. 1.向Unity中导入NGUI2.6.3.unitypackage 点击create your ui 后 ...
- 关于Unity中NGUI的3D角色血条的实现
首先要到Unity的Assets Store里面去下载一个扩展的Package叫NGUI HUD Text v1.13(81),注意如果没有安装NGUI就必须先安装NGUI插件,否则会用不了,因为HU ...
- Unity3D NGUI学习(一)血条
这次来讲讲Unity3D NGUI这个插件的学习,这个插件是收费的,不过去网上可以下载得很多可用版本.用来做用户的交互UI,学习起来比较简单 第一步,导入NGUI包 http://pan.baidu. ...
- 《杜增强讲Unity之Tanks坦克大战》7-坦克血条
7 坦克血条 点击菜单GameObject->UI->Slider创建Slider 选中EventSystem,设置Horizontal Axis为HorzontalUI,Vertic ...
随机推荐
- git 常见命令
查看.添加.提交.删除.找回,重置修改文件 git help <command> # 显示command的help git show # 显示某次提交的内容 git show $id gi ...
- Form表单(回车)提交问题
我们有时候希望回车键敲在文本框(input element)里来提交表单(form),但有时候又不希望如此.比如搜索行为,希望输入完关键词之后直接按回车键立即提交表单,而有些复杂表单,可能要避免回车键 ...
- 提高SQL查询效率(SQL优化)
要提高SQL查询效率where语句条件的先后次序应如何写 http://blog.csdn.net/sforiz/article/details/5345359 我们要做到不但会写SQL,还要做到 ...
- MySQL binlog基本操作
常用操作: 1. 设置启用binlog log-bin = binlog 2. 设置全备和增量备份 #crontab -e * 0 * * 7 /usr/bin/mysqldump mybinlog ...
- 史上最全的常用iOS的第三方框架
文章来源:http://blog.csdn.net/sky_2016/article/details/45502921 图像: 1.图片浏览控件MWPhotoBrowser 实现了一个照片 ...
- RHEL7关于时间的学习笔记
当你发现时间是贼了,它早已偷光你的选择. 一,GMT.UTC.CST GMT:(Greenwich Mean Time)格林威治时间 ,太阳通过格林威治那一刻来作为计时标准. UTC:(Coordin ...
- [08]APUE:进程控制
[a] getpid / getppid / getuid / geteuid / getgid / getegid #include <unistd.h> pid_t getpid(vo ...
- JiaThis分享插件的使用
jia This的下载地址:http://www.jiathis.com/ 只需要在页面上加上以下代码即可 <span class="jiathis_style"> & ...
- Spring 容器
Spring提供了两个核心接口:BeanFactory和ApplicationContext,其中applicationContext是BeanFactory的子接口. 他们都可代表Spring容器, ...
- AD帐户操作C#示例代码(一)——导入用户信息
最近写了一个AD帐户导入的小工具(为啥写作“帐”户呢?),跟大家分享下相关代码,欢迎各位高手指教! 首先,我准备一个这样的Excel文件作为导入模版,并添加了一些测试数据. 然后,我打开Visual ...