UE4 에서 RPC가 구현된 class 는 Actor 와 ActorComponent 로 보입니다. Actor 의 멤버로 UObject 를 상속받은 class 는 RPC 함수들이 있어도 동작하지 않습니다. 

UObject 를 상속받은 클래스에는 IsSupportedForNetworking, IsNameStableForNetworking, CallRemoteFunction, GetFunctionCallspace 구현이 필요합니다.

cf. Outer class 가 APlayerController 라고 가정합니다. 통신이 가능한 Actor 면 상관없습니다.

class UMyObject : public UObject
{

virtual bool IsSupportedForNetworking() const override
{
return true;
}

virtual bool IsNameStableForNetworking() const override
{
return true;
}

virtual bool CallRemoteFunction(UFunction* Function, void* Parameters, FOutParmRec* OutParms, FFrame* Stack) override
{

if (auto MyOwner = GetOuterAPlayerController())
{
UNetDriver* NetDriver = MyOwner->GetNetDriver();
if (NetDriver)
{
NetDriver->ProcessRemoteFunction(MyOwner, Function, Parameters, OutParms, Stack, this);
return true;
}
}
return false;
}

virtual int32 GetFunctionCallspace(UFunction* Function, void* Parameters, FFrame* Stack) override
{
auto MyOwner = GetOuterAPlayerController();
return (MyOwner ? MyOwner->GetFunctionCallspace(Function, Parameters, Stack) : FunctionCallspace::Local);
}

} // UMyObject

추가로 Actor 의 Subobject 는 1단계만 허용되는 것 같습니다.

참고 : https://answers.unrealengine.com/questions/435733/rpc-doesnt-work-on-repicated-uobject.html


728x90

+ Recent posts