UnderCode

스킬 쿨타임 UI 만들기 본문

Unity/UGUI

스킬 쿨타임 UI 만들기

MS.S 2016. 3. 7. 19:58
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;
    }
}
 
 

cs




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;
    }
}
 

cs


'Unity > UGUI' 카테고리의 다른 글

Unity RichText  (0) 2016.06.25
UGUI의 Toggle을 이용하여 RadioButtonGroup 만들기(Toggle Group)  (5) 2016.03.08
UGUI의 Mask를 이용하여 HPbar 만들기  (0) 2016.03.08
스킬 쿨타임 UI 만들기  (2) 2016.03.07
UGUI  (2) 2016.03.04
2 Comments
  • chopsticks 2016.10.28 03:36 소스코드 수정 후가 쿨타임이 여러개 중첩되진 않긴 한데 버튼 On Click에 연결되어 있는 함수들은 계속 실행되네요.. 어떻게 하면 좋을까여...? 버튼에 스킬함수들을 달아놔서 스킬이 쿨타임인데도 계속 써집니다..
  • MS.S 2017.02.07 16:45 신고 스킬 쿨타임을 bool 타입 변수로 상태를 체크해서 중첩되지 않게 한 것 처럼 OnClick에 연결되어 있는 함수들도 현재 스킬이 쿨타임중인지를 판별하여 해결하시면 될 것 같습니다.
댓글쓰기 폼