Unity용 플러그인: 관리형 EC2 플릿에 게임 배포 - Amazon GameLift

Unity용 플러그인: 관리형 EC2 플릿에 게임 배포

이 워크플로에서는 플러그인을 사용하여 Amazon GameLift에서 관리하는 클라우드 기반 컴퓨팅 리소스에서 호스팅하도록 게임을 준비합니다. Amazon GameLift 기능을 위한 클라이언트 및 서버 게임 코드를 추가한 다음, 서버 빌드를 Amazon GameLift 서비스에 업로드하여 호스팅합니다. 이 워크플로가 완료되면 클라우드에서 실행하는 게임 서버가 생기고 서버를 연결할 게임 클라이언트가 작동합니다.

Amazon GameLift 관리형 Amazon EC2 워크플로를 시작하려면
  • Unity 편집기 기본 도구 모음에서 Amazon GameLift > Host with Managed EC2를 선택합니다. 이 워크플로는 게임 구성 요소를 통합, 빌드 및 시작하는 6단계 프로세스로 이루어집니다.

프로필 설정

이 워크플로를 따를 때 사용할 프로필을 선택합니다. 선택한 프로필은 워크플로의 모든 단계에 영향을 줍니다. 생성하는 모든 리소스는 프로필 AWS 계정과 연결되며 프로필의 기본 AWS 리전에 배치됩니다. 프로필 사용자의 권한에 따라 AWS 리소스 및 작업에 대한 액세스 권한이 결정됩니다.

  1. 사용 가능한 프로필 드롭다운 목록에서 프로필을 선택합니다. 아직 프로필이 없거나 새 프로필을 생성하려는 경우 Amazon GameLift 메뉴로 이동하여 AWS 계정 프로필 설정을 선택합니다.

  2. 부트스트랩 상태가 “활성”이 아닌 경우, 프로필 부트스트랩을 선택하고 상태가 “활성”으로 변경될 때까지 기다립니다.

Amazon GameLift에 게임 통합

이 작업에서는 게임 프로젝트의 클라이언트 및 서버 코드를 업데이트합니다.

  • 게임 서버는 Amazon GameLift 서비스와 통신하여 게임 세션을 시작하고, 게임 세션 연결 정보를 제공하고, 상태를 보고하라는 프롬프트를 받을 수 있어야 합니다.

  • 게임 클라이언트는 게임 세션에 대한 정보를 얻고, 게임 세션에 연결하거나 시작하고, 게임에 연결하기 위한 연결 정보를 얻을 수 있어야 합니다.

참고

샘플 게임을 가져온 경우 이 단계를 건너뛸 수 있습니다. 샘플 게임 에셋에는 이미 필요한 서버 및 클라이언트 코드가 있습니다.

서버 코드 통합

사용자 지정 씬에서 자체 게임 프로젝트 사용 시 제공된 샘플 코드를 사용하여 게임 프로젝트에 필요한 서버 코드를 추가합니다. Anywhere 플릿을 사용하여 테스트할 게임 프로젝트를 통합한 경우 이 단계의 지침은 이미 완료된 상태입니다.

  1. 게임 프로젝트 파일에서 Assets/Scripts/Server 폴더를 엽니다. 파일이 없으면 새로 생성합니다.

  2. GitHub 리포지토리 aws/amazon-gamelift-plugin-unity로 이동하여 Samples~/SampleGame/Assets/Scripts/Server 경로를 엽니다.

  3. GameLiftServer.cs 파일을 찾아 게임 프로젝트의 Server 폴더에 복사합니다. 서버 실행 파일을 빌드할 때 이 파일을 빌드 대상으로 사용합니다.

샘플 코드에는 Amazon GameLift C# 서버 SDK(버전 5)를 사용하는 다음과 같은 최소 필수 요소가 포함됩니다.

  • Amazon GameLift API 클라이언트를 초기화합니다. Amazon GameLift Anywhere 플릿에는 서버 파라미터를 사용한 InitSDK() 호출이 필요합니다. 이러한 설정은 플러그인에서 사용하도록 자동으로 설정됩니다.

  • OnStartGameSession, OnProcessTerminateonHealthCheck를 포함한 Amazon GameLift 서비스의 요청에 응답하는 콜백 함수를 구현합니다.

  • 지정된 포트와 함께 ProcessReady()를 호출하여 서버 프로세스가 게임 세션을 호스팅할 준비가 되면 Amazon GameLift 서비스에 알립니다.

샘플 서버 코드를 사용자 지정하려면 다음 리소스를 참조하세요.

클라이언트 코드 통합

클라우드 기반 게임 서버에 연결하는 게임 클라이언트의 경우 게임 클라이언트에서 직접 호출하는 대신 클라이언트 측 백엔드 서비스를 사용하여 Amazon GameLift 서비스에 직접 호출하는 것이 가장 좋습니다.

관리형 EC2 플릿에서 호스팅하기 위한 플러그인 워크플로에서 각 배포 시나리오에는 다음 구성 요소를 포함하는 사전 구축된 백엔드 서비스가 포함됩니다.

  • 게임 세션을 요청하고 게임 세션 정보를 검색하는 데 사용되는 Lambda 함수 및 DynamoDB 테이블 세트 이러한 구성 요소는 API 게이트웨이를 프록시로 사용합니다.

  • 고유한 플레이어 ID를 생성하고 플레이어 연결을 인증하는 Amazon Cognito 사용자 풀

이러한 구성 요소를 사용하려면 게임 클라이언트가 다음을 수행하기 위해 백엔드 서비스에 요청을 보내는 기능이 필요합니다.

  • AWS Cognito 사용자 풀에서 플레이어 사용자를 생성하고 인증합니다.

  • 게임 세션에 연결하고 연결 정보를 수신합니다.

  • 매치메이킹을 사용하여 게임에 연결합니다.

다음 리소스를 가이드로 사용합니다.

배포 시나리오 선택

이 단계에서는 지금 배포하려는 게임 호스팅 솔루션을 선택합니다. 어떤 시나리오로든 게임을 여러 번 배포할 수 있습니다.

  • 단일 리전 플릿: 활성 프로필의 기본 AWS 리전에 있는 호스팅 리소스의 단일 플릿에 게임 서버를 배포합니다. 처음에는 이 시나리오로 AWS와의 서버 통합 및 서버 빌드 구성을 테스트를 시작하는 것이 좋습니다. 다음과 같은 리소스를 배포합니다.

    • 게임 서버 빌드가 설치되어 실행 중인 AWS 플릿(온디맨드).

    • 플레이어가 게임을 인증하고 시작할 수 있는 Amazon Cognito 사용자 풀 및 클라이언트.

    • 사용자 풀을 API와 연결하는 API 게이트웨이 권한 부여자.

    • API 게이트웨이에 대한 과도한 플레이어 호출을 제한하기 위한 WebACl.

    • API 게이트웨이 + 플레이어가 게임 슬롯을 요청할 수 있는 Lambda 함수. 이 함수는 사용할 수 없는 경우 CreateGameSession()을 호출합니다.

    • API 게이트웨이 + 플레이어가 게임 요청에 대한 연결 정보를 얻을 수 있는 Lambda 함수.

  • FlexMatch 플릿: 게임 서버를 플릿 세트에 배포하고 플레이어 매치를 생성하는 규칙이 포함된 FlexMatch 매치메이커를 설정합니다. 이 시나리오에서는 다중 플릿, 다중 위치 구조와 함께 저비용 스팟 호스팅을 사용하여 가용성을 지속적으로 유지합니다. 이 방식은 호스팅 솔루션용 매치메이커 구성 요소 설계를 시작할 준비가 되었을 때 유용합니다. 이 시나리오에서는 이 솔루션의 기본 리소스를 만들고 필요에 따라 나중에 사용자 지정할 수 있습니다. 다음과 같은 리소스를 배포합니다.

    • FlexMatch 매치메이킹 구성 및 매치메이킹 규칙은 플레이어 요청을 수락하고 매치를 구성하도록 설정됩니다.

    • 게임 서버 빌드가 여러 위치에 설치되어 실행 중인 AWS 플릿 3대. 백업용으로 스팟 플릿 2개와 온디맨드 플릿 1개가 포함됩니다.

    • AWS 게임 세션 배치 대기열은 (실행 가능성, 비용, 플레이어 지연 시간 등을) 기반으로 가능한 최상의 호스팅 리소스를 찾고 게임 세션을 시작하여 제안된 매치에 대한 요청을 충족시켜 줍니다.

    • 플레이어가 게임을 인증하고 시작할 수 있는 Amazon Cognito 사용자 풀 및 클라이언트.

    • 사용자 풀을 API와 연결하는 API 게이트웨이 권한 부여자.

    • API 게이트웨이에 대한 과도한 플레이어 호출을 제한하기 위한 WebACl.

    • API 게이트웨이 + 플레이어가 게임 슬롯을 요청할 수 있는 Lambda 함수. StartMatchmaking() 함수를 호출합니다.

    • API 게이트웨이 + 플레이어가 게임 요청에 대한 연결 정보를 얻을 수 있는 Lambda 함수.

    • 플레이어용 매치메이킹 티켓과 게임 세션 정보를 저장하는 Amazon DynamoDB 테이블.

    • SNS 주제 + GameSessionQueue 이벤트를 처리하는 Lambda 함수.

게임 파라미터 설정

이 단계에서는 AWS에 업로드할 게임을 설명합니다.

  • 게임 이름: 게임 프로젝트에 유의미한 이름을 제공합니다. 이 이름은 플러그인 내에서 사용됩니다.

  • 플릿 이름: 관리형 EC2 플릿에 유의미한 이름을 제공합니다. Amazon GameLift가 AWS 콘솔에 리소스를 나열할 때 이 이름(플릿 ID 포함)을 사용합니다.

  • 빌드 이름: 게임 서버 빌드에 의미 있는 이름을 입력합니다. AWS가 Amazon GameLift에 업로드되어 배포에 사용되는 서버 빌드의 사본을 참조할 때 이 이름을 사용합니다.

  • 시작 파라미터: 관리형 EC2 플릿 인스턴스에서 서버 실행 파일을 시작할 때 실행할 선택적 지침을 입력합니다. 최대 길이는 1024자입니다.

  • 게임 서버 폴더: 서버 빌드를 포함하는 로컬 폴더의 경로를 제공합니다.

  • 게임 서버 파일: 서버 실행 파일 이름을 지정합니다.

시나리오 배포

이 단계에서는 선택한 배포 시나리오에 따라 게임을 클라우드 호스팅 솔루션에 배포합니다. 이 프로세스는 AWS가 서버 빌드를 검증하고, 호스팅 리소스를 프로비저닝하며, 게임 서버를 설치하고, 서버 프로세스를 시작하며, 게임 세션을 호스팅할 준비를 하는 데 몇 분 정도 소요될 수 있습니다.

배포를 시작하려면 CloudFormation 배포를 선택합니다. 여기에서 게임 호스팅 상태를 추적할 수 있습니다. 자세한 내용은 AWS의 AWS 관리 콘솔에 로그인하여 이벤트 알림을 확인할 수 있습니다. 플러그인의 활성 사용자 프로필과 동일한 계정, 사용자 및 AWS 리전을 사용하여 로그인해야 합니다.

배포가 완료되면 게임 서버가 AWS EC2 인스턴스에 설치됩니다. 하나 이상의 서버 프로세스가 실행 중이며 게임 세션을 시작할 준비가 되었습니다.

게임 클라이언트 실행

플릿이 성공적으로 배포되면 이제 게임 서버를 실행하고 게임 세션을 호스팅할 수 있습니다. 이제 클라이언트를 빌드하고 시작하여 게임 세션을 할 수 있습니다.

  1. 게임 클라이언트를 구성합니다. 이 단계에서는 플러그인에 게임 프로젝트의 GameLiftClientSettings 에셋을 업데이트하라는 메시지를 표시합니다. 플러그인은 이 에셋을 사용하여 게임 클라이언트가 Amazon GameLift 서비스에 연결하는 데 필요한 특정 정보를 저장합니다.

    1. 샘플 게임을 가져오고 초기화하지 않은 경우 새 GameLiftClientSettings 에셋을 생성합니다. Unity 편집기 기본 메뉴에서 Assets, Create, GameLift, Client Settings를 선택합니다. 프로젝트에 GameLiftClientSettings 사본을 여러 개 생성하면 플러그인이 이를 자동으로 감지하고 플러그인이 업데이트할 에셋을 알려줍니다.

    2. 게임 시작에서 클라이언트 구성: 관리형 EC2 설정 적용을 선택합니다. 이 작업은 방금 배포한 관리형 EC2 플릿을 사용하도록 게임 클라이언트 설정을 업데이트합니다.

  2. 게임 클라이언트를 빌드합니다. 표준 Unity 빌드 프로세스를 사용하여 클라이언트 실행 파일을 빌드합니다. File, Build Settings에서 플랫폼을 Windows, Mac, Linux로 전환합니다. 샘플 게임을 가져와 설정을 초기화하면 빌드 목록과 빌드 대상이 자동으로 업데이트됩니다.

  3. 새로 빌드된 게임 클라이언트 실행 파일을 시작합니다. 게임 플레이를 시작하려면 2~4개의 클라이언트 인스턴스를 시작하고 각각의 UI로 게임 세션에 연결합니다.

샘플 게임 클라이언트를 사용하는 경우 다음과 같은 특성이 있습니다.

  • 플레이어 로그인 구성 요소 Anywhere 플릿의 게임 서버에 연결할 때는 플레이어 검증이 없습니다. 아무 값이나 입력하여 게임 세션에 연결할 수 있습니다.

  • 간단한 게임 연결 UI 클라이언트가 게임에 연결하려고 하면 클라이언트가 사용 가능한 플레이어 슬롯이 있는 활성 게임 세션을 자동으로 찾습니다. 게임 세션을 사용할 수 없는 경우 클라이언트가 새 게임 세션을 요청합니다. 게임 세션을 사용할 수 있는 경우 클라이언트가 사용 가능한 게임 세션에 연결하도록 요청합니다. 동시에 여러 클라이언트로 게임을 테스트할 때 첫 번째 클라이언트는 게임 세션을 시작하고 나머지 클라이언트는 자동으로 기존 게임 세션에 연결합니다.

  • 플레이어 슬롯 4개가 있는 게임 세션 최대 4개의 게임 클라이언트 인스턴스를 동시에 시작할 수 있으며 동일한 게임 세션에 연결합니다.