오늘은 Update()가 한 번만 호출되는 현상을 겪었다.
처음엔 Awake()나 Start()의 호출 순서 문제라고 생각했지만,
원인은 완전히 다른 곳에 있었다.
전체 흐름은 아래와 같다.

GameManager.UpdateSceneToStage() → StageManager를 불러온다.

StageManager.Init()으로 초기화

SelectStage(1) 호출 → 스테이지 진입

상태 전환(ChangeGameState()) → OnGameStateChanged 이벤트 발생

GameState.Start 상태에서 StartStage() 실행

여기까진 완벽하게 의도대로 작동했다.

스테이지 진입 후 첫 프레임까진 잘 돌아가지만,
이후 Update()가 전혀 호출되지 않았다.
처음엔 이런 것들을 의심했다.
Awake() / Start() 호출 순서 꼬임 DontDestroyOnLoad() 객체 중복 하지만 아무리 수정해도 해결되지 않았다.
결국 원인은 코드 내부의 로그 레벨이었다.
Debug.LogError()의 부작용문제의 핵심은 바로 이 한 줄이었다.

Debug.LogError("StageController를 찾을 수 없습니다.");
처음엔 단순히 디버깅용 빨간 로그일 뿐이라 생각했다.
하지만 Unity의 Debug.LogError()는 단순 로그 출력이 아니라
현재 프레임의 실행을 중단시키는 신호로 동작한다.
즉, 실제로는 다음과 같은 일이 벌어진다.
그 결과 Update()가 더 이상 호출되지 않게 된다.
즉, 에러 로그 한 줄이 게임 루프 전체를 멈춰버린다.
단순한 상태 출력이나 무해한 상황이라면
Debug.LogError() 대신 Debug.LogWarning()을 사용해야 한다.
이렇게 바꾸는 것만으로 Update()는 정상적으로 다시 작동했다.
이번 문제로 배운 점은 명확하다.
❗ “
LogError는 단순한 로그가 아니라, 실행을 멈추는 신호다.”
무심코 찍은 한 줄의 로그가
게임 루프 전체를 멈출 수도 있다는 걸 알았다.
그래서 앞으로는 로그의 의도와 영향 범위를 구분해서 쓰기로 했다.