Pull to refresh

Comments 7

Как устроен рабочий процесс синхронизации проекта между несколькими разработчикам? Как комитить в гит репозитория те же самые blueprint? А если один blueprint правили несколько человек?

Блупринты, обычно, просто мерджатся, так же, как и код.

А вот с остальными ассетами проблемнее. Если работать через Гит, то лучше просто договориться, что бы люди не работали над, скажем, одними и теми же картами.

Если стоит другая система контроля версий, то легче просто лочить файлы.
Для какой версии UE вы привели реализацию RPC? Я пытаюсь повторить на 4.23, но складывается ощущение, что Epic значительно переработали эту часть.
Версия 4.22.

Действительно, в 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;
}

NetDriver можно получить из Actor владельца. Можно сделать Cast<AActor(GetOuter())->GetNetDriver().

Конечно не забывайте проверить на то, что каст прошел.
Update 29.04.21

В 4.26 в UObject нет переменной bReplicates. Возможно, её не было и раньше и это ошибка в статье. Не помню точно.

На текущий момент в самом UObject ничего подобного не нужно дописывать, достаточно записать bReplicates = true в Актор и/или SetIsReplicatedByDefault(true) в Компонент, который реплицирует Object'ы
Sign up to leave a comment.