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 ...
随机推荐
- 用GUI完成了斗地主发牌
JAVA真的很强大,简单的步骤他自己就可以帮助我们解决了,简单,方便,并且还有着非常大的开发潜力
- Linux centOS下搭建RTMP服务器的具体步骤
以下的所需的安装包,可直接在linux系统终端下载,也可从其他地方下载之后拷到对应目录下解压使用,遇到连接不到国外网站时可改变压缩包地址 1.安装依赖包: #yum install glibc.i68 ...
- nerual style 执行命令
python neural_style.py --content ./examples/4-content.jpg --styles ./examples/4-faguo-style.jpg --ou ...
- java8中CAS的增强
注:ifeve.com的同名文章为本人所发,此文在其基础做了些调整.转载请注明出处! 一.java8中CAS的增强 前些天,我偶然地将之前写的用来测试AtomicInteger和synchronize ...
- 《VB语言程序设计(第3版)》总结
我之前因学习昆仑通态的组态软件MCGS,用并学习过VB,还买了一本书<VB语言程序设计(第3版)>.现在在某公司实习,最近接触老的项目,又要用到VB.我就又把那本书大体看了一遍,并对其进行 ...
- 学习varnish随笔
Varnish是一款高性能.开源的反向代理服务器和缓存服务器.Varnish使用内存缓存文件来减少响应时间和网络带宽消耗.这个项目是由挪威的一家报纸Verdens Gang的网络分支起始的,其架构设计 ...
- 关于delphi点击webbrowser中任意一点的问题
关于delphi点击webbrowser中任意一点的问题 有时候我们需要delphi载入webbrowser1打开网页的时候 需要点击某一个点的位置 可能是坐标 可能是按钮 可能是其他的控件应该如何来 ...
- 数据库之Group By用法
sql语句Group By用法 sql语句Group By用法一则 sql语句Group By用法一则 如果我们的需求变成是要算出每一间店 (store_name) 的营业额 (sales),那怎么办 ...
- SQLMAP 中$与#的区别
在sql配置中比如in(#rewr#) 与in ($rewr$) 在Ibatis中我们使用SqlMap进行Sql查询时需要引用参数,在参数引用中遇到的符号#和$之间的区分为,#可以进行与编译,进行类型 ...
- oracle impdp 导入
用imp语法导入dmp文件: imp mdm/mdm@SYSWARE file= E:\Product\9y5s\5.MDM\20161024.DMP full=y 报错 IMP-00002:无 ...