Replicated

** [Drag Down] Local Prediction시 외부 컴포넌트의 동기화 ** 본문

언리얼 엔진/Drag Down

** [Drag Down] Local Prediction시 외부 컴포넌트의 동기화 **

라구넹 2025. 4. 3. 10:58

아무리 예측 실행을 하고, FScopedPredictionWindow을 켜놔도

다른 액터 컴포넌트의 값을 변화시키는 것은 해당 변수에 Replicated 달아놔야 한다

 

이걸 어떻게 알았냐면

 

동영상 서비스가 종료되어 해당 콘텐츠를 재생할 수 없습니다.

스테미나가 최종적으론 동기화되긴 하는데, 예측 실행이랑 달라서 보정되는게 보인다

그럼 예측 실행에선 스테미나를 계속 20씩 깎는다는 거다

 

로그 찍으니 동기화 안됐다

 

// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#include "CoreMinimal.h"
#include "Components/ActorComponent.h"
#include "DDAttackStateComponent.generated.h"


UCLASS( ClassGroup=(Custom), meta=(BlueprintSpawnableComponent) )
class DRAGDOWN_API UDDAttackStateComponent : public UActorComponent
{
	GENERATED_BODY()

public:	
	UDDAttackStateComponent();
	
	FORCEINLINE int8 GetAttackState() { return NowAttackState; }

	void PlusAttackState();

	FString GetSectionPrefix();
	float GetPower();
	float GetZPower();
	float GetNecessaryStamina();

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

	UPROPERTY()
	TObjectPtr < class UDDStateDrivenAttackData > StateDrivenAttackData;

	UPROPERTY(Replicated)
	int8 NowAttackState;

	int8 MaxAttackState;
};

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

	DOREPLIFETIME(UDDAttackStateComponent, NowAttackState);
}

생각해보면 예측, 권위 실행이 동기화를 해주는 건 아니다

어찌보면 당연히 해줘야 하는 것

대신 예측 실행이 잘 작동하고 있구나 오히려 확인 가능했다

 

 

동영상 서비스가 종료되어 해당 콘텐츠를 재생할 수 없습니다.

정상 작동한다