[task] | single_turn [pass] | ⏳ 미판정 [title] | 에디터 서비스의 활용 [question] | 에디터 서비스는 OnBeginPlay() 나 OnUpdate() 같은 라이프사이클 함수를 사용할 수 없는 이유는 무엇인가요? [answer] | 에디터 서비스는 실제 월드를 플레이하는 상태가 아니기 때문에 `OnBeginPlay()`나 `OnUpdate()`와 같은 라이프사이클 함수를 사용할 수 없습니다. 에디터 환경에서는 플레이어가 실시간으로 월드를 경험하는 것이 아니라, 월드를 편집하는 과정이 이루어지므로 이러한 게임 실행 중 발생하는 주기적인 업데이트나 시작/종료 생명주기 개념이 적용되지 않습니다. 대신 에디터에서 발생하는 특정 상황(예: 에디터 진입, 월드 로드, 엔티티 선택/생성/삭제, 버튼 클릭 등)에 반응하기 위해 **에디터 서비스의 이벤트**를 중심으로 스크 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 버튼 클릭 시 에디터 상에 엔티티를 스폰하여 배치할 수도 있습니다. 에디터 상태에서 버튼을 클릭할 때마다 오브젝트를 스폰하는 예시입니다. ```lua Event Handler: [self] HandleButtonClickEvent(ButtonClickEvent event) { --------------- Native Event Sender Info ---------------- -- Sender: ButtonComponent -- Space: Client --------------------------
[task] | code [pass] | ⏳ 미판정 [title] | 모자 만들기 [question] | 모자 착용 시 `backHairBelowCapWide` 또는 `backHairBelowCapNarrow` 레이어로 헤어가 표시되도록, A/B 유형 판별 후 해당 레이어의 가시성(`Visibility`)을 제어하는 스크립트를 작성해줘. [answer] | 제시된 참고 문서에는 모자 유형(A, B 등)에 따라 헤어가 `backHairBelowCapWide` 또는 `backHairBelowCapNarrow` 레이어로 **표시된다**는 사실만 기술되어 있습니다. 하지만 해당 레이어의 가시성(`Visibility`)을 제어하는 구체적인 **mLua API, 프로퍼티 이름, 또는 컴포넌트 접근 방식(예: `AvatarComponent` 등)에 대한 정보는 문서에 포함되어 있지 않습니다.** mLua 스크립트 규칙에 따라 "참고 문서에 없는 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] | Delay 값이 커질수록 애니메이션이 느리게 재생된다는 점을 처음 알았는데, 0.3과 2.0의 차이가 실제 화면에서 얼마나 다르게 느껴지는지 궁금합니다. [answer] | 참고 문서에는 Delay 값이 0.3일 때와 2.0일 때의 비교 이미지만 제시되어 있을 뿐, 두 값 사이의 구체적인 시간 차이(예: "0.3은 300ms, 2.0은 2초")나 체감 속도 차이에 대한 수치적 설명은 포함되어 있지 않습니다. 문서에서 확인할 수 있는 사실은 다음과 같습니다: 1. 하나의 프레임이 재생될 시간을 조절하여 애니메이션 재생 속도를 변경할 수 있습니다. 2. 재생 속도 값(Delay)이 커질수록 애니메이션이 느리게 재생됩니다. 따라서 0.3과 2.0의 차이가 화면에서 얼마나 다르게 느껴지는지에 대한 구체적인 [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] | 4번째 줄에 데이터를 추가하고 값을 세팅하는 과정을 단계별 번호 목록으로 나열하세요. [answer] | 4번째 줄에 데이터를 추가하고 값을 세팅하는 과정은 다음과 같습니다. 1. `_DataService:GetTable("CustomEditorData")`를 호출하여 데이터 테이블 객체를 `data` 변수에 할당합니다. 2. `data:GetRowCount()`를 호출하여 현재 데이터의 행 개수를 `rowCount` 변수에 저장합니다. 3. `_EditorService:DataSetInsertRow("CustomEditorData")`를 호출하여 "CustomEditorData" 테이블에 새로운 행을 삽입합니다. 4. `_Edito [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | **SpawnService**를 이용해 엔티티 배치하거나 프로퍼티 값을 수정해 변경된 값을 저장할 수 있습니다. 프로퍼티의 값을 수정 및 제어할 수 있다는 의미는 많은 정보를 수정할 수 있다는 의미를 내포하나, 복잡한 정보를 저장하기에는 충분하지 않을 수 있습니다. **EditorService**는 데이터에 접근하여 값을 읽고 쓸 수 있는 기능을 제공합니다.아래와 같이 데이터를 구성했다고 가정해보겠습니다. dash의 col3 컬럼의 값을 가져오기 위해 아래와 같이 작성해 활용할 수 있습니다. ```lua local data
[task] | two_turn [pass] | ⏳ 미판정 [title] | 아바타 아이템 등록하기 [question] | 아바타 아이템을 등록하려면 어떤 파츠 유형과 PSD 파일이 필요하며, 기본 등록 절차는 어떻게 되나요? [answer] | 아바타 아이템 등록을 위해 필요한 파츠 유형, PSD 파일 요건, 그리고 기본 등록 절차는 다음과 같습니다. ### 1. 등록 가능한 파츠 유형 아바타 아이템으로 등록할 수 있는 파츠는 다음 7가지입니다. * 헤어 (Hair) * 모자 (Hat) * 망토 (Cloak) * 상의 (Coat) * 장갑 (Gloves) * 하의 (Bottom) * 신발 (Shoes) ### 2. PSD 파일 요건 * **파일 형식**: 각 파츠별 아바타 아이템을 제작한 **PSD 파일**이 필요합니다. * **예시** [followup] | 상의(Coat)를 등록할 때 미리보기에서 특정 동작 프레임을 확인하거나 썸네일이 자동으로 생성되는 원리는 무엇이며, 파일이 잘못되었을 때의 예외 처리 방법은 무엇인가요? [followup_answer] | **특정 동작 프레임 확인 및 썸네일 자동 생성 원리** 1. **특정 동작 프레임 확인**: * **ActionName 클릭**: 미리보기 화면의 동작 목록에서 특정 **ActionName**을 클릭하면 해당 동작에 따른 아바타 아이템의 모습을 확인할 수 있습니다. * **AutoPlay 사용**: **AutoPlay** 버튼을 클릭하면 특정 프레임을 지정하여 아바타 프리뷰를 재생 및 확인할 수 있습니다. 이를 통해 아이템이 아바타의 동작별로 정상적으로 표시되는지 검증할 수 있습니다. 2. **썸네일 [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 메이플스토리 월드에서 크리에이터는 직접 아바타 아이템을 제작할 수 있습니다. 아바타 아이템을 만들기 위해서는 **제작**과 **등록** 단계를 진행해야 합니다. 이번 가이드에서는 등록 과정에 대한 내용을 설명하며 제작 과정에 대해서는 아래 가이드를 참고 부탁드립니다. ##### 참고 가이드 * [기본 개념](/docs?postId=588) * [하의 만들기](/docs?postId=584) * [망토 만들기](/docs?postId=585) * [상의 만들기](/docs?postId=586) * [장갑 만들기]
[task] | code [pass] | ⏳ 미판정 [title] | RectTileMap의 활용 [question] | RectTileMap 컴포넌트를 가진 엔티티에서 HandleTouchEvent 이벤트 핸들러를 구현하여, 터치 이벤트 발생 시 self.Entity.TransformComponent.Position 을 Vector3(0.0, 1.0, 0.0) 으로 변경하고, log 함수를 통해 "타일 위치 이동됨" 문자열을 출력하는 스크립트를 작성해줘 [answer] | RectTileMap 컴포넌트를 가진 엔티티에 대해 `HandleTouchEvent` 이벤트 핸들러를 구현하여, 터치 이벤트 발생 시 엔티티의 위치를 `Vector3(0.0, 1.0, 0.0)`으로 변경하고 로그를 출력하는 mLua 스크립트는 다음과 같습니다. ```lua Event Handler: [self] HandleTouchEvent(TouchEvent event) { self.Entity.TransformComponent.Position = Vector3(0.0, 1.0, 0.0) log("타일 위치 이동됨 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 레이어를 추가하면 기본적으로 이전 타일 셋을 공용으로 사용합니다. 그래서 특정 타일의 속성을 변경하면 의도치 않게 다른 레이어의 타일 속성까지 변경하는 경우가 생깁니다. 예를 들어, **레이어 1**에 **타일 셋 1**을 적용 중일 때 **레이어 2**를 생성하면 **레이어 2**에도 **타일 셋 1**이 적용됩니다. **레이어 1**에 배치한 특정 타일의 이미지를 변경하려고 **타일 셋 1**의 타일 속성을 변경하면 **레이어 2**의 타일도 함께 변경됩니다. 이러한 상황을 피하려면 레이어 별로 각각 다른 타일 셋을 적용하는 것
[task] | single_turn [pass] | ⏳ 미판정 [title] | 애니메이션 만들기 [question] | 프레임을 드래그해서 위치를 옮기는 것과 '한 칸 앞으로/뒤로 이동' 버튼을 사용하는 것 중, 여러 프레임을 한꺼번에 순서 바꾸고 싶을 때 더 효율적인 방법은 무엇인가요? [answer] | 제공된 문서에 따르면, "여러 프레임을 한꺼번에 순서 바꾸는 방법"에 대한 구체적인 설명은 없습니다. 문서에서 언급된 프레임 조정 기능은 다음과 같습니다: 1. **드래그**: 스프라이트를 선택한 뒤 원하는 위치로 드래그하여 이동. 2. **버튼**: 선택한 스프라이트를 한 칸 앞으로/뒤로 이동하거나, 맨 앞으로/맨 뒤로 옮기는 기능. 문서는 단일 스프라이트(프레임)를 선택해 조정하는 방법을 설명할 뿐, **여러 프레임을 동시에 선택하거나 한꺼번에 순서를 바꾸는 기능**이 존재하는지 여부에 대해 명시하고 있지 않습니다. 따라 [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] | 패키지 내보내기 시 부모-자식 엔트리 관계에서 자식만 선택해도 부모가 자동 포함되는 원리를 2문장 이내로 설명하세요. [answer] | 자식 엔트리만 선택해도 해당 자식이 확장한 부모 엔트리가 패키지에 자동으로 포함됩니다. 이는 내보내기로 인해 생성되는 파일에서 원래의 부모-자식 계층 관계를 유지하기 위한 규칙 때문입니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 메이플스토리 월드에서는 Workspace의 모델, 스크립트 컴포넌트, 데이터 셋과 같은 엔트리를 하나의 파일로 묶어 외부로 공유할 수 있는 패키지 기능을 제공하고 있습니다. Workspace의 엔트리를 패키지 파일로 내보내거나, 패키지 파일을 월드에 불러오는 방법에 대해 알아봅니다. # 패키지 소개 패키지는 특정 엔트리를 묶은 파일입니다. 패키지 파일을 이용해 제작한 월드의 일부를 외부와 공유하거나, 타인이 공유한 패키지를 내 월드에 사용할 수 있습니다. 패키지 내보내기, 불러오기 창에서는 폴더 구조와 계층
[task] | single_turn [pass] | ⏳ 미판정 [title] | 에디터 서비스의 활용 [question] | SpawnService와 EditorService 중 어느 쪽을 사용해야 엔티티의 프로퍼티 값을 수정할 수 있나요? [answer] | SpawnService를 사용해야 엔티티의 프로퍼티 값을 수정할 수 있습니다. SpawnService는 엔티티를 배치하거나 프로퍼티 값을 수정하여 변경된 값을 저장하는 기능을 제공하며, 프로퍼티의 값을 수정 및 제어할 수 있습니다. 반면, EditorService는 데이터셋(테이블 형태의 데이터)에 접근하여 값을 읽고 쓰는 기능을 제공하며, `DataSetInsertRow()`, `DataSetRemoveRow()`, `DataSetSetCell()` 같은 함수를 사용해 데이터 행과 셀을 관리합니다. 즉, 엔티티 프로퍼티 수정은 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | **SpawnService**를 이용해 엔티티 배치하거나 프로퍼티 값을 수정해 변경된 값을 저장할 수 있습니다. 프로퍼티의 값을 수정 및 제어할 수 있다는 의미는 많은 정보를 수정할 수 있다는 의미를 내포하나, 복잡한 정보를 저장하기에는 충분하지 않을 수 있습니다. **EditorService**는 데이터에 접근하여 값을 읽고 쓸 수 있는 기능을 제공합니다.아래와 같이 데이터를 구성했다고 가정해보겠습니다. dash의 col3 컬럼의 값을 가져오기 위해 아래와 같이 작성해 활용할 수 있습니다. ```lua local data
[task] | two_turn [pass] | ⏳ 미판정 [title] | 에디터 서비스의 활용 [question] | 특정 조건에 맞는 행을 찾아 해당 컬럼의 값을 변경하려면 어떻게 해야 하나요? [answer] | 특정 조건에 맞는 행을 찾아 해당 컬럼의 값을 변경하려면, 먼저 `_DataService:GetTable`로 테이블을 가져온 후 `GetRowCount()`로 전체 행 수를 확인합니다. 이후 `for` 루프로 각 행을 순회하면서 `GetCell`로 조건 컬럼(예: `name`)의 값을 확인합니다. 조건이 일치하는 행을 찾으면, `_EditorService:DataSetSetCell` 함수를 호출하여 해당 행의 목표 컬럼 값을 수정합니다. 아래는 `name` 컬럼이 "dash"인 행을 찾아 `col2` 컬럼의 값을 "40"으로 변 [followup] | `name` 컬럼이 "dash" 인 행의 `col2` 값을 40 으로 수정하는 mLua 코드 예제를 작성해주세요. [followup_answer] | `name` 컬럼이 "dash"인 행을 찾아 `col2` 컬럼의 값을 "40"으로 수정하는 mLua 코드 예제는 다음과 같습니다. ```lua local data = _DataService:GetTable("CustomEditorData") local rowCount = data:GetRowCount() for i = 1, rowCount do local name = data:GetCell(i, "name") if name == "dash" then _EditorService:DataSetSetCel [scores] | [judge_reason] | [source_doc] | **SpawnService**를 이용해 엔티티 배치하거나 프로퍼티 값을 수정해 변경된 값을 저장할 수 있습니다. 프로퍼티의 값을 수정 및 제어할 수 있다는 의미는 많은 정보를 수정할 수 있다는 의미를 내포하나, 복잡한 정보를 저장하기에는 충분하지 않을 수 있습니다. **EditorService**는 데이터에 접근하여 값을 읽고 쓸 수 있는 기능을 제공합니다.아래와 같이 데이터를 구성했다고 가정해보겠습니다. dash의 col3 컬럼의 값을 가져오기 위해 아래와 같이 작성해 활용할 수 있습니다. ```lua local data
[task] | instruction_following [pass] | ⏳ 미판정 [title] | 패키지의 활용 [question] | 패키지 내보내기 시 폴더 구조와 계층 구조의 차이를 구분하는 표로 정리하세요. [answer] | 패키지 내보내기 창에서 내용을 확인할 때 사용할 수 있는 두 가지 뷰의 차이는 다음과 같습니다. | 구분 | 폴더 구조 | 계층 구조 | | :--- | :--- | :--- | | **표시 방식** | Workspace의 실제 폴더 구조 그대로 엔트리를 보여줍니다. | 엔트리를 타입별로 구분하여 보여줍니다. | [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 메이플스토리 월드에서는 Workspace의 모델, 스크립트 컴포넌트, 데이터 셋과 같은 엔트리를 하나의 파일로 묶어 외부로 공유할 수 있는 패키지 기능을 제공하고 있습니다. Workspace의 엔트리를 패키지 파일로 내보내거나, 패키지 파일을 월드에 불러오는 방법에 대해 알아봅니다. # 패키지 소개 패키지는 특정 엔트리를 묶은 파일입니다. 패키지 파일을 이용해 제작한 월드의 일부를 외부와 공유하거나, 타인이 공유한 패키지를 내 월드에 사용할 수 있습니다. 패키지 내보내기, 불러오기 창에서는 폴더 구조와 계층
[task] | instruction_following [pass] | ⏳ 미판정 [title] | 패키지의 활용 [question] | 네이티브 모델과 확장한 네이티브 엔트리의 패키지 내보내기 가능 여부 차이를 2문장 이내로 설명하세요. [answer] | 네이티브 모델 자체나 그 위에 새로운 컴포넌트를 추가한 모델은 다른 월드에서 원본 정보를 불러올 수 없어 패키지로 내보낼 수 없습니다. 반면, 확장한 네이티브 엔트리는 원본 정보를 보유하고 있어 새로운 월드에서 자동으로 상속받을 모델을 찾아 패키지로 내보낼 수 있습니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 메이플스토리 월드에서 제공하는 **네이티브 스크립트와 네이티브 모델**은 패키지로 내보낼 수 없습니다. 네이티브 모델 자체에 새로운 컴포넌트를 추가한 경우, 그 네이티브 모델을 확장한 경우 또한 패키지로 내보낼 수 없습니다. 패키지를 불러올 때 모든 정보를 불러올 수 없기 때문입니다. 예를 들어 네이티브 모델에 ComponentA를 추가하고 이를 확장한 모델을 만들었다고 생각해 봅시다. 이 확장한 모델은 ComponentA를 상속받게 됩니다. 모델B를 다른 월드에서 불러올 때 새로운 월드에는 ComponentA가 포함된 네이티브
[task] | code [pass] | ⏳ 미판정 [title] | 모자 만들기 [question] | D/E/F/G 유형처럼 특정 장식(눈, 얼굴, 귀고리) 제거 범위가 상이하므로, 모자 유형에 따라 `AvatarComponent`의 각 장식 레이어 활성화 여부를 분기 처리하는 스크립트를 작성해줘. [answer] | 제공된 참고 문서에는 모자 유형별 외형 변화(헤어 레이어 제거, 눈/얼굴/귀고리 장식 제거 여부)에 대한 **설명의 나열**만 포함되어 있습니다. 문서에 `AvatarComponent`라는 컴포넌트나, 눈/얼굴/귀고리 장식을 활성화/비활성화하기 위한 **구체적인 API(메서드, 프로퍼티, 이벤트)가 명시되어 있지 않습니다.** mLua 스크립트 규칙에 따라 "문서에 없는 API·이벤트·프로퍼티는 절대 지어내지 말아야 한다"는 지침이 있으므로, 해당 기능을 구현하는 정확한 스크립트를 작성할 수 없습니다. 참고 문서에서 확인 가능 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 모자는 총 7가지 유형으로 나뉩니다. 모자는 다른 아바타 아이템과 다르게 유형별 전용 제작 시트 파일이 있습니다. 이는 모자 아이템의 vslot과 관련된 특성 때문입니다. 제작에 앞서 해당 개념을 참고해, 유형에 맞는 시트로 아이템을 제작하길 권장합니다. #### 모자 유형 |@cols=2:@rows=1:샘플 | @cols=2:@rows=1:투시 | 유형 설명 | | --- | --- | --- | --- | --- | | | | | |A 유형: [뒤통수가 개방된 모자](/docs?postId=684) 모자를 쓰면
[task] | instruction_following [pass] | ⏳ 미판정 [title] | 패키지의 활용 [question] | 네이티브 모델에 새로운 기능을 추가해 패키지로 만들고자 할 때 권장하는 두 가지 방법을 단계별 번호 목록으로 제시하세요. [answer] | 네이티브 모델을 상속받은 모델에 새로운 기능을 추가하여 패키지로 만들고 싶을 때 권장되는 두 가지 방법은 다음과 같습니다. 1. 확장한 모델에 컴포넌트를 추가합니다. 2. 네이티브 모델 씬에 배치해 편집한 뒤 `Create Model From Entity`로 만들어 사용합니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 메이플스토리 월드에서 제공하는 **네이티브 스크립트와 네이티브 모델**은 패키지로 내보낼 수 없습니다. 네이티브 모델 자체에 새로운 컴포넌트를 추가한 경우, 그 네이티브 모델을 확장한 경우 또한 패키지로 내보낼 수 없습니다. 패키지를 불러올 때 모든 정보를 불러올 수 없기 때문입니다. 예를 들어 네이티브 모델에 ComponentA를 추가하고 이를 확장한 모델을 만들었다고 생각해 봅시다. 이 확장한 모델은 ComponentA를 상속받게 됩니다. 모델B를 다른 월드에서 불러올 때 새로운 월드에는 ComponentA가 포함된 네이티브
[task] | single_turn [pass] | ⏳ 미판정 [title] | 에디터 서비스의 활용 [question] | 에디터에서 마우스 클릭 위치 정보를 가져와서 특정 지점에 엔티티를 배치하고 싶은데, 어떤 이벤트를 처리해야 하나요? [answer] | 에디터 상태에서 마우스 클릭 위치 정보를 가져와 엔티티를 배치하려면 **`ScreenTouchEditorEvent`** 이벤트를 처리해야 합니다. 참고 문서에 따르면 마우스로 클릭한 위치 정보를 확인하기 위한 이벤트로 `ScreenTouchEditorEvent`, `ScreenTouchHoldEditorEvent`, `ScreenTouchReleaseEditorEvent`가 있으며, 일반적인 클릭 위치 확인에는 `ScreenTouchEditorEvent`가 적합합니다. 아래는 에디터에서 마우스 클릭 위치를 받아 해당 위치에 엔티 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 버튼 클릭 시 에디터 상에 엔티티를 스폰하여 배치할 수도 있습니다. 에디터 상태에서 버튼을 클릭할 때마다 오브젝트를 스폰하는 예시입니다. ```lua Event Handler: [self] HandleButtonClickEvent(ButtonClickEvent event) { --------------- Native Event Sender Info ---------------- -- Sender: ButtonComponent -- Space: Client --------------------------
[task] | code [pass] | ⏳ 미판정 [title] | RectTileMap의 활용 [question] | RectTileMap 컴포넌트를 가진 엔티티에서 OnUpdate 메서드 내에서 delta 를 사용하여 타이머를 관리하고, 10 초마다 _SpawnService 를 통해 "/models/tile_model_id" 모델 ID 로 "/maps/map01/obj" 부모 엔티티에 자식 엔티티를 생성하며, 생성된 자식 엔티티의 TransformComponent.Position 을 Vector3(1.0, 0.0, 1.0) 로 설정하는 스크립트를 작성해줘 [answer] | 요청하신 기능은 `OnUpdate`에서 `delta`를 누적하여 10초 주기를 관리하고, 조건 충족 시 `_SpawnService`를 호출하는 로직입니다. ```lua Property: [None] number timer = 0 number interval = 10 Method: [server only] void OnBeginPlay() { self.timer = 0 } [server only] void OnUpdate(number delta) { self.timer = self.timer + delta [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 레이어를 추가하면 기본적으로 이전 타일 셋을 공용으로 사용합니다. 그래서 특정 타일의 속성을 변경하면 의도치 않게 다른 레이어의 타일 속성까지 변경하는 경우가 생깁니다. 예를 들어, **레이어 1**에 **타일 셋 1**을 적용 중일 때 **레이어 2**를 생성하면 **레이어 2**에도 **타일 셋 1**이 적용됩니다. **레이어 1**에 배치한 특정 타일의 이미지를 변경하려고 **타일 셋 1**의 타일 속성을 변경하면 **레이어 2**의 타일도 함께 변경됩니다. 이러한 상황을 피하려면 레이어 별로 각각 다른 타일 셋을 적용하는 것
[task] | single_turn [pass] | ⏳ 미판정 [title] | 에디터 서비스의 활용 [question] | EnterEditorEvent와 EnterPlayEvent의 호출 시점이 각각 언제이며, 어떤 차이점이 있나요? [answer] | EnterEditorEvent와 EnterPlayEvent는 모두 EditorService에서 제공하는 이벤트이며, 각각 에디터 모드와 플레이 모드 진입 시점에 호출됩니다. 두 이벤트의 구체적인 호출 시점과 차이점은 다음과 같습니다. **1. EnterPlayEvent** * **호출 시점:** 메이플스토리 월드의 제작 환경에서 **'시작' 버튼을 눌러 플레이 테스트를 시작할 때** 호출됩니다. * **특징:** 실제로 게임 로직이 실행되는 플레이 모드(Out Game)에 진입하는 순간 발생합니다. **2. EnterEd [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 월드를 제작하고 테스트 플레이를 시작하면 라이프 사이클에 따라 이벤트 함수를 호출합니다. 이와 다르게 [EditorService](/apiReference/Services/EditorService)는 메이커에서 스크립트 사용을 지원합니다. 크리에이터는 **EditorService**를 이용해 자신이 필요한 제작 도구를 만들 수 있습니다. # 에디터 서비스 체험하기 EditorService를 활용해 로그를 남겨봅시다. 1. **MyDesk- Create Scripts - Create Component**를 선
[task] | two_turn [pass] | ⏳ 미판정 [title] | 애니메이션 만들기 [question] | 특정 프레임의 오프셋 Y값만 변경하여 점프하는 듯한 애니메이션을 만들 수 있다고 하는데, 이때 다른 프레임들의 오프셋 값은 유지되면서 해당 프레임만 독립적으로 이동하나요? [answer] | 네, 가능합니다. 애니메이션 클립 에디터에서는 타임라인에 배치된 각 스프라이트(프레임)를 개별적으로 선택하여 **Offset** 값을 수정할 수 있습니다. 따라서 프레임 전체를 일괄 수정하는 것이 아니라, 특정 프레임만 선택하여 그 프레임의 오프셋 Y값만 변경하면 다른 프레임들의 오프셋 값은 유지된 채 해당 프레임만 독립적으로 이동하여 점프하는 듯한 애니메이션 효과를 만들 수 있습니다. [followup] | 점프 동작을 표현하기 위해 중간 프레임의 Y값만 +20으로 변경하고 주변 프레임은 0으로 두었을 때, 재생 시 부드러운 이동이 아닌 갑작스러운 점프(팝) 현상이 발생하는지 알고 싶습니다. [followup_answer] | 제공된 참고 문서에는 애니메이션 클립 에디터에서 프레임별 오프셋을 조정하여 점프 같은 움직임을 만들 수 있다는 내용과, 오프셋을 정중앙으로 맞추는 방법, 재생 속도 조절 및 저장 절차에 대한 정보만 포함되어 있습니다. 프레임 간 오프셋 값의 차이(예: 중간 프레임 +20, 주변 프레임 0)가 재생 시 부드러운 보간(interpolation)을 거치는지, 아니면 프레임 단위로 갑자기 위치가 바뀌는 팝(pop) 현상이 발생하는지에 대한 기술적 설명은 문서에 없습니다. 따라서 해당 현상이 어떻게 나타나는지 문서를 근거로 답변할 수 없습 [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 애니메이션 클립 에디터를 이용해 기존의 메이플스토리 월드 애니메이션을 편집하거나 직접 제작한 애니메이션을 월드에 활용할 수 있습니다. 애니메이션 클립 에디터의 구성과 사용 방법을 알아봅시다. # 애니메이션 클립 에디터 소개 | 숫자 | 설명 | | --- | --- | | | **[새로 열기]**, **[추가하기]** 버튼으로 불러온 스프라이트가 배치됩니다. | | | 타임라인에 추가한 스프라이트들이 차례로 재생되며 초록 십자선을 기준으로 애니메이션 재생 위치를 확인할 수 있습니다. 상단의 Scale 슬
[task] | code [pass] | ⏳ 미판정 [title] | RectTileMap의 활용 [question] | RectTileMap 컴포넌트를 가진 엔티티에서 OnBeginPlay 시 _EntityService 를 이용해 "/maps/map01/obj" 경로로 RectTileMap 엔티티를 가져온 뒤, Layer 2 에 TileSetExample2 를 적용하기 위해 해당 레이어의 타일 셋 참조를 변경하고, Vector2(0, 0) 위치부터 Vector2(5, 5) 위치까지 반복문을 통해 특정 타일 ID 로 타일을 배치하는 스크립트를 작성해줘 [answer] | 제시된 참고 문서에는 RectTileMap의 레이어와 타일 셋을 조작하거나 타일을 배치하는 API(예: 레이어 선택, 타일 셋 참조 변경, 타일 배치 함수)가 포함되어 있지 않습니다. 참고 문서에 포함된 내용만으로는 요청하신 "레이어의 타일 셋 참조를 변경하고", "반복문을 통해 특정 타일 ID로 타일을 배치하는" 코드를 작성할 수 있는 API를 알 수 없으므로, 해당 코드를 작성하는 것은 불가능합니다. 참고 문서에서 확인할 수 있는 내용은 다음과 같습니다: 1. **레이어별 타일 셋 분리 방법**: 에디터에서 새 타일 셋을 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 레이어를 추가하면 기본적으로 이전 타일 셋을 공용으로 사용합니다. 그래서 특정 타일의 속성을 변경하면 의도치 않게 다른 레이어의 타일 속성까지 변경하는 경우가 생깁니다. 예를 들어, **레이어 1**에 **타일 셋 1**을 적용 중일 때 **레이어 2**를 생성하면 **레이어 2**에도 **타일 셋 1**이 적용됩니다. **레이어 1**에 배치한 특정 타일의 이미지를 변경하려고 **타일 셋 1**의 타일 속성을 변경하면 **레이어 2**의 타일도 함께 변경됩니다. 이러한 상황을 피하려면 레이어 별로 각각 다른 타일 셋을 적용하는 것
[task] | two_turn [pass] | ⏳ 미판정 [title] | 에디터 서비스의 활용 [question] | 에디터 상태에서 다른 컴포넌트의 프로퍼티를 스크립트로 수정하는 예시로, 배경을 변경하는 ButtonClickEditorEvent 스크립트 코드 작성법을 알려주세요. [answer] | 에디터 상태에서 배경을 변경하는 예시입니다. `UIGroupComponent`의 `GroupType`이 `EditorType`으로 설정된 버튼(`Btn_EditorTest`)의 클릭 이벤트를 받아, `BackgroundComponent`의 `ChangeBackgroundByTemplateRUID` 메서드를 호출하여 배경을 전환하는 방식입니다. ```lua Event Handler: [self] ButtonClickEditorEvent(ButtonClickEvent event) { self.IsButtonClicked = n [followup] | _EntityService:GetEntityByPath("/maps/map01/Background")로 엔티티를 가져와 BackgroundComponent의 ChangeBackgroundByTemplateRUID 메서드를 호출하는 구체적인 코드 구조와 변수 선언 방식을 보여주세요. [followup_answer] | 에디터 상태에서 배경을 변경하는 코드의 구체적인 구조와 변수 선언 방식은 다음과 같습니다. 1. **엔티티 가져오기**: `_EntityService:GetEntityByPath("/maps/map01/Background")`를 호출하여 배경 엔티티를 참조합니다. 2. **컴포넌트 접근**: 가져온 엔티티 객체에서 `BackgroundComponent` 프로퍼티에 직접 접근합니다. (`GetComponent` 메서드를 사용하지 않고 점 접근 방식으로 접근합니다.) 3. **메서드 호출**: `BackgroundComponen [scores] | [judge_reason] | [source_doc] | UIGroupComponent의 **GroupType**을 변경해 에디터 타입의 UI를 구성할 수 있습니다. 에디터 타입 UI는 월드를 플레이하거나, 월드를 편집 중인 상태에서만 확인 및 기능 작동이 가능합니다. 간단한 예시를 통해 확인해보겠습니다. 1. UI 에디터를 엽니다. 2. 새로운 UIGroup을 추가합니다. 3. 추가한 UIGroup을 선택합니다. 4. 프로퍼티 에디터에서 UIGroupComponent의 GroupType을 **EditorType**으로 변경합
[task] | two_turn [pass] | ⏳ 미판정 [title] | 애니메이션 만들기 [question] | Resource Storage의 animationclip에서 Make Animation Clip을 선택하면 AnimationClip Editor가 열리고 모든 스프라이트가 불러와진다고 하는데, 이 과정에서 기존에 편집 중이던 다른 클립 데이터가 덮어쓰기되지 않나요? [answer] | 제공된 참고 문서에는 AnimationClip Editor를 열거나 리소스를 불러오는 과정에서 기존에 편집 중이던 다른 클립 데이터가 덮어쓰기되는지에 대한 정보나 주의사항이 포함되어 있지 않습니다. 문서에는 단순히 "Make Animation Clip을 선택하면 AnimationClip Editor가 열리고 선택한 애니메이션 클립의 모든 스프라이트가 불러와진다"는 사실과, 편집한 리소스를 저장할 때 이름, 카테고리, 설명을 입력하고 [업로드] 버튼을 눌러 저장하는 절차만 설명되어 있을 뿐, 동시 편집이나 데이터 충돌에 대한 내용은 [followup] | 새로 열기 버튼을 누를 때 현재 편집 중인 클립이 저장되지 않은 상태에서 다른 클립을 불러오면 에러가 발생하거나 데이터가 손실되는지 확인하고 싶습니다. [followup_answer] | 제공된 참고 문서에는 AnimationClip Editor의 [새로 열기] 버튼을 누를 때, 현재 편집 중인 클립이 저장되지 않은 상태로 다른 클립을 불러오는 경우의 동작(에러 발생 여부, 데이터 손실 여부, 자동 저장 여부 등)에 대한 정보가 포함되어 있지 않습니다. 문서에는 [새로 열기] 버튼으로 애니메이션 클립을 선택하여 스프라이트를 불러오는 절차와, 편집한 리소스를 이름, 카테고리, 설명을 입력하고 [업로드] 버튼을 눌러 저장하는 방법만 설명되어 있을 뿐, 미저장 상태에서의 전환이나 충돌 처리에 관한 내용은 찾을 수 없습니 [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 애니메이션 클립 에디터를 이용해 기존의 메이플스토리 월드 애니메이션을 편집하거나 직접 제작한 애니메이션을 월드에 활용할 수 있습니다. 애니메이션 클립 에디터의 구성과 사용 방법을 알아봅시다. # 애니메이션 클립 에디터 소개 | 숫자 | 설명 | | --- | --- | | | **[새로 열기]**, **[추가하기]** 버튼으로 불러온 스프라이트가 배치됩니다. | | | 타임라인에 추가한 스프라이트들이 차례로 재생되며 초록 십자선을 기준으로 애니메이션 재생 위치를 확인할 수 있습니다. 상단의 Scale 슬
[task] | two_turn [pass] | ⏳ 미판정 [title] | 에디터 서비스의 활용 [question] | 에디터에서 마우스 클릭 위치 정보를 얻기 위해 사용할 수 있는 ScreenTouch 계열 이벤트는 어떤 것들이 있나요? [answer] | 에디터에서 마우스 클릭 위치 정보를 확인하기 위해 사용할 수 있는 `ScreenTouch` 계열 이벤트는 다음과 같습니다. * **ScreenTouchEditorEvent**: 마우스로 클릭한 위치 정보를 확인하기 위한 이벤트입니다. * **ScreenTouchHoldEditorEvent**: 마우스로 클릭한 위치 정보를 확인하기 위한 이벤트입니다. * **ScreenTouchReleaseEditorEvent**: 마우스로 클릭한 위치 정보를 확인하기 위한 이벤트입니다. [followup] | ScreenTouchEditorEvent 핸들러에서 클릭 좌표(Vector2)를 추출하여 해당 위치에 엔티티를 스폰하는 코드 예제를 작성해 주세요. [followup_answer] | 참고 문서에는 `ScreenTouchEditorEvent`가 마우스 클릭 위치 정보를 확인하기 위한 이벤트로 정의되어 있으나, 해당 이벤트 객체에서 좌표(`Vector2`)를 추출하는 구체적인 프로퍼티 이름(예: `event.Position`, `event.WorldPosition` 등)이나 `_EditorService`를 통해 해당 좌표로 엔티티를 생성하는 구체적인 API 시그니처가 명시되어 있지 않습니다. 문서에 제시된 `_EditorService:CreateSelectedModel(spawnPosition)`은 고정된 `Ve [scores] | [judge_reason] | [source_doc] | 버튼 클릭 시 에디터 상에 엔티티를 스폰하여 배치할 수도 있습니다. 에디터 상태에서 버튼을 클릭할 때마다 오브젝트를 스폰하는 예시입니다. ```lua Event Handler: [self] HandleButtonClickEvent(ButtonClickEvent event) { --------------- Native Event Sender Info ---------------- -- Sender: ButtonComponent -- Space: Client --------------------------
[task] | code [pass] | ⏳ 미판정 [title] | RectTileMap의 활용 [question] | RectTileMap 컴포넌트를 가진 엔티티에서 OnEndPlay 메서드 내에서 _TimerService 의 SetTimerOnce 메서드를 호출하여 5 초 후 실행되는 함수를 등록하고, 그 함수 내에서 log 함수를 통해 "스크립트 종료 처리 완료" 문자열을 출력하는 스크립트를 작성해줘 [answer] | RectTileMap 컴포넌트를 가진 엔티티의 스크립트에서 `OnEndPlay` 메서드 내부에 `_TimerService:SetTimerOnce`를 호출하면, 엔티티가 종료되는 시점에 타이머가 등록됩니다. 제공된 참고 문서에는 `OnEndPlay` 내에서 타이머를 설정하는 구체적인 제한 사항이나 비권장 사항에 대한 명시적 경고는 없습니다. 따라서 요청하신 대로 `OnEndPlay`에서 5초 후 로그를 출력하도록 하는 스크립트는 다음과 같이 작성할 수 있습니다. 참고로, 실제 게임 환경에서 엔티티가 종료(파괴/제거)된 직후에 타이머 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 레이어를 추가하면 기본적으로 이전 타일 셋을 공용으로 사용합니다. 그래서 특정 타일의 속성을 변경하면 의도치 않게 다른 레이어의 타일 속성까지 변경하는 경우가 생깁니다. 예를 들어, **레이어 1**에 **타일 셋 1**을 적용 중일 때 **레이어 2**를 생성하면 **레이어 2**에도 **타일 셋 1**이 적용됩니다. **레이어 1**에 배치한 특정 타일의 이미지를 변경하려고 **타일 셋 1**의 타일 속성을 변경하면 **레이어 2**의 타일도 함께 변경됩니다. 이러한 상황을 피하려면 레이어 별로 각각 다른 타일 셋을 적용하는 것
[task] | two_turn [pass] | ⏳ 미판정 [title] | 애니메이션 만들기 [question] | 애니메이션 클립 에디터에서 오프셋을 정중앙으로 맞춰 엔티티 배치를 수월하게 하려면 어떤 단계를 거치나요? [answer] | 애니메이션 클립 에디터에서 오프셋을 정중앙으로 맞춰 엔티티 배치를 수월하게 하려면 다음 단계를 거칩니다. 1. 타임라인의 이미지 중 하나를 선택하여 초록색 가로, 세로 선이 교차하는 지점에 맞게 **Offset** 값을 조정합니다. 2. 가장 첫 번째 이미지를 선택한 뒤 **Shift** 키를 누릅니다. 3. 스크롤바를 움직여 마지막 이미지를 선택합니다. 4. **Offset**의 Y 값에 **-70**을 입력합니다. 5. **[재생]** 버튼을 눌러 이미지가 선의 교차 지점에서 재생되는지 확인합니다. 6. 편집한 애니메이션의 이 [followup] | Shift 키를 누른 상태에서 첫 번째와 마지막 이미지를 선택한 후, Offset의 Y 값에 -70을 입력하면 전체 프레임의 오프셋이 한 번에 수정되나요? [followup_answer] | 네, 그렇습니다. 오프셋을 정중앙으로 맞추는 단계에서 가장 첫 번째 이미지를 선택하고 **Shift** 키를 누른 상태로 스크롤바를 움직여 마지막 이미지를 선택하면, 첫 번째부터 마지막까지의 모든 이미지가 선택된 상태가 됩니다. 이 상태에서 **Offset**의 Y 값에 **-70**을 입력하면 선택된 전체 프레임의 오프셋이 한 번에 수정됩니다. [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 애니메이션 클립 에디터를 이용해 기존의 메이플스토리 월드 애니메이션을 편집하거나 직접 제작한 애니메이션을 월드에 활용할 수 있습니다. 애니메이션 클립 에디터의 구성과 사용 방법을 알아봅시다. # 애니메이션 클립 에디터 소개 | 숫자 | 설명 | | --- | --- | | | **[새로 열기]**, **[추가하기]** 버튼으로 불러온 스프라이트가 배치됩니다. | | | 타임라인에 추가한 스프라이트들이 차례로 재생되며 초록 십자선을 기준으로 애니메이션 재생 위치를 확인할 수 있습니다. 상단의 Scale 슬
[task] | instruction_following [pass] | ⏳ 미판정 [title] | 패키지의 활용 [question] | 리소스 엔트리(이미지, 사운드)가 패키지로 정상 동작하기 위해 반드시 선행되어야 하는 작업과 그 이유를 코드만 출력하고 설명은 주석으로 작성하세요. [answer] | ```lua -- 리소스 엔트리(이미지, 사운드)가 패키지로 정상 동작하기 위해 반드시 선행되어야 하는 작업: -- 1. 월드 저장: 리소스 엔트리에 포함된 리소스는 월드 저장 시 서버에 업로드됩니다. -- 2. 이유: 패키지는 RUID(Resource Unique ID)를 통해 서버에 저장된 리소스를 참조합니다. -- 서버에 업로드되지 않은 리소스는 RUID가 없거나 유효하지 않아 다른 월드에서 패키지를 불러왔을 때 정상 동작하지 않습니다. -- -- 참고: mLua 스크립트로는 '월드 저장' 액션을 트리거하는 API가 제 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 메이플스토리 월드에서는 Workspace의 모델, 스크립트 컴포넌트, 데이터 셋과 같은 엔트리를 하나의 파일로 묶어 외부로 공유할 수 있는 패키지 기능을 제공하고 있습니다. Workspace의 엔트리를 패키지 파일로 내보내거나, 패키지 파일을 월드에 불러오는 방법에 대해 알아봅니다. # 패키지 소개 패키지는 특정 엔트리를 묶은 파일입니다. 패키지 파일을 이용해 제작한 월드의 일부를 외부와 공유하거나, 타인이 공유한 패키지를 내 월드에 사용할 수 있습니다. 패키지 내보내기, 불러오기 창에서는 폴더 구조와 계층
[task] | single_turn [pass] | ⏳ 미판정 [title] | 패키지의 활용 [question] | 패키지를 불러온 후 이미지나 사운드가 깨져 보이는데, 이는 월드를 저장하지 않아 리소스가 서버에 업로드되지 않았기 때문인가요? [answer] | 네, 맞습니다. 이미지나 사운드와 같은 리소스 엔트리를 패키지로 내보내기 전에 월드를 저장하지 않으면 해당 리소스가 서버에 업로드되지 않아, 다른 월드에서 패키지를 불러왔을 때 정상적으로 동작하지 않습니다. 리소스 엔트리에는 RUID가 저장되며, 다른 월드에서 패키지를 불러오면 이 RUID를 통해 서버에 저장된 리소스를 가져오기 때문입니다. 따라서 리소스가 포함된 패키지를 공유하거나 사용할 때는 반드시 **패키지 내보내기 전**에 월드를 저장하여 리소스가 서버에 업로드되었는지 확인해야 합니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 메이플스토리 월드에서는 Workspace의 모델, 스크립트 컴포넌트, 데이터 셋과 같은 엔트리를 하나의 파일로 묶어 외부로 공유할 수 있는 패키지 기능을 제공하고 있습니다. Workspace의 엔트리를 패키지 파일로 내보내거나, 패키지 파일을 월드에 불러오는 방법에 대해 알아봅니다. # 패키지 소개 패키지는 특정 엔트리를 묶은 파일입니다. 패키지 파일을 이용해 제작한 월드의 일부를 외부와 공유하거나, 타인이 공유한 패키지를 내 월드에 사용할 수 있습니다. 패키지 내보내기, 불러오기 창에서는 폴더 구조와 계층
[task] | instruction_following [pass] | ⏳ 미판정 [title] | 배지 등록하기 [question] | 배지 섬네일 업로드 시 허용되는 파일 형식, 최대 용량, 권장 크기를 코드 주석 형식의 목록으로만 출력해줘. [answer] | ```lua -- 배지 섬네일 업로드 시 허용되는 파일 형식: jpg, png -- 배지 섬네일 업로드 시 최대 용량: 2MB 이하 -- 배지 섬네일 업로드 시 권장 크기: 120x120 px ``` [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 배지는 크리에이터가 설정한 특정 미션을 달성할 때 이용자가 획득할 수 있는 업적을 의미합니다. 배지는 유저의 달성 목표를 보여주기 위해 사용하거나, 수집 욕구를 촉발해 월드를 끊임없이 즐길 수 있게 만드는 용도로 사용합니다. # 배지 등록하기 배지를 등록하는 방법은 두 가지입니다. 메이플스토리 월드 [공식 홈페이지](https://maplestoryworlds.nexon.com/) 혹은 메이커 내에서 등록이 가능합니다. 등록 화면과 절차는 동일하므로 크리에이터가 선호하는 곳에서 배지를 등록할 수 있습니다.
[task] | instruction_following [pass] | ⏳ 미판정 [title] | 배지 등록하기 [question] | 배지 등급 3가지(노멀, 레어, 에픽)와 각 등급의 난도 기준을 표로 정리해서 알려줘. [answer] | 배지 등급은 총 3가지로, 각 등급의 난도 기준은 다음과 같습니다. | 배지 등급 | 난도 기준 | | :--- | :--- | | 노멀 (Normal) | 획득하기 쉬운 난도의 업적 | | 레어 (Rare) | 도달하기 어려운 난도의 업적 | | 에픽 (Epic) | 도달하기 매우 어려운 난도의 업적 | [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 배지는 크리에이터가 설정한 특정 미션을 달성할 때 이용자가 획득할 수 있는 업적을 의미합니다. 배지는 유저의 달성 목표를 보여주기 위해 사용하거나, 수집 욕구를 촉발해 월드를 끊임없이 즐길 수 있게 만드는 용도로 사용합니다. # 배지 등록하기 배지를 등록하는 방법은 두 가지입니다. 메이플스토리 월드 [공식 홈페이지](https://maplestoryworlds.nexon.com/) 혹은 메이커 내에서 등록이 가능합니다. 등록 화면과 절차는 동일하므로 크리에이터가 선호하는 곳에서 배지를 등록할 수 있습니다.
[task] | single_turn [pass] | ⏳ 미판정 [title] | 패키지의 활용 [question] | 패키지를 불러오는 도중 기존 월드의 엔트리와 이름은 같지만 유형이 다르거나 다른 크리에이터의 작품인 경우 어떤 상태가 되나요? [answer] | 기존 월드의 엔트리와 이름은 같지만 유형이 다르거나, 다른 크리에이터가 제작해 내용이 다른 엔트리인 경우 **엔트리를 가져올 수 없습니다**. 이 상태는 가져오기 과정에서 해당 엔트리에 특정 상태 아이콘이 표시되며, 충돌을 방지하기 위해 자동 임포트가 차단됩니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 메이플스토리 월드에서 제공하는 **네이티브 스크립트와 네이티브 모델**은 패키지로 내보낼 수 없습니다. 네이티브 모델 자체에 새로운 컴포넌트를 추가한 경우, 그 네이티브 모델을 확장한 경우 또한 패키지로 내보낼 수 없습니다. 패키지를 불러올 때 모든 정보를 불러올 수 없기 때문입니다. 예를 들어 네이티브 모델에 ComponentA를 추가하고 이를 확장한 모델을 만들었다고 생각해 봅시다. 이 확장한 모델은 ComponentA를 상속받게 됩니다. 모델B를 다른 월드에서 불러올 때 새로운 월드에는 ComponentA가 포함된 네이티브
[task] | single_turn [pass] | ⏳ 미판정 [title] | 패키지의 활용 [question] | 패키지 파일은 어떤 형태의 파일로 저장되며, 내보내기 시 이름을 변경할 수 있는 단계는 언제인가요? [answer] | 패키지 파일은 Workspace의 모델, 스크립트 컴포넌트, 데이터 셋 등 다양한 엔트리를 하나로 묶어 외부 공유를 위해 만든 파일입니다. 패키지를 내보낼 때 이름을 변경할 수 있는 단계는 내보내기 창에서 엔트리 선택이 완료된 후 하단의 **[Export]** 버튼을 클릭한 이후입니다. 이 단계에서 필요한 경우 이름을 변경하고, 최종적으로 **[저장]** 버튼을 클릭하여 파일을 저장합니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 메이플스토리 월드에서는 Workspace의 모델, 스크립트 컴포넌트, 데이터 셋과 같은 엔트리를 하나의 파일로 묶어 외부로 공유할 수 있는 패키지 기능을 제공하고 있습니다. Workspace의 엔트리를 패키지 파일로 내보내거나, 패키지 파일을 월드에 불러오는 방법에 대해 알아봅니다. # 패키지 소개 패키지는 특정 엔트리를 묶은 파일입니다. 패키지 파일을 이용해 제작한 월드의 일부를 외부와 공유하거나, 타인이 공유한 패키지를 내 월드에 사용할 수 있습니다. 패키지 내보내기, 불러오기 창에서는 폴더 구조와 계층