독립형/클라이언트/리슨 서버/데디케이티드 서버
멀티플레이 기반으로 만들어진 게임은 독립형 게임에서도 문제없이 작동합니다.
서버를 담당할 어플리케이션은 실행되었지만, 게임은 아직 시작되지 않은 상황
어플리케이션의 네트워크 기능도 활성화되지 않음 - 스탠드얼론
게임의 심판 역할을 하는 게임 모드 액터 존재
리슨 서버는 클라이언트와 서버의 기능이 공존, 리슨 서버를 돌리는 컴퓨터도 게임에 참여 필요
리슨 서버를 시작하기 전에 자기 자신이 게임에 참여해 있어야 함
플레이어를 대표하는 액터인 플레이어 컨트롤러 생성
게임 모드와 플레이어 컨트롤러가 생성되어 다른 사용자를 받아들일 준비가 됨
네트워크를 켜고 게임 서비스를 시작 - 리슨 서버
클라이언트가 서버에 접속하여 게임에 참가 시도
접속 요청을 받아들이면 접속할 클라이언트를 담당하는 플레이어 컨트롤러 생성
생성된 플레이어 컨트롤러는 클라이언트에 복제(Proxy)
복제 시엔 최소한의 정보만 전달 (서버의 보안, 최적화 등의 이유)
서버에서 게임이 이미 시작되었기에 클라이언트는 접속하자마자 게임을 시작
- 서버 실행 로그
서버에서는 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 캐스팅 필요