작성
·
59
·
수정됨
0
안녕하세요.
위에 분과 같이 Spider 사망 시 바로 폭발, Wait for Seconds 후 폭발 이렇게 두 번 동작합니다.
Log를 찍어보면 총 2번이 호출되는 것이 확인되는데, 위 작성자 분 말처럼 Destroy Self 다음에 Wait for Seconds(대략 0.05s 이상)를 추가하면 1번만 폭발합니다.
마지막 Wait for Seconds 제거 시 Dead1, Dead2 모두 2번씩 호출됨
총알과 Spider에 각각 콜라이더가 1개씩 있는 것은 확인했습니다.
Spider의 Box Collider는 아래로 내리거나 제거해도 동일합니다.
Wait for Seconds에 약 0.05s 이상을 추가하면 해결이 됩니다.
Destory 부분이 바로 진행되지 않고 실제 파괴되는 시간보다 로직이 도는 시간이 더 빠르다보니 한번 더 실행되는 것일까요?
스크립트, 콜라이더 등 강의를 돌려보고 비교해봐도 빠진 부분은 없었습니다.
답변 2
1
안녕하세요. Rio Song님,
이 부분은 한번 나왔던 질문이었습니다. 현재 강의 코드를 유니티 최신 버전으로 버전업해서 테스트 해보았습니다. 강의영상처럼 정상 동작하고 있습니다. 동일한 증상이 발생한다면 어떻게든 살펴볼텐데, 저도 답답하네요ㅠㅠ
Rio Song님 께서 마지막에 하신 말씀데로 Destroy가 바로 실행되는 것이 아니기 때문에 한번 더 들어 올 가능성도 있습니다. 만약 이 추론이 맞다면 BehaviorGraph에서 수정되어야 할 부분인것 같습니다.
추후 이런한 부분을 감안해서 수정본에 반영하도록 하겠습니다.
알려주셔서 감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다. Rio Song님.
Spider 사망 시 두 번 폭발하는 현상에 대해 질문 주셨네요. 이 문제는 게임 오브젝트가 Destroy 되기 전에 이벤트가 두 번 발생하여, 여러 번 폭발 효과가 나타나는 상황으로 보입니다. 이를 해결하기 위해 고려할 수 있는 몇 가지 방법을 안내드리겠습니다.
Destroy 호출 시점 문제:
GameObject.Destroy
를 호출해도 오브젝트는 즉시 사라지지 않고, 해당 프레임이 끝날 때까지 존재하게 됩니다. 이 때문에 그 사이에 로직이 두 번 실행될 가능성이 있습니다. Destroy
함수 호출 후 추가적인 이벤트가 발생하지 않도록 상태 플래그를 설정하거나 로직의 흐름을 조정할 필요가 있습니다.상태 플래그 사용:
true
인지 확인한 뒤, true
라면 로직을 실행하지 않도록 조건문을 설정해 보세요.
if (isDead)
{
return;
}
isDead = true;
간격 추가:
Wait for Seconds
구문을 추가하여 시간 간격을 둠으로써 문제를 해결할 수 있습니다. 이 방법은 Destroy 호출 후 일정 간격을 기대하여 문제를 줄여주는 효과가 있습니다.오브젝트 상태 확인:
OnDisable
또는 OnDestroy
메서드에서 추가 로직 실행을 방지하도록 설정하는 것도 고려해 볼 수 있습니다. 이 메서드 내에서 추가적인 이벤트를 확실히 종료하도록 설정할 수 있습니다.유사한 문제에 대한 토론과 해결 방법을 참고하기 위해 관련 URL과 자료를 보는 것도 도움이 됩니다:
- 유니티에서 이벤트 및 Destroy 관련 문제 해결
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
현재 윈도우 PC에서 수강했는데, Mac 환경으로 옮겨서 한번 확인해보겠습니다.