유니티에서 쿨타임(쿨다운?) 기능을 사용하려고 한다.
RPG 게임에서 어떤 스킬을 사용했을 때,
사용 후 일정 시간동안 못 쓰게 되고 일정 시간이 지난 후 다시 사용할 수 있게 된다.
[사용 방법]
하나 예제를 만들어보자..
Canvas - UI - Button으로 버튼을 생성한다.
Button을 클릭해보면, Image와 Button 컴포넌트가 기본적으로 만들어진것을 볼 수 있다.
- Image 컴포넌트
Source Image를 통해 버튼의 이미지 모양을 원하는대로 바꿀 수 있다.
(Sprite 타입 이미지만 사용 가능)
버튼 이미지를 설정 후 Image Type을 Filled로 바꾸면 하위 항목이 다음과 같이 나온다.
![](https://t1.daumcdn.net/cfile/tistory/99F5853F5AAE09D715)
여기서 Fill Amount 슬라이더가 생기는데,
이 슬라이더 값을 0에서 1로 조절하면 버튼 이미지가 이에 따라 채워지는 영역이 변한다.
이 값을 업데이트 해주면 쿨타임 버튼이 되는 것이다.
참고로,
Fill Method를 통해 쿨타임의 형태를 바꿀 수 있고,
Fill Origin을 통해 쿨타임의 시작점(원점)을 바꿀 수 있다.
<Fill Method>
- Horizontal : 수평으로 쿨타임 적용.
- Vertical : 수직으로 쿨타임 적용.
- Radial 90 : 90도로 쿨타임 적용.
- Radial 180 : 180도로 쿨타임 적용.
- Radial 360 : 360도로 쿨타임 적용.
Fill Origin은 어디서 쿨타임이 시작될 것인지 지정하는 것인데, 위 5가지에 따라 달라진다.
Fill Amount 슬라이더 값을 움직여보면 버튼이 사라지는 것을 볼 수 있다.
![](https://t1.daumcdn.net/cfile/tistory/995726345AAE0C7610)
이것은 배경은 자동으로 만들어지지 않기 떄문에 사라지는 것처럼 보인다.
즉, 버튼 뒤에 동일한 위치에 배경을 깔아줘야한다.
그리고, Color를 원하는 색상으로 설정해보자. 다음과 같이 된다.
![](https://t1.daumcdn.net/cfile/tistory/992F49345AAE0C7527)
![](https://t1.daumcdn.net/cfile/tistory/998CC6395AAE0CF71C)
참고로, 빨간 배경을 버튼 위에 놓아야한다.
왜냐하면 Canvas 안에서는 순서대로 겹쳐서 쌓이는 계층구조이므로
빨간 배경이 버튼보다 아래 위치하면 빨간색이 보여지게 된다.
이제 게임 도중에 값을 변화하도록 스크립트를 작성해보자.
Create > C# Script로 스크립트를 하나 생성한다. 이름은 CoolTimeScript.cs로 생성했다.
[CoolTimeScript.cs]
public class CoolTimeScript : MonoBehaviour {
public Image image;
public Button button;
public float coolTime = 10.0f;
public bool isClicked = false;
float leftTime = 10.0f;
float speed = 5.0f;
// Update is called once per frame
void Update () {
if(isClicked)
if (leftTime > 0)
{
leftTime -= Time.deltaTime * speed;
if(leftTime < 0) {
leftTime = 0;
if(button)
button.enabled = true;
isClicked = true;
}
float ratio = 1.0f - (leftTime / coolTime);
if(image)
image.fillAmount = ratio;
}
}
public void StartCoolTime() {
leftTime = coolTime;
isClicked = true;
if(button)
button.enabled = false; // 버튼 기능을 해지함.
}
}
다음과 같이 작성한다.
유니티 On Click에서 버튼을 눌렀을 때 StartCoolTime()을 실행시키도록 하고,
![](https://t1.daumcdn.net/cfile/tistory/9939E7335AAE279C24)
Image와 Button은 버튼에 동일한 위치에 존재하는 컴포넌트를 집어넣어 주면 된다.
speed를 통해 쿨타임 시간을 조절할 수 있다.
![](https://t1.daumcdn.net/cfile/tistory/99A0A54A5AAE28C236)