언리얼 엔진5 Advanced - 게임 모드와 로그인

타입·2025년 3월 31일
0

언리얼 강의

목록 보기
24/47

어플리케이션의 네트워크 모드

독립형/클라이언트/리슨 서버/데디케이티드 서버

멀티플레이 기반으로 만들어진 게임은 독립형 게임에서도 문제없이 작동합니다.

게임 모드 기반의 로그인 플로우

서버의 초기화

서버를 담당할 어플리케이션은 실행되었지만, 게임은 아직 시작되지 않은 상황
어플리케이션의 네트워크 기능도 활성화되지 않음 - 스탠드얼론
게임의 심판 역할을 하는 게임 모드 액터 존재

플레이어의 로그인

리슨 서버는 클라이언트와 서버의 기능이 공존, 리슨 서버를 돌리는 컴퓨터도 게임에 참여 필요
리슨 서버를 시작하기 전에 자기 자신이 게임에 참여해 있어야 함
플레이어를 대표하는 액터인 플레이어 컨트롤러 생성

리슨 서버의 시작

게임 모드와 플레이어 컨트롤러가 생성되어 다른 사용자를 받아들일 준비가 됨
네트워크를 켜고 게임 서비스를 시작 - 리슨 서버

클라이언트의 접속 시도

클라이언트가 서버에 접속하여 게임에 참가 시도
접속 요청을 받아들이면 접속할 클라이언트를 담당하는 플레이어 컨트롤러 생성
생성된 플레이어 컨트롤러는 클라이언트에 복제(Proxy)
복제 시엔 최소한의 정보만 전달 (서버의 보안, 최적화 등의 이유)
서버에서 게임이 이미 시작되었기에 클라이언트는 접속하자마자 게임을 시작

네트워크 멀티플레이어용 로그 매크로 제작

게임 모드의 주요 함수

  • PreLogin
    클라이언트의 접속 요청을 처리하는 함수
  • Login
    접속을 허용한 클라이언트에 대응하는 플레이어 컨트롤러를 만드는 함수
  • PostLogin
    플레이어 입장을 위해 플레이어에 필요한 기본 설정을 모두 마무리하는 함수
  • StartPlay
    게임의 시작을 지시하는 함수
  • BeginPlay
    게임 모드의 StartPlay를 통해 게임이 시작될 때 모든 액터에서 호출하는 함수
  • 서버 실행 로그
    서버에서는 PreLogin 과정이 일어나지 않음
    자기 자신은 접속 허용 처리할 필요가 없음
// 원래는 STANDALONE으로 나와야하는데 SERVER로 나옴..?
LogABNetwork: [SERVER] AABGameMode::Login Begin
LogABNetwork: [SERVER] AABGameMode::Login End
LogABNetwork: [SERVER] AABGameMode::PostLogin Begin
LogABNetwork: [SERVER] AABGameMode::PostLogin End
// 서버 세팅 완료
LogABNetwork: [SERVER] AABGameMode::StartPlay Begin
LogABNetwork: [SERVER] AABPlayerController::BeginPlay Begin
LogABNetwork: [SERVER] AABPlayerController::BeginPlay End
LogABNetwork: [SERVER] AABGameMode::StartPlay End
  • 클라이언트 접속 로그
    PreLogin 과정이 일어나며 서버에 접속 요청
LogABNetwork: [SERVER] AABGameMode::PreLogin Begin
LogABNetwork: [SERVER] AABGameMode::PreLogin End
LogABNetwork: [SERVER] AABGameMode::Login Begin
LogABNetwork: [SERVER] AABPlayerController::BeginPlay Begin
LogABNetwork: [SERVER] AABPlayerController::BeginPlay End
LogABNetwork: [SERVER] AABGameMode::Login End
LogABNetwork: [SERVER] AABGameMode::PostLogin Begin
LogABNetwork: [SERVER] AABGameMode::PostLogin End
// 자신의 플레이어 컨트롤러 복제
LogABNetwork: [CLIENT1] AABPlayerController::BeginPlay Begin
LogABNetwork: [CLIENT1] AABPlayerController::BeginPlay End

게임의 시작

게임 모드의 StartPlay() 함수가 호출되면 서버에서는 공식적으로 게임이 시작됐다는 것을 의미
이후에 생성되는 모든 액터들은 BeginPlay() 함수가 자동으로 호출됨
하지만 클라이언트에는 게임 모드가 존재하지 않음
대신 게임 스테이트는 서버와 클라이언트에 존재
게임 모드의 명령을 받은 게임 스테이트는 월드에 속한 모든 액터들에게 BeginPlay()를 호출하도록 처리 - HandleBeginPlay()

  • 서버 실행 로그
LogABNetwork: [SERVER] AABGameMode::Login Begin
LogABNetwork: [SERVER] AABGameMode::Login End
LogABNetwork: [SERVER] AABGameMode::PostLogin Begin
LogABNetwork: [SERVER] AABGameMode::PostLogin End
LogABNetwork: [SERVER] AABGameMode::StartPlay Begin
LogABNetwork: [SERVER] AABGameState::HandleBeginPlay Begin // 게임 모드로부터 호출
LogABNetwork: [SERVER] AABPlayerController::BeginPlay Begin
LogABNetwork: [SERVER] AABPlayerController::BeginPlay End
LogABNetwork: [SERVER] AABGameState::HandleBeginPlay End
LogABNetwork: [SERVER] AABGameMode::StartPlay End
  • 클라이언트 접속 로그
LogABNetwork: [SERVER] AABGameMode::PreLogin Begin
LogABNetwork: [SERVER] AABGameMode::PreLogin End
LogABNetwork: [SERVER] AABGameMode::Login Begin
LogABNetwork: [SERVER] AABPlayerController::BeginPlay Begin
LogABNetwork: [SERVER] AABPlayerController::BeginPlay End
LogABNetwork: [SERVER] AABGameMode::Login End
LogABNetwork: [SERVER] AABGameMode::PostLogin Begin
LogABNetwork: [SERVER] AABGameMode::PostLogin End
LogABNetwork: [CLIENT1] AABGameState::OnRep_ReplicatedHasBegunPlay Begin // 서버의 bReplicatedHasBegunPlay 값이 변경됨
LogABNetwork: [CLIENT1] AABPlayerController::BeginPlay Begin
LogABNetwork: [CLIENT1] AABPlayerController::BeginPlay End
LogABNetwork: [CLIENT1] AABGameState::OnRep_ReplicatedHasBegunPlay End

실습코드

https://github.com/dnjfs/ArenaBattle_Network/commit/ed5d6f75aa8910363d34728a64dc90593022d3da

  • 함수 이름 출력
    __FUNCTION__ 사용

  • 에디터 번호 출력
    GPlayInEditorID 사용
    버전 5.3부턴 int32 캐스팅 필요

profile
주니어 언리얼 프로그래머

0개의 댓글