본문 바로가기
[ Unreal5 ]/- 언리얼엔진5 실습

언리얼엔진5 c++ FindFunction

by MRG 2025. 3. 5.
728x90
반응형

 

▣ TArray<AActor*> FoundDoors;
UGameplayStatics::GetAllActorsOfClass(GetWorld(), AActor::StaticClass(), FoundDoors);


- FoundDoors라는 TArray<AActor*> 배열을 생성합니다.
UGameplayStatics::GetAllActorsOfClass(GetWorld(), AActor::StaticClass(), FoundDoors);
현재 World에 존재하는 모든 AActor 타입의 액터를 검색하여 FoundDoors 배열에 저장합니다.

 

- AActor::StaticClass()는 모든 액터의 부모 클래스이므로, 모든 액터가 포함됩니다.
만약 특정 클래스의 액터만 찾고 싶다면 AActor::StaticClass() 대신 해당 클래스(ABP_ChapterCardKeyDoor::StaticClass())를 사용해야 합니다.


▣ for (AActor* Actor : FoundDoors)
- FoundDoors 배열에 있는 모든 액터를 순회하면서 Actor 변수에 담아 확인합니다.

▣ FString ActorClassName = Actor->GetClass()->GetName();
- 현재 순회 중인 Actor의 클래스 이름을 문자열(FString)로 가져옵니다.

▣ if (ActorClassName == TEXT("BP_ChapterCardKeyDoor_C")) 
ActorClassName이 "BP_ChapterCardKeyDoor_C" 인지 비교합니다.
"BP_ChapterCardKeyDoor_C"는 언리얼 엔진에서 블루프린트 클래스

(BP_ChapterCardKeyDoor)의 C++ 내부 이름입니다.
블루프린트 클래스를 찾을 때 "_C"가 붙은 형태로 이름이 반환됩니다.
이 방법은 다소 비효율적이며, 타입을 직접 캐스팅하는 것이 더 좋습니다.

▣ UFunction* DoorOpenFunction = Actor->FindFunction(FName("DoorOpen"));
FindFunction(FName("DoorOpen"))을 사용하여 액터가 "DoorOpen" 이라는 이름의 함수를 가지고 있는지 확인합니다.
DoorOpen은 블루프린트에서 만든 커스텀 이벤트일 가능성이 큽니다.


▣ if (DoorOpenFunction)
{
    Actor->ProcessEvent(DoorOpenFunction, nullptr);
}
DoorOpenFunction이 존재하면 ProcessEvent()를 호출하여 실행합니다.
ProcessEvent(UFunction* Function, void* Parameters)는 블루프린트 이벤트를 C++에서 호출할 때 사용되는 함수입니다.
nullptr을 인자로 전달했으므로, DoorOpen 함수는 파라미터가 없는 함수로 예상됩니다.

728x90
반응형

댓글