2024-08-07
DirectorController.cs
private void OnEnable()
{
// OnCutSceneEvent 에 PlayCutScene 메서드 등록
GameManager.Instance.TaxManager.OnCutSceneEvent += PlayCutScene;
}
private void OnDisable()
{
// 씬 이동 시, OnDisable 호출
GameManager.Instance.TaxManager.OnCutSceneEvent -= PlayCutScene;
}
TaxManager.cs
public void CheckTaxPayment()
{
if(ClockSystem.Dday - lastPayment <= TaxDue) // 세금 냄
{
Debug.Log("세금을 낸 것으로 확인");
}
else
{
// 컷씬 재생
Debug.Log("세금 안냈음");
OnCutSceneEvent?.Invoke();
}
}
Edit - Project Settings - Script Execution Order 를 통해
스크립트 실행 순서를 바꿔주거나
싱글톤 구조를 바꿔주는 시도도 해봤지만, 모두 실패했다.
GameManager.Instance.TaxManager.OnCutSceneEvent 에는
PlayCutScene 메서드가 잘 등록됐지만
TaxManager - CheckTaxPayment 메서드의 OnCutSceneEvent 에 연결된 메서드는 null 이었다.
Unity와 비쥬얼 스튜디오를 연결해준다.
필요한 부분에 종단점을 찍고, 에디터에서 플레이하며
해당 종단점이 찍힌 코드가 실행될 때까지 진행한다.
F11 (한 단계씩 코드 실행) 을 통해, 해당 코드가 실행되기 전과 후에
변수에 어떤 값이 들어갔는지, 적절한 값이 들어갔는지 확인해본다.
싱글톤, DontDestroyOnLoad 특성을 가진 GameManager 안에
TaxManager 를 넣어뒀는데,
Director 오브젝트는 Village Scene 에서만 존재하여 문제가 발생하는 것 같았다.
코드와 이론 상으로는 적절한 순서와 방법이었다고 생각하였지만,
기존 방법 그대로는 해결하지 못하였다.
GameManager 오브젝트 안에 Director 오브젝트를 넣어 씬이 이동할 때도 함께 이동하도록 하여서 해결할 수 있었다.
정확한 원인과 해결 방법은 아니지만,
문제 파악과 해결을 위한 시도를 통해 여러 디버그 방법을 시도해보고
코드 사이의 관계나 생명 주기 함수의 실행 순서도 다시 한번 생각해보게 되었다.