언리얼 엔진/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);
}
생각해보면 예측, 권위 실행이 동기화를 해주는 건 아니다
어찌보면 당연히 해줘야 하는 것
대신 예측 실행이 잘 작동하고 있구나 오히려 확인 가능했다
정상 작동한다