Contents
접기
728x90
문제 상황
WaveSpawner와 ZoneSpawner가 동시에 Update를 돌리다 보니 맵 클리어가 여러 번 호출되는 현상이 발생했다.
증상
- 웨이브를 클리어하면 MapManager.GoToNextMap()이 여러 번 실행됨
- ZoneSpawner가 중간에 활성화되어버림
- 맵이 두 번 비활성화되고 다음 맵으로 넘어감
- 적이 스폰되기도 전에 클리어 처리됨
원인분석
문제를 추적해본 결과
- Update()에서 aliveChecker.AreAllDead()를 매 프레임 체크 중
- 웨이브나 존을 클리어해도 Update()가 계속 돌고 있었음
- 따라서 OnAllWavesCleared() 혹은 OnAllZonesCleared()가 여러 번 연속 실행
이 때문에 로그에 이렇게 찍혔다.

👆 중복 비활성화 및 중복 클리어
로그 해석
- Zone 1이 활성화됨
- Zone 1 적이 스폰됨 (1마리)
- [디버그] activeSelf=True (즉, 오브젝트는 활성화됨)
- 바로 다음 프레임 Update()에서 AreAllDead=False (정상)
✅ 여기까지는 예상한 흐름이었다
근데 바로 1초 뒤에
[17:46:59] 모든 맵 클리어!
이게 떴다.
로그를 보면 추가적인 "모든 Zone 클리어!" 로그가 아예 없고 바로 "모든 맵 클리어!"가 뜬다.
이건 Zone이 아닌 다른 코드에서 GoToNextMap()을 호출했다는 뜻이다.
최종 원인 분석
맵은 wave맵과 zone맵 2개로 나누어져 있는데 이전에 클리어한 wave맵의 WaveSpawner 코드가 같이 켜져있어서 OnAllWavesCleared()에서 GoToNextMap() 호출하는 것 같았다.
실제 로그에도 웨이브 관련 메시지가 바로 직전에 있었다.
- Zone 맵을 하고 있다고 생각했는데
- WaveSpawner도 활성화된 상태라 같이 체크하고 있었다
해결 방법
핵심은 단순했다
✅ Update()를 켜고 끄자.
- 웨이브나 존 시작 시 this.enabled = true
- 클리어 시 this.enabled = false 로 Update 정지
이렇게 하면 클리어 처리 후 중복 호출이 발생하지 않는다
적용 코드
아래는 WaveSpawner 예시이다.
public void StartWave()
{
triggered = true;
this.enabled = true; // Update 켜기
SpawnWave(currentWaveIndex);
}
private void OnAllWavesCleared()
{
Debug.Log("웨이브 클리어!");
this.enabled = false; // Update 끄기
FindObjectOfType<MapManager>().GoToNextMap();
}
그리고 ZoneSpawner도 동일하게 처리했다.
public void StartZones()
{
if (zones == null || zones.Length == 0)
{
Debug.LogWarning("[ZoneSpawner] Zones가 비어있음.");
return;
}
triggered = true;
this.enabled = true; // Update 켜기
StartNextZone();
}
private void OnAllZonesCleared()
{
Debug.Log("모든 Zone 클리어!");
this.enabled = false; // Update 끄기
FindObjectOfType<MapManager>().GoToNextMap();
}
주의할 점
- this.enabled를 꺼두면 Update가 아예 멈추니, 반드시 시작할 때 켜줘야 함
- triggered 같은 bool 플래그만으로는 안전하지 않을 수 있음
- 맵 전환 로직과 충돌하지 않게 순서를 맞춰야 함
결과
이렇게 적용후에는
✅ 웨이브나 존 클리어 시 단 1회만 맵 전환이 호출
✅ 적이 모두 죽은 시점에만 정확히 넘어감
✅ ZoneSpawner와 WaveSpawner가 서로 간섭하지 않음
마무리
Unity에서 Update()는 유용하지만, 동시에 실수하기 쉽고 디버깅이 어려운 부분
이 사례처럼, 조건과 Update 활성화 상태를 분리 관리하는 습관이 중요하다는 걸 다시 한 번 느꼈다.
궁금한 점 있으면 댓글 주세요 😊
728x90
'GameDevelop > Unity팀프로젝트' 카테고리의 다른 글
Unity 트러블슈팅: 두번째 맵에서 포탈이 작동하지 않는오류 & 플레이어 처음 두번 스폰되는 문제 (1) | 2025.07.09 |
---|---|
FadeIn FadeOut (0) | 2025.07.08 |
유니티 로그라이크 맵 관리 시스템 제작 (0) | 2025.07.04 |
Unity 2D 게임 개발일지 – 카메라 전환 & 맵 이동 + 트러블슈팅 (1) | 2025.07.03 |
Unity 2D 게임 개발 일지 – Cinemachine 카메라 세팅 & 맵 경계 제한 (0) | 2025.07.02 |