게임오버 애니메이션 재생하기, End Panel 띄우기
public void GameOver()
{
isPlay = false;
anim.SetBool("isDie", true);
Time.timeScale = 0.0f;
currentScoreTxt.text = time.ToString("N2");
// Setting Best Score
if (PlayerPrefs.HasKey(key))
{
float best = PlayerPrefs.GetFloat(key);
if (best < time)
{
PlayerPrefs.SetFloat(key, time);
bestScoreTxt.text = time.ToString("N2");
}
else
{
bestScoreTxt.text = best.ToString("N2");
}
}
else
{
PlayerPrefs.SetFloat(key, time);
bestScoreTxt.text = time.ToString("N2");
}
Invoke("EndPanel", 1f);
}
void EndPanel()
{
endPanel.SetActive(true);
}
강의에서는 그냥 애니메이션 실행하는 0.5초를 기다렸다가 멈추기 때문에 TimeStop() 함수를 따로 만들고 Invoke로 0.5초 후에 실행했다. 근데 게임오버되는 순간 떨어지는 상자들은 전부 멈춘 상태에서 풍선만 터지는게 더 예쁠 것같아서 열심히 찾아봤다.
원하는 루틴은
게임 시간 정지 -> 애니메이션 실행 -> Balloon 오브젝트 삭제 -> EndPanel 활성화
그래서 애니메이션 update mode를 Unscaled Time으로 설정했다. 이렇게 하면 timeScale이랑 무관하게 실행됨!
그 다음에 판넬 활성화 함수 만들고 Invoke()로 시간 좀 주고 실행시키려고 했는데
Invoke가 timeScale에 따라서 움직이기 때문에 뒤늦게 활성화할 수 없었다..
결국 코루틴까지 찾아봤고 너무 맘에 들게 해결 완료
'공부방 > C# 에러발생 로그' 카테고리의 다른 글
| Animator 연결이 안 돼요 (0) | 2025.04.04 |
|---|---|
| UI Button 컴포넌트 OnClick() 내에서 함수 안 뜸 (0) | 2025.03.24 |
| NullReferenceException: Object reference not set to an instance of an object (0) | 2025.03.20 |
| Visual Studio 자동완성 안 됨 (0) | 2025.03.20 |
| Can't add script behaviour (0) | 2025.03.20 |