포스트

UE5 C++ | Crypt Raider, 오버랩 이벤트 (유데미)

언리얼 강의 중 Section 4를 정리한 일곱번째 글입니다.

UE5 C++ | Crypt Raider, 오버랩 이벤트 (유데미)

강의 정보 🎓


오버랩 이벤트 ⚡

  • 오브젝트는 Object Type (예: WorldStatic)을 가지며, 특정 타입과 Overlap 또는 Block 설정이 가능하다.
  • 예: WorldStatic은 Pawn과 Overlap, 나머지는 Block 처리한다.

    Object Type Object Type

참고 링크: Collision Filtering 공식 문서

BP_SecretWall 설정

  1. Dungeon_Wall을 기반으로 블루프린트 생성: BP_SecretWall
  2. Box Collision 추가 → 이름: Trigger Area
  3. Box 크기 조절 및 Overlap 이벤트를 처리한다.
  4. 가고일의 콜리전 설정에서 Generate Overlap Events를 활성화해야 이벤트 발생한다.

Event Graph Event Graph

Trigger Component를 C++로 구현

  1. BP_SecretWall에 새 C++ 클래스 추가 → BoxComponent 기반 선택
  2. UTriggerComponent를 생성한다.
  3. 기존 트리거 에리어 삭제 후 C++ 컴포넌트를 교체한다.

Visual Studio 업데이트 하면서 생긴 문제

  • 언리얼 에디터에서 컴파일시 에러가 발생하였다.
  • MSVC 권장 버전 설치가 필요하였다.
  • v14.38를 설치 및 BuildConfiguration.xml**수정이 필요하다.

    1
    2
    3
    4
    5
    6
    7
    
      <?xml version="1.0" encoding="utf-8" ?>
      <Configuration xmlns="https://www.unrealengine.com/BuildConfiguration">
      <WindowsPlatform>
      <CompilerVersion>14.38.33130</CompilerVersion>
      <ToolchainVersion>14.38.33130</ToolchainVersion>
      </WindowsPlatform>
      </Configuration>
    

참고 링크: MSVC 호환성 문제 해결


생성자 🏗️

  • TickComponent 사용을 원할 경우 생성자에서 명시적으로 활성화가 필요하다.

    1
    2
    3
    4
    5
    
      UTriggerComponent::UTriggerComponent()
      {
      	PrimaryComponentTick.bCanEverTick = true;
      	UE_LOG(LogTemp, Display, TEXT("Trigger Component Construct"));
      }
    
  • 플레이를 하지 않아도 한 액터의 컴포넌트로 Trigger를 추가시키면 생성자가 호출된다는 것을 확인 할 수 있다.


TArray 📚

  • 현재 컴포넌트와 Overlap 중인 액터 리스트 가져온다.
  • GetOverlappingActors() :

    1
    2
    3
    4
    5
    
      void GetOverlappingActors
      (
      	TArray < AActor * > & OverlappingActors, // 현재 오버래핑 되고있는 액터들의 배열 반환
      	TSubclassOf < AActor > ClassFilter // 디폴트 값이므로 현재는 신경 X
      ) const
    
  • 0번째 인덱스 액터 이름 출력:

    1
    2
    3
    4
    5
    6
    7
    8
    
      	TArray<AActor*> Actors;
      	GetOverlappingActors(Actors);
        
      	if(Actors.Num() > 0)
      	{
      		FString ActorName = Actors[0]->GetActorNameOrLabel();
      		UE_LOG(LogTemp, Display, TEXT("Overlapping: %s"), *ActorName); 
      	}
    

While 및 For 반복문 🔁

  • 모든 배열 내용을 탐색하기 위해 반복문을 사용해야 한다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    
      	int32 index = 0;
      	while(index < Actors.Num())
      	{
      		FString ActorName = Actors[index]->GetActorNameOrLabel();
      		UE_LOG(LogTemp, Display, TEXT("Overlapping: %s"), *ActorName); 
      		++index;
      	}
        	
      	// 또는
        	
      	for (int32 i = 0; i < Actors.Num(); ++i)
      	{
      		FString ActorName = Actors[i]->GetActorNameOrLabel();
      		UE_LOG(LogTemp, Display, TEXT("Overlapping: %s"), *ActorName); 
      	}
    

범위 기반 For 반복문 🔁

  • 배열과 같은 형태를 순회하기 위한 for문이 있다.

    1
    2
    3
    4
    5
    
      	for(AActor* Actor: Actors)
      	{
      		FString ActorName = Actor->GetActorNameOrLabel();
      		UE_LOG(LogTemp, Display, TEXT("Overlapping: %s"), *ActorName); 
      	}
    

요약 및 느낀점 📝

  • 오버랩 이벤트에 대해 이해하고 Trigger 컴포넌트를 구현하였다.

    간단하게 트리거 박스를 구현하는 방법을 배웠으니 이제는 이를 활용하여 다양한 트리거 이벤트를 만들어 낼 수 있을 것 같다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.