참고
- 타임 슬라이더 만들기
아래와 같이 슬라이더를 0 ~ 1로 조절하면 00 : 00 : 00 ~ 24 : 00 : 00으로 조절되는 Time Slider를 만들어보자.
Canvas > 빈 오브젝트 아래에 Slider와 Text를 추가한다.
Slider의 이벤트를 위해서 EventSystem도 추가해둔다.
DateTime을 쓰기 위해 System을 선언하고, Slider, Text를 사용하기 위해 UnityEngine.UI를 선언한다.
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
24시간은 24시간 * 60분 * 60초 = 86400이므로 아래와 같이 define값을 정해둔다.
그리고 Slider와 Text를 public으로 선언한다.
const int MIN_TIME_VALUE = 0;
const int MAX_TIME_VALUE = 86400; // 24 * 60 * 60
public Slider timer;
public Text timeText;
Slider가 변경될 때 이벤트가 발생하기 위해서는 onValueChanged에 AddListener로 함수를 추가해야 한다.
그리고 초깃값으로 현재 시간을 value에 설정하도록 하자.
Slider의 value는 0 ~ 1 사이이므로, 현재의 시간이 86400에서 어느 정도 차지하는지 구한 후,
0 ~ 1 사이의 값으로 변환하였다.
void Start()
{
timer.onValueChanged.AddListener(delegate { valueChanged(timer, timeText); });
DateTime dt = DateTime.Now;
int HH = Int32.Parse(dt.ToString("HH"));
int mm = Int32.Parse(dt.ToString("mm"));
int ss = Int32.Parse(dt.ToString("ss"));
timer.value = (float)(HH * 3600 + mm * 60 + ss) / MAX_TIME_VALUE;
}
valueChanged는 slider와 text를 입력받아 변환한다.
slider가 0 ~ 1 사이의 값을 가지기 때문에 시간의 value 0 ~ 86400이 대응되도록 하였다.
그리고 value를 적절히 나누기, 나머지 연산을 이용해 시/분/초로 parsing 한다.
10이하의 숫자들은 앞에 0이 붙도록 startZero 함수를 이용해 변경한다.
public string startZero(int num)
{
return (num < 10) ? "0" + num : "" + num;
}
public void valueChanged(Slider slider, Text text)
{
int diff = MAX_TIME_VALUE - MIN_TIME_VALUE;
int value = MIN_TIME_VALUE + (int)(diff * slider.value); // 0 ~ 1의 값
string h, m, s;
int hh = value / 3600;
int mm = (value % 3600) / 60;
int ss = (value % 60);
h = startZero(hh);
m = startZero(mm);
s = startZero(ss);
text.text = "Time" + " " + h + " : " + m + " : " + s;
}
슬라이더를 움직이면 시간이 변하는 것을 알 수 있다.
최종 코드는 아래와 같다.
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class TimeManager : MonoBehaviour
{
const int MIN_TIME_VALUE = 0;
const int MAX_TIME_VALUE = 86400; // 24 * 60 * 60
public Slider timer;
public Text timeText;
public string startZero(int num)
{
return (num < 10) ? "0" + num : "" + num;
}
public void valueChanged(Slider slider, Text text)
{
int diff = MAX_TIME_VALUE - MIN_TIME_VALUE;
int value = MIN_TIME_VALUE + (int)(diff * slider.value); // 0 ~ 1의 값
string h, m, s;
int hh = value / 3600;
int mm = (value % 3600) / 60;
int ss = (value % 60);
h = startZero(hh);
m = startZero(mm);
s = startZero(ss);
text.text = "Time" + " " + h + " : " + m + " : " + s;
}
void Start()
{
timer.onValueChanged.AddListener(delegate { valueChanged(timer, timeText); });
DateTime dt = DateTime.Now;
int HH = Int32.Parse(dt.ToString("HH"));
int mm = Int32.Parse(dt.ToString("mm"));
int ss = Int32.Parse(dt.ToString("ss"));
timer.value = (float)(HH * 3600 + mm * 60 + ss) / MAX_TIME_VALUE;
}
}
Unity Plus:
Unity Pro:
Unity 프리미엄 학습:
'개발 > Unity' 카테고리의 다른 글
유니티 - 슬라이더로 안개 조절하기 (Unity Fog Slider) (1) | 2022.03.27 |
---|---|
유니티 - Light Rotate로 간단히 낮과 밤 구현하기 (0) | 2022.03.24 |
유니티 - 자식 오브젝트를 원형으로 배치하기 (Circular Arrangement) (0) | 2022.03.23 |
유니티 Color Picker로 오브젝트 색깔 변경하기 (0) | 2022.03.20 |
유니티 색상 변경 에디터 만들기 (Circle Color Picker) (0) | 2022.03.20 |
댓글