이전 포스팅에서 테스트 해보왔던 멀티플레이는 동일한 로컬 네트워크에 연결된 컴퓨터의 게임 인스턴스에 연결한 것이였다. 하지만 멀티플레이라 함은 IP가 다르더라도 연결되어 플레이하는 것을 의미한다. 그렇기에 멀티플레이를 구현하기 위해서는 IP(Internet Protocol address)에 대해서 알아야한다. 그렇다면 게임에서 IP는 어떻게 이용되는것인가?
IP Address
내부 IP주소라고도 하는 로컬 IP주소는 로컬 네트워크 라우터에 의해 할당된 주소이다. 이러한 주소는 로컬 네트워크 내의 해당 컴퓨터에서만 볼수 있으며 해당 컴퓨터 이외는 연결할수 없다. 컴퓨터가 이더넷이나 WI-FI등으로 라우터와 연결되면 라우터가 로컬IP를 할당하고, 할당 받은 IP를 사용하여 인터넷 서비스 공급자(ISP)와 연결한다. 이런식으로 연결이 되면 ISP가 해당 컴퓨터를 외부로 라우터에 대한 공용 IP주소를 외부로 할당한다. 이 공용주소는 인터넷상의 다른사람들에게 보여질수 있다. 이런식으로 ISP에서 라우터, 라우터에서 로컬IP로 이동하는 방식이다. 그렇다면 다른 로컬IP를 가지고 있는 플레이어와 연결되고 싶다면 어떻게 하면 되는것인가?
인터넷 연결
해당 플레이어의 로컬IP와 공용IP를 알고 있다면 같이 플레이할수 있을것이다. 하지만 해당 플레이어의 IP를 알지 못하거나 하는 상황에서는 어떻게 해야되는가?
A.전용서버
게임자체의 전용 서버가 있으면 로그인할때 연결 가능한 IP주소 목록이 있고, 그중 하나를 서버가 선택하고 접속가능한 플레이어의 이름을 표시하며 그 사람과 연결시켜주는 방식이 있다. 단, 이런 경우 많은 비용이 든다.
B.Listen 서버
이러한 점은 Listen서버를 사용하여 해결한다. 한명의 플레이어가 게임을 시작하고 수신 대기 서버로 설정하면, 다른 플레이어가 클라이언트로 참여하는 방식이다. 이러한 방식은 서버로 신호를 보내 로그인한 다른 플레이어와 연결한다.
서버에서 게임을 호스팅하고 플레이어의 보안을 강화하며 대규모 사용자를 처리하기 위해 스케일업하려면 단순한 게임 플레이 프로그래밍 이상의 전문 지식이 필요로 한다.그렇다면 Steam이나 PS와같은 플랫폼 서비스로 연동하기 위해서 그 서비스에 맞는 자체 코드를 다시 짜야되는것인가?
UE 온라인 서브시스템
UE 온라인 서브시스템은 Steam이나 PS와 같은 플랫폼 서비스에 연동되더라도 추상레이어를 이용하여 모든 플랫폼 별 세부사항을 처리하게 해준다. 따라서 서브시스템을 이용한다면 서비스에 따라 코딩을 바꿀 필요가 없다.
Engine.ini에는 아래와 같은 기본 플랫폼 서비스를 지정한다.
[OnlineSubsystem]
DefaultPlatformService=<Platform>
온라인 서브시스템은 정적으로 액세스 할 수 있다.
IOnlineSubsystem::Get()
//return IOnlineSubsystem*
세션인터페이스는 게임 색션의 생성,관리,파괴 색션 검색 및 기타 매치메이킹을 처리한다. 세션은 서버에서 실행 중인 게임의 인스턴스로써 서버에서 실행되는 속성을 설정하고 다른 플레이어나 초대받은 사람만 참가할수 있게 알려주는 역할을 한다.
세션 생명주기
세션만들기->다른 플레이어의 입장/등록 ->세션 시작->게임 플레이->세션 끝내기->플레이어 등록해제->세션 업데이트/파괴
게임에 적용할 내용
'UE5 > UE5 MultiPlayerGame' 카테고리의 다른 글
MultiPlayerGame) 6. 세션에 참여 (0) | 2022.06.04 |
---|---|
MultiPlayerGame) 5. 참가세션 만들기 (0) | 2022.06.03 |
MultiPlayerGame) 4. 스팀연결 (0) | 2022.06.02 |
MultiPlayerGame)2.LAN 연결 (0) | 2022.05.30 |
MultiPlayerGame)1.멀티플레이의 개념 (0) | 2022.05.30 |
댓글