[task] | instruction_following [pass] | ⏳ 미판정 [title] | 에디터 서비스의 활용 [question] | 에디터 서비스의 라이프사이클 미사용 이유와 `EnterEditorEvent` 의 반복 호출 특성을 2문장 이내로 요약하세요. [answer] | 에디터 서비스는 실제 플레이 상태가 아니므로 `OnBeginPlay()` 같은 라이프사이클을 사용하지 않습니다. `EnterEditorEvent`는 월드 최초 로드 시와 테스트 플레이 종료 시마다 호출되므로 반복적으로 발생한다는 점을 유의해야 합니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 버튼 클릭 시 에디터 상에 엔티티를 스폰하여 배치할 수도 있습니다. 에디터 상태에서 버튼을 클릭할 때마다 오브젝트를 스폰하는 예시입니다. ```lua Event Handler: [self] HandleButtonClickEvent(ButtonClickEvent event) { --------------- Native Event Sender Info ---------------- -- Sender: ButtonComponent -- Space: Client --------------------------
[task] | single_turn [pass] | ⏳ 미판정 [title] | 에디터 서비스의 활용 [question] | 아웃 게임에서 최초 에디터 진입 시에도 호출되는 이벤트 핸들러는 무엇인가요? [answer] | 아웃 게임에서 최초 에디터 진입 시에도 호출되는 이벤트 핸들러는 **`HandleEnterEditorEvent`**입니다. 이 이벤트는 `EditorService`에서 발생하며, 플레이(아웃 게임)를 종료하고 UI 에디터로 돌아올 때나 아웃 게임 상태에서 최초 에디터에 진입할 때 트리거됩니다. ```lua Event Handler: [service: EditorService] HandleEnterEditorEvent(EnterEditorEvent event) { --------------- Native Event Send [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 월드를 제작하고 테스트 플레이를 시작하면 라이프 사이클에 따라 이벤트 함수를 호출합니다. 이와 다르게 [EditorService](/apiReference/Services/EditorService)는 메이커에서 스크립트 사용을 지원합니다. 크리에이터는 **EditorService**를 이용해 자신이 필요한 제작 도구를 만들 수 있습니다. # 에디터 서비스 체험하기 EditorService를 활용해 로그를 남겨봅시다. 1. **MyDesk- Create Scripts - Create Component**를 선
[task] | code [pass] | ⏳ 미판정 [title] | 애니메이션 만들기 [question] | 스프라이트 애니메이션 재생 속도를 0.3과 2.0으로 조절하여 확인하는 스크립트를 작성해줘 [answer] | 요청하신 내용은 **애니메이션 편집기(AnimationClip Editor)** 에서의 작업 과정이며, mLua 스크립트 언어를 통해 실행 가능한 API가 아닙니다. 참고 문서에 따르면, 스프라이트 애니메이션의 재생 속도를 조절하는 방법은 다음과 같습니다. 1. 타임라인의 첫 번째 이미지를 선택하고 `Shift` 키를 누른 채 마지막 이미지를 선택합니다. 2. **Delay** 값에 원하는 재생 속도(예: 0.3 또는 2.0)를 입력합니다. * 숫자가 커질수록 느리게 재생됩니다. 3. **[재생]** 버튼을 눌러 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 하나의 프레임이 재생될 시간을 조절해 같은 스프라이트로 제작한 애니메이션의 재생 속도를 조절할 수 있습니다. 재생 속도 값은 수가 커질수록 느리게 재생됩니다. | 0.3 | 2.0 | | --- | --- | | | | 1. 타임라인의 가장 첫 번째 이미지를 선택하고 **Shift** 키를 누릅니다. 2. 스크롤 바를 움직여 마지막 이미지를 선택합니다. 3. **Delay** 값에 **0.3**을 입력합니다. 4. **[재생]** 버튼을 눌러 애니메이션 재생 속도를 확인합니다. 5. 편집한 애니메이션의 이름을 입력하고, *
[task] | instruction_following [pass] | ⏳ 미판정 [title] | 에디터 서비스의 활용 [question] | _EditorService의 데이터 수정 API 3가지를 표로 정리해서 각각의 기능을 설명하세요. [answer] | _EditorService에서 데이터를 수정하는 데 사용할 수 있는 API 3가지는 아래 표와 같습니다. | API 이름 | 기능 설명 | | :--- | :--- | | `DataSetInsertRow` | 데이터셋에 새로운 행(줄)을 추가합니다. | | `DataSetRemoveRow` | 데이터셋에서 특정 행(줄)을 삭제합니다. | | `DataSetSetCell` | 데이터셋의 특정 행과 컬럼 위치의 셀 값을 설정(수정)합니다. | [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | **SpawnService**를 이용해 엔티티 배치하거나 프로퍼티 값을 수정해 변경된 값을 저장할 수 있습니다. 프로퍼티의 값을 수정 및 제어할 수 있다는 의미는 많은 정보를 수정할 수 있다는 의미를 내포하나, 복잡한 정보를 저장하기에는 충분하지 않을 수 있습니다. **EditorService**는 데이터에 접근하여 값을 읽고 쓸 수 있는 기능을 제공합니다.아래와 같이 데이터를 구성했다고 가정해보겠습니다. dash의 col3 컬럼의 값을 가져오기 위해 아래와 같이 작성해 활용할 수 있습니다. ```lua local data
[task] | code [pass] | ⏳ 미판정 [title] | 패키지의 활용 [question] | 문서에 mLua 스크립트 API, 컴포넌트, 또는 서비스 관련 정보가 전혀 포함되어 있지 않으므로, 요청하신 mLua 코딩 과제를 작성할 수 없습니다. [answer] | 제시된 참고 문서는 '메이커 사용 패키지의 활용'에 대한 내용으로, 패키지 내보내기/불러오기 절차와 규칙(리소스 내보내기, 엔트리 상속 관계 등)만 다루고 있습니다. mLua 스크립트 API, 컴포넌트, 또는 서비스 관련 정보가 문서에 포함되어 있지 않으므로, 요청하신 mLua 코딩 과제를 작성할 수 없습니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 메이플스토리 월드에서는 Workspace의 모델, 스크립트 컴포넌트, 데이터 셋과 같은 엔트리를 하나의 파일로 묶어 외부로 공유할 수 있는 패키지 기능을 제공하고 있습니다. Workspace의 엔트리를 패키지 파일로 내보내거나, 패키지 파일을 월드에 불러오는 방법에 대해 알아봅니다. # 패키지 소개 패키지는 특정 엔트리를 묶은 파일입니다. 패키지 파일을 이용해 제작한 월드의 일부를 외부와 공유하거나, 타인이 공유한 패키지를 내 월드에 사용할 수 있습니다. 패키지 내보내기, 불러오기 창에서는 폴더 구조와 계층
[task] | single_turn [pass] | ⏳ 미판정 [title] | 애니메이션 만들기 [question] | 애니메이션 클립 에디터에서 RUID를 입력했는데 스프라이트가 생각했던 위치와 다르게 배치되는 이유는 무엇인가요? [answer] | 애니메이션 클립 에디터에서 RUID를 입력했을 때 스프라이트가 예상과 다른 위치에 배치되는 이유는 **리소스마다 오프셋(Offset) 값이 다르기 때문**입니다. 메이플스토리 월드에서 제공하는 애니메이션 클립들은 각각 고유한 오프셋 위치를 가지고 있어, 단순히 RUID만 지정해도 정중앙이나 원하는 기준점에 정확히 맞지 않을 수 있습니다. 이를 해결하기 위해 애니메이션 클립을 편집하여 오프셋 위치를 정중앙으로 맞출 수 있습니다. 오프셋을 조정하는 방법은 다음과 같습니다. 1. 타임라인에서 이미지 하나를 선택하여 초록색 가로, [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 애니메이션 클립 에디터를 이용해 기존의 메이플스토리 월드 애니메이션을 편집하거나 직접 제작한 애니메이션을 월드에 활용할 수 있습니다. 애니메이션 클립 에디터의 구성과 사용 방법을 알아봅시다. # 애니메이션 클립 에디터 소개 | 숫자 | 설명 | | --- | --- | | | **[새로 열기]**, **[추가하기]** 버튼으로 불러온 스프라이트가 배치됩니다. | | | 타임라인에 추가한 스프라이트들이 차례로 재생되며 초록 십자선을 기준으로 애니메이션 재생 위치를 확인할 수 있습니다. 상단의 Scale 슬
[task] | code [pass] | ⏳ 미판정 [title] | RectTileMap의 활용 [question] | InputService의 KeyDownEvent를 통해 Z/X 키 입력 시 RectTileMap의 현재 타일을 Grass/Rock으로 변경하는 스크립트를 작성해줘 [answer] | 주어진 문서 내용과 실제 mLua 예제 형식을 바탕으로, `InputService`의 `KeyDownEvent`를 통해 Z/X 키 입력 시 타일을 변경하는 스크립트를 작성합니다. 문서에 제시된 논리(11번 단계)와 실제 mLua 예제의 문법(예제 블록)을 결합하여 작성한 코드는 다음과 같습니다. ```lua Event Handler: [service: InputService] HandleKeyDownEvent(KeyDownEvent event) { -- Parameters local key = event.key [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 11. **Event Handler**에서 **KeyDownEvent**를 추가하고, 내용을 다음과 같이 작성합니다. ```lua Event Handler : [service: InputService] HandleKeyDownEvent(KeyDownEvent event) { -- Parameters local key = event.key --------------------------------------------------------
[task] | code [pass] | ⏳ 미판정 [title] | 아바타 아이템 등록하기 [question] | 해당 문서에는 mLua 스크립트 언어, 컴포넌트 메서드, 또는 서비스 API에 대한 기술적 정보가 포함되어 있지 않으며, UI를 통한 리소스 선택(RUID 입력) 절차만 설명하고 있습니다. 따라서 주어진 원문 정보만으로 해결할 수 있는 mLua 코딩 과제를 생성할 수 없습니다. [answer] | 제공된 참고 문서에는 아바타 아이템을 **UI(에디터)를 통해** `DefaultPlayer`의 `CostumeManagerComponent` 프로퍼티에 RUID를 입력하여 등록하는 절차만 설명하고 있습니다. 문서에 언급된 mLua 스크립트 예제는 **트리거(Trigger) 이벤트**가 발생할 때(`HandleTriggerEnterEvent` 또는 `OnEnterTriggerBody`) 플레이어의 `CostumeManagerComponent`를 통해 특정 슬롯의 RUID를 변경하는 방법을 보여주며, 이는 "트리거 영역에 들어오면 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 크리에이터가 제작한 월드에서 아바타 아이템을 착용할 수 있습니다. 1. **DefaultPlayer**의 **CostumeManagerComponent**에서 착용하고자 하는 아바타 아이템의 프로퍼티를 클릭합니다. 2. 해당 버튼을 클릭하면 **Resource Picker**가 열리고 **내 리소스**에 등록한 아바타 아이템이 나옵니다. 원하는 아바타 아이템을 클릭합니다. 3. 프로퍼티를 확인해보면 다음과 같이 RUID 값이 입력되어 있음을 확인할 수 있습니다. > **더 알아보기** > 직접 제작한 아바타 아이템을 상품
[task] | instruction_following [pass] | ⏳ 미판정 [title] | 에디터 서비스의 활용 [question] | 에디터 UI와 월드 플레이 상태에서의 프로퍼티 저장 방식 차이를 비교하는 표로 정리해서 답변하세요. [answer] | 에디터 UI와 월드 플레이 상태에서의 프로퍼티 저장 방식 차이는 다음과 같습니다. | 구분 | 월드 플레이 상태 | 에디터 UI 상태 | | :--- | :--- | :--- | | **프로퍼티 변경 저장 방식** | 플레이 종료 후 메이커로 돌아오면 프로퍼티가 월드 제작 시 설정한 **본래 값으로 복원**됩니다. | 플레이를 종료하고 메이커로 돌아오면 **변경된 값이 저장**되어 유지됩니다. | | **특징** | 일시적인 변경으로 취급되어 원래 상태로 되돌아갑니다. | 영구적인 변경으로 취급되어 월드 상태에 반영됩니다. | [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | UIGroupComponent의 **GroupType**을 변경해 에디터 타입의 UI를 구성할 수 있습니다. 에디터 타입 UI는 월드를 플레이하거나, 월드를 편집 중인 상태에서만 확인 및 기능 작동이 가능합니다. 간단한 예시를 통해 확인해보겠습니다. 1. UI 에디터를 엽니다. 2. 새로운 UIGroup을 추가합니다. 3. 추가한 UIGroup을 선택합니다. 4. 프로퍼티 에디터에서 UIGroupComponent의 GroupType을 **EditorType**으로 변경합
[task] | two_turn [pass] | ⏳ 미판정 [title] | RectTileMap의 활용 [question] | RectTileMap에서 타일을 추가하는 방법과 타일 속성 설정에 대해 설명해 주세요. [answer] | RectTileMap에서 타일을 추가하는 방법은 크게 세 가지이며, 각각의 절차와 타일 속성 설정 방법은 다음과 같습니다. ### 1. 타일 추가 방법 **1) ResourceStorage로 타일 추가** 타일 셋 팔레트 하단의 추가 버튼을 클릭하여 **Add ResourceStorage Image**를 선택하면 **Resource Picker** 창이 열립니다. 여기서 **MSW 리소스** 탭으로 이동하여 기본 제공하는 스프라이트를 선택하면 타일로 추가됩니다. **2) Workspace의 이미지를 타일로 추가** 타일 셋 팔 [followup] | 스크립트로 특정 이름의 타일을 생성할 때 타일 이름을 어떻게 지정해야 하며, 이미 배치된 타일의 스프라이트를 변경하면 어떤 일이 일어나나요? [followup_answer] | ### 타일 이름 지정 방법 스크립트로 특정 이름의 타일을 생성하거나 참조하려면, 먼저 타일 셋 팔레트 오른쪽 상단의 편집 버튼을 눌러 **타일 편집 모드**로 전환해야 합니다. 타일 편집 모드에서 타일 하단의 텍스트를 더블 클릭하면 해당 타일의 이름을 설정할 수 있습니다(예: `Tile02`). 이 이름은 스크립트를 통해 타일을 생성하거나 조회할 때 사용됩니다. ### 이미 배치된 타일의 스프라이트 변경 시 결과 타일 편집 모드에서 **스프라이트 편집** 체크박스를 선택하고 **[타일 편집]** 버튼을 클릭하여 **Resou [scores] | [judge_reason] | [source_doc] | 새 타일 셋에 원하는 타일을 추가해봅시다. * **RosourceStorage로 타일 추가** 1. 타일 셋 팔레트 하단의 버튼 클릭 - **Add ResourceStorage Image**를 클릭하면 **Resource Picker**가 열립니다. 2. **Resource Picker** - **MSW 리소스** 탭에서 기본 제공하는 스프라이트를 타일로 추가합니다. * **Workspace의 이미지를 타일로 추가** 1. 타일 셋 팔레트 하단의 버튼 클릭 - **Add Workspace Im
[task] | code [pass] | ⏳ 미판정 [title] | 애니메이션 만들기 [question] | 타임라인에서 첫 번째와 마지막 이미지를 선택하여 Delay 값을 0.3으로 설정하는 스크립트를 작성해줘 [answer] | 요청하신 작업(타임라인의 첫 번째와 마지막 이미지를 선택하고 Delay 값을 0.3으로 설정하는 것)은 **메이플스토리 월드 에디터의 애니메이션 클립 편집기 UI에서 수행하는 그래픽 인터페이스(GUI) 작업**입니다. mLua 스크립트 언어와 제공된 API 문서는 런타임(게임 실행 중)에 엔티티, 컴포넌트, 서비스 등을 제어하는 용도로만 사용할 수 있으며, 에디터의 타임라인 UI 요소를 선택하거나 Delay 값을 직접 수정하는 API가 존재하지 않습니다. 따라서 이 작업을 수행하는 mLua 스크립트를 작성할 수 없습니다. 해당 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 하나의 프레임이 재생될 시간을 조절해 같은 스프라이트로 제작한 애니메이션의 재생 속도를 조절할 수 있습니다. 재생 속도 값은 수가 커질수록 느리게 재생됩니다. | 0.3 | 2.0 | | --- | --- | | | | 1. 타임라인의 가장 첫 번째 이미지를 선택하고 **Shift** 키를 누릅니다. 2. 스크롤 바를 움직여 마지막 이미지를 선택합니다. 3. **Delay** 값에 **0.3**을 입력합니다. 4. **[재생]** 버튼을 눌러 애니메이션 재생 속도를 확인합니다. 5. 편집한 애니메이션의 이름을 입력하고, *
[task] | instruction_following [pass] | ⏳ 미판정 [title] | 에디터 서비스의 활용 [question] | 에디터 UI에서 월드 배경을 변경하는 예시 코드에서 변수 선언과 API 호출 구문만 추출해 주석으로 설명을 붙인 코드 블록으로 출력하세요. [answer] | ```lua -- 변수 선언: 버튼 클릭 상태를 토글하기 위한 boolean 타입 변수 self.IsButtonClicked = not self.IsButtonClicked -- 변수 선언: 기본 배경 RUID 문자열 초기화 local backGroundRuid = "000000" -- API 호출: _EntityService를 사용하여 경로 "/maps/map01/Background"를 가진 엔티티의 BackgroundComponent에 접근 local backGroundComp = _EntityService:GetEntity [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | UIGroupComponent의 **GroupType**을 변경해 에디터 타입의 UI를 구성할 수 있습니다. 에디터 타입 UI는 월드를 플레이하거나, 월드를 편집 중인 상태에서만 확인 및 기능 작동이 가능합니다. 간단한 예시를 통해 확인해보겠습니다. 1. UI 에디터를 엽니다. 2. 새로운 UIGroup을 추가합니다. 3. 추가한 UIGroup을 선택합니다. 4. 프로퍼티 에디터에서 UIGroupComponent의 GroupType을 **EditorType**으로 변경합
[task] | single_turn [pass] | ⏳ 미판정 [title] | 에디터 서비스의 활용 [question] | UIGroupComponent의 GroupType을 EditorType으로 설정하면 플레이어가 아닌 편집자만 UI를 볼 수 있나요? [answer] | 네, `UIGroupComponent`의 `GroupType`을 `EditorType`으로 설정하면 해당 UI는 **월드 플레이 상태가 아닌 편집(에디터) 상태에서만** 확인되고 기능이 작동합니다. 따라서 실제 플레이어가 월드를 플레이하는 동안에는 이 UI를 볼 수 없으며, 월드를 편집 중이거나 에디터 UI를 활성화한 상태일 때만 표시됩니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | UIGroupComponent의 **GroupType**을 변경해 에디터 타입의 UI를 구성할 수 있습니다. 에디터 타입 UI는 월드를 플레이하거나, 월드를 편집 중인 상태에서만 확인 및 기능 작동이 가능합니다. 간단한 예시를 통해 확인해보겠습니다. 1. UI 에디터를 엽니다. 2. 새로운 UIGroup을 추가합니다. 3. 추가한 UIGroup을 선택합니다. 4. 프로퍼티 에디터에서 UIGroupComponent의 GroupType을 **EditorType**으로 변경합
[task] | single_turn [pass] | ⏳ 미판정 [title] | 에디터 서비스의 활용 [question] | EnterEditorEvent 가 반복적으로 호출된다는 점에 유의해야 하는데, 이 이벤트가 언제 호출되는지 구체적으로 알려주세요. [answer] | `EnterEditorEvent`는 다음과 같은 두 가지 시점에 호출됩니다. 1. 에디터 실행 후 월드를 최초 로드할 때 2. 테스트 플레이가 종료될 때 월드 로드 시 1회만 실행되는 `WorldLoadEditorEvent`와 달리, 테스트 플레이를 반복적으로 진행할 때마다 다시 호출되므로 이벤트 처리 로직을 작성할 때 중복 실행에 유의해야 합니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 버튼 클릭 시 에디터 상에 엔티티를 스폰하여 배치할 수도 있습니다. 에디터 상태에서 버튼을 클릭할 때마다 오브젝트를 스폰하는 예시입니다. ```lua Event Handler: [self] HandleButtonClickEvent(ButtonClickEvent event) { --------------- Native Event Sender Info ---------------- -- Sender: ButtonComponent -- Space: Client --------------------------
[task] | single_turn [pass] | ⏳ 미판정 [title] | RectTileMap의 활용 [question] | RectTileMap에서 플레이어가 위치한 지점의 타일을 실시간으로 변경하려면 ChangeCurrentTile 메서드와 키 입력 이벤트가 어떻게 연동되어야 하나요? [answer] | RectTileMap에서 플레이어가 위치한 지점의 타일을 실시간으로 변경하기 위해 `ChangeCurrentTile` 메서드와 키 입력 이벤트를 연동하는 방법은 다음과 같습니다. ### 1. 핵심 연동 원리 1. **키 입력 감지**: `InputService`의 `KeyDownEvent`를 사용하여 특정 키(예: Z, X)가 눌렸는지 확인합니다. 2. **타일 종류 선택**: 눌린 키에 따라 변경할 타일 이름(예: "Grass", "Rock")을 결정합니다. 3. **타일 변경 실행**: 결정된 타일 이름을 인자로 받아 ` [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 11. **Event Handler**에서 **KeyDownEvent**를 추가하고, 내용을 다음과 같이 작성합니다. ```lua Event Handler : [service: InputService] HandleKeyDownEvent(KeyDownEvent event) { -- Parameters local key = event.key --------------------------------------------------------
[task] | single_turn [pass] | ⏳ 미판정 [title] | 애니메이션 만들기 [question] | 특정 프레임의 Offset Y값만 변경하여 점프하는 듯한 움직임을 표현할 수 있다고 하는데, 구체적인 설정 방법은 어떻게 되나요? [answer] | 참고 문서에는 특정 프레임의 Offset Y값만 변경하여 점프하는 듯한 움직임을 만들 수 있다는 원리만 언급되어 있으며, 구체적인 스크립트 코드나 API 설정 방법은 제공되지 않습니다. 문서에서 안내하는 일반적인 애니메이션 편집 및 오프셋 조정 방법은 다음과 같습니다. 1. **AnimationClip Editor 열기**: `Window - Animation Clip Editor` 메뉴에서 **[새로 열기]** 버튼을 누르거나, Resource Storage에서 원하는 애니메이션 클립의 컨텍스트 메뉴에서 `Make Anima [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 애니메이션 클립 에디터를 이용해 기존의 메이플스토리 월드 애니메이션을 편집하거나 직접 제작한 애니메이션을 월드에 활용할 수 있습니다. 애니메이션 클립 에디터의 구성과 사용 방법을 알아봅시다. # 애니메이션 클립 에디터 소개 | 숫자 | 설명 | | --- | --- | | | **[새로 열기]**, **[추가하기]** 버튼으로 불러온 스프라이트가 배치됩니다. | | | 타임라인에 추가한 스프라이트들이 차례로 재생되며 초록 십자선을 기준으로 애니메이션 재생 위치를 확인할 수 있습니다. 상단의 Scale 슬
[task] | two_turn [pass] | ⏳ 미판정 [title] | 에디터 서비스의 활용 [question] | EditorService를 사용하여 메이커 환경에서 로그를 남기는 기본적인 설정 방법은 무엇인가요? [answer] | EditorService를 사용하여 메이커 환경에서 로그를 남기려면 스크립트 컴포넌트를 생성하고 `EnterEditorEvent` 및 `EnterPlayEvent` 이벤트 핸들러를 설정해야 합니다. 기본적인 설정 방법은 다음과 같습니다: 1. **스크립트 컴포넌트 생성**: * `MyDesk` > `Create Scripts` > `Create Component`를 선택하여 스크립트 컴포넌트를 추가합니다. * 컴포넌트 이름을 `HelloEditor`로 설정합니다. 2. **이벤트 핸들러 작성**: [followup] | EnterEditorEvent와 EnterPlayEvent 핸들러를 추가한 HelloEditor 컴포넌트를 Hierarchy의 World - Common에 배치하고, 에디터 모드와 플레이 모드 전환 시 각각 어떤 로그가 출력되는지 확인하는 구체적인 절차와 코드 예제는 어떻게 되나요? [followup_answer] | `HelloEditor` 컴포넌트를 `Hierarchy`의 `World - Common`에 배치하고 에디터 모드와 플레이 모드 전환 시 로그를 확인하는 구체적인 절차와 코드 예제는 다음과 같습니다. ### 1. 코드 예제 `MyDesk` > `Create Scripts` > `Create Component`를 통해 생성된 `HelloEditor` 스크립트 컴포넌트에 아래 Event Handler 코드를 작성합니다. ```lua Event Handler: [service: EditorService] HandleEnterEdito [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 월드를 제작하고 테스트 플레이를 시작하면 라이프 사이클에 따라 이벤트 함수를 호출합니다. 이와 다르게 [EditorService](/apiReference/Services/EditorService)는 메이커에서 스크립트 사용을 지원합니다. 크리에이터는 **EditorService**를 이용해 자신이 필요한 제작 도구를 만들 수 있습니다. # 에디터 서비스 체험하기 EditorService를 활용해 로그를 남겨봅시다. 1. **MyDesk- Create Scripts - Create Component**를 선
[task] | instruction_following [pass] | ⏳ 미판정 [title] | 에디터 서비스의 활용 [question] | "dash"의 col3 값을 조회하는 로직을 코드만 출력하고 설명은 주석으로 작성하세요. [answer] | ```lua -- "dash"의 col3 값을 조회하는 로직 -- 1. CustomEditorData 테이블을 가져옴 local data = _DataService:GetTable("CustomEditorData") -- 2. 전체 행의 수를 확인 local rowCount = data:GetRowCount() -- 3. 1행부터 마지막 행까지 순회 for i = 1, rowCount do -- 4. 현재 행의 "name" 컬럼 값을 가져옴 local name = data:GetCell(i, "name") [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | **SpawnService**를 이용해 엔티티 배치하거나 프로퍼티 값을 수정해 변경된 값을 저장할 수 있습니다. 프로퍼티의 값을 수정 및 제어할 수 있다는 의미는 많은 정보를 수정할 수 있다는 의미를 내포하나, 복잡한 정보를 저장하기에는 충분하지 않을 수 있습니다. **EditorService**는 데이터에 접근하여 값을 읽고 쓸 수 있는 기능을 제공합니다.아래와 같이 데이터를 구성했다고 가정해보겠습니다. dash의 col3 컬럼의 값을 가져오기 위해 아래와 같이 작성해 활용할 수 있습니다. ```lua local data
[task] | single_turn [pass] | ⏳ 미판정 [title] | 에디터 서비스의 활용 [question] | 에디터 UI에서 프로퍼티 값을 수정하고 메이커로 돌아가면 그 변경 사항이 영구적으로 저장되나요? [answer] | 네, 에디터 UI를 통해 프로퍼티 값을 수정한 뒤 플레이를 종료하고 메이커로 돌아오면 변경된 값이 저장됩니다. 월드 플레이 상태에서 프로퍼티를 수정하는 경우와 동작이 다르며, 월드 플레이에서는 플레이 종료 후 메이커로 돌아오면 월드 제작 시 설정한 본래 값으로 되돌아갑니다. 하지만 에디터 UI 환경에서는 수정된 상태가 유지되므로, 에디터에서 배경 변경과 같은 조작을 한 뒤 저장하면 월드는 그 변경된 배경을 영구적으로 유지하게 됩니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | UIGroupComponent의 **GroupType**을 변경해 에디터 타입의 UI를 구성할 수 있습니다. 에디터 타입 UI는 월드를 플레이하거나, 월드를 편집 중인 상태에서만 확인 및 기능 작동이 가능합니다. 간단한 예시를 통해 확인해보겠습니다. 1. UI 에디터를 엽니다. 2. 새로운 UIGroup을 추가합니다. 3. 추가한 UIGroup을 선택합니다. 4. 프로퍼티 에디터에서 UIGroupComponent의 GroupType을 **EditorType**으로 변경합
[task] | single_turn [pass] | ⏳ 미판정 [title] | 에디터 서비스의 활용 [question] | 에디터 모드에서 스크립트가 실행되려면 일반 게임 로직과 달리 어떤 서비스를 사용해야 하나요? [answer] | 에디터 모드에서 스크립트가 실행되려면 **EditorService**를 사용해야 합니다. 일반적인 게임 로직은 라이프 사이클에 따라 이벤트 함수가 호출되는 반면, **EditorService**는 메이플스토리 월드 메이커(에디터) 환경에서 스크립트 사용을 지원하도록 설계되었습니다. 크리에이터는 이 서비스를 활용해 에디터 내의 특정 시점(예: 에디터 진입, 플레이 모드 진입)에 반응하는 제작 도구를 만들 수 있습니다. 에디터 모드의 이벤트를 처리하려면 `Event Handler` 블록에 `[service: EditorService [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 월드를 제작하고 테스트 플레이를 시작하면 라이프 사이클에 따라 이벤트 함수를 호출합니다. 이와 다르게 [EditorService](/apiReference/Services/EditorService)는 메이커에서 스크립트 사용을 지원합니다. 크리에이터는 **EditorService**를 이용해 자신이 필요한 제작 도구를 만들 수 있습니다. # 에디터 서비스 체험하기 EditorService를 활용해 로그를 남겨봅시다. 1. **MyDesk- Create Scripts - Create Component**를 선
[task] | code [pass] | ⏳ 미판정 [title] | 모자 만들기 [question] | C 유형(액세서리)은 외형 변화가 없으므로, 착용 시 기존 헤어 및 장식 레이어 상태를 유지하면서 다른 유형과 충돌하지 않도록 `AvatarComponent`의 상태 변경을 방지하는 스크립트를 작성해줘. [answer] | 제공된 참고 문서에는 모자의 7가지 유형(A~G)과 각 유형의 외형 변화(헤어 레이어 처리, 장식 제거 여부 등)에 대한 설명만 포함되어 있습니다. 문서에는 `AvatarComponent`라는 컴포넌트나, 아바타 아이템 착용 시 상태 변경을 방지하기 위한 mLua API(메서드, 이벤트 핸들러, 프로퍼티)가 언급되어 있지 않습니다. 또한, C 유형(액세서리)이 외형 변화를 일으키지 않는다는 것은 게임 내 엔진 레벨에서 이미 처리되는 시각적 효과이며, 이를 스크립트로 "방지"하거나 "유지"하는 로직을 작성할 수 있는 API가 문서에 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 모자는 총 7가지 유형으로 나뉩니다. 모자는 다른 아바타 아이템과 다르게 유형별 전용 제작 시트 파일이 있습니다. 이는 모자 아이템의 vslot과 관련된 특성 때문입니다. 제작에 앞서 해당 개념을 참고해, 유형에 맞는 시트로 아이템을 제작하길 권장합니다. #### 모자 유형 |@cols=2:@rows=1:샘플 | @cols=2:@rows=1:투시 | 유형 설명 | | --- | --- | --- | --- | --- | | | | | |A 유형: [뒤통수가 개방된 모자](/docs?postId=684) 모자를 쓰면
[task] | single_turn [pass] | ⏳ 미판정 [title] | 에디터 서비스의 활용 [question] | WorldLoadEditorEvent 와 EnterEditorEvent 는 실행 시점이 어떻게 다른가요? [answer] | WorldLoadEditorEvent와 EnterEditorEvent의 실행 시점은 다음과 같이 다릅니다. **WorldLoadEditorEvent**는 에디터 실행 후 월드를 로드하는 과정에서 **1회만** 실행됩니다. 월드 로딩이 완료되는 시점에 한 번만 발생하므로, 월드 초기화를 시작하기 위한 처리를 수행하는 데 적합합니다. **EnterEditorEvent**는 에디터 실행 후 월드를 **최초 로드할 때**와 **테스트 플레이 종료 시**에 호출됩니다. 즉, WorldLoadEditorEvent와 달리 한 번만 실행되는 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 버튼 클릭 시 에디터 상에 엔티티를 스폰하여 배치할 수도 있습니다. 에디터 상태에서 버튼을 클릭할 때마다 오브젝트를 스폰하는 예시입니다. ```lua Event Handler: [self] HandleButtonClickEvent(ButtonClickEvent event) { --------------- Native Event Sender Info ---------------- -- Sender: ButtonComponent -- Space: Client --------------------------
[task] | two_turn [pass] | ⏳ 미판정 [title] | 상의 만들기 [question] | 아바타 이미지가 층층이 쌓이는 구조와 zmap 파일의 역할을 이해하고, 상의 아이템이 아바타의 몸동작에 따라 올바르게 렌더링되도록 zmap_preset1 설정에 주의해야 할 점이 무엇인가? [answer] | 아바타의 렌더링 구조와 `zmap` 파일의 역할, 그리고 상의 아이템 제작 시 `zmap_preset1` 설정에 주의해야 할 점은 다음과 같습니다. ### 1. 아바타 이미지의 층층이 쌓이는 구조 아바타를 구성하는 이미지는 단순히 한 장의 그림이 아니라, 여러 레이어가 겹쳐서 만들어지는 구조입니다. 이 구조는 아바타가 다양한 몸동작을 할 때 자연스럽게 보이기 위해 설계되었습니다. 이미지가 쌓이는 순서는 다음과 같습니다. 1. **몸 (Body)** 2. **옷 (Clothing)** 3. **방패 (Shield)** 4. [followup] | 아바타의 몸, 옷, 방패, 무기 순서대로 쌓이는 구조에서 상의(zmap)가 잘못 설정되어 방패나 무기 뒤에 가려지는 문제를 해결하기 위한 mLua 스크립트 또는 시트 수정 예시를 보여주세요. [followup_answer] | 참고 문서에 따르면, 아바타의 렌더링 순서는 **몸 → 옷(상의) → 방패 → 무기** 순서로 이미지가 층층이 쌓이는 구조입니다. `zmap` 파일은 분리된 각 Sprite의 높이 순서(Z-order)를 정리해 둔 파일이며, `data:use_zmap_preset1` 레이어는 이 zmap 정보를 참조합니다. **주의할 점:** 1. **mLua 스크립트로 해결 불가**: `zmap`과 렌더링 순서는 **Adobe Photoshop에서 제작 시트(PSD 파일)를 수정**하여 해결하는 문제입니다. mLua 스크립트는 런타임에 동작 [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 상의 제작 방법을 알아봅시다. 기본 상의 색상을 바꾸고 그 위에 그림을 그릴 수 있습니다. 상의는 복잡한 구조로 구성되어 있기 때문에 바지나 신발 아이템 제작에 익숙해진 후 작업하는 걸 권장합니다. [아바타 아이템 제작의 기본 개념](/docs?postId=588)을 참고해 아바타의 기본 개념을 먼저 숙지하길 바랍니다. # 사전 준비 아이템 제작을 위해선 Adobe Photoshop이 필요합니다. 해당 소프트웨어를 설치한 후 아래 파일을 받아 엽니다. $$attachFile {"name":"Avatar_C
[task] | single_turn [pass] | ⏳ 미판정 [title] | 에디터 서비스의 활용 [question] | 에디터 UI 컴포넌트를 추가했는데 씬 화면에서 안 보일 때, 좌측 상단 메뉴 대신 어디의 버튼을 클릭해야 확인 가능한가요? [answer] | 씬 화면에서 에디터 타입 UI가 안 보일 때는 좌측 상단 메뉴가 아니라, **씬 화면 우측 상단에 있는 [Editor UI] 버튼**을 클릭해야 확인 가능합니다. 참고 문서의 6번 단계에 따르면, `GroupType`을 `EditorType`으로 변경한 후 씬 화면 우측 상단의 **[Editor UI]** 버튼을 클릭하면 플레이 상태가 아니더라도 해당 버튼이 표시되고 클릭이 가능해집니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | UIGroupComponent의 **GroupType**을 변경해 에디터 타입의 UI를 구성할 수 있습니다. 에디터 타입 UI는 월드를 플레이하거나, 월드를 편집 중인 상태에서만 확인 및 기능 작동이 가능합니다. 간단한 예시를 통해 확인해보겠습니다. 1. UI 에디터를 엽니다. 2. 새로운 UIGroup을 추가합니다. 3. 추가한 UIGroup을 선택합니다. 4. 프로퍼티 에디터에서 UIGroupComponent의 GroupType을 **EditorType**으로 변경합
[task] | single_turn [pass] | ⏳ 미판정 [title] | 애니메이션 만들기 [question] | MSW 클립 리소스에 기존 스프라이트가 아닌 직접 제작한 스프라이트를 추가할 때, 파일 불러오기에서 여러 장을 한 번에 올리지 못하는 제한이 있는 이유는 무엇인가요? [answer] | 제공된 참고 문서에는 파일 불러오기 시 여러 장을 한 번에 올리지 못하는 제한이 있는 **이유에 대한 설명이 없습니다.** 문서에는 "한번에 여러 장의 파일을 불러올 수 없습니다"라는 사실(Tip)만 언급되어 있을 뿐, 그 배경이나 원인은 명시되어 있지 않습니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 하나의 프레임이 재생될 시간을 조절해 같은 스프라이트로 제작한 애니메이션의 재생 속도를 조절할 수 있습니다. 재생 속도 값은 수가 커질수록 느리게 재생됩니다. | 0.3 | 2.0 | | --- | --- | | | | 1. 타임라인의 가장 첫 번째 이미지를 선택하고 **Shift** 키를 누릅니다. 2. 스크롤 바를 움직여 마지막 이미지를 선택합니다. 3. **Delay** 값에 **0.3**을 입력합니다. 4. **[재생]** 버튼을 눌러 애니메이션 재생 속도를 확인합니다. 5. 편집한 애니메이션의 이름을 입력하고, *
[task] | single_turn [pass] | ⏳ 미판정 [title] | 애니메이션 만들기 [question] | 타임라인에서 첫 번째 이미지를 선택한 뒤 Shift 키를 눌러 마지막 이미지까지 선택하는 과정에서 중간에 있는 이미지들이 일부만 선택되게 되는 오류가 발생할 수 있을까요? [answer] | 제공된 문서에는 애니메이션 편집기의 **UI 조작 절차**(Shift 키를 이용한 범위 선택 등)와 **기능 설명**(재생 속도 조절, 프레임 이동 등)만 포함되어 있습니다. 문서에는 소프트웨어의 버그, 오류 발생 가능성, 또는 선택 범위가 일부만 적용되는 현상에 대한 기술적 설명이나 API 정보가 포함되어 있지 않습니다. 따라서 해당 오류가 발생할 수 있는지에 대해서는 문서 근거를 바탕으로 답변할 수 없습니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 하나의 프레임이 재생될 시간을 조절해 같은 스프라이트로 제작한 애니메이션의 재생 속도를 조절할 수 있습니다. 재생 속도 값은 수가 커질수록 느리게 재생됩니다. | 0.3 | 2.0 | | --- | --- | | | | 1. 타임라인의 가장 첫 번째 이미지를 선택하고 **Shift** 키를 누릅니다. 2. 스크롤 바를 움직여 마지막 이미지를 선택합니다. 3. **Delay** 값에 **0.3**을 입력합니다. 4. **[재생]** 버튼을 눌러 애니메이션 재생 속도를 확인합니다. 5. 편집한 애니메이션의 이름을 입력하고, *
[task] | single_turn [pass] | ⏳ 미판정 [title] | 에디터 서비스의 활용 [question] | 에디터 상태에서 버튼을 눌렀을 때 오브젝트를 스폰하려면 어떤 서비스와 함수를 호출해야 하나요? [answer] | 에디터 상태에서 버튼을 눌렀을 때 오브젝트를 스폰하려면 `_EditorService`를 사용해야 합니다. 구체적으로 다음과 같은 두 가지 함수를 순서대로 호출합니다. 1. **`_EditorService:SetSelectedModel(spawnModelId)`**: 스폰할 모델의 ID를 지정합니다. 2. **`_EditorService:CreateSelectedModel(spawnPosition)`**: 지정된 위치(`Vector2`)에 선택된 모델을 생성합니다. 버튼 클릭 이벤트를 처리하는 예시 코드는 다음과 같습니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 버튼 클릭 시 에디터 상에 엔티티를 스폰하여 배치할 수도 있습니다. 에디터 상태에서 버튼을 클릭할 때마다 오브젝트를 스폰하는 예시입니다. ```lua Event Handler: [self] HandleButtonClickEvent(ButtonClickEvent event) { --------------- Native Event Sender Info ---------------- -- Sender: ButtonComponent -- Space: Client --------------------------
[task] | single_turn [pass] | ⏳ 미판정 [title] | 에디터 서비스의 활용 [question] | 월드 플레이 중에는 동작하지 않는 에디터 전용 UI 버튼의 클릭 이벤트를 스크립트로 처리하려면 어떤 Event Handler를 사용해야 하나요? [answer] | 에디터 전용 UI 버튼의 클릭 이벤트를 처리하려면 **`ButtonClickEditorEvent`** 이벤트 핸들러를 사용해야 합니다. 이 이벤트는 `GroupType`이 `EditorType`으로 설정된 UIGroup 내의 버튼에서 발생하며, 월드 편집 상태(에디터 모드)에서만 동작합니다. 아래는 해당 이벤트를 처리하는 스크립트 예시입니다. ```lua Event Handler: [entity] Btn_EditorTest(/ui/UIGroup/Btn_EditorTest) HandleButtonClickEditorEvent(B [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | UIGroupComponent의 **GroupType**을 변경해 에디터 타입의 UI를 구성할 수 있습니다. 에디터 타입 UI는 월드를 플레이하거나, 월드를 편집 중인 상태에서만 확인 및 기능 작동이 가능합니다. 간단한 예시를 통해 확인해보겠습니다. 1. UI 에디터를 엽니다. 2. 새로운 UIGroup을 추가합니다. 3. 추가한 UIGroup을 선택합니다. 4. 프로퍼티 에디터에서 UIGroupComponent의 GroupType을 **EditorType**으로 변경합
[task] | single_turn [pass] | ⏳ 미판정 [title] | 애니메이션 만들기 [question] | 변신하는 애니메이션을 만들 때 NPC 카테고리로 업로드했는데, 실제 월드에서 몬스터에게 적용하려고 하면 에러가 나는 경우가 있는데 이는 카테고리 설정 때문일까요? [answer] | 제공된 참고 문서에는 애니메이션 클립의 카테고리 설정(NPC, Monster 등)이 실제 월드에서 몬스터에게 적용될 때 발생하는 에러와의 인과관계나, 카테고리별 적용 제한 사항에 대한 정보가 포함되어 있지 않습니다. 문서에는 '변신하는 애니메이션 만들기' 절차에서 카테고리를 **NPC**로 변경하여 업로드하는 과정이 명시되어 있을 뿐, 이 설정이 몬스터 적용 시 에러를 유발하는지 여부는 설명되어 있지 않습니다. 따라서 주어진 문서만을 근거로 이 에러가 카테고리 설정 때문인지 판단할 수 없습니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 하나의 프레임이 재생될 시간을 조절해 같은 스프라이트로 제작한 애니메이션의 재생 속도를 조절할 수 있습니다. 재생 속도 값은 수가 커질수록 느리게 재생됩니다. | 0.3 | 2.0 | | --- | --- | | | | 1. 타임라인의 가장 첫 번째 이미지를 선택하고 **Shift** 키를 누릅니다. 2. 스크롤 바를 움직여 마지막 이미지를 선택합니다. 3. **Delay** 값에 **0.3**을 입력합니다. 4. **[재생]** 버튼을 눌러 애니메이션 재생 속도를 확인합니다. 5. 편집한 애니메이션의 이름을 입력하고, *
[task] | single_turn [pass] | ⏳ 미판정 [title] | 에디터 서비스의 활용 [question] | 에디터 상태에서 _EntityService를 이용해 특정 엔티티의 배경을 변경하려면 어떤 메서드를 호출해야 하나요? [answer] | 에디터 상태에서 특정 엔티티의 배경을 변경하려면, `_EntityService:GetEntityByPath` 메서드를 사용해 해당 배경 엔티티를 찾은 뒤, 반환된 엔티티의 `BackgroundComponent`를 접근하여 `ChangeBackgroundByTemplateRUID` 메서드를 호출해야 합니다. 아래는 버튼을 클릭할 때마다 배경을 변경하는 예시 코드입니다. ```lua Event Handler: [self] ButtonClickEditorEvent(ButtonClickEvent event) { self.IsBu [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | UIGroupComponent의 **GroupType**을 변경해 에디터 타입의 UI를 구성할 수 있습니다. 에디터 타입 UI는 월드를 플레이하거나, 월드를 편집 중인 상태에서만 확인 및 기능 작동이 가능합니다. 간단한 예시를 통해 확인해보겠습니다. 1. UI 에디터를 엽니다. 2. 새로운 UIGroup을 추가합니다. 3. 추가한 UIGroup을 선택합니다. 4. 프로퍼티 에디터에서 UIGroupComponent의 GroupType을 **EditorType**으로 변경합