콜리전 채널(기본)

  • WorldStatic : 움직이지 않는 정적인 배경 액터에 사용하는 콜리전 채널. 스태믹 엑터에 있는 스태틱 컴포넌트에 사용한다.
  • WorldDynamic : 움직이는 액터에 사용하는 콜리전 채널. 블루프린트에 속한 스태틱메시 컴포넌트에 사용한다.
  • Pawn : 플레이어가 조종하는 물체에 주로 사용. 캐릭터의 충돌을 담당하는 캡슐 컴포넌트에 설정된다.
  • Visibility : 배경불체가 시각적으로 보이는지 탐지하는 데 사용한다. 탐지에서 폰은 제외된다. 마우스로 물체를 선택하는 피킹 기능을 구현할 떄 사용한다.
  • Camera : 카메라 설정을 위해 카메라와 목표뮬 간에 장애물이 있는지 탐지하는 데 사용한다.
  • PhysicsBody : 물리 시뮬레이션으로 움직이는 컴포넌트에 설정한다.

콜리전 (ollsion Enablue)

  • Quary : 두 물체의 충돌 영역이 서로 겹치는지 테스트하는 설정. 충돌 영역의 겹침을 감지하는 것은 언리얼 엔진에서 오랩이라 한다. 충돌 영역이 겹치면 관련 컴포넌트에서 BeginOverlap 이벤트가 발생한다. 지정한 영역에 물체가 충돌하는지 탐지하는 레이캐스트나 스윕기능도 Query에 속한다.
  • Physics : 물리적인 시뮬레이션을 사용할 떄 설정한다.
  • Quary and Physics : 위의 두 기능을 모두 사용하는 설정이다.

콜리전 채널

  • 오브젝트 채널 : 콜리전 영역에 지정하는 콜리전 채널 (WorldStatic,WorldDynamic,Pawn,PhysicsBody,Vehicle,Destryctuble)
  • 트레시으 채널 : 어떤 행동에 설정하는 콜리전 채널 (Visibility,Camera)

새로 추가한 컬리전 프리셋 설정 ABCharacter (오브젝트채널)

 

AABCharacter::AABCharacter()
{
...
    GetCapsuleComponent()->SetCollisionProfileName(TEXT("ABCharacter"));
}

 

트레이스 채널 추가 및 활용

 

추가할 트레이스 파라미터

  • HitResult : 물리적 충돌이 탐지된 경우 관련된 정보를 담을 구조체
  • Start : 탐색을 시작할 위치
  • End : 탐색을 끝낼 위치
  • Rot : 탐색에 사용할 도형의 회전
  • TraceChannel : 물리 충돌감지에 사용할 트레이스 채널 정보
  • CollisionShape : 탐샛ㄱ에 사용할 기본 도형 정보. 구체, 캡슐, 박스를 사용한다
  • Params : 탐색방법에 대한 설정 값을 모아둔 구조체
  • ResponseParams : 탐색 반을을 설정하이 위한 구조체

트레이스 채널 배정

  • 게임프로젝트에서 새로생성하는 오브젝트 채널과 트레이스 채널은 ECC_GameTraceCHannel 1번부터 18번 까지 중에서 하나를 배정 받는다. 어떤 값을 배정 받앗는 지 확인 할라면 그림 참고

 

코드

  • 콜리전 채널을 지정하면, FCollsioShape::MakeSphere 함수를 사용해 탐지에 사용할 도형을 제작한다. 탐색할 도형으로는 50cm 반지름을 가지는 구체를 사용하고 회전 값은 기본값을 지정한다.
  • 그 다음은 탐색영역을 지정한다. 탐색을 시작할 위치는 액터가 있는 곳으로, 끝낼 위치는 액터 시선방향으로 200cm 떨어진 곳으로 할것이다
  • 그 다음은 탐색방법을 설정한다. 공격 명령을 내리는 자신은 이탐색에 감지 되지 않도록 포인터 this를 무시할 액터 목록에 넣어줘야 한다. 마지막 인자인 탐색반응 설정은 구조체의 기본값을 사용한다
void AABCharacter::PostInitializeComponents()
{
...
    ABAnim->OnAttackHitCheck.AddUObject(this, &AABCharacter::AttackCheck);
}


void AABCharacter::AttackCheck()
{
    FHitResult HitResult;
    FCollisionQueryParams Params(NAME_None, false, this);
    bool bResult = GetWorld()->SweepSingleByChannel(
        HitResult,
        GetActorLocation(),
        GetActorLocation() + GetActorForwardVector()*200.0f,
        FQuat::Identity,
        ECollisionChannel::ECC_GameTraceChannel2,
        FCollisionShape::MakeSphere(50.0f),
        Params);
}

+ Recent posts