[Unity] 왜 Update가 한 번만 실행됐을까?

shin0112·2025년 11월 4일

Unity

목록 보기
8/13

⚙️ Unity에서 Update가 한 번만 실행되는 이유

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


1️⃣ 예상한 흐름

전체 흐름은 아래와 같다.

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

  2. StageManager.Init()으로 초기화

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

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

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

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


2️⃣ 문제 발생: Update가 1번만 호출됨

스테이지 진입 후 첫 프레임까진 잘 돌아가지만,
이후 Update()가 전혀 호출되지 않았다.

처음엔 이런 것들을 의심했다.

  • Awake() / Start() 호출 순서 꼬임
  • 씬 전환 타이밍 문제
  • DontDestroyOnLoad() 객체 중복

하지만 아무리 수정해도 해결되지 않았다.
결국 원인은 코드 내부의 로그 레벨이었다.


3️⃣ 원인: Debug.LogError()의 부작용

문제의 핵심은 바로 이 한 줄이었다.

Debug.LogError("StageController를 찾을 수 없습니다.");

처음엔 단순히 디버깅용 빨간 로그일 뿐이라 생각했다.
하지만 Unity의 Debug.LogError()는 단순 로그 출력이 아니라
현재 프레임의 실행을 중단시키는 신호로 동작한다.

즉, 실제로는 다음과 같은 일이 벌어진다.

  1. Update() 중 Debug.LogError() 호출
  2. 해당 스크립트의 나머지 코드가 즉시 중단됨
  3. Unity가 내부적으로 Update 루프를 스킵
    4 .일정 조건(에러 누적 등)에서는 MonoBehaviour가 임시로 비활성화

그 결과 Update()가 더 이상 호출되지 않게 된다.
즉, 에러 로그 한 줄이 게임 루프 전체를 멈춰버린다.

4️⃣ 해결 방법

단순한 상태 출력이나 무해한 상황이라면
Debug.LogError() 대신 Debug.LogWarning()을 사용해야 한다.

이렇게 바꾸는 것만으로 Update()는 정상적으로 다시 작동했다.

✍️ 마치며

이번 문제로 배운 점은 명확하다.

❗ “LogError는 단순한 로그가 아니라, 실행을 멈추는 신호다.”

무심코 찍은 한 줄의 로그가
게임 루프 전체를 멈출 수도 있다는 걸 알았다.

그래서 앞으로는 로그의 의도와 영향 범위를 구분해서 쓰기로 했다.

0개의 댓글