zoukankan      html  css  js  c++  java
  • Unity NGUI中动态添加和删除sprite

    转自:http://www.cnblogs.com/vitah/p/3897664.html

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

      参考链接: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 = 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
            UISprite sprite = btn.transform.Find("Sprite").GetComponent<UISprite>();
    
            // 处理剩余时间,显示对应的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:

    Github上代码

    总结:

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

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

      

  • 相关阅读:
    jquery toggle(listenerOdd, listenerEven)
    struts quick start
    hdu 1518 Square (dfs)
    hdu 2544 最短路 (最短路径)
    hdu 1754 I Hate It (线段树)
    hdu 1856 More is better (并查集)
    hdu 1358 Period (KMP)
    hdu 2616 Kill the monster (DFS)
    hdu 2579 Dating with girls(2) (bfs)
    zoj 2110 Tempter of the Bone (dfs)
  • 原文地址:https://www.cnblogs.com/lfy007/p/4814205.html
Copyright © 2011-2022 走看看