[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개의 댓글