代码改变世界

技能冷却

2015-10-18 14:13  公子沐沐  阅读(318)  评论(0编辑  收藏  举报

在技能Icon上再添加一个Image, Image Type 选为Filled , Fill Origin 选为Top(从上到下),Clockwise取消勾选(为顺时针).这时,只需要调整Fill Amount 就可以实现技能冷却的效果了.

代码:

  1.技能冷却(在Update里计时)

 1 /*
 2     技能冷却(在Update里计时)
 3  */
 4 using UnityEngine;
 5 using System.Collections;
 6 using UnityEngine.UI;
 7 
 8 public class SkillItem : MonoBehaviour {
 9 
10     public float CDTime = 2;
11 
12     private Transform m_transform;
13 
14     private Image CDImage;
15 
16     private Button SkillButton;
17 
18     void Awake()
19     {
20         m_transform=this.transform;
21 
22         SkillButton = m_transform.GetComponent<Button>();
23 
24         SkillButton.onClick.AddListener(() => UseSkill());
25 
26         CDImage = m_transform.FindChild("CDSprite").GetComponent<Image>();
27         CDImage.gameObject.SetActive(false);
28     }
29 
30     // Update is called once per frame
31     void Update () {
32 
33         if (iscd)
34         {
35             if (cdTimer>0)
36             {
37                 cdTimer -= Time.deltaTime;
38                 CDImage.fillAmount -= 1 / CDTime * Time.deltaTime;
39             }
40             else
41             {
42                 CDImage.fillAmount = 0;
43                 iscd = false;
44                 cdTimer = 0;
45                 CDImage.gameObject.SetActive(false);
46                 SkillButton.enabled = true;
47             }
48         }
49     }
50 
51     bool iscd = false;
52 
53     float cdTimer = 0;
54 
55     public void UseSkill()
56     {
57         //攻击动画,特效
58 
59         //冷却
60         CDImage.gameObject.SetActive(true);
61         CDImage.fillAmount = 1;
62         cdTimer = CDTime;
63         iscd = true;
64         SkillButton.enabled = false;
65     }
66 
67 }
View Code

  2.在协程里计时

  1 public Image skill1BtnCDImage;
  2     public Image skill2BtnCDImage;
  3     public Image skill3BtnCDImage;
  4 
  5     public Text skill1CDTime;
  6     public Text skill2CDTime;
  7     public Text skill3CDTime;
  8 
  9     /// <summary>
 10     /// 初始化技能CD
 11     /// </summary>
 12     private void InitCD()
 13     {
 14         skill1BtnCDImage.enabled = false;
 15         skill2BtnCDImage.enabled = false;
 16         skill3BtnCDImage.enabled = false;
 17 
 18         skill1CDTime.text = 0+"";
 19         skill2CDTime.text = 0+"";
 20         skill3CDTime.text = 0+"";
 21 
 22         skill1CDTime.enabled = false;
 23         skill2CDTime.enabled = false;
 24         skill3CDTime.enabled = false;
 25     }
 26 
 27     private void CD(float cd,int skill_ID)
 28     {
 29         cd = cd / 1000;
 30         Image curreImage=null;
 31         Text curreText = null;
 32         switch (skill_ID)
 33         {
 34             case 1:
 35                 curreImage = skill1BtnCDImage;
 36                 curreText = skill1CDTime;
 37                 break;
 38             case 2:
 39                 curreImage = skill2BtnCDImage;
 40                 curreText = skill2CDTime;
 41                 break;
 42             case 3:
 43                 curreImage = skill3BtnCDImage;
 44                 curreText = skill3CDTime;
 45                 break;
 46             default:
 47                 break;
 48         }
 49 
 50 
 51         if (curreImage && !curreImage.enabled)
 52         {
 53             curreImage.enabled = true;
 54 
 55             curreText.enabled = true;
 56 
 57             curreImage.fillAmount = 1;
 58 
 59             curreText.text = ((int)cd).ToString();
 60            
 61         }
 62 
 63         StartCoroutine(CDKeepTime(cd, curreImage, curreText));
 64     }
 65 
 66     IEnumerator CDKeepTime(float cd,Image ima,Text text)
 67     {
 68         float cd2 = cd;
 69         while (ima.fillAmount>=0.02f)
 70         {
 71             cd2 -= Time.deltaTime;
 72 
 73             text.text = (((int)cd2)+1).ToString();
 74 
 75             ima.fillAmount -= 1 / cd * Time.deltaTime;
 76 
 77             print(ima.fillAmount + "减少" + 1 / cd * Time.deltaTime);
 78 
 79             yield return new WaitForSeconds(0);
 80         }
 81         ima.enabled = false;
 82         text.enabled = false;
 83     }
 84 
 85 
 86     //技能CD
 87     public void Skill1BtnCD(float cd)
 88     {
 89         CD(cd, 1);
 90     }
 91 
 92     public void Skill2BtnCD(float cd)
 93     {
 94         CD(cd, 2);
 95     }
 96 
 97     public void Skill3BtnCD(float cd)
 98     {
 99         CD(cd, 3);
100     }
View Code