Travel
언리얼의 Travel
에는 크게 두 가지, Seamless
와 non-seamless
방식이 있다.
Travel
은 쉽게 말해서 한 레벨에서 다른 레벨로 옮겨가는 것이다.
세션형 게임으로 예를 들어보자면, 세션에 접속했을때 로비맵에서 x명의 플레이어가 약 y분동안 대기하고 실제 플레이맵으로 옮겨지는 것이 Travel
이다.
Seamless
Seamless
는 원활하다는 뜻으로, non-blocking operation
이다. 이름대로 매끄러운, 원활한 이동이며 Transition map
이라는 중간에 거쳐가는 맵을 사용한다. 즉, A
맵에서 B
맵을 로딩할 때 순서는 A -> Transition map -> B
가 된다. 왜 이렇게 하는걸까?
만약 로비맵은 엄청 작은 놀이터인데 실제 플레이맵은 거대한 섬이라고 가정해보자. 한번에 두 맵을 모두 메모리 상에 올리기엔 비용이 너무 클 것이다. 때문에 Travel
을 해야할 때, 우선 Transition map
을 로드하고 로비맵을 해제시킨 뒤 새로운 맵을 로드하는 것이다. 로딩 스크린이 Transition map
의 예라고 볼 수 있다.
언리얼 공식 문서에 따르면 가능한 경우 Seamless travel
을 사용하는 것을 권장하고 있다. 왜냐하면 사용자 경험이 더 좋고 재연결 과정에서의 문제 발생도 어느정도 피할 수 있기 때문이다.
Non-seamless
Non-seamless
는 blocking
이며, non-seamless travel
이 실행될 경우 모든 클라이언트는 접속을 끊은 뒤 서버에 재연결해 맵을 새로 로드한다. 따라서 끊김(멈춤)이 발생한다.
blocking
과 non-blocking
의 차이는 쉽게 말해서 다음과 같다.
blocking
은 어떤 연산을 실행했을 때 그 연산이 다 끝날때 까지 기다린다. (말그대로 블로킹, 막힌다.)
non-blocking
은 연산해달라고 요청만 하고 원래 실행 흐름을 그대로 실행한다. 그러다가 연산이 완료되면 완료되었다는 요청을 듣고, 완료 후 처리해야 할 일들을 처리한다.
사용법
Game Mode에서 bUseSeamlessTravel
를 true
로 하고 Transition map
을 만든다.
[Project Settings] > [Project] > [Maps & Modes] > [Advanced] > [Transition map] 에서 만든 맵을 설정한다.
자세한 사용법은 https://docs.unrealengine.com/4.27/en-US/InteractiveExperiences/Networking/Travelling/ 을 참고하자.