티스토리 뷰

반응형

[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 

 

 

반응형
댓글
반응형