포스트

UE5 C++ | Crypt Raider, 액터 태그, 얼리 리턴, 의존성 주입 정리 (유데미)

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

UE5 C++ | Crypt Raider, 액터 태그, 얼리 리턴, 의존성 주입 정리 (유데미)

강의 정보 🎓

  • 강의명: Unreal Engine 5 C++ Developer: Learn C++ & Make Video Games
  • 플랫폼: 유데미
  • 현재 섹션: Section 4 - Crypt Raider
  • 주요 내용: 액터 태그, 얼리 리턴, 의존성 주입 정리에 대해 다루며 가고일 석상에 대해 반응하여 Mover를 통해 벽이 이동하는 것까지 구현하였다.

액터 태그 🔖

  • 특정 액터에만 반응하는 트리거 구현 → 태그 사용
  • 예: 가고일 액터에 Unlock1 태그 부여

    Unlock1 tag 추가 Unlock1 tag 추가

C++에서 ActorHasTag() 사용

  • 다음 코드를 추가하고 Trigger 컴포넌트를 가진 액터에서 원하는 Tag를 입력하면 작동한다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
      // TriggerComponent.h
      UPROPERTY(EditAnywhere)
      FName AcceptableActorTag;
        
      // TriggerComponent.cpp - TickComponent()
      for (AActor* Actor : Actors) {
      	if (Actor->ActorHasTag(AcceptableActorTag)) {
      		UE_LOG(LogTemp, Display, TEXT("Unlocking"));
      	}
      }
    

얼리 리턴 🚪

  • 불필요한 탐색 최소화 → 적합한 액터 찾으면 바로 return

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    
      void UTriggerComponent::TickComponent(...) {
          if (GetAcceptableActor() != nullptr) {
              UE_LOG(LogTemp, Display, TEXT("Unlocking"));
          } else {
              UE_LOG(LogTemp, Display, TEXT("Locking"));
          }
      }
        
      AActor* UTriggerComponent::GetAcceptableActor() const {
          TArray<AActor*> Actors;
          GetOverlappingActors(Actors);
        
          for (AActor* Actor : Actors) {
              if (Actor->ActorHasTag(AcceptableActorTag)) {
                  return Actor;
              }
          }
        
          return nullptr;
      }
        
    

의존성 주입

트리거 → Mover 의존성 주입

  • Trigger는 Mover 컴포넌트에 의존 (움직임 여부 결정)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    
      // TriggerComponent.h
      	UMover* Mover;
        
      // TriggerComponent.cpp
      void UTriggerComponent::TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction)
      {
      	Super::TickComponent(DeltaTime, TickType, ThisTickFunction);
        
      	if(GetAcceptableActor() != nullptr)
      	{
      		Mover->SetShouldMove(true);
      	}
      	else
      	{
      		Mover->SetShouldMove(false);
      	}
      }
        
      void UTriggerComponent::SetMover(UMover* NewMover)
      {
      	Mover = NewMover;
      }
        
    
  • BP_SecretWall의 블루프린트에서 트리거 컴포넌트와 Mover 연결.

    Set Mover.png


프로젝트 상태 💾

가고일 석상을 넣으면 다음처럼 Mover 컴포넌트에 의해 이동한다. 가고일 석상을 넣으면 다음처럼 Mover 컴포넌트에 의해 이동한다.


요약 및 느낀점 📝

  • Actor Tag로 조건 필터링
  • 불필요한 탐색을 줄이는 얼리 리턴 패턴
  • 컴포넌트 간 의존성을 코드로 연결하는 방법 (SetMover)

    석상을 통해 벽이 이동하는 것까지 구현이 되었다. 이제 이 섹션의 마무리도 거의 보이는 것 같다. 조금씩 언리얼이 어떤식으로 작동되는지를 알아가고 있는 것 같아서 뿌듯하다.

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