Object Channel과 Trace Channel

- Project Settings → Collision
- Object Channel: 새로운 Object Type을 만드는 것
- Trace Channel: 물체와 물체의 충돌은 아니지만 레이캐스팅이나 공격 범위 판정에 대한 Type
- Default Response는 기본적인 충돌 판정에 대한 설정
- Channel을 추가할 때 마다 기존 Preset에서 수정해줘야한다.
- 설정해준 Channel은 DefaultEngine.ini에 추가된다

- C++ 에선 이름이 아닌 채널(ECC_GameTraceChannel1)을 이용하기 때문에 어떤 슬롯에 저장되어 있는지 주의해야 한다
Collision Prset 만들기

- Collision은 물리적인 충돌이 아닌 쿼리만 설정
- Pawn을 제외한 나머지는 충돌을 무시하는 Preset이다
CapsuleComponent의 CollisionEnabled을 설정할 수 있다
GetCapsuleComponent()->SetCollisionEnabled(ECollisionEnabled::QueryAndPhysics);
Attack Trace Channel과 충돌 감지 해보기

- 구 모양으로 탐지하고 start, end 지점을 통해 탐지 범위를 정할 수 있다
- Actors to Ignore: 배열을 통해 충돌을 무시할 액터 전달
- Ignore Self: 자신에 대한 충돌을 무시
Trace Channel은 Overlap이 아닌 Block을 통해 막혀야 충돌에 대한 판정이 된다

Object를 대상으로도 충돌 판정을 할 수 있다

C++에서 Overlap 판정하기
UFUNCTION()
void OnBeginOverlap(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor,
UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult);
void AR1Player::BeginPlay()
{
Super::BeginPlay();
GetCapsuleComponent()->OnComponentBeginOverlap.AddDynamic(this, &ThisClass::OnBeginOverlap);
void AR1Player::OnBeginOverlap(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor,
UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult)
{
UE_LOG(LogTemp, Log, TEXT("OnBeginOverlap"));
}
}
- OnBeginOverlap 함수는 언리얼에서 관찰해야하기 때문에 UFUNCTION 키워드가 필수이다
- OnComponentBeginOverlap에 OnBeginOverlap을 바인딩하여 컴포넌트에 오버랩 이벤트가 발생하면 OnBeginOverlap 함수를 실행하도록 등록하고 있다
- 생성자가 아닌 BeginPlay에서 등록해주어야 한다