[UE5] Preset & Trace

GamzaTori·2024년 10월 22일

UE5 C++

목록 보기
16/27

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 판정하기

  • player에 추가
// h
UFUNCTION()
void OnBeginOverlap(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor,
UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult);

// cpp
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에서 등록해주어야 한다
profile
게임 개발 공부중입니다.

0개의 댓글