Комментарии 7
Как устроен рабочий процесс синхронизации проекта между несколькими разработчикам? Как комитить в гит репозитория те же самые blueprint? А если один blueprint правили несколько человек?
Для какой версии UE вы привели реализацию RPC? Я пытаюсь повторить на 4.23, но складывается ощущение, что Epic значительно переработали эту часть.
Версия 4.22.
Действительно, в 4.23 изменили кое что.
Убран параметр void* Parameters
В остальном нужно смотреть, что у вас за ошибки.
Действительно, в 4.23 изменили кое что.
int32 UObject::GetFunctionCallspace(UFunction * Function, FFrame * Stack)
{
return (GetOuter() ? GetOuter()->GetFunctionCallspace(Function, Stack) : FunctionCallspace::Local);
}
Убран параметр void* Parameters
В остальном нужно смотреть, что у вас за ошибки.
Из UObject больше нельзя получить NetDriver, если делать по примеру ActorComponent то выйдет что-то вроде этого, правда протестировать я еще ничего не успел:
CallRemoteFunction
bool UObjectExtended::CallRemoteFunction(UFunction* Function, void* Parameters, FOutParmRec* OutParms, FFrame* Stack)
{
bool bProcessed = false;
if (AActor* MyOwner = Cast<AActor>(GetOuter()))
{
FWorldContext* const Context = GEngine->GetWorldContextFromWorld(GetWorld());
if (Context != nullptr)
{
for (FNamedNetDriver& Driver : Context->ActiveNetDrivers)
{
if (Driver.NetDriver != nullptr && Driver.NetDriver->ShouldReplicateFunction(MyOwner, Function))
{
Driver.NetDriver->ProcessRemoteFunction(MyOwner, Function, Parameters, OutParms, Stack, this);
bProcessed = true;
}
}
}
}
return bProcessed;
}
Update 29.04.21
В 4.26 в UObject нет переменной bReplicates. Возможно, её не было и раньше и это ошибка в статье. Не помню точно.
На текущий момент в самом UObject ничего подобного не нужно дописывать, достаточно записать bReplicates = true в Актор и/или SetIsReplicatedByDefault(true) в Компонент, который реплицирует Object'ы
В 4.26 в UObject нет переменной bReplicates. Возможно, её не было и раньше и это ошибка в статье. Не помню точно.
На текущий момент в самом UObject ничего подобного не нужно дописывать, достаточно записать bReplicates = true в Актор и/или SetIsReplicatedByDefault(true) в Компонент, который реплицирует Object'ы
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Расширяем возможности UObject в Unreal Engine 4