0. 복제(Replication)

서버에서 변경된 각 폰의 로컬 변수의 값을 모든 클라이언트에게 전송하는 것.

이를 통해 모든 클라이언트는 해당 폰의 로컬 변수 값을 동일하게 유지할 수 있다(동기화 된다).

 

1. 복제 모드(Replication Mode)

- EGameplayEffectReplicationMode 열거형 클래스

게임플레이 이펙트가 클라이언트에 복제되는 방식을 설정한다.

(1) Minimal(최소)

최소한의 상태(State) 또는 게임플레이 이펙트 정보만 복제함. 

- AI 컨트롤, 멀티 플레이

 

(2) Mixed(복합)

상황에 따라 복제할 데이터를 유연하게 선택하여 복제함. 단 보유자에게는 전체 정보를 전달

- 큐와 태그만 복제, 이펙트는 해당 클라이언트에게만 복제

- 플레이어 컨트롤, 멀티 플레이

 

(3) Full(최대)

모든 게임플레이 정보를 복제함.

- 싱글 플레이

 

이를 이용하여 AI 캐릭터에서는 Minimum, 플레이어 스테이트에서는 Mixed를 사용한다.

 

2. 코드

- Enemy 캐릭터 클래스

AAuraEnemy::AAuraEnemy()
{
    GetMesh()->SetCollisionResponseToChannel(ECC_Visibility, ECR_Block);

    AbilitySystemComponent = CreateDefaultSubobject<UAuraAbilitySystemComponent>("AbilitySystemComponent");

    // 멀티에서의 복제
    AbilitySystemComponent->SetIsReplicated(true);
    AbilitySystemComponent->SetReplicationMode(EGameplayEffectReplicationMode::Minimal);

 

- 플레이어 스테이트

AAuraPlayerState::AAuraPlayerState()
{
    // 서버 업데이트 빈도
    // GAS에 적용하기 위해 빈도를 더 빠르게 조정
    NetUpdateFrequency = 100.f;

    AbilitySystemComponent = CreateDefaultSubobject<UAuraAbilitySystemComponent>("AbilitySystemComponent");

    // 멀티에서의 복제
    AbilitySystemComponent->SetIsReplicated(true);
    AbilitySystemComponent->SetReplicationMode(EGameplayEffectReplicationMode::Mixed);