Unity NGUI中动态添加和删除sprite(附上转载者注释)
2016-12-17 10:41
501 查看
---------------------
此部分为转载的感受。
原文对于NGUI如何动态添加删除sprite,以及调用NGUI中的图集Atlas都有很明确的代码。
转载括号内容附上转载作者(BuladeMian)注释
---------------------
(以后,参考链接和作者将在文章首部给出,转载请保留此部分内容)
参考链接: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,代码如下:
代码中都有相应注释,找到关键代码即可轻松实现。
代码中的_sprite_name字符串数组对应在altas中的各个名称,如下图所示:
4、可以看下运行效果,在技能CD时会显示CD时间的sprite,结束后会自动删除该sprite:
Github上代码
总结:
1、代码中的按钮和CD阴影的sprite都用代码的方式找寻,其实可以直接在Unity中拖动相应对象到public成员变量,效率应该会更高;
2、在技能CD状态时,上述代码会在按钮下也就是SkillButton下创建一个名为"Sprite"的sprite,用于显示CD时间,如果把"Sprite"改为自定义名,暂未实现;
//(判断技能是否冷却)
此部分为转载的感受。
原文对于NGUI如何动态添加删除sprite,以及调用NGUI中的图集Atlas都有很明确的代码。
转载括号内容附上转载作者(BuladeMian)注释
---------------------
(以后,参考链接和作者将在文章首部给出,转载请保留此部分内容)
参考链接: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,创建对应的UISprite名字为_cd_sprite) 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");
//这一部分的路径是Unity在Hierachy视图下的路径,用于找到对应的精灵 } // Update is called once per frame void Update() {
//(判断技能是否冷却) if ( _skill_is_cd ) {
//这个Update()函数内的判断技能冷却的IF语句的时间为浮点型变量time的算法为_cd_tiem * _cd_sprite.fillAmount
//fillAmount默认值为1 float time = _cd_time * _cd_sprite.fillAmount;
//.fillAmount的用法参考【NGUI研究院之制作转圈的技能CD特效(八)】,相关用法请自行搜索。
//.fillAmount这个用法特定于NGUI的sprite。主要用于技能冷却 time -= Time.deltaTime; //time自减Time.delaTime参考【Unity中Time.deltaTime的含意及其应用】 // 更新cd和cd时间的sprite _skill_is_cd = UpdateCDSprite(_cd_time, time, _skill_btn, "CDSprite");
//调用这个.CS文件里面的UpdateCDSprite函数(这四个个参数对应,用于传递对应变量的数值) } }
//OnClick函数主要绑定在技能释放的按钮或者按键上 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<UISprite>(); cd_sprite.fillAmount = time_left / cd_time; //名字为cd_sprite精灵的fillAmount参数的计算方法为time_left / cd_time; 保持更新,使得当time_left传递参数time自减的时候会保持变化 // 按钮下的cd时间sprite UISprite sprite = btn.transform.Find("Sprite").GetComponent<UISprite>(); //找到名字为“Sprite”的部件为UISprite的变量为UISprite 的名字为sprite的变量 // 处理剩余时间,显示对应的sprite if (time_left > 0) {
//(int)time_left使得这个变量强制转换成INT类型变量 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:
Github上代码
总结:
1、代码中的按钮和CD阴影的sprite都用代码的方式找寻,其实可以直接在Unity中拖动相应对象到public成员变量,效率应该会更高;
2、在技能CD状态时,上述代码会在按钮下也就是SkillButton下创建一个名为"Sprite"的sprite,用于显示CD时间,如果把"Sprite"改为自定义名,暂未实现;
//(判断技能是否冷却)
相关文章推荐
- Unity NGUI中动态添加和删除sprite
- Unity NGUI中动态添加和删除sprite
- 用NGUI动态添加和删除Sprite
- 用NGUI动态添加和删除Sprite
- jquery 如何动态添加、删除class样式方法介绍
- 下拉列表框,动态添加删除OPTION
- POI动态添加或删除行
- JS 利用节点实现对表格的动态添加删除
- 动态添加、删除附件
- viewpager中彻底性动态添加、删除Fragment
- 使用TagFlowLayout制作动态添加删除标签
- 动态添加和删除布局
- 揭秘在ListView等AdapterView上动态添加删除项的陷阱
- js 动态表格添加一行删除一行
- silverlight TabControl 动态添加和删除
- Unity 3D 动态创建对象,并渲染贴图,动态添加删除脚本
- 任务调度开源框架Quartz动态添加、修改和删除定时任务
- jquery动态添加删除div 具体实现
- easyui tree datagrid动态添加表头和表格数据,动态弹出框,修改和删除按钮