본문 바로가기

Unreal Engine

[게임서버/언리얼엔진] 심리스/논심리스 서버

멀티 플레이어 게임을 처음 개발할 때 듣게되는 단어중 심리스/논심리스 게임 서버가 있다. 이 두개의 차이는 무엇일까?

 

  • 논 심리스 서버

클라이언트는 서버로부터 연결을 끊으면, 다시 같은 서버에 접속할 수 있는 서버이다.

만약 맵을 처음으로 로딩하는 경우나, 서버에 처음 접속하는 경우, 그리고 멀티 플레이어 게임이 끝나고 다시 새로운 것을 시작하는 경우 언리얼 엔진 기반 게임의 경우 논 심리스 Travel이 일어난다고 한다. 

  • 심리스 서버

더욱 더 매끄러운 경험을 하게 하기 위해서, 클라이언트는 서버로부터 끊김이 없는 방식을 말한다. 이를 통해서 서버를 찾을 수 없거나, 또는 서버가 갑자기 많은 인원을 수용하거나 다시 들어오는 유저의 재접속 이슈를 해결할 수 있다. 

이 기능을 사용하기 위해선 언리얼 코드 기반 서버 코드에서는 다음과 같은 옵션을 true로 지정해야 한다.

bUseSeamlessTravel = true;

그리고 우리는 맵을 전환시키거나 레벨을 전환시키기 위한 Transition map을 필요로 합니다. Transition map은 하나의 맵에서 다른 맵으로 전환시키기 위한 맵입니다. 이 맵은 항상 주어진 시간에 로딩이 되는 것을 보장합니다. 그래서 만약 A라는 맵에서 B라는 맵 사이에 Transition map이 없다면 우리는 A 맵이 로딩되는 동안 B 맵을 불러와야할 것입니다. 그리고 이것은 엄청난 양의 리소스를 필요로 할 것입니다. 그래서 우리는 우리가 이전에 이미 로딩한 것을 해제하는 동안 Transition map을 사용하는 식으로 합니다. 그리고 우리가 Transition map을 사용하는 동안, 우리는 새로운 맵을 로딩할 수 있습니다. 


이제 언리얼에서 사용하는 Travel 기법을 정리해봅시다.

UWorld::ServerTravel는 다음과 같은 특징을 가지고 있습니다. 

  1. 서버 코드에만 돌아가는 코드입니다.
  2. 서버를 새로운 레벨로 점프시킵니다.
  3. 그러면 접속한 클라이언트도 전부 같이 따라갑니다.
  4. 서버는 APlayerController::ClientTravel을 실행합니다.

그러면 APlayerController::ClientTravel는 다음과 같은 것을 진행합니다.

  1. 클라이언트가 이것을 실행합니다. -> 이는 새로운 서버로 이동합니다.
  2. 서버에서 이것을 호출하면 다음과 같은 일이 일어납니. -> 플레이어들이 새로운 맵으로 이동할 수 있게합니다.