온라인 서브시스템 11

[언리얼 C++] 온라인 서브시스템 Steam

온라인 서브시스템 Steam API를 통해 언리얼 엔진 4 애플리케이션을 Valve의 Steam 플랫폼에 출시하는 것이 가능합니다. Steam 모듈의 주 목적은 Steam 사용자들에게 매치메이킹이나 리더보드같은 피처 세트가 포함된 애플리케이션을 쉽게 배포할 수 있도록 하기 위함입니다. 추가적으로 Steam 모듈은 온라인 서브시스템으로 노출된 인터페이스를 다수 구현하여 Steamworks Software Development Kit(SDK)에 제공된 것을 대부분 지원합니다. 사용가능한 Steam 인터페이스는 아래와 같습니다. 매치메이킹 리더보드 업적 음성 유저 클라우드 공유 클라우드 외부 UI 위의 지원되는 인터페이스를 사용하여 애플리케이션에 피처 세트를 포함시킬 수 있습니다. 1. Steamworks 다..

[언리얼 C++] 온라인 서브시스템 데이터 타입

이 글에서는 온라인 서브시스템 전반에 걸쳐 사용되는 다양한 데이터 구조체에 대해 알아보도록 하겠습니다. 1. IOnlinePlatformData IOnlinePlatformData는 인터페이스 클래스로, 그 안에 들어있는 데이터를 고려하지 않고 데이터를 전달할 수 있도록 해줍니다. 사람이 읽을 수 있는 버전의 데이터는 ToString() 함수를 통해 얻을 수 있으며, 그 이외에는 플랫폼 코드만 데이터에 직접 연산해야 할 것입니다. 다양한 구조체의 플랫폼 전용 표현을 종종 볼 수 있는데, 게임에서의 처리는 필요하지만 디테일을 노출시킬 필요는 없는 것을 말합니다. 이를 통해 게임이 데이터를 보유하다가 세부적인 이해 없이도 다른 플랫폼에 리플리케이트할 수 있습니다. IOnlinePlatformData의 파생 ..

[언리얼 C++] Session 인터페이스(온라인 서브시스템)

매치메이킹은 플레이어와 세션을 매치해 주는 프로세스를 말합니다. 세션은 기본적으로 서버에서 실행중인 게임의 인스턴스를 말하는 것으로, 여기에는 일정한 프로퍼티를 통해 공개적으로 홍보해서 게임을 플레이하고자 하는 플레이어가 검색하여 참가할 수 있도록 하는 공개 세션과 초대를 받았거나 그 존재를 알고있는 플레이어만 참가할 수 있는 개인 세션이 있습니다. 현재 플레이중인 모든 게임이 나열된 온라인 게임 로비를 그려봅시다. 목록의 각 게임은 세션, 또는 개별 온라인 매치입니다. 플레이어는 검색이나 기타 수단을 통해 세션을 알게 되고, 그 세션에 참가하여 매치를 플레이합니다. 세션의 기본적인 life cycle은 다음과 같습니다. 원하는 세팅으로 새로운 세션을 생성합니다. 플레이어의 매치 참가 요청을 기다립니다...

[언리얼 C++] Store 인터페이스(온라인 서브시스템)

게임에서 사용자 구매를 지원하는 두가지 인터페이스 중 Store 인터페이스는 사용자에게 특정 항목을 제안하며, Purchase 인터페이스는 사용자가 그 제안을 수락할 수 있도록 해줍니다. Store 인터페이스를 통해 게임에서는 온라인 서비스에서 제안을 검색하여 카테고리 별로 분류하고 필터를 적용해 개별적으로 관리할 수 있습니다. 제안(FOnlineStoreOffer 클래스)에는 사용자가 게임을 통해 구매할 수 있는 모든 것에 대한 필수 정보가 전부 들어있습니다. 여기에는 설명, 가격, 시작 및 종료일과 같은 정보가 포함됩니다. 카테고리(FOnlineStoreCategory 클래스)에는 훨씬 단순한 데이터가 저장되며, 하위 카테고리 이름과 목록만 들어갑니다. 온라인 서비스 자체에서 제안을 설정하고 관리하는..

[언리얼 C++] Presence 인터페이스(온라인 서브시스템)

온라인 서비스에 로그인하면 사용자는 자신의 친구나 온라인에서 만난 다른 사용자에 대한 (온라인인지, 지금 무얼 하는지, 게임에 참가할 수 있는지 등의) 정보를 볼 수 있습니다. Presence 인터페이스는 온라인 서브시스템에 이러한 기능을 제공합니다. 1. 현재상태 대부분의 온라인 서비스는 각 사용자의 "온라인", "오프라인", "자리 비움"과 같은 여러가지 기본 상태뿐 아니라 "로비에 있음" 또는 "(맵에서) 매치 중"과 같은 게임 특정 상태를 인식합니다. 그러나 서비스 별 개인 정보 보호 정책 및 계정 설정으로 인해 이러한 설정이 항상 표시되지 않을 수도 있고 사용자에 따라 볼 수 있거나 없을 수도 있습니다. 온라인 서브시스템은 이러한 정책이나 설정과 상호 작용하지는 않지만 검색하는 정보는 영향을 받..

[언리얼 C++] Online User 인터페이스(온라인 서브시스템)

Online User 인터페이스는 원격 및 로컬 사용자에 대해 캐시에 저장된 모든 정보와 메타데이터의 중앙 저장소입니다. 또한 이 인터페이스는 역방향 조회 기능을 제공하므로, 개발자는 표시명이나 이메일 주소에 따라 사용자 ID를 검색하고 언리얼 엔진 4의 네이티브 FUniqueId 시스템에 다시 매핑시킬 수 있습니다. 1. 사용자 메타데이터 액세스 사용자 메타데이터에 액세스하려면, 먼저 온라인 서비스에서 그 데이터를 요청하고 캐시에 저장해야 합니다. QueryUserInfo () 함수를 호출할때 정보를 원하는 사용자에 대한 FUniqueNetId 값 목록, 요청을 한 로컬 사용자의 인덱스를 파라미터로 넘기면 됩니다. 이는 비동기 프로세스이며, 완료되면 (FOnQueryUserInfoComplete 유형)..

[언리얼 C++] Identity 인터페이스(온라인 서브시스템)

Identity 인터페이스는 플레이어 ID 관리를 위한 온라인 인터페이스입니다. 게임 세션에 접속하고 인터넷을 통해 다른 플레이어와 상호작용하기 위해서는 보통 타사 온라인 서비스의 등록 계정에 로그인해야 합니다. 이 서비스 운영 주체는 소셜 미디어 사이트, 하드웨어 플랫폼 소유사, 게임 서비스 등 다양합니다. 언리얼 엔진 4의 Identity 인터페이스는 이 서비스와의 계정 관련 상호작용을 처리하며, 사용자 인증 및 액세스 토큰 획득 관련 기능을 제공합니다. 1. 인증 함수 Login Login() 함수는 로컬 플레이어의 계정 정보를(FOnlineAccountCredentials) 받아 온라인 서비스에 로그인 시도합니다. 계정 정보를 자동 생성하거나, 명령줄 인수에서 생성하려면, AutoLogin() 함..

[언리얼 C++] Friends 인터페이스(온라인 서브시스템)

친구와 게임을 하고 온라인에서 새로운 플레이어를 만나는 것은 많은 온라인 서비스에서 중요한 부분입니다. Friends 인터페이스에는 다른 사용자 추가, 제거, 차단은 물론 사용자의 소셜 친구 목록을 관리하는 기능이 있습니다. 1. 친구 관리 친구 목록은 온라인 서비스 서버에 저장되며 친구 추가 또는 제거, 게임과 세션에 들어가고 나가거나 서비스 로그인/로그아웃으로 세션 중에 변경될 수 있습니다. 따라서 이러한 목록을 관리하려면 서버에 최신 정보를 쿼리한 다음 해당 정보를 캐시에 저장하고 게임에서 사용하는 과정이 필요합니다. 친구 목록 검색 사용자의 친구 목록을 처리하는 첫번째 단계는 보통 ReadFriendsList() 함수를 호출하여 지정된 로컬 사용자가 가진 친구 목록의 최신 버전을 검색하는 것입니다..

[언리얼 C++] External UI 인터페이스(온라인 서브시스템)

일부 온라인 서비스는 게임 콘솔처럼 전용 디바이스에서 실행되는 경우라면 특히나, 특정 작업을 실행할때마다 뜨는 표준화된 내장 유저 인터페이스가 있습니다. 예를 들어 친구 추가, 매치 참가를 위한 초대 전송, 신용 카드 등록과 같은 작업을 하면 게임과 무관한 별도의 양식, 오버레이, 화면, 워크플로를 통해 사용자가 조작하게 될 수 있습니다. 그렇게 하는 이유는 보통 민감할 수도 있는 작업을 항상 똑같은 방식으로 처리하기 위해서입니다. 그리고 개별 타사가 아닌 온라인 서비스를 소유한 회사가 제어할 수 있도록 하기 위해서입니다. 이 기능이 모든 온라인 서비스에 전부 표준이 아닐 수도 있으며, 어떤 경우에는 한 특정 서비스나 시스템에만 존재할 수도 있습니다. 이처럼 제 각각인 기능을 처리하기 위해, 온라인 서브..

[언리얼 C++] Achievements 인터페이스(온라인 서브시스템)

Achievements는 플레이어에게 도전 과제, 동기 부여, 보상을 제공하여 게임에서 제공하는 내용을 보다 많이 경험할 수 있도록 이끌어 주는 수단으로, 게임을 다시 플레이하는 가치를 높이거나 플레이어와 친구들 사이 경쟁을 지원할 수도 있습니다. 다수의 온라인 서비스에서 Achievements에 보상을 주는 기능을 제공하며, 온라인 서브시스템에서는 Achievements 인터페이스를 통해 지원하고 있습니다. 온라인 서브시스템은 Achievements 시스템 사용을 위한 게임 내 함수 기능을 제공하지만, Achievements 자체를 생성, 삭제, 어떤식으로든 수정하는데 관련된 기능을 처리하지는 않습니다. 각 온라인 서비스에서 별도의 백엔드 시스템을 통해 Achievements 관리를 지원하고 있습니다...