본문 바로가기

프로그래밍

액터 내 컴포넌트간 Collision 무시 방법 in 언리얼

728x90

BeginPlay() 메서드를 수정하여 모든 컴포넌트를 가져오고 충돌을 무시하도록 설정:

 

void AYourActor::BeginPlay()
{
    Super::BeginPlay();

    // 액터의 모든 컴포넌트를 가져옴
    TArray<UActorComponent*> Components;
    GetComponents(Components);

    // 컴포넌트를 순회하며 서로 충돌을 무시하도록 설정
    for (int32 i = 0; i < Components.Num(); ++i)
    {
        UPrimitiveComponent* Component1 = Cast<UPrimitiveComponent>(Components[i]);
        if (Component1)
        {
            for (int32 j = i + 1; j < Components.Num(); ++j)
            {
                UPrimitiveComponent* Component2 = Cast<UPrimitiveComponent>(Components[j]);
                if (Component2)
                {
                    Component1->IgnoreComponentWhenMoving(Component2, true);
                    Component2->IgnoreComponentWhenMoving(Component1, true);
                }
            }
        }
    }
}

 

이 코드에서:

  • GetComponents(Components)는 액터에 부착된 모든 컴포넌트를 가져옵니다.
  • 중첩된 루프는 각 컴포넌트 쌍을 순회합니다.
  • Cast<UPrimitiveComponent>(Components[i])는 컴포넌트가 UPrimitiveComponent 타입인지 확인한 후 충돌 무시를 설정합니다.

이 방법을 통해 액터 내의 모든 프리미티브 컴포넌트가 서로 충돌을 무시하도록 설정할 수 있습니다.

728x90