用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)的更多相关文章

  1. 【FairyGUI & Unity】实现血条UI扣血与加血的缓动效果

    组件设计 创建一个进度条组件,作为血条. bar是实际血量条 DownBar是扣血缓动背景图层 UpBar是加血缓动背景图层 LowBar是低血量变色(和控制器配合,本文不讲) n11组合是血量参考线 ...

  2. unity制作简单血条

    学习Unity已经10天了,也没发现有什么长进,真的急.昨天仿着官方Demo做了个射击游戏轮廓,其中需要给每个怪做一个血条. 搜了一些,挺复杂的,用NGUI或者UGUI,外加很长的代码...不过还是找 ...

  3. Unity中制作血条2.0

    ##1.血量显示 不必像之前那样添加Slider组件 直接创建Image 在添加Source Image之后,将Image Type 修改为Filled 通过修改Fill Mode就可以显示不同效果 ...

  4. 制作Unity中的单位血条

    本文章用于记录Unity的学习过程,如有疑问,欢迎交流. 1.血条的显示 在Unity场景中创建空物体,然后新建两个Image(图片),当然只用一个也行,一个作为填充来显示血量,一个作为血条的外框. ...

  5. Unity NGUI弧形血条的制作

    unity版本:4.6 NGUI版本:3.6. (转载请注明参考链接及作者) 参考链接:http://www.cnblogs.com/louissong/p/3841656.html,作者:博客园 L ...

  6. Unity NGUI 血条制作

    NGUI 血条制作步骤 实现过程: 模拟血条的变化当点击按钮Button是血条会实时发生变化. 1.向Unity中导入NGUI2.6.3.unitypackage 点击create your ui 后 ...

  7. 关于Unity中NGUI的3D角色血条的实现

    首先要到Unity的Assets Store里面去下载一个扩展的Package叫NGUI HUD Text v1.13(81),注意如果没有安装NGUI就必须先安装NGUI插件,否则会用不了,因为HU ...

  8. Unity3D NGUI学习(一)血条

    这次来讲讲Unity3D NGUI这个插件的学习,这个插件是收费的,不过去网上可以下载得很多可用版本.用来做用户的交互UI,学习起来比较简单 第一步,导入NGUI包 http://pan.baidu. ...

  9. 《杜增强讲Unity之Tanks坦克大战》7-坦克血条

    7 坦克血条 点击菜单GameObject->UI->Slider创建Slider   选中EventSystem,设置Horizontal Axis为HorzontalUI,Vertic ...

随机推荐

  1. 获取 IP 地址

    package j2se.core.net.base; import java.net.InetAddress;import java.net.UnknownHostException; public ...

  2. IT人 转型

    IT人 转型 转自: http://blog.sina.com.cn/s/blog_88534dff0101232b.html      “35岁,技术生涯即告终结.”这种说法在it界得到众多人认可, ...

  3. Modern C++ CHAPTER 2(读书笔记)

    CHAPTER 2 Recipe 2-1. Initializing Variables Recipe 2-2. Initializing Objects with Initializer Lists ...

  4. Getting Started With Hazelcast 读书笔记(第八章-第十章)

    第八章到第十章就是一些介绍性的描述,吹的就是Hazelcast能使用在各种地方..   第八章 -从外面看 1.Hazelcast做了一个memcache的java实现,方便py和php使用. 2.可 ...

  5. mac地址和ip地址、子网掩码和默认网关

    MAC地址 MAC(Media Access Control或者Medium Access Control)地址,意译为媒体访问控制,或称为物理地址.硬件地址,用来定义网络设备的位置.在OSI模型中, ...

  6. winform初学

    一.建立winform工程项目

  7. [PL/SQL] 如何规避异常ORA-01403

    如果mytable表中不存在 ID = 123 的数据,那么 SELECT Flag INTO flag FROM mytable WHERE ID = 123 将抛出异常ORA-01403 SELE ...

  8. SpringMVC 的RequestMapping

    Spring MVC之@RequestMapping 详解 2013-10-13 23:39 150698人阅读 评论(6) 收藏 举报  分类: Java 精华文章(161)    目录(?)[+] ...

  9. sql server 远程连接不上解决思路

    1.数据库是否允许远程连接: 1.1.0登陆SQL Server 2008(windows身份认证),登陆后右击,选择“属性”.左侧选择“安全性”,选中右侧的“SQL Server 和 Windows ...

  10. 如何在win上搭建SVN服务器

    本博文转自:http://www.cnblogs.com/armyfai/p/3985660.html SVN简介: 为什么要使用SVN? 程序员在编写程序的过程中,每个程序员都会生成很多不同的版本, ...