在技能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 }
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 }
原文:http://www.cnblogs.com/gzmumu/p/4889444.html