MultiPlayer

Clear·2024년 10월 22일

EPortfolio docs

MultiPlayer Architecture 3가지

PEER-TO-PEER (P2P)

모든 Player가 서로 직접 통신하는 Architecture입니다. 즉, 각 Client가 서로의 Sever 역할을 하며, Game Data를 주고받습니다.

  • 장점
    Sever가 필요 없고, Network cost가 적게 듭니다.
  • 단점
    모든 Cleient가 동일한 권한을 가지므로 Hacking에 취약하고, Network 동기화가 어려울 수 있습니다. 또한, 각 Client의 Internet Conection 품질에 따라 게임 성능이 영향을 받을 수 있습니다.
  • 사용 사례
    1:1 대전 게임이나 작은 인원으로 이루어진 Game에서 주로 사용됩니다.

Listen Server

한 Player가 Game을 Hosting하고, 다른 Player들이 그 Host에게 접속하는 방식입니다. Host는 Client이면서 동시에 Server 역할을 수행합니다.

  • 장점
    별도의Dedicated Server가 필요 없으므로 Server Cost가 절감됩니다. P2P보다 보안 이 좀 더 나으며, Server Host의 성능이 우수하면 상대적으로 안정적인 Game을 제공할 수 있습니다.
  • 단점
    Server가 Game을 종료하면 모든 Session이 종료됩니다. 또한 Host의 Network 상태나 Computer 성능이 좋지 않으면 전체 Player에게 영향을 줄 수 있습니다.
  • 사용 사례
    비교적 소규모 Multiplayergame에서 자주 사용됩니다.

Dedicated Server

Clienet들과 별도로 독립적인 Server에서 Game을 Hosting하는 Architecture입니다. 이 Sever는 Game Play에는 참여하지 않고, 오직 Client들의 Game Data 처리를 담당합니다.

  • 장점
    가장 안정적이고 성능이 뛰어난 Architecture입니다. Server Host가 Client가 아니기 때 문에 Server 종료 문제나 Host 성능에 따른 제약이 없습니다. 보안 측면에서도 우수합니다.
  • 단점
    서버 유지 비용이 발생하며, 클라우드 또는 물리적 서버를 관리해야 합니다.
  • 사용 사례
    MMORPG, BattleRoyal Game 등 Massively Multiplayer Online Game 에서 사용됩니다.

UPROPERTY Replication

  • UPROPERTY(Replicated)
    서버에서 값이 변경되면 클라이언트에 자동으로 동기화
    단순한 값 복제만 수행콜백 함수 없음
  • UPROPERTY(ReplicatedUsing = OnRep_FunctionName)
    값이 서버에서 변경되어 클라이언트로 복제되면, 자동으로
    OnRep_FunctionName을 호출
    클라이언트에서 복제된 값을 처리하는 로직을 작성할 때 사용
    On_Rep 함수는 클라이언트에서만 호출되며 서버에서는 호출되지 않음.

UFUNCTION Remote Procedure Call

  • UFUNCTION(Client)
    서버 호출 → 특정 클라이언트 실행
  • UFUNCTION(Server)
    특정 클라이언트 호출 → 서버에서 실행
  • UFUNCTION(NetMulticast)
    서버 호출 → 서버 포함 모든 클라이언트 실행
  • UFUNCTION(Unreliable)
    호출을 보장하진 않지만, 빠른 실행가능손실 가능성
  • UFUNCTION(Reliable)
    호출 보장

Server 함수는 반드시 서버 권한이 있어야 실행 가능
UFUNCTION(Client)와 UFUNCTION(Multicast)는 서버에서만 호출해야 정상 작동

ENetRole

  • ROLE_None
    네트워크에 연결되지 않은 상태
  • ROLE_SimulatedProxy
    클라이언트가 소유하지 않는 액터. 서버의 복제본.
  • ROLE_AutonomousProxy
    클라이언트가 소유하고 직접 제어하는 액터.
  • ROLE_Authority
    서버가 소유하고 있는 액터.
  • ROLE_MAX
    열거형 최대값
profile
Programmer

0개의 댓글