Unreal Engine 4 프로그래밍 c++/기능
언리얼 interface c++ 호출방법
코닥쿠
2022. 1. 25. 20:07
반응형
상속클래스.h
void Interact_Implementation() override; //블루프린트에서도 사용가능//
virtual void InteractPure() override; //c++에서만 사용함//
상속클래스.cpp
void ACharacter::Interact_Implementation()
{
UE_Log(LogTemp, Warning, TEXT("Implementation");
}
void ACharacter::InteractPure()
{
UE_Log(LogTemp, Warning, TEXT("Pure");
}
이렇게 정의내린 함수는 두가지인데 위에 함수는 블루프린트에서의 호출을 동시에 사용할수 있으면 아래있는 가상함수는 c++에서만 정의내려 사용할수 있다.
인터페이스 메시징받을 클래스.cpp
OverlapCollision->GetOverlappingActors(OverlapActors);
for (uint8 i = 0; i < OverlapActors.Num(); i++)
{
//액터들의 클래스를 가져와 UWeapon_Interface의 정적클래스를 가져와 Interface를 상속받고 있는 클래스만 실행한다.//
if (OverlapActors[i]->GetClass()->ImplementsInterface(UWeapon_Interface::StaticClass()))
{
//직접 액터에 캐스터를 사용하여 인터페이스에 오버라이딩된 액터의 함수를 호출하는방식이다.//
//직접 바로 함수를 호출하기에 캐스팅할 액터는 선언하지 않는다.//
//c++에서만 호출할수 있다.//
Cast<IWeapon_Interface>(OverlapActors[i])->InteractPure();
//기존에서 사용하는 블루프린트에서 호출하는 방식으로 Implementation을 붙어주면 블루프린트에서도 호출을 가능하게 만들어준다.//
//아래와 같이 Execute_함수이름(호출객체, 입력값) 이런식으로 호출할수있다.//
//블루프린트와 c++에서도 사용할수 있다.//
IWeapon_Interface::Execute_Interact(OverlapActors[i]);
}
}
인터페이스를 직접 선언하여 호출하는법.cpp
IWeapon_Interface* Interface = Cast<IWeapon_Interface>(OverlapActors[i]);
if(Interface)
{
Interface->InteractPure(); //c++에서만 사용가능//
Interface->Execute_Interact(OverlapActors[i]); //블루프린트, c++에서도 사용가능//
}
Interface 가져오는 방법.
1. 각클래스의 Inteface상속여부를 확인한 다음 Interface를 직접 호출하는방법.
2. 액터의 Interface를 캐스팅하여 선언한 다음 호출하는 방법.
Interface 함수 호출하는 방법.
{
1. Inteface를 직접 호출하였을때.
1-1. 형변환하여 액터의 오버라이딩한 함수를 호출하는방법. (c++에서만 호출가능)
1-2. 오버라이딩한 함수에 (_Implementation)붙이며 Implementation이 붙은 함수를 호출할때는 "Execute_함수"를 호출하는 방법. (블루프린트와 c++에서 호출가능)
2.Inteface를 선언하여 호출하였을때.
2-1. 선언한 Inteface변수에서 그냥 함수호출하는 방법. (c++에서만 호출가능)
2-2. 선언한 Inteface변수에서 호출하는 함수가 Implementation이 붙어있는 경우 "Execute_함수"를 함수호출하는 방법. (블루프린트와 c++에서 호출가능)
}
반응형