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를 통해 벽이 이동하는 것까지 구현하였다.
액터 태그 🔖
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 연결.
프로젝트 상태 💾
가고일 석상을 넣으면 다음처럼 Mover 컴포넌트에 의해 이동한다.
요약 및 느낀점 📝
- Actor Tag로 조건 필터링
- 불필요한 탐색을 줄이는 얼리 리턴 패턴
- 컴포넌트 간 의존성을 코드로 연결하는 방법 (SetMover)
석상을 통해 벽이 이동하는 것까지 구현이 되었다. 이제 이 섹션의 마무리도 거의 보이는 것 같다. 조금씩 언리얼이 어떤식으로 작동되는지를 알아가고 있는 것 같아서 뿌듯하다.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.

