(以后,参考链接和作者将在文章首部给出,转载请保留此部分内容)

  参考链接: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 initializationvoid 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 framevoid 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 = 1;// 在按钮下面创建spriteUISprite time_sprite = NGUITools.AddSprite(_skill_btn, _altas, _sprite_name[(int)_cd_time+1]);time_sprite.height = 25;time_sprite.width = 18;}}bool UpdateCDSprite(float cd_time, float time_left, GameObject btn, string sprite_name){// 获取btn按钮下cd的spriteUISprite cd_sprite = btn.transform.Find(sprite_name).GetComponent<UISprite>();cd_sprite.fillAmount = time_left / cd_time;// 按钮下的cd时间spriteUISprite sprite = btn.transform.Find("Sprite").GetComponent<UISprite>();// 处理剩余时间,显示对应的spriteif (time_left > 0){if ((int)time_left < time_left)sprite.spriteName = _sprite_name[(int)time_left + 1];elsesprite.spriteName = _sprite_name[(int)time_left];return true;}else{// 删除CD时间spriteDestroy(btn.transform.Find("Sprite").gameObject);cd_sprite.fillAmount = 0;return false;}}
}

  代码中都有相应注释,找到关键代码即可轻松实现。

  代码中的_sprite_name字符串数组对应在altas中的各个名称,如下图所示:

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

Github上代码

总结:

  1、代码中的按钮和CD阴影的sprite都用代码的方式找寻,其实可以直接在Unity中拖动相应对象到public成员变量,效率应该会更高;

  2、在技能CD状态时,上述代码会在按钮下也就是SkillButton下创建一个名为"Sprite"的sprite,用于显示CD时间,如果把"Sprite"改为自定义名,暂未实现;

  

  

转载于:https://www.cnblogs.com/vitah/p/3897664.html

Unity NGUI中动态添加和删除sprite相关推荐

  1. Unity NGUI中动态添加和删除sprite(附上转载者注释)

    --------------------- 此部分为转载的感受. 原文对于NGUI如何动态添加删除sprite,以及调用NGUI中的图集Atlas都有很明确的代码. 转载括号内容附上转载作者(Bula ...

  2. JSP中动态添加或删除table的行

     个 想要实现如上图动态添加或者删除一行的功能,代码如下:(包含点击"环节参与人员"空白栏时弹出组织结构人员树时的弹窗功能) HTML部分: <body ><di ...

  3. JS实现动态添加和删除div

    实现方式一:只在最后一个数据中动态添加或者删除 | 背景 需要做一个页面,页面可以输入参数,点击确认按钮可以发请求给某接口.但是接口的某个字段是数组类型,所以在页面上需要实现添加或者删除元素的功能. ...

  4. html表格中添加修改和删除链接,jQuery实现为table表格动态添加或删除tr功能示例...

    本文实例讲述了jQuery实现为table表格动态添加或删除tr功能.分享给大家供大家参考,具体如下: HTML页面元素如下: 订单合同号 捆包号 品名 规格 材质 重量 业务需求是,从后台获取到订单 ...

  5. vue根据索引删除数组中的一个对象_Vue实现动态添加或者删除对象和对象数组的操作方法...

    添加核心代码如下: this.data.push({ type: [{ value: '选项1', label: 'in' }, { value: '选项3', label: 'out' }], va ...

  6. WPF 中动态创建和删除控件

    WPF 中动态创建和删除控件 原文:WPF 中动态创建和删除控件 动态创建控件 1.容器控件.RegisterName("Name",要注册的控件)   //注册控件 2.容器控件 ...

  7. JavaScript 高级篇之DOM文档,简单封装及调用、动态添加、删除样式(推荐七)

    前言 学习是有趣的,但有过滤的学习内容就更好,本博主就专门为刚接触javascript客户端编程的朋友提供及分享个人学习经历!建议大家看看:(汤姆大叔的博客) http://www.cnblogs.c ...

  8. 后盾网lavarel视频项目---vue实现动态添加和删除板块

    后盾网lavarel视频项目---vue实现动态添加和删除板块 一.总结 一句话总结: 原理就是:列表时根据vue中的videos变量中的元素来遍历的,初始时videos:[{title:'',pat ...

  9. js进阶 9-11 select选项框如何动态添加和删除元素

    js进阶 9-11 select选项框如何动态添加和删除元素 一.总结 一句话总结: 二.js进阶 9-11 select选项框如何动态添加和删除元素 1.案例说明 2.相关知识 Select 下拉列 ...

最新文章

  1. Android Studio Terminal 不是内部或外部命令,也不是可运行程序或批处理文件
  2. 什么是系统调用?为什么要用系统调用?
  3. 关于没有commit的死锁问题
  4. android加载so文件失败,Android无法加载'.so.1'文件
  5. python if高级用法_Python高级用法总结--元类
  6. 【C语言】又是排序(指针专题)
  7. 结构体指针大小_C语言100题集合013-指向结构体变量的指针
  8. JVM 内存预警排查
  9. 微软创投加速器最新成果展示:人工智能技术杀入时尚界
  10. 西门子PLC 1200和V20变频器USS通讯
  11. 苹果新一代iPad发布,库克表示后PC时代已经来临
  12. “天才少年” 稚晖君被曝离职华为,或投身机器人领域
  13. 移动硬盘制作随身系统
  14. 自动控制原理4.2---根轨迹绘制的基本法则
  15. EasyUI/TopJUI可编辑表格的列根据返回数据判断是使用 combobox 还是 numberbox
  16. 【你也能看得懂得电磁场与电磁波系列连载 6】
  17. 阅读笔记WS-DAN
  18. 原型prototype
  19. 文件太大无法复制到U盘的解决方法教程
  20. 【Pytorch】第 9 章 :Capstone 项目——用 DQN 玩 Flappy Bird

热门文章

  1. mgo和mongo-go-driver使用心得比较
  2. 如何从零开始搭建自己的博客
  3. php常用库函数(三)
  4. g120xa变频器调试参数_西门子G120XA变频器如何进行快速调试
  5. Jmeter使用方法
  6. Linux内核写入s3c2440,Linux空板的系统写入
  7. jstack 脚本 自动日志_运维老司机又翻车, 居然没用过日志切割Logrotate
  8. Spark Shuffle详解剖析
  9. 运行hadoop指令之——WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform....
  10. 大数据开发之Hadoop---初始Hadoop