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);
}

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

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

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

 

 

정상 작동한다