david's daily developer note

[Unity] 스킬 쿨타임 보여주기 본문

[Develop] Unity

[Unity] 스킬 쿨타임 보여주기

mouse-david 2022. 6. 19. 23:56
728x90

게임에서 스킬을 사용했을때나, 건설, 생산의 쿨타임을 보여줄 때, 어떻게 해야할까?

위와 같은 스킬의 이미지와 쿨타임을 표시할 텍스트가 있다고 하자.
유니티 Hierachy는 다음과 같다.

Timer 객체는 남은 시간을 표시할 텍스트 객체이다.
Disable은 초록색 프레임 이미지와 같은 이미지로 좀 더 검은색으로 표현한다.
Disable의 이미지 속성은 다음과 같다. Top방향에서 360도, 반시계 방향으로 채워지는 속성이다.

Fill Amount 속성 좌측부터 0.7, 0.4, 0.1

그럼 아래 예시를 보면서, 쿨타임 텍스트 표시를 구현하는 방법을 살펴보자.

private float cooltime = 10f;		//현재 남은 시간
private float cooltime_max = 10f;	//쿨타임
public Text timer;	//남은 시간을 표시할 텍스트
public Image disable;	//남은 시간을 표시할 이미지

IEnumerator CoolTimeFunc()
{
    while (cooltime > 0.0f)
    {
        cooltime -= Time.deltaTime;

        //쿨타임 이미지
        disable.fillAmount = cooltime / cooltime_max;

        //쿨타임 텍스트
        string t = TimeSpan.FromSeconds(cooltime).ToString("s\\:ff");
        string[] tokens = t.Split(':');
        cooltime_text.text = string.Format("{0}:{1}", tokens[0], tokens[1]);

        yield return new WaitForFixedUpdate();
    }
}

1. 현재 남은 시간을 cooltime 변수, 전체 쿨타임을 cooltime_max에 담아둔다. 예시에서는 10초의 쿨타임을 가정한다. 
2. CoolTimeFunc 코루틴 함수가 실행되고 현재 쿨타임이 남아있다면, 1프레임 시간만큼을 감산한다.
3. 남은 시간만큼 쿨타임 이미지의 fillAmount 값을 수정한다.
4. 남은 쿨타임을 분과 초의 표현으로 바꾸고 (00:00:12.340000), ":"로 분리하여, 분과 초를 표현한다.
 - TimeSpan Ref : https://docs.microsoft.com/ko-kr/dotnet/standard/base-types/custom-timespan-format-strings
5. cooltime이 0보다 작거나 같다면, 코루틴이 종료된다.

잘돌아간다 ㅎㅎ 60초/5초/60초!

 

728x90