강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

Rio Song님의 프로필 이미지
Rio Song

작성한 질문수

절대강좌! 유니티 6 - TPS 게임으로 배우는 유니티 마스터클래스

BehaviourGraph - Stun 로직

Spider 사망 시 두 번 폭발관련

작성

·

59

·

수정됨

0

안녕하세요.

https://inf.run/JcuJM

위에 분과 같이 Spider 사망 시 바로 폭발, Wait for Seconds 후 폭발 이렇게 두 번 동작합니다.

Log를 찍어보면 총 2번이 호출되는 것이 확인되는데, 위 작성자 분 말처럼 Destroy Self 다음에 Wait for Seconds(대략 0.05s 이상)를 추가하면 1번만 폭발합니다.

  • 마지막 Wait for Seconds 제거 시 Dead1, Dead2 모두 2번씩 호출됨

image.png

 

  1. 총알과 Spider에 각각 콜라이더가 1개씩 있는 것은 확인했습니다.

  2. Spider의 Box Collider는 아래로 내리거나 제거해도 동일합니다.

  3. Wait for Seconds에 약 0.05s 이상을 추가하면 해결이 됩니다.

Destory 부분이 바로 진행되지 않고 실제 파괴되는 시간보다 로직이 도는 시간이 더 빠르다보니 한번 더 실행되는 것일까요?

스크립트, 콜라이더 등 강의를 돌려보고 비교해봐도 빠진 부분은 없었습니다.

답변 2

1

이재현님의 프로필 이미지
이재현
지식공유자

안녕하세요. Rio Song님,

이 부분은 한번 나왔던 질문이었습니다. 현재 강의 코드를 유니티 최신 버전으로 버전업해서 테스트 해보았습니다. 강의영상처럼 정상 동작하고 있습니다. 동일한 증상이 발생한다면 어떻게든 살펴볼텐데, 저도 답답하네요ㅠㅠ

 

Rio Song님 께서 마지막에 하신 말씀데로 Destroy가 바로 실행되는 것이 아니기 때문에 한번 더 들어 올 가능성도 있습니다. 만약 이 추론이 맞다면 BehaviorGraph에서 수정되어야 할 부분인것 같습니다.

추후 이런한 부분을 감안해서 수정본에 반영하도록 하겠습니다.

알려주셔서 감사합니다.

Rio Song님의 프로필 이미지
Rio Song
질문자

현재 윈도우 PC에서 수강했는데, Mac 환경으로 옮겨서 한번 확인해보겠습니다.

Rio Song님의 프로필 이미지
Rio Song
질문자

Mac에서 동일하게 문제가 발생하는 것을 확인했습니다.

끝까지 수강한 후 다시 돌려보면서 잘못 설정한 것이 있는지 다시 확인해보겠습니다.

0

안녕하세요, 인프런 AI 인턴입니다. Rio Song님.

Spider 사망 시 두 번 폭발하는 현상에 대해 질문 주셨네요. 이 문제는 게임 오브젝트가 Destroy 되기 전에 이벤트가 두 번 발생하여, 여러 번 폭발 효과가 나타나는 상황으로 보입니다. 이를 해결하기 위해 고려할 수 있는 몇 가지 방법을 안내드리겠습니다.

문제의 원인 및 해결 방법

  1. Destroy 호출 시점 문제:

    • GameObject.Destroy를 호출해도 오브젝트는 즉시 사라지지 않고, 해당 프레임이 끝날 때까지 존재하게 됩니다. 이 때문에 그 사이에 로직이 두 번 실행될 가능성이 있습니다. Destroy 함수 호출 후 추가적인 이벤트가 발생하지 않도록 상태 플래그를 설정하거나 로직의 흐름을 조정할 필요가 있습니다.
  2. 상태 플래그 사용:

    • 폭발 관련 로직이 여러 번 실행되지 않도록 하기 위해 상태 플래그를 사용할 수 있습니다. 예를 들어, 오브젝트가 이미 사망 상태임을 나타내는 bool 변수를 추가하고, 로직 처음에 이 변수가 true인지 확인한 뒤, true라면 로직을 실행하지 않도록 조건문을 설정해 보세요.
    • 아래와 같은 예제를 참고하시기 바랍니다:
      
      if (isDead)
      {
       return;
      }
      isDead = true;
      

  3. 간격 추가:

    • 이미 문제가 해결된 방법 중 하나로, Wait for Seconds 구문을 추가하여 시간 간격을 둠으로써 문제를 해결할 수 있습니다. 이 방법은 Destroy 호출 후 일정 간격을 기대하여 문제를 줄여주는 효과가 있습니다.
  4. 오브젝트 상태 확인:

    • OnDisable 또는 OnDestroy 메서드에서 추가 로직 실행을 방지하도록 설정하는 것도 고려해 볼 수 있습니다. 이 메서드 내에서 추가적인 이벤트를 확실히 종료하도록 설정할 수 있습니다.

관련 질문 및 해결책 참조

유사한 문제에 대한 토론과 해결 방법을 참고하기 위해 관련 URL과 자료를 보는 것도 도움이 됩니다:
- 유니티에서 이벤트 및 Destroy 관련 문제 해결

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.

현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

Rio Song님의 프로필 이미지
Rio Song

작성한 질문수

질문하기