멀티플레이어 게임 만들기

이 문서는 첫 번째 멀티플레이어 게임을 만드는 자세한 단계를 안내합니다. 롤백 시스템에 대한 정보는 Rollback System을 참조하세요. 롤백 함수에 대한 자세한 내용은 Rollback Functions을 읽어보세요.

프로젝트 설정

  1. 새로운 프로젝트를 시작하고 플레이어 객체를 위한 스프라이트를 만듭니다. 이미지를 가져오거나 채워진 사각형을 만들 수 있습니다.
  2. 두 개의 객체를 생성합니다:
  3. obj_game: 멀티플레이어 게임을 관리합니다.
  4. obj_player: 실제 플레이어 객체입니다. 연결된 각 플레이어는 이 객체의 인스턴스를 제어할 수 있습니다.
  5. 플레이어 스프라이트를 플레이어 객체에 할당합니다.
  6. obj_game을 방에 배치합니다. obj_player는 자동으로 생성되므로 배치하지 않습니다.

게임 시작하기

obj_game의 Create 이벤트에 다음 코드를 작성합니다:

rollback_define_player(obj_player);
var _joined = rollback_join_game();
if (!_joined){
    rollback_create_game(2);
}

이 코드는 사용할 플레이어 객체를 정의하고 rollback_join_game()을 사용하여 게임에 참여하려고 시도합니다. 게임에 참여할 수 없으면 rollback_create_game()을 호출하여 자신의 게임을 호스팅합니다. 여기서 최대 2명의 플레이어가 허용됩니다.

현재 최대 4명의 플레이어를 위한 게임만 생성할 수 있습니다.

위 코드는 방의 왼쪽 상단 모서리에 두 개의 obj_player 인스턴스를 생성하지만, 아직 제어할 수 없습니다.

플레이어 이동

입력은 롤백 시스템에 의해 관리되며 플레이어 간에 자동으로 동기화됩니다. 플레이어 객체에서 rollback_get_input()을 호출하여 기본 입력을 포함하는 구조체를 가져옵니다. 기본 입력은 다음과 같습니다:

  • left
  • right
  • up
  • down
  • Z
  • X
  • C
  • space

이 키가 눌렸는지 여부를 나타냅니다. _pressed_released 변형도 제공됩니다. 자신의 입력을 정의하려면 Defining Inputs를 참조하세요.

플레이어를 설정하기 위해 Create 및 Step 이벤트에 다음 코드를 추가합니다:

// Create Event
move_speed = 5;

// Step Event
var _input = rollback_get_input();
if (_input.left) x -= move_speed;
if (_input.right) x += move_speed;
if (_input.up) y -= move_speed;
if (_input.down) y += move_speed;

이 코드는 플레이어의 속도를 설정하고 Step 이벤트에서 입력 구조체를 가져옵니다. 각 방향키가 눌리면 해당 축으로 인스턴스를 이동시킵니다.

플레이어 위치 설정

테스트하기 전에 플레이어가 방의 왼쪽 상단 모서리 대신 특정 위치에 생성되도록 설정합니다. 플레이어 객체의 Create 이벤트에 다음을 작성합니다:

if (player_id == 0){
    x = 300;
} else if (player_id == 1){
    x = room_width - 300;
}
y = room_height / 2;

player_id는 플레이어 인스턴스의 ID를 저장하는 내장 인스턴스 변수입니다. 두 명의 플레이어가 있는 게임에서 첫 번째 플레이어는 ID 0을, 두 번째 플레이어는 ID 1을 가집니다. 이를 기반으로 플레이어의 초기 X 위치를 변경합니다. Y 위치는 두 플레이어 모두 동일합니다.

게임을 실행하면 두 플레이어가 보이며 첫 번째 플레이어를 제어할 수 있습니다. 두 번째 플레이어는 롤백 시스템의 기능으로 인해 자동으로 이동합니다. 자동 랜덤 이동을 비활성화하려면 rollback_use_random_input(false)를 호출하거나 다른 플레이어를 위한 "모의" 입력을 설정할 수 있습니다.

온라인 연결

기본 멀티플레이어 예제가 완료되었으며 인터넷으로 가져갈 준비가 되었습니다. 기본적으로 시스템은 Sync Test 모드에서 시작되며, 이는 오프라인에서 게임을 테스트하는 방법입니다. 온라인 기능을 활성화하려면 rollback_create_game()의 두 번째 인수를 false로 설정해야 합니다.

// obj_game: Create event
rollback_define_player(obj_player);
var _joined = rollback_join_game();
if (!_joined){
    rollback_create_game(2, false);
}

GX.games에 로그인하고 프로필 설정에서 지역을 설정합니다. GX.games 대상을 통해 게임을 실행합니다. 롤백 시스템이 시작되면 플레이어가 함께 플레이할 "방"이 생성됩니다.

플레이어 초대

게임이 시작되면 플레이어 인스턴스가 즉시 보이지 않습니다. 대신 시스템은 모든 플레이어가 참여할 때까지 기다립니다.

: rollback_start_game()을 호출하여 플레이어가 참여하기 전에 게임을 시작할 수 있습니다. rollback_use_manual_start()를 호출하면 모든 플레이어가 참여한 후에도 수동으로 게임을 시작할 때까지 기다립니다.

기다리는 동안 게임 아래에 "Copy Share Url" 버튼이 표시됩니다. 버튼이 보이지 않으면 아래로 스크롤하세요. 이 버튼을 클릭하면 게임 링크가 복사되며, 다른 브라우저 창에 붙여넣어 두 번째 플레이어로 참여할 수 있습니다. 두 브라우저 창을 동시에 볼 수 있어야 하며, 그렇지 않으면 숨겨진 창의 플레이어가 타임아웃되어 게임이 종료됩니다.

두 게임 인스턴스가 연결되고 동기화되면 각 플레이어를 브라우저 창을 통해 제어할 수 있습니다. 두 창을 나란히 열려면 드래그하여 크기를 조정하세요. 테스트 중에는 게임의 상태에 대한 정보를 제공하는 디버그 메시지가 게임의 왼쪽 상단 모서리에 표시됩니다. 이를 비활성화하려면 rollback_display_events(false)를 호출하세요.

방 나가기

플레이어가 방을 나가려면 rollback_leave_game()을 호출합니다. 사용법에 대한 자세한 정보는 함수 페이지를 참조하세요.

게임 로직

롤백 시스템은 모든 플레이어가 참여하면 자동으로 플레이어 인스턴스를 생성합니다. 그러나 게임이 시작되기 전에 다른 코드를 실행할 수 있으므로, 모든 플레이어가 참여한 후에만 핵심 게임 로직을 시작해야 합니다. 예를 들어, 알람을 사용하여 적 인스턴스를 생성하는 경우, Rollback Start 이벤트가 트리거된 후에만 해당 알람을 시작해야 합니다.

주요 이벤트

게임의 주요 이벤트(예: 플레이어가 승리하고 레벨이 종료되는 경우)는 모든 플레이어가 동기화되었을 때 수행해야 합니다. 그렇지 않으면 잘못된 예측으로 인해 플레이어가 잘못 승리할 수 있으며, 이는 나중에 롤백될 때 이상하게 보일 수 있습니다. 이를 올바르게 수행하는 방법은 rollback_sync_on_frame()의 예제를 참조하세요.

추가 자료

이제 첫 번째 멀티플레이어 게임이 완료되었습니다! 롤백 시스템에 대해 더 배우려면 다음 페이지를 읽어보세요:

게임에 채팅 기능을 추가하려면 rollback_chat()을 사용할 수 있습니다.

Read more

기술 문서 해설 및 활용 예제

이 문서는 특정 기술에 대한 설명과 활용 방법을 다룹니다. 아래에서 내용을 쉽게 이해할 수 있도록 해설하고, 다양한 활용 및 응용 예제를 추가로 제공합니다. 기술 개요 이 기술은 게임 개발에서 자주 사용되는 기능으로, 특정 작업을 자동화하거나 효율적으로 처리하는 데 도움을 줍니다. 주로 게임의 로직을 구성하거나 사용자 인터페이스를 제어하는 데 사용됩니다. 주요

By 이재협/실장/시스템개발실/PHYSIA

키워드 설명서

이 문서는 특정 키워드에 대한 설명과 사용법을 제공합니다. 문법 (arguments); 인수 인수 이름 유형 설명 argument_name 인수에 대한 설명을 여기에 작성합니다. 반환값 (선택적 설명) 예제 code_example() { // 여기에 코드 예제를 설명합니다. } 코드 예제 설명 위의 코드 예제는 특정 기능을 수행하는 함수의 기본 구조를 보여줍니다. 이 함수는 인수를 받아들이고, 특정

By 이재협/실장/시스템개발실/PHYSIA

GameMaker 환경 설정 및 기능

이 문서에서는 GameMaker의 환경 설정 및 다양한 IDE 기능에 대한 정보를 제공합니다. 다음은 주요 항목들입니다: IDE 환경 설정 IDE(통합 개발 환경) 설정은 GameMaker의 전반적인 사용 경험을 조정하는 데 도움을 줍니다. 여기서 사용자는 개인의 필요에 맞게 다양한 옵션을 설정할 수 있습니다. 주요 설정 항목 설정 항목 설명 테마 IDE의 색상

By 이재협/실장/시스템개발실/PHYSIA

GameMaker IDE 설명서

GameMaker IDE는 게임을 만들고 소프트웨어에서 제공하는 모든 기능을 활용하는 주요 인터페이스입니다. 이 프로그램은 시작 화면부터 게임을 만들기 위해 사용하는 모든 편집기 창까지 포함되며, 매뉴얼과 다양한 튜토리얼에서 IDE라고 언급됩니다. IDE의 구성 요소 다음 섹션에서는 IDE에 대한 정보를 다룹니다: 1. 설정 및 기능 IDE의 설정 및 기능은 사용자가 게임 개발을 보다 효율적으로

By 이재협/실장/시스템개발실/PHYSIA