UE4 – Consejo del día 2: Obtener el valor que tenía una variable antes de ser replicada

Sabías que …

Puedes obtener el valor que tenía una variable antes de ser replicada por el server. Solo necesitas agregar a la función OnRep_ un parámetro del mismo tipo de dato de la variable que se replica. Al llamarse esta función OnRep_ en los remotos, después de que el servidor modifica la variable, el valor actual de la variable será el valor modificado por el servidor, y el parámetro que recibe la función será el valor que tenía la variable antes de ser replicada.

Ejemplo: Vamos a crear la variable Health que se replique y la función OnRep_Health que se va a ejecutar automáticamente en los clientes remotos cuando el servidor modifica la variable Health.

//File: TipOfTheDayCharacter.h
//...
public:

UPROPERTY(BlueprintReadWrite, ReplicatedUsing = OnRep_Health, Category = "Stats")
float Health;

UFUNCTION()
void OnRep_Health(float LastHealthValue);

void GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const override;

//...

//File: TipOfTheDayCharacter.cpp

//...

void ATipOfTheDayCharacter::GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const
{
	Super::GetLifetimeReplicatedProps(OutLifetimeProps);

	DOREPLIFETIME(ATipOfTheDayCharacter, Health);
}

void ATipOfTheDayCharacter::OnRep_Health(float LastHealthValue)
{
	UE_LOG(LogTemp, Log, TEXT("Current Health Value: %f. Last Health Value: %f"), Health, LastHealthValue);
}

//...

Asumiendo que el valor inicial de la variable Health es 100 y el servidor modifica el valor en 90. Cuando en los remotos se dispara esta función, se imprimirá en la consola el siguiente log “Current Health Value: 90.0 Last Health Value: 100.0″ dado que en este punto, Health contiene el valor actual replicado por el servidor, y el parámetro LastHealthValue contiene el valor que tenía la variable antes de recibir la actualización del servidor.

😉

NOTA: Este post ha sido desarrollado usando el Unreal Engine 4.12.5, si estás trabajando con otra versión puede que encuentres algunas diferencias, ya que el Engine está en constante actualización. De ser así, déjame tus comentarios al final del post y buscamos juntos la solución.

English version: UE4 – Tip of the Day 2: Get the previous value of any variable after being replicated

Fernando Castillo Coello
Follow me

Fernando Castillo Coello

Gameplay Programmer at GameOlic
I've been into games development with Unreal Engine since 2014 and want to share with you some of the tips and tricks that I learned during my journey.
Fernando Castillo Coello
Follow me

Un pensamiento en “UE4 – Consejo del día 2: Obtener el valor que tenía una variable antes de ser replicada

  1. Ignacio

    Hola… buenos tutoriales 😀
    Yo ocupo BP con el plugin Advanced Sessions, etc…
    Y tengo una pregunta hace ya mucho tiempo que espero puedas responder si es que puedes.
    Puedo “crear” un servidor propio asi como los que usan las empresas grandes? (tampoco un sv tan profesional pero por ejemplo que un amigo que vive en otra ciudad se pueda conectar a mi sv y podamos jugar?)
    Gracias de Antemano :)

    Responder

Responder a Ignacio Cancelar respuesta

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>