Репликация – Важная тема при создании мультиплеера. В Этом Шаблоне мы разберем простой пример. Далее, зная нужные макросы и параметры – Вы сможете спокойно переносить Blueprints в C++.
При создании Actor класса в проекте необходимо указать, что он будет реплицироваться. В Конструкторе класса в CPP файле укажите значение унаследованной переменной: bReplicates = true; Так же необходимо подключить заголовок класса : #include “Net/UnrealNetwork.h”
Объявляя переменные в заголовочном файле (.h) – В Макросе UPROPERTY мы должны указать, что эта переменная реплицируется:
- public:
- UPROPERTY(Replicated, BlueprintReadWrite)
- int Lives;
Объявленные реплицируемые переменные – необходимо зарегистрировать.
В h Файле делаем перезапись функции для репликации: virtual void GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const override;
По крайней мере я использую данный термин. В .cpp файле прописываем метод, который, как раз и зарегистрирует наши переменные. Допустим мы делаем доработку в классе AFPS_Character, и нам нужно зарегистрировать объявленную переменную Lives:
- void AFPS_Character::GetLifetimeReplicatedProps( TArray< FLifetimeProperty > & OutLifetimeProps ) const
- {
- // Replication registration
- Super::GetLifetimeReplicatedProps(OutLifetimeProps);
- DOREPLIFETIME(AFPS_Character, Lives);
- };
Репликация методов указывается в макросе UFUNCTION с помощью параметров. Эти параметры влияют на то, где будет вызываться данный метод, На сервере, На клиенте, Мультикаст и т.п. Пример такого метода:
UFUNCTION(Reliable, Server, WithValidation, BlueprintCallable) void Server_Cast
Функция реплицируется по сети и гарантированно выполняется независимо от пропускной способности или сетевых ошибок. Действует только при использовании в сочетании с Client или Server. Обратная функция: Unreliable
Функция выполняется только на сервере. Объявляет дополнительную функцию с таким же именем, как у основной функции, но с _Implementation добавлением в конец, где должен быть написан код. Автоматически сгенерированный код будет вызывать _Implementation метод при необходимости.
Функция выполняется только на клиенте, владеющем объектом, для которого вызывается функция. Объявляет дополнительную функцию с таким же именем, как у основной функции, но с _Implementation добавлением в конец. Автоматически сгенерированный код будет вызывать _Implementation метод при необходимости.
Функция выполняется как локально на сервере, так и реплицируется на все клиенты, независимо от типа Актера NetOwner.
Объявляет дополнительную функцию с таким же именем, как у основной функции, но с _Validate добавлением в конец. Эта функция принимает те же параметры и возвращает bool, чтобы указать, следует ли продолжать вызов основной функции.
- UFUNCTION(Reliable, Server, WithValidation, BlueprintCallable)
- void Server_Cast();
- bool AMR_FPS::Server_Cast_Validate()
- {
- // Проверка на выполнение. (Есть ли патроны, мана и т.п.)
- return true;
- }
- void AMR_FPS::Server_Cast_Implementation()
- {
- // Выполнение действия на сервере, откуда уже можно будет вызвать Мультикаст
- }
Это базовые понятия о репликации в Unreal Engine. А то, каким будет сетевой код в дальнейшем – зависит от того, как вы будете использовать вызовы клиента и сервера.
Вы всегда можете обратиться к нашей команде за помощью в разработке, обучению или заказать прототип под ключ. Вступайте в наш telegram канал: