博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Unity NGUI中动态添加和删除sprite
阅读量:5134 次
发布时间:2019-06-13

本文共 3126 字,大约阅读时间需要 10 分钟。

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

  参考链接:,作者:纳金网 比巴卜;

  参考链接:,作者:Unity圣典论坛 kuku小夭

 

  动态添加和删除Sprite可以在很多地方用到,这里以实现显示技能CD时间来为例,CD的时间是以sprite来显示的,当然CD时间以文本显示更为合理,这里只是作为例子说明。

1、使用NGUI创建一个按钮,按钮的显示样子的修改可以参考:,效果如下:

  其中CDSprite是用来实现技能CD时技能阴影效果的sprite,可以参考:

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
(); // 按钮初始化 _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 = 1; // 在按钮下面创建sprite UISprite 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的sprite UISprite cd_sprite = btn.transform.Find(sprite_name).GetComponent
(); cd_sprite.fillAmount = time_left / cd_time; // 按钮下的cd时间sprite UISprite sprite = btn.transform.Find("Sprite").GetComponent
(); // 处理剩余时间,显示对应的sprite if (time_left > 0) { if ((int)time_left < time_left) sprite.spriteName = _sprite_name[(int)time_left + 1]; else sprite.spriteName = _sprite_name[(int)time_left]; return true; } else { // 删除CD时间sprite Destroy(btn.transform.Find("Sprite").gameObject); cd_sprite.fillAmount = 0; return false; } }}

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

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

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

 

总结:

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

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

 

 

 

  

  

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

你可能感兴趣的文章
C++ 实践总结
查看>>
composer 国内镜像配置
查看>>
软件是天时、地利、人和的产物!
查看>>
python定时清空本目录下除本脚本外的全部文件
查看>>
【PHP】在目标字符串指定位置插入字符串
查看>>
【JS】jQuery设置定时器,访问服务器(PHP示例)配合微信、支付宝原生支付,跳转web网页...
查看>>
实验四2
查看>>
VS2012+Win7网站发布详细步骤
查看>>
Android现学现用第十一天
查看>>
Bin Packing 装箱问题——NPH问题的暴力枚举 状压DP
查看>>
多路复用
查看>>
python 列表
查看>>
Python数据可视化之Pygal(雷达图)
查看>>
Django组件--cookie与session
查看>>
12. javacript高级程序设计-DOM2和DOM3
查看>>
Centos7安装vsftpd (FTP服务器)
查看>>
当前主流读取Excel技术对比
查看>>
js-格式化数字保留两位小数-带千分符
查看>>
【Java】forward & redirect 的差异
查看>>
Java学习笔记--字符串和文件IO
查看>>