메모내용
마우스 위치 HUD

OnlineSubSystem

커리큘럼

멀티플레이 게임 개발을 위한 Unreal Engine 학습 커리큘럼은 다음과 같습니다.
  1. 네트워크 프로그래밍 기초
    • 소켓 프로그래밍 개념 이해
    • 멀티플레이 게임 아키텍처 이해
    • 언리얼 엔진을 이용한 네트워크 프로그래밍 기초 학습
  2. 멀티플레이 게임 기능 개발
    • 서버-클라이언트 아키텍처 구축
    • 멀티플레이 게임 기능 구현 (예: 로비, 매치메이킹, 팀 플레이 등)
    • 멀티플레이 게임 플레이어 상호작용 구현

1-2. 멀티플레이 게임 아키텍처 이해

멀티플레이 게임 아키텍처는 멀티플레이 게임을 구성하는 요소들과 그 요소들이 서로 상호작용하는 방식을 설명하는 것입니다. 멀티플레이 게임에서는 여러 플레이어들이 동시에 게임을 진행하기 때문에, 게임의 아키텍처는 다음과 같은 요소들을 고려해야 합니다.
  1. 서버-클라이언트 아키텍처
    : 멀티플레이 게임에서는 서버와 클라이언트가 각각 존재합니다. 클라이언트는 플레이어가 조작하는 게임 화면을 보여주고, 서버는 모든 클라이언트의 게임 진행 상황을 관리합니다. 서버와 클라이언트의 상호작용 방식은 네트워크 프로그래밍에서 다루는 주제이며, 멀티플레이 게임 아키텍처에서 중요한 역할을 합니다.
  2. 동기화
    : 멀티플레이 게임에서는 각 플레이어들이 동시에 게임을 진행하므로, 각 플레이어의 게임 상황은 다르게 됩니다. 이 때, 모든 플레이어들은 동일한 게임 상황을 보여주어야 하므로, 게임의 상태를 서로 동기화해주어야 합니다. 예를 들어, 두 플레이어가 동시에 게임 아이템을 획득했다면, 서버는 이를 모든 클라이언트에게 알리고, 모든 클라이언트는 해당 아이템이 누구에게 소유되어 있는지 동일하게 보여주어야 합니다.
  3. 인터페이스
    : 멀티플레이 게임에서는 여러 플레이어들이 함께 게임을 진행하므로, 플레이어들 간의 상호작용을 위한 인터페이스가 필요합니다. 이 인터페이스는 플레이어들이 서로 통신하고, 팀을 구성하고, 게임 내에서의 목표를 공유하는 등의 기능을 수행합니다.
  4. 보안
    : 멀티플레이 게임에서는 여러 플레이어들이 서로 정보를 주고받으므로, 보안 문제가 중요한 이슈가 됩니다. 게임 개발자는 보안 문제를 고려하여, 해킹이나 치팅 같은 문제를 예방하고 대처할 수 있는 방법을 고안해야 합니다.
  5. 게임 세션 관리
    : 멀티플레이 게임에서는 여러 플레이어들이 게임 세션에 참여합니다. 이 때, 게임 세션의 관리는 매우 중요한 문제가 됩니다. 게임 개발자는 게임 세션을 안정적으로 유지하고, 중간에 참여한 플레이어나 나간 플레이어를 적절하게 처리하여, 게임 세션이 원활하게 진행될 수 있도록 해야 합니다.
  6. 대규모 게임 지원
    : 멀티플레이 게임에서는 대규모의 플레이어들이 동시에 게임을 즐기는 경우가 많습니다. 이 때, 게임 서버와 클라이언트가 대규모의 플레이어들을 처리할 수 있어야 합니다. 게임 개발자는 이러한 대규모 게임을 지원하기 위해, 효율적인 서버 아키텍처와 네트워크 아키텍처를 설계해야 합니다.
  7. 인터페이스 설계
    : 멀티플레이 게임에서는 여러 플레이어들이 게임을 함께 진행하므로, 게임 인터페이스는 플레이어들이 서로 상호작용할 수 있도록 설계되어야 합니다. 인터페이스는 각 플레이어의 정보, 게임 상황, 채팅 기능, 그룹 기능, 게임 목표 등을 제공하여, 플레이어들이 게임을 더욱 즐길 수 있도록 돕습니다.

게임 세션

게임 세션(Game Session)은 멀티플레이 게임에서 여러 플레이어들이 게임을 하기 위해 필요한 정보들을 포함하고 있는 개념입니다. 게임 세션은 게임을 진행하기 위해 필요한 모든 정보를 저장하고, 클라이언트와 서버 간의 데이터를 주고받는 방법을 정의합니다.

게임 세션은 일반적으로 다음과 같은 정보를 포함합니다.

  • 게임 모드(Game Mode)
  • 맵(Map)
  • 게임 규칙(Game Rules)
  • 플레이어 수(Player Count)
  • 게임 시작 시간(Game Start Time)
  • 게임 상태(Game State)
  • 게임 세션은 게임 서버에서 생성되며, 클라이언트는 서버에 연결하여 게임 세션 정보를 받아옵니다. 클라이언트가 게임에 참여할 때에는 게임 세션의 정보를 이용하여 해당 게임에 참여할 수 있습니다. 또한, 게임 세션은 여러 플레이어들이 게임을 함께하는 공간입니다. 따라서, 게임 세션 관리는 매우 중요한 이슈가 됩니다. 게임 개발자는 게임 세션을 안정적으로 유지하고, 중간에 참여한 플레이어나 나간 플레이어를 적절하게 처리하여, 게임 세션이 원활하게 진행될 수 있도록 해야 합니다.

    1-3. 언리얼 엔진을 이용한 네트워크 프로그래밍 기초 학습

    언리얼 엔진을 이용한 네트워크 프로그래밍 기초 학습은 언리얼 엔진을 이용하여 멀티플레이 게임을 개발하기 위해 필요한 기본적인 네트워크 프로그래밍 기술을 학습하는 것입니다. 언리얼 엔진은 네트워크 기능을 제공하며, 다양한 기능을 사용할 수 있습니다. 예를 들어, 언리얼 엔진에서는 서버-클라이언트 아키텍처, 무선 네트워크, 씬 전환, 게임 스테이트, 애니메이션 동기화 등의 다양한 네트워크 기능을 지원합니다. 언리얼 엔진에서 네트워크 프로그래밍을 학습하기 위해서는, 먼저 C++ 언어를 이용하여 게임 로직을 작성하는 방법과 언리얼 엔진에서 제공하는 네트워크 기능을 사용하는 방법을 익혀야 합니다. 예를 들어, 네트워크 통신을 위한 소켓을 생성하고, 클라이언트와 서버 간의 데이터 전송을 처리하는 방법 등을 학습해야 합니다. 이를 위해 언리얼 엔진에서는 UObject 클래스를 상속하여 네트워크 게임을 작성할 수 있도록 지원하며, UPROPERTY 매크로를 사용하여 네트워크 통신을 위한 변수를 설정할 수 있습니다. 또한, Replication 매크로를 사용하여 서버와 클라이언트 간에 데이터를 자동으로 동기화할 수 있습니다. 언리얼 엔진에서는 네트워크 게임을 개발하기 위한 다양한 기술과 도구를 제공하며, 이를 이용하여 멀티플레이 게임을 개발할 수 있습니다.

    세션 관련 함수


    언리얼 엔진에서 클라이언트와 서버 간의 네트워크 연결을 처리하는 함수들은 다음과 같습니다.
  • CreateSession 서버에서 세션을 생성합니다.
  • FindSessions 클라이언트에서 서버를 검색합니다.
  • JoinSession 클라이언트가 서버에 접속합니다.
  • DestroySession 서버에서 세션을 제거합니다.
  • 각 함수에 대한 자세한 설명은 다음과 같습니다.

    이 외에도, 클라이언트와 서버 간의 데이터 송수신을 처리하는 함수들도 있습니다. 대표적으로 클라이언트에서 서버로 데이터를 보내는 Client->Server RPC 함수와, 서버에서 클라이언트로 데이터를 보내는 Server->Client RPC 함수가 있습니다. 이러한 함수들은 네트워크 연결에서 매우 중요한 역할을 합니다.

    CreateSession

    1. UGameInstance 클래스의 CreateSession 함수를 사용하여 서버에서 세션을 생성합니다.
    2. 이 함수는 세션 이름, 맵 이름, 게임 모드, 최대 플레이어 수 등의 인수를 지정할 수 있습니다.
    3. 세션 생성에 성공하면 OnCreateSessionComplete 이벤트가 호출됩니다.

    FindSessions

    1. UGameInstance 클래스의 FindSessions 함수를 사용하여 클라이언트에서 서버를 검색합니다.
    2. 이 함수는 검색할 세션 이름, 검색 결과를 받을 대기 시간, 최대 검색 결과 수 등의 인수를 지정할 수 있습니다.
    3. 검색에 성공하면 OnFindSessionsComplete 이벤트가 호출됩니다.

    JoinSession

    1. UGameInstance 클래스의 JoinSession 함수를 사용하여 클라이언트가 서버에 접속합니다.
    2. 이 함수는 접속할 세션 정보, 서버에 연결할 때의 동작 등의 인수를 지정할 수 있습니다.
    3. 접속에 성공하면 OnJoinSessionComplete 이벤트가 호출됩니다.

    DestroySession

    1. UGameInstance 클래스의 DestroySession 함수를 사용하여 서버에서 세션을 제거합니다.
    2. 이 함수는 제거할 세션 이름, 제거에 대한 동작 등의 인수를 지정할 수 있습니다.
    3. 세션 제거에 성공하면 OnDestroySessionComplete 이벤트가 호출됩니다.
    언리얼 엔진에서는 "Listen Server" 모드와 "Dedicated Server" 모드를 지원합니다. "Listen Server" 모드는 게임을 실행하는 클라이언트가 동시에 서버 역할을 수행하는 모드로, 서버와 클라이언트가 같은 컴퓨터에서 실행될 때 사용합니다. "Dedicated Server" 모드는 게임을 실행하는 서버와 클라이언트가 별도의 컴퓨터에서 실행될 때 사용합니다. 이때, 서버는 명령줄 매개변수를 이용하여 실행되며, 클라이언트는 위에서 설명한 방법으로 서버에 접속합니다.

    RPC 관련 함수

    클라이언트와 서버 간의 데이터 송수신을 처리하는 함수들도 있습니다. 대표적으로 클라이언트에서 서버로 데이터를 보내는 Client->Server RPC 함수와, 서버에서 클라이언트로 데이터를 보내는 Server->Client RPC 함수가 있습니다. 이러한 함수들은 네트워크 연결에서 매우 중요한 역할을 합니다.

    RPC는 Remote Procedure Call의 약자로, 원격 프로시저 호출을 의미합니다. 언리얼 엔진에서는 네트워크 상에서 클라이언트와 서버 간의 함수 호출을 가능하게 하는 RPC 함수들을 제공합니다. 이를 통해 클라이언트와 서버 간의 데이터 송수신을 효율적으로 처리할 수 있습니다.

    언리얼 엔진에서 제공하는 RPC 함수들은 크게 두 가지 유형이 있습니다.

    1. 클라이언트에서 서버로 데이터를 보내는 함수
      • 클라이언트에서 서버로 데이터를 보낼 때 사용하는 함수입니다.
      • 이름이 Client_로 시작합니다.
      • 클라이언트에서 호출한 함수가 서버에서 실행됩니다.
    2. 서버에서 클라이언트로 데이터를 보내는 함수
      • 서버에서 클라이언트로 데이터를 보낼 때 사용하는 함수입니다.
      • 이름이 Server_로 시작합니다.
      • 서버에서 호출한 함수가 클라이언트에서 실행됩니다.
    RPC 함수를 사용하려면 다음과 같은 단계를 거쳐야 합니다.
    1. 함수에 UFUNCTION 매크로를 추가합니다
      • RPC 함수는 UFUNCTION 매크로를 이용하여 정의합니다.
      • UFUNCTION 매크로에서는 함수 이름과 RPC 유형, 실행조건등을 지정할 수 있습니다.
    2. 함수 내에서 RPC 매개변수를 사용합니다
      • RPC 함수는 호출하는 쪽에서 호출되는 쪽으로 데이터를 보내야 하므로, 함수 내에서 RPC 매개변수를 사용합니다.
      • RPC 매개변수는 UPARAM 매크로를 이용하여 정의합니다.
    3. 함수를 호출합니다
      • RPC 함수는 클라이언트에서 서버로 호출하거나, 서버에서 클라이언트로 호출합니다.
      • 호출하는 쪽에서는 함수를 호출하는 방법에 따라 다양한 매개변수를 지정할 수 있습니다.
    RPC 함수를 사용하는 것은 매우 간단하지만, 네트워크 연결에서 매우 중요한 역할을 합니다. 따라서 RPC 함수를 올바르게 사용하여 클라이언트와 서버 간의 데이터 송수신을 효율적으로 처리할 수 있어야 합니다.