timeScale이 0이어도 애니메이션...더보기
우리 게임의 UI창은 플레이 중 켜지면 timeScale = 0이 되면서 게임이 멈추게 된다. 플레이어의 이동을 막기 위함인데 오늘 작업은 UI창이 활성화 되었을 때 위에서 아래로 내려오는 듯한 애니메이션을 주는 거였고, 이게 문제가 되었다. timeScale이 0이 되니까 애니메이션도 멈춰버리는 것이었다. 그래서 코드로 제어해야 하나.. UI창 많은데 어디에 어느 코드를 넣어야 할까 고민하다가 찾게된 이 기능! 소개하겠다.

| 옵션 | 설명 |
|---|---|
| Normal | Time.timeScale 영향을 받음. 일시정지(timeScale = 0) 시 애니메이션도 멈춤. |
| Unscaled Time | 실제 실시간(시계) 기준으로 갱신. timeScale 무시. 일시정지 시에도 애니메이션 재생 가능. |
| Animate Physics | 물리 업데이트(FixedUpdate) 주기에 따라 애니메이션 갱신. |
내가 원하는 건 timeScale을 무시하는 거였기에 Unscaled Time을 사용하여 해결하였다.
이 코드를 사용하게 된 이유는 다음과 같다. 우리게임은 스테이지를 플레이 하다가 ESC키를 눌러 게임을 종료시킬 수 있다. 그런데 일시정지 창이나 게임오버 창이 활성화되었을 때도 ESC키를 누르면 창이 켜졌기 때문에 수정해야 했다.(물론 동시에 활성화 돼도 상관없는 게임도 있겠지만 우리게임의 방향성은 아니었다.) 그런데 일일이 '이 패널이 켜지면 esc를 막고,, 저 패널도 켜지면 esc를 막고..'하기엔 효율이 좋지 않을 것 같아 고민했는데 이 코드를 알게 되었다!
// 이미 UI가 떠 있으면 ESC 동작을 무시
public void OnEscape()
{
if (pauseUI.activeSelf || clearUI.activeSelf || gameoverUI.activeSelf)
return;
escapeUI.SetActive(true);
Time.timeScale = 0f;
}
gameObject.activeSelf는 자기 자신이 켜져 있는지(SetActive(true) 상태인지) 알려주는 프로퍼티이다.내일은 프로젝트 제출 날이자 발표날! 일주일간 팀원들 모두 새벽과 주말까지 작업하면서 힘을 냈다. 다른 팀들은 어떨지 모르겠지만 난 나름 만족한다. 솔직히 디자인 부분은 어떻게 할 수 없지만 가장 중요한건 기능이니까 말이다. 아직 사운드랑 업적 기능이 미완료지만 뭐.. 오늘 완성되지 않을까? 오늘은 할 게 별로 없어서 TIL 쓸 일이 없을 줄 알았는데 웬걸 또 새로운 사실을 알게 되어서 쓸 말이 생겼다. 배움의 연속이군아...
내일은 아마 오전에 ppt 다듬고 발표회하고 특강 듣고 그 내용으로 TIL을 쓸 것 같다. 뭐야? 벌써 내일 하루 다 봤다.