인생 언리얼 교과서 보다가 버그때문에 막혀서 질문함
556~559P
무엇을 만들려고 했는가?
2D 슈팅게임에서 총알의 기능을 만들려고 했음.
플레이어가 총알을 발사하고, 그 발사한 총알이 Enemy라는 개체에 닿으면
Enemy를 파괴하고 총알도 파괴되는 기능을 구현하려고 했다.
무엇이 문제인가?
총알이 발사하자마자 바로 사라짐.
아래는 문제가 되는 코드 Bullet.cpp의 일부
void ABullet::OnBulletOverlap
(
UPrimitiveComponent* OverlappedComponent,
AActor* OtherActor,
UPrimitiveComponent* OtherComp,
int32 OtherBodyIndex,
bool bFromSweep,
const FHitResult& SweepResult
)
{
AEnemy* enemy = Cast<AEnemy>(OtherActor);
if (enemy != nullptr)
{
// 충돌한 액터를 제거한다
OtherActor->Destroy();
// Destroy(); (이렇게 하면 문제 해결은 됨.)
}
Destroy(); // Enemy가 아니더라도 어디에 부딪히면 사라지게 하기 위한 코드
}
충돌하면 사라지는 것을 구현하기 위해,
총알이 충돌했을때 이벤트를 발생시키는 함수를 만들어서 기능을 구현함.
총알이 Enemy와 부딪혔을때, Enemy는 정상적으로 사라짐.
그런데, 마지막 코드 때문에
총알도 보이지 않는 무언가와 부딪히는지 나오자 마자 사라진다.
그래서 어떻게 해결하려고 했는가?
- 다음과 같음
if (enemy != nullptr)
{
// 충돌한 액터를 제거한다
OtherActor->Destroy();
Destroy(); // 이렇게 하면 문제 해결은 됨.
}
//Destroy();
}
충돌하는 대상을 Enemy로 한정해버리면 가능함.
당장 해결은 되지만, 총알이 무언가와 겹쳐서 충돌 판정이 일어나 사라지는 것 이라면 확실히 어딘가 잘못된 것 같다.
총알 콜리전 세팅

플레이어 콜리전 세팅
머리 돌려봐도 답이 안나와 물어봄.