플레이를 한번 진행한 후 해당 스테이지를 다시 시작하거나, 다른 스테이지를 진행할 때 종료 로직이 실행되지 않는 문제가 있어 수정했다.
게임 종료 로직을 DontDestroyOnLoad 객체인 GameManager가 관리하게 했는데, 처음에 이벤트를 연결했던 객체들이 Scene을 다시 로드하며 파괴되고 새로운 객체로 생성되며 종료 로직을 실행하지 않는 문제였다.
[ 기존 코드 ]
GameManager.cs
public class GameManager : SingletonBase<GameManager>
{
protected override void Awake()
{
base.Awake();
DontDestroyOnLoad(this);
}
private void OnEnable()
{
HumanManager.Instance.OnGameClear -= GameClear;
HumanManager.Instance.OnGameClear += GameClear;
StageManager.Instance.OnGameOver -= GameOver;
StageManager.Instance.OnGameOver += GameOver;
}
}
스테이지를 재시작하거나 새로운 스테이지로 넘어가면 이미 삭제된 HumanManager와 StageManager의 인스턴스를 참조한다. 새로 생성된 인스턴스를 참조하도록 수정이 필요하다.
일단 DontDestoryOnLoad 객체인 GameManager가 아닌 Scene 전환 시 파괴되는 GameController를 만들어 새로운 인스턴스를 참조하도록 수정하였다. 만약 로직상 반드시 GameManager에 들어가야하면 SceneManagement를 사용하거나 다른 방법을 고려해볼 예정이다.
[ 수정 코드 ]
GameController.cs
public class GameController : MonoBehaviour
{
private void OnEnable()
{
HumanManager.Instance.OnGameClear -= GameClear;
HumanManager.Instance.OnGameClear += GameClear;
StageManager.Instance.OnGameOver -= GameOver;
StageManager.Instance.OnGameOver += GameOver;
}
}'내일배움캠프 > TIL' 카테고리의 다른 글
| [내배캠][Unity6기][TIL] 애니메이션 단순화 (0) | 2024.12.18 |
|---|---|
| [내배캠][Unity6기][TIL] CSV 데이터 파싱 방법(Feat. UGS) (0) | 2024.12.17 |
| [내배캠][Unity6기][TIL] Scene Reload 버그 트러블슈팅 (0) | 2024.12.13 |
| [내배캠][Unity6기][TIL] Find 계열 함수 호출 빈도 줄이기 (0) | 2024.12.12 |
| [내배캠][Unity6기][TIL] NavMesh 트러블슈팅 (2) (0) | 2024.12.11 |