언리얼 충돌처리

roberto·2025년 2월 11일

콜리젼 기본

  • 어떤 게임에서나 결코 빼놓을 수 없는 기능은 충돌처리라고 생각한다.

    정말 많은 케이스의 프리셋을 제공하지만, 과연 다 써볼 일이 있을까 싶다.

  • 일단 정말 많고 복잡해 보이지만 파악해보면 일단 Ignore, Block, Overlap 키워드만 파악해도 절반 정도는 알 것 같다.

  • Ignore : 무시

  • Overlap : 겹쳤을 때

  • Block : 충돌

BoxCollision->SetCollisionProfileName(TEXT("OverlapAllDynamic"));
  • 프리셋을 초기화해주는 설정은 enum으로 받아주면 딱 좋을 것 같은데, FName으로 받는다.

이벤트 바인딩

  • 유니티의 경우 OnCollisionSomething 혹은 OnTriggerSomething 등의 이벤트 함수를 자동으로 제공해줘서 편하게 했었는데, 언리얼은 그 정도로 친절하진 않은 것 같다.
void AMyActor::OnHit(
    UPrimitiveComponent* HitComp, AActor* OtherActor,
    UPrimitiveComponent* OtherComp, FVector NormalImpulse,
    const FHitResult& Hit)
{
    UE_LOG(LogTemp, Warning, TEXT("충돌 발생: %s"), *OtherActor->GetName());
}

// 바인딩
MeshComponent->OnComponentHit.AddDynamic(this, &AMyActor::OnHit);

히트 바인딩, 대충 유니티로 따지자면 OnCollisionEnter로 봐야될 것 같다.

void AMyActor::OnOverlapBegin(
    UPrimitiveComponent* OverlappedComp, AActor* OtherActor,
    UPrimitiveComponent* OtherComp, int32 OtherBodyIndex,
    bool bFromSweep, const FHitResult& SweepResult)
{
    UE_LOG(LogTemp, Warning, TEXT("오버랩 감지: %s"), *OtherActor->GetName());
}

// 바인딩
CollisionComponent->OnComponentBeginOverlap.AddDynamic(this, &AMyActor::OnOverlapBegin);

Overlap 바인딩, 유니티로 따지면 OnTriggerEnter로 보는게 적당할 듯 싶다.

profile
아마도 개발 관련된 것만 올릴듯한 벨로그

0개의 댓글