Unity NGUI中动态添加和删除sprite
(以后,参考链接和作者将在文章首部给出,转载请保留此部分内容)
参考链接:http://www.narkii.com/club/thread-299977-1.html,作者:纳金网 比巴卜;
参考链接:http://game.ceeger.com/forum/read.php?tid=2852,作者:Unity圣典论坛 kuku小夭
动态添加和删除Sprite可以在很多地方用到,这里以实现显示技能CD时间来为例,CD的时间是以sprite来显示的,当然CD时间以文本显示更为合理,这里只是作为例子说明。
1、使用NGUI创建一个按钮,按钮的显示样子的修改可以参考:http://www.cnblogs.com/vitah/p/3855982.html,效果如下:

其中CDSprite是用来实现技能CD时技能阴影效果的sprite,可以参考:http://www.cnblogs.com/vitah/p/3861031.html
2、接下来通过动态添加sprite实现技能的CD时间的显示:
首先把显示的数字图片导入到Altas中,新建了一个altas,可以在右下角看到导入的数字图片:

3、点击按钮时动态添加数字的sprite,代码如下:
using UnityEngine;
using System.Collections; public class SkillCDTimeSprite : MonoBehaviour
{
public string[] _sprite_name = {
"num_0","num_1", "num_2", "num_3", "num_4",
"num_5", "num_6", "num_7", "num_8", "num_9"
}; // 技能是否處於CD狀態
public bool _skill_is_cd;
public float _cd_time ; UISprite _cd_sprite;
UIAtlas _altas;
GameObject _skill_btn; // Use this for initialization
void Start()
{
// cd时间初始化
_cd_time = 3f; // 找到对应的altas
_altas = (UIAtlas)Resources.Load("Prefabs/MyTest", typeof(UIAtlas)); // CD阴影效果sprite初始化
_cd_sprite = GameObject.Find("UI Root/Camera/SkillButton/CDSprite").GetComponent<UISprite>();
// 按钮初始化
_skill_btn = GameObject.Find("UI Root/Camera/SkillButton");
} // Update is called once per frame
void Update()
{
if ( _skill_is_cd )
{
float time = _cd_time * _cd_sprite.fillAmount;
time -= Time.deltaTime; // 更新cd和cd时间的sprite
_skill_is_cd = UpdateCDSprite(_cd_time, time, _skill_btn, "CDSprite");
}
} void OnClick()
{
if (_skill_is_cd)
{
Debug.Log("技能CD");
}
else
{
Debug.Log("施放技能");
_skill_is_cd = true;
_cd_sprite.fillAmount = ; // 在按钮下面创建sprite
UISprite time_sprite = NGUITools.AddSprite(_skill_btn, _altas, _sprite_name[(int)_cd_time+]);
time_sprite.height = ;
time_sprite.width = ;
}
} bool UpdateCDSprite(float cd_time, float time_left, GameObject btn, string sprite_name)
{
// 获取btn按钮下cd的sprite
UISprite cd_sprite = btn.transform.Find(sprite_name).GetComponent<UISprite>();
cd_sprite.fillAmount = time_left / cd_time; // 按钮下的cd时间sprite
UISprite sprite = btn.transform.Find("Sprite").GetComponent<UISprite>(); // 处理剩余时间,显示对应的sprite
if (time_left > )
{
if ((int)time_left < time_left)
sprite.spriteName = _sprite_name[(int)time_left + ];
else
sprite.spriteName = _sprite_name[(int)time_left]; return true;
}
else
{
// 删除CD时间sprite
Destroy(btn.transform.Find("Sprite").gameObject);
cd_sprite.fillAmount = ;
return false;
}
}
}
代码中都有相应注释,找到关键代码即可轻松实现。
代码中的_sprite_name字符串数组对应在altas中的各个名称,如下图所示:

4、可以看下运行效果,在技能CD时会显示CD时间的sprite,结束后会自动删除该sprite:


总结:
1、代码中的按钮和CD阴影的sprite都用代码的方式找寻,其实可以直接在Unity中拖动相应对象到public成员变量,效率应该会更高;
2、在技能CD状态时,上述代码会在按钮下也就是SkillButton下创建一个名为"Sprite"的sprite,用于显示CD时间,如果把"Sprite"改为自定义名,暂未实现;
Unity NGUI中动态添加和删除sprite的更多相关文章
- JS实现动态添加和删除div
实现方式一:只在最后一个数据中动态添加或者删除 | 背景需要做一个页面,页面可以输入参数,点击确认按钮可以发请求给某接口.但是接口的某个字段是数组类型,所以在页面上需要实现添加或者删除元素的功能. | ...
- Hyperledger Fabric节点的动态添加和删除
前言 在Hyperledger Fabric组织的动态添加和删除中,我们已经完成了在运行着的网络中动态添加和删除组织.本文将在其基础上,详细介绍了如何在 soft 组织上添加新的 peer2 节点,并 ...
- [Flex] Accordion系列-动态添加或删除Accordion容器中项目
<?xml version="1.0" encoding="utf-8"?> <!--Flex中如何使用addChild()和removeCh ...
- 在页面上绘制一张表格,使用 DOM 节点的动态添加和删除向表格中插入数据,点击表格每行后的“删除”超链接
查看本章节 查看作业目录 需求说明: 在页面上绘制一张表格,使用 DOM 节点的动态添加和删除向表格中插入数据,点击表格每行后的"删除"超链接,使用 DOM 节点的删除操作将对应的 ...
- Lua中如何实现类似gdb的断点调试—09支持动态添加和删除断点
前面已经支持了几种不同的方式添加断点,但是必须事先在代码中添加断点,在使用上不是那么灵活方便.本文将支持动态增删断点,只需要开一开始引入调试库即可,后续可以在调试过程中动态的添加和删除断点.事不宜迟, ...
- 插件~使用ECharts动态在地图上标识点~动态添加和删除标识点
之前写过一个Echarts的文章,没有基础的同学可以先看这<上一篇>,对于一个地图和说,我们在初始化之后,你可能被在地图上标识出一些点,当然这根据你的业务去标识,而如果每次更新数据都加载全 ...
- Android 在程序中动态添加 View 布局或控件
有时我们需要在程序中动态添加布局或控件等,下面用程序来展示一下相应的方法: 1.addView 添加View到布局容器 2.removeView 在布局容器中删掉已有的View 3.LayoutPar ...
- VC中动态添加控件
VC中动态添加控件 动态控件是指在需要时由Create()创建的控件,这与预先在对话框中放置的控件是不同的. 一.创建动态控件: 为了对照,我们先来看一下静态控件的创建. 放置静态控件时必须先建立一个 ...
- jquery 动态添加和删除 ul li列表
今天需要实现一个jquery动态添加和删除 ul li列表中的li行,自己简单的实现乐一个,分享一下 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML ...
随机推荐
- java web项目中的web.xml标签之context-param
WEB项目初始化过程: 在启动Web项目时,容器(比如Tomcat)会读web.xml配置文件中的两个节点<listener>和<contex-param>. 接着容器会创建一 ...
- Extending Robolectric
Robolectric is a work in progress, and we welcome contributions from the community. We encourage dev ...
- DataView操作DataTable
1.DataView筛选数据 //假设有一个DataTable数据 DataTable dt = new DataTable(); //转成DefaultView DataView dv = dt.D ...
- VS2015使用OSChina的git功能
好长时间没有写博了,把今天的新的记录一下. 最近开始使用vs2015,vs2015支持git平台和TF功能,因为....,我选择了OSChina的git.一开始学习的此篇文章http://my.osc ...
- SQLite 入门教程(四)增删改查,有讲究
增删改查操作,其中增删改操作被称为数据操作语言 DML,相对来说简单一点. 查操作相对来说复杂一点,涉及到很多子句,所以这篇先讲增删改操作,以例子为主,后面再讲查操作. 一.插入数据 INSERT I ...
- OpenCart 之registry功用
1. “Registry”设计模式 在OpenCart中,Registry是整个系统的信息中枢. Registry是一个单例(Singleton),在index.php起始页面中, 首先作为构造函数参 ...
- 解决NSAttributedString与UILabel高度自适应计算问题
两个类扩展方法: /** * 修改富文本的颜色 * * @param str 要改变的string * @param color 设置颜色 * @param range 设置颜色的文字范围 ...
- 阿里druid 介绍及配置
1. 简介,什么是Druid Druid是阿里巴巴开源平台上的一个项目,整个项目由数据库连接池.插件框架和SQL解析器组成.该项目主要是为了扩展JDBC的一些限制,可以让程序员实现一些特殊的需求,比如 ...
- POJ2584 T-Shirt Gumbo 二分图匹配(网络流)
#include <cstdio> #include <cstring> #include <algorithm> const int inf=0x3f3f3f3f ...
- 64位系统下System32文件系统重定向
前言 因为一次偶然的机会,需要访问系统目录“C:/Windows/System32“文件夹下的内容,使用的测试机器上预装了win7 64系统.在程序运行中竟然发生了该文件路径不存在的问题!!通过查看网 ...