모바일에서 게임 플레이 중에 홈버튼으로 나가게 된다면 애니메이션이나 프레임은 어떻게 동작하는 것이 궁금하여 큐브가 회전하는 간단한 애니메이션을 만들어 테스트해봤다.
유니티 에디터에서 모바일에서 홈버튼이 눌린 상태를 만들기 위해서는 아래와 같은 세팅이 필요하다.
Run In Background 체크를 해제한다. 그러면 유니티 에디터 창이 비활성화 상태를 만들면 게임은 멈추게 된다.
그럼 이제 몇 가지 테스트를 해보자
1. 애니메이터 Update Mode : Normal / WaitForSecondsRealtime
void Start()
{
Debug.Log("Test 시작");
StartCoroutine(CorTest());
}
public IEnumerator CorTest()
{
yield return (CorWaitForRealSeconds());
}
private IEnumerator CorWaitForRealSeconds()
{
yield return new WaitForSecondsRealtime(5);
Debug.Log("Test2 WaitForSecondsRealtime 5seconds");
}
//애니메이션 이벤트 콜.
public void AnimEnd()
{
Debug.LogError("AnimEnd");
}
에디터가 시작하면 CorTest를 시작하면서 RealSeconds로 5초를 기다린 후 로그를 출력하고, AnimEnd는 애니메이션에서 6초에 이벤트 키를 넣었다.
정상적으로 아무 동작을 하지 않으면 차례대로 5초 뒤에 "Test 2 WaitForSeconds 5 seconds"을 출력하고 그다음에 1초 뒤에 곧이어 "AnimEnd"을 출력하게 될 것이다.
예상 : "Test 2 WaitForSeconds 5 seconds" -> 1초 뒤 "AnimEnd"
에디터가 활성화되어있지 않을 때는 애니메이션이 멈추는 것을 볼 수 있다. 5초쯤에 유니티를 클릭하면 바로 "Test 2 WaitForSecondsRealtime 5 seconds"을 출력하게 된다. 그리고 "AnimEnd"은 1초가 아닌 약 5초 뒤에 출력하게 되는 것을 볼 수 있다.
결과 : "Test 2 WaitForSeconds 5 seconds" -> 약 5초 뒤 "AnimEnd"
테스트 결론 : 비활성화되었을 때도 WaitForSecondsRealtime은 계속해서 흐르지만 애니메이션은 활성화 되었을때 다시 카운팅을 하는 것이다.
2. 애니메이터 Update Mode : Unscaled Time / WaitForSeconds
void Start()
{
Debug.Log("Test 시작");
StartCoroutine(CorTest());
}
public IEnumerator CorTest()
{
yield return StartCoroutine(CorWaitForSeconds());
//Debug.LogError("CorTest");
}
private IEnumerator CorWaitForSeconds()
{
yield return new WaitForSeconds(5);
Debug.Log("Test2 WaitForSeconds 5seconds");
}
//애니메이션 이벤트 콜.
public void AnimEnd()
{
Debug.LogError("AnimEnd");
}
애니메이션 이벤트 콜은 6초이기 때문에 WaitForSeconds 5 seconds 후 1초 뒤에 AnimEnd가 불려야 하지만
애니메이터는 Unscale Time이기 때문에 비활성화 상태에도 시간은 흐른다. 그렇기 때문에 "AnimEnd" 후 "WaitForSeconds 5 seconds"가 출력된다.
결론으로 짝을 매겨보자면.
Unscale Time과 WaitForSecondsRealtime과 짝꿍/ Normal과 WaitForSeconds이 짝이 될수 있겠다.
애니메이션이 종료 시점에 맞추어 코 루틴으로 제어한다면 애니메이터 업데이트 모드를 확인하고 그에 맞는 대기 코 루틴을 설정할 필요가 있다.
'삽질&복습(연습장)' 카테고리의 다른 글
ExtensionMethod 활용하기_테이블 데이터 (0) | 2019.05.30 |
---|---|
유니티_복습) 오브젝트 풀링하기 (1) | 2019.05.08 |
복습)C#,유니티 제네릭 (0) | 2019.05.04 |
삽질) 물리연산의 체크사항, 레이캐스트 (0) | 2019.05.02 |
복습) C# 델리게이트 (0) | 2019.01.29 |