[task] | wikipedia [title] | 인스턴스 맵 만들기 [category] | Guides [rephrased] | # 게임 로직 인스턴스 맵 만들기 이 가이드는 대기실에 모인 인원 중 Ready 버튼을 누른 3명만 게임이 진행될 맵으로 이동하도록 만드는 방법을 설명합니다. ## 준비 사항 이 예제에서는 시작 맵을 인스턴스 맵으로 보내는 정적 룸과, 게임 종료 후 돌아오는 정적 룸을 활용합니다. 1. 대기 맵과 인스턴스 맵을 각각 생성합니다. * 정적 맵 이름: `waitingmap` * 인스턴스 맵 이름: `dungeon` 2. `dungeon` 맵을 인스턴스 맵으로 사용하기 위해 프로퍼티 에디터 창에서 **Ma [original] | 대기실에 모인 인원 중 Ready 버튼을 누른 3명만 게임이 진행될 맵으로 이동하게 만들어봅시다. #### 준비 이 예제에서는 시작 맵을 인스턴스 맵으로 보내는 정적 룸, 돌아오는 정적 룸으로 활용합니다. 1. 대기 맵과 인스턴스 맵을 만듭니다. * 정적 맵 이름: waitingmap * 인스턴스 맵 이름: dungeon 2. dungeon 맵을 인스턴스 맵으로 사용하기 위해 프로퍼티 에디터 창에서 **MapComponent의 InstanceMap 프로퍼티**를 활성화합니다. 3. UI 에디터 - 좌측 기 [chunk_id] | Guides:540:1
[task] | distill [title] | 인스턴스 맵 만들기 [category] | Guides [rephrased] | # 게임 로직 인스턴스 맵 만들기 `RoomService`를 사용하여 유저를 분리하는 인스턴스 공간(던전 등)을 생성하고 관리합니다. ## 핵심 개념 * **정적 룸/맵 (Static Room/Map)** * 월드당 1개의 정적 룸이 존재하며, 크리에이터가 제작한 기본 맵(정적 맵)이 생성됩니다. * 유저는 정적 맵 간 자유 이동이 가능합니다. * **인스턴스 룸/맵 (Instance Room/Map)** * **인스턴스 룸**: 특정 인스턴스 맵들을 담은 독립된 공간입니다. * [original] | # 학습 과정 소개 월드를 제작하다 보면 특정한 유저만 입장할 수 있는 특수 던전 같은 별도의 공간을 만들고 싶을 때가 있습니다. 이때 `RoomService`를 활용할 수 있습니다 다른 유저들과 분리할 수 있는 별도의 공간을 만들고, 유저를 이동시키는 `RoomService`를 알아봅시다. 인스턴스 맵을 활용하기 위해 정적 룸, 정적 맵 개념을 함께 설명합니다. # 정적 룸 하나의 월드에는 하나의 **정적 룸(Static Room)**이 있습니다. 정적 룸에는 정적 맵이 생성됩니다. 유저는 정적 맵 간 이동을 자유롭게 할 수 [chunk_id] | Guides:540:0
[task] | knowledge_list [title] | 영상 재생시키기 [category] | Guides [rephrased] | 요청하신 문서의 핵심 사실을 바탕으로, API 이름, 매개변수, 반환 타입, 동기화 및 서버/클라이언트 제약을 명시하여 정리한 목록입니다. **참고:** 원문 문서에는 `YoutubePlayerWorldComponent`와 `YoutubePlayerGUIComponent`의 **프로퍼티(Property)** 정보만 제공되어 있으며, 구체적인 **메서드(Method)** 시그니처(매개변수, 반환 타입)나 **이벤트 핸들러(Event Handler)** 에 대한 기술적 정의는 포함되어 있지 않습니다. 따라서 아래 목록은 문서에 명시된 [original] | # 학습 과정 소개 내가 찍은 영상 혹은 함께 보고 싶은 영상을 가져와 재생할 수 있습니다. # Youtube 관련 컴포넌트 소개 영상은 UI로 사용하거나 World에 배치해 사용할 수 있습니다. UI로 사용할 경우 YoutubeGUIPlayerComponent를 사용하고, World에 배치할 경우 YoutubePlayerWorldComponent를 사용합니다. UI로 사용한다면 영상은 배치한 곳에 고정되므로, 맵을 돌아다니더라도 유저가 보고 있는 화면의 특정 위치에서 움직이지 않습니다. World에서 영상을 사용한다면 배치한 [chunk_id] | Guides:539:0
[task] | wikipedia [title] | 영상 재생시키기 [category] | Guides [rephrased] | # 객체 표현 영상 재생시키기 이 가이드는 메이플스토리 월드에서 `YoutubePlayerWorldComponent`와 `YoutubePlayerGUIComponent`를 사용하여 영상 재생을 제어하는 방법을 설명합니다. 두 컴포넌트의 함수 사용법은 동일하며, 본 문서의 예시는 `YoutubePlayerWorldComponent`를 기준으로 작성되었습니다. 주요 기능은 다음과 같습니다. * 월드에 입장할 때 영상의 20초 지점부터 자동 재생 * `P` 키 입력 시 영상 멈춤 * `L` 키 입력 시 영상 일시 정지 및 [original] | 월드에 입장하면 영상을 바로 00:20초부터 재생을 시작하게 만들고, 재생 중에 특정 키를 입력할 때 함수가 동작하게 만듭니다. YoutubePlayerWorldComponent와 YoutubePlayerGUIComponent의 함수 사용법은 동일합니다. 예시는 YoutubePlayerWorldComponent가 기준입니다. 예시 Url: https://www.youtube.com/watch?v=9pL_b1fl9LQ&t=1s 1. YoutubePlayerController 스크립트 컴포넌트를 만들어, 배치한 Youtube 모델에 [chunk_id] | Guides:539:1
[task] | diverse_qa [title] | 인스턴스 맵 만들기 [category] | Guides [rephrased] | 질문: 이 가이드에서 준비 단계로 설명하는 정적 맵과 인스턴스 맵의 이름은 무엇인가요? 답변: 정적 맵 이름은 `waitingmap`이고, 인스턴스 맵 이름은 `dungeon`입니다. 질문: `dungeon` 맵을 인스턴스 맵으로 사용하려면 어떤 설정을 활성화해야 하나요? 답변: 프로퍼티 에디터 창에서 `MapComponent`의 `InstanceMap` 프로퍼티를 활성화해야 합니다. 질문: Ready 버튼을 생성할 때 UI 에디터의 어떤 그룹에 추가해야 하나요? 답변: Ready 버튼을 `DefaultGroup`에 생성해야 합 [original] | 대기실에 모인 인원 중 Ready 버튼을 누른 3명만 게임이 진행될 맵으로 이동하게 만들어봅시다. #### 준비 이 예제에서는 시작 맵을 인스턴스 맵으로 보내는 정적 룸, 돌아오는 정적 룸으로 활용합니다. 1. 대기 맵과 인스턴스 맵을 만듭니다. * 정적 맵 이름: waitingmap * 인스턴스 맵 이름: dungeon 2. dungeon 맵을 인스턴스 맵으로 사용하기 위해 프로퍼티 에디터 창에서 **MapComponent의 InstanceMap 프로퍼티**를 활성화합니다. 3. UI 에디터 - 좌측 기 [chunk_id] | Guides:540:1
[task] | knowledge_list [title] | 인스턴스 맵 만들기 [category] | Guides [rephrased] | - `RoomService`는 크리에이터가 특정 유저만 입장 가능한 특수 던전과 같이 다른 유저와 분리된 별도의 공간을 생성하고 유저를 해당 공간으로 이동시키는 데 활용되는 서비스입니다. - 하나의 월드에는 오직 하나의 정적 룸(Static Room)만 존재하며, 정적 룸 안에는 정적 맵이 생성되고 유저는 정적 맵 간 이동을 자유롭게 수행할 수 있습니다. - 정적 맵(Static Map)은 월드 인스턴스 내부에 생성되며, 크리에이터가 월드에서 제작하는 맵의 기본값은 정적 맵으로 설정되어 월드 생성 시 함께 생성됩니다. - 인스턴스 [original] | # 학습 과정 소개 월드를 제작하다 보면 특정한 유저만 입장할 수 있는 특수 던전 같은 별도의 공간을 만들고 싶을 때가 있습니다. 이때 `RoomService`를 활용할 수 있습니다 다른 유저들과 분리할 수 있는 별도의 공간을 만들고, 유저를 이동시키는 `RoomService`를 알아봅시다. 인스턴스 맵을 활용하기 위해 정적 룸, 정적 맵 개념을 함께 설명합니다. # 정적 룸 하나의 월드에는 하나의 **정적 룸(Static Room)**이 있습니다. 정적 룸에는 정적 맵이 생성됩니다. 유저는 정적 맵 간 이동을 자유롭게 할 수 [chunk_id] | Guides:540:0
[task] | diverse_qa [title] | 영상 재생시키기 [category] | Guides [rephrased] | 질문: 월드에 입장했을 때 영상을 00:20초 지점부터 재생하기 위해 호출해야 하는 YoutubePlayerWorldComponent의 메서드는 무엇인가요? 답변: `Jump` 메서드를 호출하고, 첫 번째 인자로 20.0(초 단위)을 전달합니다. 질문: `YoutubePlayerWorldComponent`와 `YoutubePlayerGUIComponent`의 함수 사용법은 어떻게 다른가요? 답변: 두 컴포넌트의 함수 사용법은 동일합니다. 질문: 아래 코드의 `HandleKeyDownEvent`에서 숫자 0 키 입력을 감지하기 위 [original] | 월드에 입장하면 영상을 바로 00:20초부터 재생을 시작하게 만들고, 재생 중에 특정 키를 입력할 때 함수가 동작하게 만듭니다. YoutubePlayerWorldComponent와 YoutubePlayerGUIComponent의 함수 사용법은 동일합니다. 예시는 YoutubePlayerWorldComponent가 기준입니다. 예시 Url: https://www.youtube.com/watch?v=9pL_b1fl9LQ&t=1s 1. YoutubePlayerController 스크립트 컴포넌트를 만들어, 배치한 Youtube 모델에 [chunk_id] | Guides:539:1
[task] | knowledge_list [title] | 인스턴스 맵 만들기 [category] | Guides [rephrased] | ```lua -- 문서에 명시된 핵심 사실 목록 1. 예제 시나리오는 대기실에 모인 인원 중 Ready 버튼을 누른 3명만 게임 진행 맵으로 이동시키는 구조이다. 2. 예제 구성은 시작 맵을 인스턴스 맵으로 보내는 정적 룸과 돌아오는 정적 룸으로 이루어져 있다. 3. 대기 맵의 정적 맵 이름은 "waitingmap"이다. 4. 인스턴스 맵의 정적 맵 이름은 "dungeon"이다. 5. "dungeon" 맵을 인스턴스 맵으로 사용하려면 프로퍼티 에디터 창에서 MapComponent의 InstanceMap 프로퍼티를 활성화해야 한다. [original] | 대기실에 모인 인원 중 Ready 버튼을 누른 3명만 게임이 진행될 맵으로 이동하게 만들어봅시다. #### 준비 이 예제에서는 시작 맵을 인스턴스 맵으로 보내는 정적 룸, 돌아오는 정적 룸으로 활용합니다. 1. 대기 맵과 인스턴스 맵을 만듭니다. * 정적 맵 이름: waitingmap * 인스턴스 맵 이름: dungeon 2. dungeon 맵을 인스턴스 맵으로 사용하기 위해 프로퍼티 에디터 창에서 **MapComponent의 InstanceMap 프로퍼티**를 활성화합니다. 3. UI 에디터 - 좌측 기 [chunk_id] | Guides:540:1
[task] | wikipedia [title] | 영상 재생시키기 [category] | Guides [rephrased] | # 객체 표현 영상 재생시키기 메이플스토리 월드(MapleStory Worlds)에서는 사용자가 직접 촬영한 영상이나 공유하고자 하는 영상을 가져와 재생할 수 있습니다. 영상은 사용자 인터페이스(UI) 요소로 사용하거나, 월드(World) 공간 내에 배치된 객체로 사용할 수 있으며, 사용 목적에 따라 서로 다른 컴포넌트를 적용해야 합니다. ## Youtube 관련 컴포넌트 개요 영상 재생을 위해 사용되는 주요 컴포넌트는 `YoutubeGUIPlayerComponent`와 `YoutubePlayerWorldComponent` 두 [original] | # 학습 과정 소개 내가 찍은 영상 혹은 함께 보고 싶은 영상을 가져와 재생할 수 있습니다. # Youtube 관련 컴포넌트 소개 영상은 UI로 사용하거나 World에 배치해 사용할 수 있습니다. UI로 사용할 경우 YoutubeGUIPlayerComponent를 사용하고, World에 배치할 경우 YoutubePlayerWorldComponent를 사용합니다. UI로 사용한다면 영상은 배치한 곳에 고정되므로, 맵을 돌아다니더라도 유저가 보고 있는 화면의 특정 위치에서 움직이지 않습니다. World에서 영상을 사용한다면 배치한 [chunk_id] | Guides:539:0
[task] | distill [title] | 인스턴스 맵 만들기 [category] | Guides [rephrased] | # 게임 로직 인스턴스 맵 만들기 **핵심 기능**: 특정 조건(예: 3명 이상 Ready)이 충족되면 유저를 인스턴스 룸으로 이동시킵니다. ## 1. GameManager 스크립트 컴포넌트 주기적으로 `_UserService`를 조회하여 Ready 상태 유저를 집계하고, 인원 조건을 만족하면 `_RoomService:MoveUsersToInstanceRoom`으로 분배·이동합니다. ```lua Property: [None] number checkReadyPlayerTimer = 0 [None] integer playerNu [original] | 게임이 진행될 인스턴스 룸에 입장할 수 있는 유저를 정하는 조건을 만들어 유저를 이동시켜봅시다. 조건은 크리에이터의 기획에 따라 달라질 수 있습니다. 예시는 **'Ready' 버튼을 3명 이상의 유저가 누르면** 새로운 인스턴스 룸으로 이동시킵니다. 1. **GameManager 스크립트 컴포넌트**에 주기적으로 유저의 Ready 상태를 확인해, 인스턴스 룸으로 이동시키는 스크립트를 작성합니다. ```lua Property: [None] number checkReadyPlayerTimer = 0 [chunk_id] | Guides:540:2
[task] | distill [title] | 인스턴스 맵 만들기 [category] | Guides [rephrased] | **ReadyButton 컴포넌트** `UIButton`에 추가. 클라이언트에서 버튼 클릭 시 로컬 `isReady` 상태를 토글하고, 텍스트를 `"Ready"`/`"Cancel"`로 변경한 뒤 서버에 준비 상태를 알립니다. ```lua Property: [None] boolean isReady = false Event Handler: [client only] [Entity: UIButton(/ui/DefaultGroup/UIButton)] HandleButtonClickEvent(ButtonClickEvent event) [original] | 3. **ReadyButton** 스크립트 컴포넌트를 생성하고 **Ready UI 버튼**에 추가합니다. 유저가 준비 상태가 되면 서버에 해당 유저가 준비되었다는 정보를 보내줍니다. ```lua Property: [None] boolean isReady = false Event Handler: [client only] [Entity: UIButton(/ui/DefaultGroup/UIButton)] HandleButtonClickEvent(ButtonClickEvent e [chunk_id] | Guides:540:3
[task] | extract_knowledge [title] | 영상 재생시키기 [category] | Guides [rephrased] | # 유튜브 영상 재생하기 메이플스토리 월드에서는 `YoutubePlayerWorldComponent`와 `YoutubeGUIPlayerComponent`를 통해 유튜브 영상을 월드 내 객체 또는 UI 요소로 배치하고 재생할 수 있습니다. ## 1. 개념 설명 영상 플레이어는 사용 위치에 따라 두 가지 컴포넌트로 나뉩니다. * **YoutubePlayerWorldComponent**: 3D 월드 공간에 배치됩니다. 배치한 월드 좌표에 고정되며, 플레이어가 움직여도 영상은 해당 위치에 머무릅니다. * **YoutubeGU [original] | # 학습 과정 소개 내가 찍은 영상 혹은 함께 보고 싶은 영상을 가져와 재생할 수 있습니다. # Youtube 관련 컴포넌트 소개 영상은 UI로 사용하거나 World에 배치해 사용할 수 있습니다. UI로 사용할 경우 YoutubeGUIPlayerComponent를 사용하고, World에 배치할 경우 YoutubePlayerWorldComponent를 사용합니다. UI로 사용한다면 영상은 배치한 곳에 고정되므로, 맵을 돌아다니더라도 유저가 보고 있는 화면의 특정 위치에서 움직이지 않습니다. World에서 영상을 사용한다면 배치한 [chunk_id] | Guides:539:0
[task] | extract_knowledge [title] | 인스턴스 맵 만들기 [category] | Guides [rephrased] | # 인스턴스 맵 생성 및 유저 이동 로직 ## 1. 개념 설명 `RoomService`의 `GetOrCreateInstanceRoom` 메서드를 사용하면 특정 키를 기반으로 인스턴스 룸을 생성하거나 기존에 존재하는 인스턴스 룸을 가져올 수 있습니다. 이 메서드는 매번 새로운 인스턴스 룸을 생성하기 위해 고유한 키(예: 인덱스 번호)를 사용하는 것이 일반적입니다. 인스턴스 맵으로 전환하기 위해서는 해당 맵의 `MapComponent`에서 `InstanceMap` 프로퍼티가 활성화되어 있어야 합니다. 대기 맵에서 게임 로직 맵으로 [original] | 대기실에 모인 인원 중 Ready 버튼을 누른 3명만 게임이 진행될 맵으로 이동하게 만들어봅시다. #### 준비 이 예제에서는 시작 맵을 인스턴스 맵으로 보내는 정적 룸, 돌아오는 정적 룸으로 활용합니다. 1. 대기 맵과 인스턴스 맵을 만듭니다. * 정적 맵 이름: waitingmap * 인스턴스 맵 이름: dungeon 2. dungeon 맵을 인스턴스 맵으로 사용하기 위해 프로퍼티 에디터 창에서 **MapComponent의 InstanceMap 프로퍼티**를 활성화합니다. 3. UI 에디터 - 좌측 기 [chunk_id] | Guides:540:1
[task] | knowledge_list [title] | 인스턴스 맵 만들기 [category] | Guides [rephrased] | * `GameManager` 스크립트 컴포넌트의 `OnUpdate` 메서드는 `[server only]` 실행 공간에서 동작하며 매개변수로 `number` 타입의 `delta`를 받습니다. * `GameManager` 스크립트 컴포넌트에는 `[None]` 동기화 속성을 가진 `number` 타입의 `checkReadyPlayerTimer`와 `integer` 타입의 `playerNumPerGame` 프로퍼티가 선언되어 있습니다. * `OnUpdate` 메서드 내부에서 `checkReadyPlayerTimer`가 5.0 이 [original] | 게임이 진행될 인스턴스 룸에 입장할 수 있는 유저를 정하는 조건을 만들어 유저를 이동시켜봅시다. 조건은 크리에이터의 기획에 따라 달라질 수 있습니다. 예시는 **'Ready' 버튼을 3명 이상의 유저가 누르면** 새로운 인스턴스 룸으로 이동시킵니다. 1. **GameManager 스크립트 컴포넌트**에 주기적으로 유저의 Ready 상태를 확인해, 인스턴스 룸으로 이동시키는 스크립트를 작성합니다. ```lua Property: [None] number checkReadyPlayerTimer = 0 [chunk_id] | Guides:540:2
[task] | knowledge_list [title] | 인스턴스 맵 만들기 [category] | Guides [rephrased] | * `InstanceGameManager` 스크립트 컴포넌트는 `dungeon` 맵에 추가하여 게임 종료 후 유저를 정적 룸으로 이동시키는 로직을 처리합니다. * `MoveUsersToStaticRoom()` 함수는 `RoomService`의 메서드로, 매개변수로 유저 이름 문자열 목록을 전달받아 해당 유저들을 정적 룸으로 이동시킵니다. * `MoveUsersToStaticRoom()` 함수는 특정 정적 맵을 지정하지 않으면 기본적으로 시작 맵으로 유저를 돌려보냅니다. * `_UserService.UserEntities`는 현재 룸 [original] | #### 정적 룸으로 이동시키기 게임이 끝난 맵의 유저는 `MoveUsersToStaticRoom()` 함수를 활용해 정적 룸으로 돌아가게 만듭니다. 돌아갈 정적 맵을 지정하지 않으면 시작 맵으로 돌아갑니다. * **InstanceGameManager 스크립트 컴포넌트**를 생성, 작성한 뒤 dungeon 맵에 스크립트 컴포넌트를 추가합니다. ```lua Method: [server only] void OnBeginPlay() { local playFunc = function() [chunk_id] | Guides:540:4
[task] | distill [title] | 인스턴스 맵 만들기 [category] | Guides [rephrased] | # 정적 룸으로 이동시키기 `MoveUsersToStaticRoom()` 함수를 호출하여 게임 종료 후 유저를 정적 룸으로 이동시킵니다. 대상 맵을 지정하지 않으면 기본 시작 맵으로 복귀합니다. ## 구현 방법 `dungeon` 맵에 **InstanceGameManager** 스크립트 컴포넌트를 추가하고, `_TimerService`를 이용해 지연 후 유저를 이동시킵니다. ```lua Method: [server only] void OnBeginPlay() { local playFunc = function() [original] | #### 정적 룸으로 이동시키기 게임이 끝난 맵의 유저는 `MoveUsersToStaticRoom()` 함수를 활용해 정적 룸으로 돌아가게 만듭니다. 돌아갈 정적 맵을 지정하지 않으면 시작 맵으로 돌아갑니다. * **InstanceGameManager 스크립트 컴포넌트**를 생성, 작성한 뒤 dungeon 맵에 스크립트 컴포넌트를 추가합니다. ```lua Method: [server only] void OnBeginPlay() { local playFunc = function() [chunk_id] | Guides:540:4
[task] | diverse_qa [title] | 인스턴스 맵 만들기 [category] | Guides [rephrased] | 질문: 특정한 유저만 입장할 수 있는 특수 던전 같은 별도 공간을 만들 때 어떤 서비스를 활용해야 하나요? 답변: `RoomService`를 활용할 수 있습니다. 질문: 하나의 월드에는 정적 룸(Static Room)이 몇 개인가요? 답변: 하나의 월드에는 하나의 정적 룸(Static Room)이 있습니다. 질문: 유저는 정적 맵 간 이동을 자유롭게 할 수 있나요? 답변: 네, 유저는 정적 맵 간 이동을 자유롭게 할 수 있습니다. 질문: 정적 맵(Static Map)은 어디에 생성되며, 월드가 생성될 때 어떻게 처리되나요? 답 [original] | # 학습 과정 소개 월드를 제작하다 보면 특정한 유저만 입장할 수 있는 특수 던전 같은 별도의 공간을 만들고 싶을 때가 있습니다. 이때 `RoomService`를 활용할 수 있습니다 다른 유저들과 분리할 수 있는 별도의 공간을 만들고, 유저를 이동시키는 `RoomService`를 알아봅시다. 인스턴스 맵을 활용하기 위해 정적 룸, 정적 맵 개념을 함께 설명합니다. # 정적 룸 하나의 월드에는 하나의 **정적 룸(Static Room)**이 있습니다. 정적 룸에는 정적 맵이 생성됩니다. 유저는 정적 맵 간 이동을 자유롭게 할 수 [chunk_id] | Guides:540:0
[task] | wikipedia [title] | 인스턴스 맵 만들기 [category] | Guides [rephrased] | # 게임 로직 인스턴스 맵 만들기: 정적 룸으로 이동시키기 게임 로직 인스턴스 맵에서 게임이 종료된 유저를 원래의 정적 룸(Static Room)으로 복귀시키는 과정은 `MoveUsersToStaticRoom()` 함수를 통해 처리됩니다. 이 함수는 특정 정적 맵을 지정하지 않는 경우, 해당 유저를 기본 시작 맵으로 돌려보냅니다. 구현을 위해서는 `InstanceGameManager` 스크립트 컴포넌트를 생성하고 작성한 뒤, 이를 던전(Dungeon) 맵에 추가해야 합니다. 아래 예시 코드는 게임이 시작된 후 10초가 경과했을 [original] | #### 정적 룸으로 이동시키기 게임이 끝난 맵의 유저는 `MoveUsersToStaticRoom()` 함수를 활용해 정적 룸으로 돌아가게 만듭니다. 돌아갈 정적 맵을 지정하지 않으면 시작 맵으로 돌아갑니다. * **InstanceGameManager 스크립트 컴포넌트**를 생성, 작성한 뒤 dungeon 맵에 스크립트 컴포넌트를 추가합니다. ```lua Method: [server only] void OnBeginPlay() { local playFunc = function() [chunk_id] | Guides:540:4
[task] | wikipedia [title] | 인스턴스 맵 만들기 [category] | Guides [rephrased] | # 게임 로직 인스턴스 맵 만들기 ## 개요 메이플스토리 월드를 제작하는 과정에서 특정 유저만 입장할 수 있는 특수 던전이나 다른 유저와 분리된 독립 공간을 구현할 필요가 있습니다. 이러한 요구 사항을 충족하기 위해 `RoomService`를 활용할 수 있습니다. `RoomService`는 유저를 다른 유저와 분리된 별도의 공간으로 이동시키고, 해당 공간(인스턴스 룸)을 관리하는 역할을 수행합니다. 인스턴스 맵을 효과적으로 활용하기 위해서는 정적 룸(Static Room), 정적 맵(Static Map), 인스턴스 룸(Insta [original] | # 학습 과정 소개 월드를 제작하다 보면 특정한 유저만 입장할 수 있는 특수 던전 같은 별도의 공간을 만들고 싶을 때가 있습니다. 이때 `RoomService`를 활용할 수 있습니다 다른 유저들과 분리할 수 있는 별도의 공간을 만들고, 유저를 이동시키는 `RoomService`를 알아봅시다. 인스턴스 맵을 활용하기 위해 정적 룸, 정적 맵 개념을 함께 설명합니다. # 정적 룸 하나의 월드에는 하나의 **정적 룸(Static Room)**이 있습니다. 정적 룸에는 정적 맵이 생성됩니다. 유저는 정적 맵 간 이동을 자유롭게 할 수 [chunk_id] | Guides:540:0
[task] | knowledge_list [title] | 인스턴스 맵 만들기 [category] | Guides [rephrased] | * `ReadyButton` 스크립트 컴포넌트는 `[None]` 동기화 속성 `boolean isReady`를 가지며, 초기값은 `false`입니다. * `ReadyButton` 컴포넌트의 `HandleButtonClickEvent(ButtonClickEvent event)` 이벤트 핸들러는 `[client only]` 및 `[Entity: UIButton(/ui/DefaultGroup/UIButton)]` 제약 조건으로 실행되며, 매개변수 `event`를 통해 `Entity`를 접근할 수 있습니다. * `ReadyBut [original] | 3. **ReadyButton** 스크립트 컴포넌트를 생성하고 **Ready UI 버튼**에 추가합니다. 유저가 준비 상태가 되면 서버에 해당 유저가 준비되었다는 정보를 보내줍니다. ```lua Property: [None] boolean isReady = false Event Handler: [client only] [Entity: UIButton(/ui/DefaultGroup/UIButton)] HandleButtonClickEvent(ButtonClickEvent e [chunk_id] | Guides:540:3
[task] | extract_knowledge [title] | 영상 재생시키기 [category] | Guides [rephrased] | # 객체 표현 영상 재생 제어 `YoutubePlayerWorldComponent`와 `YoutubePlayerGUIComponent`는 영상 재생을 제어하는 동일한 함수 시그니처를 제공합니다. 본 절에서는 `YoutubePlayerWorldComponent`를 기준으로, 월드 입장 시 특정 지점부터 재생을 시작하고, 사용자 키보드 입력에 따라 재생 상태를 제어하는 방법을 설명합니다. ## 개념 설명 mLua에서는 YouTube 영상 플레이어 컴포넌트를 통해 영상의 재생, 일시 정지, 멈춤, 특정 시간 점프 등을 제어할 수 있 [original] | 월드에 입장하면 영상을 바로 00:20초부터 재생을 시작하게 만들고, 재생 중에 특정 키를 입력할 때 함수가 동작하게 만듭니다. YoutubePlayerWorldComponent와 YoutubePlayerGUIComponent의 함수 사용법은 동일합니다. 예시는 YoutubePlayerWorldComponent가 기준입니다. 예시 Url: https://www.youtube.com/watch?v=9pL_b1fl9LQ&t=1s 1. YoutubePlayerController 스크립트 컴포넌트를 만들어, 배치한 Youtube 모델에 [chunk_id] | Guides:539:1
[task] | diverse_qa [title] | 인스턴스 맵 만들기 [category] | Guides [rephrased] | 질문: 문서에서 제시한 인스턴스 룸 이동 조건은 무엇인가요? 답변: 'Ready' 버튼을 3명 이상의 유저가 누르면 새로운 인스턴스 룸으로 이동시킵니다. 질문: GameManager 스크립트 컴포넌트에서 유저의 Ready 상태를 확인하는 주기는 얼마인가요? 답변: 5.0초입니다. 질문: 아래 코드는 어떤 실행 공간에서 동작하나요? ```lua [server only] void OnUpdate(number delta) { ... } ``` 답변: [server only] 질문: `checkReadyPlayerTimer [original] | 게임이 진행될 인스턴스 룸에 입장할 수 있는 유저를 정하는 조건을 만들어 유저를 이동시켜봅시다. 조건은 크리에이터의 기획에 따라 달라질 수 있습니다. 예시는 **'Ready' 버튼을 3명 이상의 유저가 누르면** 새로운 인스턴스 룸으로 이동시킵니다. 1. **GameManager 스크립트 컴포넌트**에 주기적으로 유저의 Ready 상태를 확인해, 인스턴스 룸으로 이동시키는 스크립트를 작성합니다. ```lua Property: [None] number checkReadyPlayerTimer = 0 [chunk_id] | Guides:540:2
[task] | extract_knowledge [title] | 인스턴스 맵 만들기 [category] | Guides [rephrased] | # 인스턴스 맵과 RoomService ## 개념 설명 메이플스토리 월드에서 유저를 다른 유저와 분리하여 별도 공간(특수 던전 등)으로 이동시키기 위해 **인스턴스 룸(Instance Room)**과 **인스턴스 맵(Instance Map)**을 사용합니다. 이를 관리하는 서비스는 `RoomService`입니다. ### 정적 룸과 정적 맵 * **정적 룸(Static Room)**: 하나의 월드에 하나만 존재하며, 유저는 정적 맵 간에 자유롭게 이동할 수 있습니다. * **정적 맵(Static Map)**: 월드 인스턴 [original] | # 학습 과정 소개 월드를 제작하다 보면 특정한 유저만 입장할 수 있는 특수 던전 같은 별도의 공간을 만들고 싶을 때가 있습니다. 이때 `RoomService`를 활용할 수 있습니다 다른 유저들과 분리할 수 있는 별도의 공간을 만들고, 유저를 이동시키는 `RoomService`를 알아봅시다. 인스턴스 맵을 활용하기 위해 정적 룸, 정적 맵 개념을 함께 설명합니다. # 정적 룸 하나의 월드에는 하나의 **정적 룸(Static Room)**이 있습니다. 정적 룸에는 정적 맵이 생성됩니다. 유저는 정적 맵 간 이동을 자유롭게 할 수 [chunk_id] | Guides:540:0
[task] | diverse_qa [title] | 인스턴스 맵 만들기 [category] | Guides [rephrased] | 질문: 게임이 끝난 맵의 유저를 정적 룸으로 이동시키는 데 사용되는 함수명은 무엇인가요? 답변: `MoveUsersToStaticRoom()` 함수를 활용합니다. 질문: 정적 룸으로 돌아가는 맵을 지정하지 않으면 유저는 어디로 이동합니까? 답변: 시작 맵으로 돌아갑니다. 질문: 정적 룸으로 유저를 이동시키기 위해 어떤 스크립트 컴포넌트를 생성하여 dungeon 맵에 추가해야 하나요? 답변: `InstanceGameManager` 스크립트 컴포넌트를 생성, 작성한 뒤 dungeon 맵에 추가해야 합니다. 질문: 다음 코드는 무엇 [original] | #### 정적 룸으로 이동시키기 게임이 끝난 맵의 유저는 `MoveUsersToStaticRoom()` 함수를 활용해 정적 룸으로 돌아가게 만듭니다. 돌아갈 정적 맵을 지정하지 않으면 시작 맵으로 돌아갑니다. * **InstanceGameManager 스크립트 컴포넌트**를 생성, 작성한 뒤 dungeon 맵에 스크립트 컴포넌트를 추가합니다. ```lua Method: [server only] void OnBeginPlay() { local playFunc = function() [chunk_id] | Guides:540:4
[task] | distill [title] | 아바타의 외형 변경과 활용 [category] | Guides [rephrased] | # 아바타 외형 변경 및 활용 ## 구성 요소 `DefaultPlayer`는 `AvatarRendererComponent`와 `CostumeManagerComponent`를 포함합니다. * **AvatarRendererComponent**: 복장 정보를 바탕으로 아바타를 렌더링합니다. * **CostumeManagerComponent**: 복장 정보를 관리합니다. * 기본값(미지정) 상태: 유저가 실제 장착한 복장을 표시합니다. * 값 지정 상태: 크리에이터가 지정한 복장을 모든 유저에게 동일하게 적 [original] | # 학습 과정 소개 아바타 구성을 살펴보고, 아바타의 장비를 교체하는 방법을 알아봅니다. 아바타의 구성을 이해해 새로운 방식으로 아바타를 활용할 수 있습니다. # 아바타 **DefaultPlayer**의 프로퍼티 에디터에는 **AvatarRendererComponent**와 **CostumeManagerComponent**가 있습니다. * **AvatarRendererComponent** * 복장 정보를 가져와 아바타를 그리는(Rendering) 역할을 합니다. * **CostumeManagerComponent** [chunk_id] | Guides:543:0
[task] | wikipedia [title] | 인스턴스 맵 만들기 [category] | Guides [rephrased] | # 게임 로직 인스턴스 맵 만들기 게임 로직 인스턴스 맵을 제작하기 위해서는 유저가 인스턴스 룸에 입장할 수 있는 조건을 정의하고, 해당 조건을 충족한 유저를 인스턴스 룸으로 이동시키는 로직을 구현해야 합니다. 이 조건은 크리에이터의 게임 기획에 따라 다양하게 설정할 수 있습니다. 본 문서에서는 예시로 **3명 이상의 유저가 'Ready' 버튼을 누르면 새로운 인스턴스 룸으로 이동**하는 방식을 다룹니다. 구현 과정은 `GameManager` 스크립트 컴포넌트에 주기적으로 유저의 Ready 상태를 확인하고, 인스턴스 룸으로 이동 [original] | 게임이 진행될 인스턴스 룸에 입장할 수 있는 유저를 정하는 조건을 만들어 유저를 이동시켜봅시다. 조건은 크리에이터의 기획에 따라 달라질 수 있습니다. 예시는 **'Ready' 버튼을 3명 이상의 유저가 누르면** 새로운 인스턴스 룸으로 이동시킵니다. 1. **GameManager 스크립트 컴포넌트**에 주기적으로 유저의 Ready 상태를 확인해, 인스턴스 룸으로 이동시키는 스크립트를 작성합니다. ```lua Property: [None] number checkReadyPlayerTimer = 0 [chunk_id] | Guides:540:2
[task] | diverse_qa [title] | 아바타의 외형 변경과 활용 [category] | Guides [rephrased] | 질문: DefaultPlayer의 프로퍼티 에디터에는 어떤 컴포넌트가 포함되어 있나요? 답변: DefaultPlayer의 프로퍼티 에디터에는 AvatarRendererComponent와 CostumeManagerComponent가 있습니다. 질문: AvatarRendererComponent의 주요 역할은 무엇인가요? 답변: AvatarRendererComponent는 복장 정보를 가져와 아바타를 그리는(Rendering) 역할을 합니다. 질문: CostumeManagerComponent가 특정한 복장 값을 지정받지 않았다면 어떤 [original] | # 학습 과정 소개 아바타 구성을 살펴보고, 아바타의 장비를 교체하는 방법을 알아봅니다. 아바타의 구성을 이해해 새로운 방식으로 아바타를 활용할 수 있습니다. # 아바타 **DefaultPlayer**의 프로퍼티 에디터에는 **AvatarRendererComponent**와 **CostumeManagerComponent**가 있습니다. * **AvatarRendererComponent** * 복장 정보를 가져와 아바타를 그리는(Rendering) 역할을 합니다. * **CostumeManagerComponent** [chunk_id] | Guides:543:0
[task] | diverse_qa [title] | 인스턴스 맵 만들기 [category] | Guides [rephrased] | 질문: `ReadyButton` 스크립트 컴포넌트가 부착된 UI 버튼이 눌렸을 때, 현재 `isReady` 속성이 `true`인 경우 어떤 처리가 이루어집니까? 답변: `isReady` 속성을 `false`로 변경하고, UI의 `Text`를 "Ready"로 수정한 뒤 `_UserService.LocalPlayer.Player:OnCancelReady()` 메서드를 호출하여 서버에 준비 취소 정보를 보냅니다. 질문: `ReadyButton` 스크립트에서 `HandleButtonClickEvent` 이벤트 핸들러의 실행 공간은 무엇입 [original] | 3. **ReadyButton** 스크립트 컴포넌트를 생성하고 **Ready UI 버튼**에 추가합니다. 유저가 준비 상태가 되면 서버에 해당 유저가 준비되었다는 정보를 보내줍니다. ```lua Property: [None] boolean isReady = false Event Handler: [client only] [Entity: UIButton(/ui/DefaultGroup/UIButton)] HandleButtonClickEvent(ButtonClickEvent e [chunk_id] | Guides:540:3
[task] | knowledge_list [title] | 아바타의 외형 변경과 활용 [category] | Guides [rephrased] | 주어진 문서에서 추출한 핵심 사실 목록입니다. ```lua -- 참고: 아래 내용은 mLua 코드 예제 없이, 문서에 명시된 사실관계와 API/컴포넌트 정보만을 기반으로 작성되었습니다. 1. DefaultPlayer 엔티티에는 AvatarRendererComponent와 CostumeManagerComponent가 기본적으로 포함되어 있습니다. 2. AvatarRendererComponent는 복장 정보를 가져와서 아바타를 렌더링(Rendering)하는 역할을 수행합니다. 3. CostumeManagerComponent는 복장 [original] | # 학습 과정 소개 아바타 구성을 살펴보고, 아바타의 장비를 교체하는 방법을 알아봅니다. 아바타의 구성을 이해해 새로운 방식으로 아바타를 활용할 수 있습니다. # 아바타 **DefaultPlayer**의 프로퍼티 에디터에는 **AvatarRendererComponent**와 **CostumeManagerComponent**가 있습니다. * **AvatarRendererComponent** * 복장 정보를 가져와 아바타를 그리는(Rendering) 역할을 합니다. * **CostumeManagerComponent** [chunk_id] | Guides:543:0
[task] | extract_knowledge [title] | 인스턴스 맵 만들기 [category] | Guides [rephrased] | # 게임 로직 인스턴스 맵: 정적 룸으로 이동시키기 ## 1. 개념 설명 게임 로직 인스턴스 맵에서 게임이 종료된 유저를 원래 있던 정적 룸(Static Room)으로 복귀시키는 과정은 `_RoomService`의 `MoveUsersToStaticRoom()` 함수를 통해 처리됩니다. 이 함수를 호출할 때 특정 정적 맵 경로를 지정하지 않으면, 해당 유저들은 기본적으로 시작 맵(Start Map)으로 복귀합니다. ## 2. API 사용법 정적 룸으로의 이동 로직을 구현하기 위해 다음과 같은 서비스와 컴포넌트를 사용합니다. * [original] | #### 정적 룸으로 이동시키기 게임이 끝난 맵의 유저는 `MoveUsersToStaticRoom()` 함수를 활용해 정적 룸으로 돌아가게 만듭니다. 돌아갈 정적 맵을 지정하지 않으면 시작 맵으로 돌아갑니다. * **InstanceGameManager 스크립트 컴포넌트**를 생성, 작성한 뒤 dungeon 맵에 스크립트 컴포넌트를 추가합니다. ```lua Method: [server only] void OnBeginPlay() { local playFunc = function() [chunk_id] | Guides:540:4