오브젝트가 파괴되었는데 참조하려고한다.. 오류

2024. 7. 3. 16:14·Unity/2D

문제원인

게임이 오버되고 재시작하여 플레이어 오브젝트를 파괴하고 재생성을 했다.

이후 장애물과 부딪혔더니 플레이어의 스크립트에 충돌과 관련된 기능을 담당하는 코루틴 부분에서 오류가 발생했다.

 

오류코드

 

오브젝트가 파괴되면 원래 실행중인 코루틴은 자동으로 종료가 된다.

또한 PlayerHitCorutine은 실행될때마다 새롭게 할당을 하기 때문에 이해가 가지않았다.

오브젝트가 파괴되었어도 새롭게 생성후 다시 코루틴 변수 할당을 해주는데 해당 오류가 뜬 원인이 무엇일까.

에러가 발생한 PlayerCoroutine 할당 부분

 

 

해결방안

해당 문제의 원인을 마이크로소프트의 프로그래밍 가이드에서 알수 있었다.

https://learn.microsoft.com/ko-kr/dotnet/csharp/programming-guide/events/how-to-subscribe-to-and-unsubscribe-from-events

이벤트를 구독하고 있는 개체를 삭제하기 전에 이번트 구독을 취소하는 것을 명시하고있다.

즉, 플레이어 오브젝트를 제거하기전에, 해당 오브젝트에 연결된 이벤트들의 구독을 취소하라는 의미이다.

 

이벤트 구독을 취소하기전까지 멀티캐스트 대리자가 해당 이벤트를 참조하고있는데, 이것이 참조되어있다면, 가비지가

수집되기 전까지 구독자 개체가 삭제되지 않는것이다.

따라서, 가비지 수집전에 오브젝트가 제거 되었다면, 해당 오브젝트에 구독자 개체가 삭제되지않을 가능성이 존재한다.

 

내 경우에는 오브젝트 충돌시 PlayerHitEvent을 실행하도록 코드를 구성하였다.

 

playerController.cs

또한, 플레이어 컨트롤러 스크립트에서 PlayerHitEvent에 PlayerHit 함수를 구독시켜,

PlayerHitEvent 호출시 PalyerHitCorutine이 실행되도록 했었는데, 

오브젝트 파괴후에 구독 연결이 풀리지않았던 것이다.

 

오브젝트 파괴시 해당 이벤트 구독을 취소하는 것으로 문제를 해결했다.

 

 

3줄 요약

1. 플레이어 파괴후 재생성 후에 장애물과 부딪혔더니, 플레이어 오브젝트가 파괴되어 코루틴을 실행할 수 없다는

오류가 발생함.

2. 마이크로소프트 메뉴얼을 찾아본 결과, 오브젝트가 파괴되어도 이벤트 구독이 해제되지 않을 수 있다는 사실을

알게됨.

3. 오브젝트 파괴시 이벤트 구독을 해제하도록 코드를 수정하여 문제를 해결함.

 

'Unity > 2D' 카테고리의 다른 글

유니티 Input system 특정 입력 무시하는 방법  (0) 2024.12.06
유니티 2D 콜라이더 합치기  (0) 2024.08.17
유니티 2D RuleTile 규칙 유의사항  (0) 2024.08.15
파괴하는 도중에 오브젝트 생성 오류  (0) 2024.07.03
Unity Photon Pun2 연결하는 방법  (0) 2024.01.15
'Unity/2D' 카테고리의 다른 글
  • 유니티 2D 콜라이더 합치기
  • 유니티 2D RuleTile 규칙 유의사항
  • 파괴하는 도중에 오브젝트 생성 오류
  • Unity Photon Pun2 연결하는 방법
하길
하길
게임 개발을 위한 나의 모든 지식의 총 집합체
  • 하길
    Until Dawn
    하길
  • 전체
    오늘
    어제
  • 글쓰기 관리
    • 분류 전체보기 (143)
      • Unreal Engine 5 (0)
      • Unity (31)
        • 3D (5)
        • 2D (7)
      • C++ (13)
      • C# (11)
      • 알고리즘 (35)
      • TIL (22)
      • 기타 (1)
      • 대장간 (12)
      • 메모 (2)
      • 게임리뷰 (0)
      • 일상 (0)
        • 챌린지 (0)
      • Article (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.1
하길
오브젝트가 파괴되었는데 참조하려고한다.. 오류
상단으로

티스토리툴바