Unreal Engine 4 c++ replication
From IML Wiki
Репликация переменных
- Сначала нужно убедится, что включена репликация глобально в самом экторе. В экторе она по-умолчанию выключена, а в павне по-умолчанию включена. Делается это в конструкторе.
bReplicates = true;
- В заголовочном файле объявляется переменная с параметром "Replicated"
public: UPROPERTY(Replicated) int [названиеВашейПеременной];
- В файле реализации создается следующий метод.
#include "Net/UnrealNetwork.h" void [названиеВшегоКласса]::GetLifetimeReplicatedProps( TArray< FLifetimeProperty > & OutLifetimeProps ) const { Super::GetLifetimeReplicatedProps(OutLifetimeProps); DOREPLIFETIME( [названиеВшегоКласса], [названиеВашейПеременной] ); /* DOREPLIFETIME_CONDITION( [названиеВшегоКласса], [названиеВашейПеременной], COND_OwnerOnly ); // такой макрос идентичен предыдущему, но позволяет задавать параметры репликации https://docs.unrealengine.com/en-US/Gameplay/Networking/Actors/Properties/Conditions/index.html */ }
Репликация методов
- В первую очередь нужно объявить метод в заголовочном файле. Параметры могу быть разные: Reliable или Unreliable, Server, Client или NetMulticast. Обо всех параметрах можно узнать нажав F12 на макросе UFUNCTION в Visual Studio
UFUNCTION( Reliable, Server, WithValidation ) void YourFunctionName();
- В отличии от обычной реализации методов в .cpp файле, при репликации нужно создать два метода [названиеВашейФункции]_Validate и [названиеВашейФункции]_Implementation.
bool [названиеВшегоКласса]::YourFunctionName_Validate() { return true; // тут вы можете выполнить проверку на корректность входящих параметров }
void [названиеВшегоКласса]::YourFunctionName_Implementation() { // тело вашего метода }