UGUI의 기능을 이용해서 스킬을 사용했을 때 쿨타임을 표시할 수 있도록 해보겠습니다.
예를 들면 LOL과 같은....
(예시)
유니티의 UGUI에서는 UI의 이미지를 4가지 타입으로 설정할 수 있습니다.
Simple은 단순히 이미지를 표시하고
Sliced와 Tiled는 이미지의 영역을 나눠서 사용할 때 이고
Filed는 이미지를 채우는 방식이라고 생각하시면 됩니다.
(Image Type 네 가지)
그리고 이 Image Type을 이용해서 쿨타임 표시를 만들어 봤습니다.
영상 마지막에 스킬 쿨타임이 끝나지 않았는데 스킬버튼을 눌러서 같은 코루틴이 생성 되어 수치가 두번씩 변경되는 것을 볼 수 있는데
쿨타임이 도는 중에는 스킬버튼을 누르지 못하게 하는 방식으로 막아주시면 됩니다.
1. 처음 작성한 소스코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | using UnityEngine; using UnityEngine.UI; using System.Collections; public class SkillBtn : MonoBehaviour { public Image skillFilter; public Text coolTimeCounter; //남은 쿨타임을 표시할 텍스트 public float coolTime; private float currentCoolTime; //남은 쿨타임을 추적 할 변수 void start() { skillFilter.fillAmount = 0; //처음에 스킬 버튼을 가리지 않음 } public void UseSkill() { Debug.Log("Use Skill"); skillFilter.fillAmount = 1; //스킬 버튼을 가림 StartCoroutine("Cooltime"); currentCoolTime = coolTime; coolTimeCounter.text = "" + currentCoolTime; StartCoroutine("CoolTimeCounter"); } IEnumerator Cooltime() { while(skillFilter.fillAmount > 0) { skillFilter.fillAmount -= 1 * Time.smoothDeltaTime / coolTime; yield return null; } yield break; } //남은 쿨타임을 계산할 코르틴을 만들어줍니다. IEnumerator CoolTimeCounter() { while(currentCoolTime > 0) { yield return new WaitForSeconds(1.0f); currentCoolTime -= 1.0f; coolTimeCounter.text = "" + currentCoolTime; } yield break; } } |
2.수정된 소스코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | using UnityEngine; using UnityEngine.UI; using System.Collections; public class SkillBtn : MonoBehaviour { public Image skillFilter; public Text coolTimeCounter; //남은 쿨타임을 표시할 텍스트 public float coolTime; private float currentCoolTime; //남은 쿨타임을 추적 할 변수 private bool canUseSkill = true; //스킬을 사용할 수 있는지 확인하는 변수 void start() { skillFilter.fillAmount = 0; //처음에 스킬 버튼을 가리지 않음 } public void UseSkill() { if (canUseSkill) { Debug.Log("Use Skill"); skillFilter.fillAmount = 1; //스킬 버튼을 가림 StartCoroutine("Cooltime"); currentCoolTime = coolTime; coolTimeCounter.text = "" + currentCoolTime; StartCoroutine("CoolTimeCounter"); canUseSkill = false; //스킬을 사용하면 사용할 수 없는 상태로 바꿈 } else { Debug.Log("아직 스킬을 사용할 수 없습니다."); } } IEnumerator Cooltime() { while(skillFilter.fillAmount > 0) { skillFilter.fillAmount -= 1 * Time.smoothDeltaTime / coolTime; yield return null; } canUseSkill = true; //스킬 쿨타임이 끝나면 스킬을 사용할 수 있는 상태로 바꿈 yield break; } //남은 쿨타임을 계산할 코르틴을 만들어줍니다. IEnumerator CoolTimeCounter() { while(currentCoolTime > 0) { yield return new WaitForSeconds(1.0f); currentCoolTime -= 1.0f; coolTimeCounter.text = "" + currentCoolTime; } yield break; } } |
'Unity > UGUI' 카테고리의 다른 글
Unity RichText (0) | 2016.06.25 |
---|---|
UGUI의 Toggle을 이용하여 RadioButtonGroup 만들기(Toggle Group) (5) | 2016.03.08 |
UGUI의 Mask를 이용하여 HPbar 만들기 (0) | 2016.03.08 |
UGUI (2) | 2016.03.04 |