유니티(unity)
[unity/android]유니티 안드로이드에서 백그라운드로 타이머 구현 방법
개발자 고포고
2021. 12. 6. 23:36
반응형
[unity/android]유니티 안드로이드에서 백그라운드로 타이머 구현 방법
기본적으로 유니티에서는 안드로이드 환경에서 background 구현이 불가능하다. 불가능하진 않지만 Java라이브러리환경에서 android service를 활용해야하기때문에 너무나 번거로워서 조금 우회적인 방법을 사용하였다.
void Start()
{
InvokeRepeating("Test", 0.0f, 0.01f);
}
void Test()
{
cnt = cnt + 0.01f;
text.text = cnt.ToString("0.00");
}
기본 타이머 구현이다.
private void OnApplicationPause(bool pause)
{
if (!isFirst)
{
if (pause)
{
ToForegroundTime = DateTime.Now;
WriteLog("up: "+DataConverter.DateTimeToString(ToForegroundTime));
}
else
{
TobackgroundTime = DateTime.Now;
WriteLog("background: "+DataConverter.DateTimeToString(TobackgroundTime));
isUpdate = true;
}
}
else
{
isFirst = false;
WriteLog("first");
}
}
void Test()
{
if (isUpdate)
{
var sec = TobackgroundTime.Subtract(ToForegroundTime).TotalSeconds;
WriteLog("total sec: " + sec);
cnt += (float)sec;
text.text = cnt.ToString("0.00");
isUpdate = false;
}
else
{
cnt = cnt + 0.01f;
text.text = cnt.ToString("0.00");
}
}
OnApplicationPause 함수는 앱이 백그라운드로 전환 시 true 포그라운드로 전환 시 false를 반환하다.
다만 최초에 1회 false를 반환하기 때문에 최초 접속시에 체크를 해줘었다.
1. 백그라운드 진입 시 시간을 기록
2. 포그라운드 진입 시 시간을 기록
3. 그 차이를 구하여, 기존 타이머에 더해준다.
그렇게 우회적으로 백그라운드에서도 타이머가 진행가능하도록 처리하였다.
#timer #invoke #invokeRepeating #dispathertimer #c# #unity #background #foreground #java #타이머 #백그라운드 진입 #백그라운드에서 #타이머 #안드로이드 #android
반응형