GameDevelop/Unity팀프로젝트

Unity 트러블슈팅: 두번째 맵에서 포탈이 작동하지 않는오류 & 플레이어 처음 두번 스폰되는 문제

도도돋치 2025. 7. 9. 20:51
Contents 접기
728x90

Problem — 어떤 문제가 있었나?

  • 맵에서 모든 적 처치 후 포탈이 활성화되어야 하는데, 일부 맵에서는 포탈이 작동하지 않고 F 키 입력도 무시되는 현상이 발생했다.
  • WaveSpawner에서는 잘 작동했지만, 2번째 맵인 ZoneSpawner에서는 포탈이 비활성 상태로 유지됨.

 

1. 두번째 맵에서 포탈이 작동하지 않는오류

Cause — 원인

  • 모든 맵에 PortalTrigger가 존재했지만, FindObjectOfType<PortalTrigger>() 방식으로 포탈을 찾다 보니 이전 맵의 포탈 오브젝트가 활성화되어 작동하는 문제가 발생했다.
  • 결과적으로 현재 맵의 포탈이 아닌 다른 포탈을 참조하고 있었기 때문에 F 키 입력을 받아도 아무 일도 일어나지 않았다.

 

Try — 어떻게 해결했나?

✅ 해결 핵심:
MapComponent에서 포탈을 각 맵별로 직접 관리하도록 변경했다.

 

 수정 내용:

1. MapComponent에 포탈 필드 추가

public PortalTrigger portal;

 

2. 맵이 시작될 때 포탈 초기화

if (portal != null)
    portal.ResetPortal();

 

3. 웨이브 또는 존 클리어 시 해당 맵의 포탈만 활성화

if (portal != null)
    portal.EnablePortal();

 

4. MapManager의 ActivateMap에서 포탈은 건드리지 않고, MapComponent에 위임함

 

 

Result — 결과

  • 각 맵의 포탈이 독립적으로 관리되어 이전 맵의 포탈이 활성화되는 문제 해결
  • 적을 모두 처치한 뒤에만 F 키 입력이 정상 작동
  • 불필요한 FindObjectOfType 호출 제거로 성능도 향상

 

Lesson Learned — 얻은 교훈

  • 맵 단위로 오브젝트를 개별 관리하는 구조가 유지 보수와 버그 방지 측면에서 더 안정적이다.

 

2. 플레이어 처음 두번 스폰되는 문제

if (_playerInstance != null && map.playerSpawnPoint != null && _currentIndex != 0)
            _playerInstance.transform.position = map.playerSpawnPoint.position;

 

_currentIndex != 0 조건을 추가하여 map이 첫번째일때는 위치를 변경하지 않도록 하였다.

728x90