UE(GAS) - SetReplicationMode()와 SetIsReplicated()

2024. 7. 25. 16:42Unreal Engine

SetIsReplicated()

AbilitySystemComponent::SetIsReplicated() 함수는 언리얼 엔진의 AbilitySystemComponent 클래스에서 해당 컴포넌트가 네트워크를 통해 복제(replication)될지 여부를 설정하는 함수입니다. 이 함수는 주로 멀티플레이어 게임에서 사용되며, 서버와 클라이언트 간에 AbilitySystemComponent의 상태를 동기화하는 데 중요한 역할을 합니다.

기능 및 사용 방법

기능

SetIsReplicated() 함수는 AbilitySystemComponent의 복제 설정을 켜거나 끄는 역할을 합니다. 복제를 활성화하면, 서버에서 발생하는 AbilitySystemComponent의 변경 사항이 클라이언트에도 전파되어 일관된 상태를 유지할 수 있습니다.

사용 방법

SetIsReplicated(true)를 호출하면 컴포넌트의 복제가 활성화되고, SetIsReplicated(false)를 호출하면 복제가 비활성화됩니다.

 

AbilitySystemComponent::SetReplicationMode() 함수는 언리얼 엔진의 Ability System Component (ASC)에서 복제 모드를 설정하는 함수입니다. 이 함수는 게임의 네트워크 상황에 맞게 능력 시스템 컴포넌트가 클라이언트와 서버 간에 어떤 데이터를 복제할지 결정하는 데 사용됩니다.

 

SetReplicationMode()

주요 기능 및 사용 방법

Ability System Component는 플레이어의 능력(abilities) 및 효과(effect)를 관리하는 시스템입니다. 복제 모드 설정은 네트워크 환경에서 능력 및 효과가 어떻게 동기화될지를 결정하는 데 중요한 역할을 합니다.

복제 모드 (Replication Mode)

EGameplayEffectReplicationMode 열거형(Enum)을 사용하여 복제 모드를 설정할 수 있습니다. 주요 옵션은 다음과 같습니다:

  1. Minimal:
    • 최소한의 데이터만 복제합니다.
    • 주로 서버에서 권한이 있는 환경에서 사용됩니다.
    • 네트워크 트래픽을 줄이는 데 유용합니다.
  2. Mixed:
    • 최소한의 데이터와 더불어 중요한 데이터를 복제합니다.
    • 중요한 데이터가 서버에서 변경되면 클라이언트에게 전송됩니다.
  3. Full:
    • 모든 데이터를 복제합니다.
    • 서버와 클라이언트 간의 완벽한 동기화가 필요할 때 사용됩니다.
    • 네트워크 트래픽이 증가할 수 있습니다.
  4.  

주요 고려 사항

  1. 성능:
    • AbilitySystemComponent의 복제를 활성화하면 네트워크 트래픽이 증가할 수 있습니다. 복제 설정은 게임의 성능과 네트워크 대역폭을 고려하여 신중하게 결정해야 합니다.
  2. 네트워크 동기화:
    • 복제를 활성화하면 서버와 클라이언트 간의 데이터 일관성을 유지할 수 있습니다. 이는 특히 플레이어의 능력이나 상태가 실시간으로 변하는 멀티플레이어 게임에서 중요합니다.
  3. 클라이언트 권한:
    • 클라이언트가 특정 능력을 실행하거나 속성을 변경할 권한이 있는 경우, 복제 설정을 통해 이러한 변경 사항이 서버와 동기화되도록 할 수 있습니다.

결론

SetIsReplicated() 함수는 AbilitySystemComponent의 상태를 서버와 클라이언트 간에 동기화할지 여부를 결정하는 중요한 함수입니다. 이를 통해 멀티플레이어 게임에서 능력과 효과를 효율적으로 관리하고 일관된 게임플레이 경험을 제공할 수 있습니다. 게임의 성능과 네트워크 대역폭을 고려하여 복제 설정을 적절히 조정하는 것이 중요합니다.

 

예제 코드

 

 

1
2
3
4
5
6
7
8
9
10
11
12
AMyPlayerState::AMyPlayerState()
{
    
 
    AbilitySystemComponent = CreateDefaultSubobject<UAbilitySystemComponent>("AbilitySystemComponent");
    AbilitySystemComponent->SetIsReplicated(true);
    AbilitySystemComponent->SetReplicationMode(EGameplayEffectReplicationMode::Mixed);
 
    AttributeSet = CreateDefaultSubobject<UAttributeSet>("AttributeSet");
 
 
}
cs

 

필자가 현재 진행중인 프로젝트는 AbilitySystemComponent 를 MyPlayerState에서 관리하고있다.

 

PlayerState가 본체이고 Character가 빙의 할 인형이다. 캐릭터가 교체되더라도 Player 속성을 그대로 가져가려면

중요 정보를 PlayerState에 저장하면 된다. 폰이 사라져도 다른 폰으로 교체하면 된다.