Online Subsystem
IP Address
- Local IP Address는 로컬 네트워크 라우터에서 컴퓨터에 할당한 주소 (192, 168등으로 시작함)
- 로컬 네트워크 내의 다른 컴퓨터만이 볼 수 있음. 외부의 컴퓨터는 로컬 IP를 이용해 컴퓨터에 연결할 수 없음
- 컴퓨터는 이더넷이나 와이파이로 ISP(Internet Service Provider) 와 연결되있음
- 외부와의 연결을 위해 ISP는 라우터에 공용 IP주소를 할당함
- 따라서 네트워크 흐름은 공개or외부IP주소 -> 로컬or내부IP주소로 이동함
- 그렇다면 로컬 네트워크 외부의 다른 컴퓨터와 연결되어 게임을 하려면?
- 다른 유저의 외부 IP주소를 알고있다면 연결할 수 있다. -> 하지만 비현실적, 비효율적
- Dedicated Server는 연결 가능한 IP주소 중 하나를 할당하고, 해당 IP주소를 다른 플레이어들에게 공유해 서로 연결이 가능하게 함 -> 게임에 플레이어가 많아질수록 더 많은 서버, 더 많은 저장공간, 더 많은 자원이 필요
- Listen Server는 플레이어중 하나가 Listen Server로 참여, 다른 플레이어들이 여기에 붙는다 -> 서버는 Listen Server 플레이어의 호스팅만 담당한다면 Dedicated Server에 비해 코스트가 줄어든다.
Online Subsystem이란?
- 유저들이 IP Address 없이도 게임에 접속할 수 있도록 만들어진 Code Base
- 플랫폼의 라이브 서비스에 맞춘 코드를 작성할 필요 없도록 크로스플랫폼의 세부사항을 언리얼의 Abstraction layer에서 자체적으로 처리했음
- 즉 Onlinesubsystem은 다양한 온라인 서비스에 연결되도록 설계된 네트워킹 추상화 계층
- 이러한 온라인 서브시스템을 사용한 플러그인을 패키징해 IP 주소의 입력 없이 간단히 Play 버튼 하나만으로 멀티플레이 세션에 접속할 수 있도록 디자인해보자.
Online Subsystem
- 온라인 플랫폼 서비스에 접근하는 기능 제공
- Xbox, Steam과 같은 온라인 플랫폼 서비스는 친구, 업적, 세션 등의 기능을 제공하는 자체 서비스셋이 있고, 온라인 서브시스템은 이런 다양한 서비스를 처리하도록 설계된 일련의 인터페이스가 있음
- 그래서 온라인 서브시스템을 사용하려면 타겟 플랫폼을 설정하고 프로젝트를 구성해야함
- Engine.ini 파일에서 다음과 같은 블럭을 추가해 기본 플랫폼 서비스를 지정한다.
[OnlineSubsystem]
DefaultPlatformService=<Platform>
- I 타입 클래스로, IOnlineSubsystem::Get() static 함수를 통해 클래스를 얻어 사용할 수 있다.
Session Interface
- 게임 세션의 생성, 관리, 파괴 로직을 담당하는 인터페이스
- 세션 검색과 매치메이킹 기능 또한 담당
- 세션 = 게임 서버에서 돌아가는 인스턴스
- Lifetime of Session
- Create Session -> 유저 대기 -> 유저 등록 -> 세션 시작 -> 게임 플레이
- 게임 종료 후 세션 종료 -> 등록된 유저 해제 -> (필요시) 세션 업데이트 or 매치 설정 변경 or 세션 Destory
- Session Interface Functions
- CreateSession()
- FindSessions()
- JoinSession()
- StartSession()
- DestroySession()
- 이 함수들만 기억해도 작동하는 게임을 만들 수 있다.
- Lifetime of Session
세션 생성 및 참가 로직

- 이렇게 소개했을 땐 내가 짠 로직과 다를게 없다.. 뭐가 잘못됬는지 알아보자.
- 이러한 로직을 다루는 Class를 생성
'Unreal 이론' 카테고리의 다른 글
Multiplayer Games Network model (0) | 2024.11.24 |
---|---|
게임의 완성 (0) | 2024.11.23 |
게임 플로우 다듬기 (1) | 2024.11.21 |
헤드업디스플레이의 구현 (0) | 2024.11.14 |
인공지능 - 행동트리 모델의 구현 (0) | 2024.11.11 |