[task] | single_turn [pass] | ⏳ 미판정 [title] | 모자 만들기 [question] | G 유형 후드를 착용했을 때 앞모습의 눌린 헤어와 눈 장식, 얼굴 장식, 귀고리는 각각 어떻게 처리되나요? [answer] | G 유형 후드를 착용했을 때 각 요소의 처리 방식은 다음과 같습니다. * **앞모습의 눌린 헤어**: 살립니다. * **나머지 헤어**: 제거합니다. * **눈 장식**: 살립니다. * **얼굴 장식**: 살립니다. * **귀고리**: 제거합니다. [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] | PSD 파일을 업로드한 후 아이템이 정상적으로 제작되었는지 확인하기 위해 체크해야 할 미리보기 기능과 확인 절차는 어떻게 되나요? [answer] | PSD 파일을 업로드한 후 아이템이 정상적으로 제작되었는지 확인하기 위한 미리보기 기능과 확인 절차는 다음과 같습니다. **1. 동작별 미리보기 확인** * **ActionName 클릭:** 동작 목록에서 각 `ActionName`을 클릭하여 해당 동작에서 아이템이 정상적으로 보이는지 확인합니다. * **AutoPlay:** `AutoPlay`를 클릭하면 특정 프레임을 지정하여 아바타 프리뷰를 확인할 수 있습니다. **2. 적용 환경 미리보기** * **내 아바타 적용:** `[내 아바타 적용]` 버튼을 클릭하면 제작 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 메이플스토리 월드에서 크리에이터는 직접 아바타 아이템을 제작할 수 있습니다. 아바타 아이템을 만들기 위해서는 **제작**과 **등록** 단계를 진행해야 합니다. 이번 가이드에서는 등록 과정에 대한 내용을 설명하며 제작 과정에 대해서는 아래 가이드를 참고 부탁드립니다. ##### 참고 가이드 * [기본 개념](/docs?postId=588) * [하의 만들기](/docs?postId=584) * [망토 만들기](/docs?postId=585) * [상의 만들기](/docs?postId=586) * [장갑 만들기]
[task] | instruction_following [pass] | ⏳ 미판정 [title] | 에디터 서비스의 활용 [question] | EditorService에서 EnterEditorEvent와 EnterPlayEvent가 각각 어떤 시점에 호출되는지 3문장 이내로 설명하세요. [answer] | `EnterPlayEvent`는 플레이 테스트를 시작하는 시점에 호출됩니다. `EnterEditorEvent`는 플레이를 종료하고 UI 에디터로 돌아오는 시점에 호출됩니다. 또한, 아웃 게임에서 최초 에디터에 진입하는 과정에서도 `EnterEditorEvent`가 호출됩니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 월드를 제작하고 테스트 플레이를 시작하면 라이프 사이클에 따라 이벤트 함수를 호출합니다. 이와 다르게 [EditorService](/apiReference/Services/EditorService)는 메이커에서 스크립트 사용을 지원합니다. 크리에이터는 **EditorService**를 이용해 자신이 필요한 제작 도구를 만들 수 있습니다. # 에디터 서비스 체험하기 EditorService를 활용해 로그를 남겨봅시다. 1. **MyDesk- Create Scripts - Create Component**를 선
[task] | single_turn [pass] | ⏳ 미판정 [title] | 애니메이션 만들기 [question] | 애니메이션 클립을 저장할 때 이름, 카테고리, 설명 항목 중 저장되지 않는 결과를 초래할 수 있는 필수 값은 무엇인가요? [answer] | 애니메이션 클립을 저장할 때 **이름**이 필수 값입니다. 이름을 입력하지 않으면 애니메이션 클립이 저장되지 않습니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 애니메이션 클립 에디터를 이용해 기존의 메이플스토리 월드 애니메이션을 편집하거나 직접 제작한 애니메이션을 월드에 활용할 수 있습니다. 애니메이션 클립 에디터의 구성과 사용 방법을 알아봅시다. # 애니메이션 클립 에디터 소개 | 숫자 | 설명 | | --- | --- | | | **[새로 열기]**, **[추가하기]** 버튼으로 불러온 스프라이트가 배치됩니다. | | | 타임라인에 추가한 스프라이트들이 차례로 재생되며 초록 십자선을 기준으로 애니메이션 재생 위치를 확인할 수 있습니다. 상단의 Scale 슬
[task] | single_turn [pass] | ⏳ 미판정 [title] | 아바타 아이템 등록하기 [question] | 아바타 아이템을 선택한 후 프로퍼티에 RUID 값이 입력되었는데, 이 값이 실제로 무엇을 의미하나요? [answer] | 제공된 문서에 따르면, RUID 값은 `Resource Picker`를 통해 선택한 아바타 아이템의 고유 식별자입니다. 이 값은 `CostumeManagerComponent`의 프로퍼티에 입력되어 해당 아바타 아이템이 무엇인지 시스템이 인식하도록 하는 역할을 합니다. 실제로 코드를 통해 특정 플레이어에게 아바타 아이템을 착용시키거나 변경할 때는 이 RUID 값을 `CostumeManagerComponent`의 특정 슬롯(예: `CustomCapEquip`, `CustomLongcoatEquip` 등)에 문자열 형태로 대입하여 사용 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 크리에이터가 제작한 월드에서 아바타 아이템을 착용할 수 있습니다. 1. **DefaultPlayer**의 **CostumeManagerComponent**에서 착용하고자 하는 아바타 아이템의 프로퍼티를 클릭합니다. 2. 해당 버튼을 클릭하면 **Resource Picker**가 열리고 **내 리소스**에 등록한 아바타 아이템이 나옵니다. 원하는 아바타 아이템을 클릭합니다. 3. 프로퍼티를 확인해보면 다음과 같이 RUID 값이 입력되어 있음을 확인할 수 있습니다. > **더 알아보기** > 직접 제작한 아바타 아이템을 상품
[task] | single_turn [pass] | ⏳ 미판정 [title] | RectTileMap의 활용 [question] | KeyDownEvent에서 KeyboardKey.Z와 X를 각각 Grass와 Rock 타일 변경에 매핑하려면 HandleKeyDownEvent 이벤트 핸들러를 어떻게 작성해야 하나요? [answer] | KeyDownEvent에서 Z키와 X키를 각각 Grass와 Rock 타일 변경으로 매핑하려면, `InputService`의 `KeyDownEvent`를 처리하는 이벤트 핸들러를 작성합니다. `event.key` 값을 확인하여 `KeyboardKey.Z` 또는 `KeyboardKey.X`에 해당하는지 판단하고, 각각의 경우에서 `self:ChangeCurrentTile` 메서드를 호출해 타일 이름을 전달합니다. ```lua Event Handler: [service: InputService] HandleKeyDownEvent(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] | single_turn [pass] | ⏳ 미판정 [title] | 애니메이션 만들기 [question] | 애니메이션 클립 에디터의 Resource Picker에서 이미지 위에 마우스 커서를 올리면 발생하는 현상은 무엇인가요? [answer] | 애니메이션 클립을 Resource Picker에서 고를 때 이미지 위에 마우스 커서를 올려놓으면 애니메이션이 재생됩니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 애니메이션 클립 에디터를 이용해 기존의 메이플스토리 월드 애니메이션을 편집하거나 직접 제작한 애니메이션을 월드에 활용할 수 있습니다. 애니메이션 클립 에디터의 구성과 사용 방법을 알아봅시다. # 애니메이션 클립 에디터 소개 | 숫자 | 설명 | | --- | --- | | | **[새로 열기]**, **[추가하기]** 버튼으로 불러온 스프라이트가 배치됩니다. | | | 타임라인에 추가한 스프라이트들이 차례로 재생되며 초록 십자선을 기준으로 애니메이션 재생 위치를 확인할 수 있습니다. 상단의 Scale 슬
[task] | instruction_following [pass] | ⏳ 미판정 [title] | 애니메이션 만들기 [question] | 프레임 조정 버튼의 기능과 아이콘 설명을 표로 정리해서 출력하세요. [answer] | 프레임 조정 버튼의 기능과 아이콘 설명은 다음과 같습니다. | 아이콘 | 설명 | | --- | --- | | (복제 아이콘) | 선택한 스프라이트를 복제해 타임라인 마지막에 추가합니다. | | (맨 앞으로 이동 아이콘) | 선택한 스프라이트를 맨 앞으로 옮깁니다. | | (한 칸 앞으로 이동 아이콘) | 선택한 스프라이트를 한 칸(프레임) 앞으로 이동시킵니다. | | (한 칸 뒤로 이동 아이콘) | 선택한 스프라이프를 한 칸(프레임) 뒤로 이동시킵니다. | | (맨 뒤로 이동 아이콘) | 선택한 스프라이프를 맨 뒤로 옮깁니다. [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] | RectTileMap의 활용 [question] | 타일 맵 편집기에서 키보드 입력에 따라 특정 위치의 타일만 교체되도록 코드를 작성할 때, self:ChangeCurrentTile 호출 시 주의해야 할 점이나 오류 원인은 무엇인가요? [answer] | 제공된 참고 문서에는 `self:ChangeCurrentTile` 메서드의 내부 구현 로직, 파라미터 정의, 또는 오류 발생 원인에 대한 정보가 포함되어 있지 않습니다. 문서에 명시된 내용만으로는 `ChangeCurrentTile` 호출 시 주의해야 할 점이나 오류 원인을 설명할 수 없습니다. 문서에는 단순히 `KeyDownEvent` 핸들러 내에서 특정 키(`KeyboardKey.Z`, `KeyboardKey.X`)가 눌렸을 때 `"Grass"` 또는 `"Rock"`이라는 문자열 인자를 전달하여 `self:ChangeCurren [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] | A 유형과 B 유형 모자의 차이는 뒤통수 개방 여부에 따른 헤어 레이어 표시 방식이 어떻게 다른가요? [answer] | A 유형과 B 유형 모자의 차이는 모자를 착용했을 때 뒤통수가 열려 있는지, 덮여 있는지에 따라 헤어가 표시되는 레이어가 달라지는 것입니다. * **A 유형 (뒤통수가 개방된 모자):** 모자를 쓰면 헤어가 눌리며, 뒤통수가 개방된 구조이기 때문에 헤어는 `backHairBelowCapWide` 레이어로 표시됩니다. * **B 유형 (뒤통수를 덮는 모자):** 모자를 쓰면 헤어가 눌리며, 뒤통수를 덮는 구조이기 때문에 헤어는 `backHairBelowCapNarrow` 레이어로 표시됩니다. 즉, 두 유형 모두 헤어가 눌리 [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] | D 유형 가발과 E 유형 얼굴을 가리는 탈을 착용했을 때 각각 어떤 장식 아이템이 제거되고 어떤 것이 유지되나요? [answer] | D 유형 가발과 E 유형 얼굴을 가리는 탈을 착용했을 때의 장식 아이템 처리 방식은 다음과 같습니다. **D 유형 (가발)** * **제거되는 항목:** 모든 헤어 레이어 * **유지되는 항목:** 얼굴 장식, 눈 장식, 귀고리 **E 유형 (얼굴을 가리는 탈)** * **제거되는 항목:** 모든 헤어 레이어, 눈 장식, 귀고리 * **유지되는 항목:** (참고 문서에 명시된 유지 항목이 없으므로, 제거 대상이 아닌 항목은 유지된다고 해석할 수 있으나 문서상 명시된 '살린다'는 표현이 없습니다. 다만 E 유형은 D [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] | RectTileMap의 활용 [question] | 다른 키(예: C키)를 추가하여 새로운 타일(예: Water)을 배치하고 싶을 때, 기존 Z와 X 키 로직에 어떻게 확장하면 되나요? [answer] | 기존 `KeyDownEvent` 핸들러 안에서 `elseif` 구문을 추가로 작성하여 C키를 감지하는 조건을 붙이고, 해당 조건이 만족되면 `self:ChangeCurrentTile` 메서드에 새로운 타일 이름("Water")을 전달하면 됩니다. 다음과 같이 확장된 코드를 작성할 수 있습니다. ```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] | instruction_following [pass] | ⏳ 미판정 [title] | 에디터 서비스의 활용 [question] | HelloEditor 컴포넌트를 World - Common에 추가하고 두 이벤트 핸들러를 설정하는 과정을 단계별 번호 목록으로 정리하세요. [answer] | HelloEditor 컴포넌트를 World - Common에 추가하고 두 이벤트 핸들러를 설정하는 과정은 다음과 같습니다. 1. **MyDesk - Create Scripts - Create Component**를 선택하여 스크립트 컴포넌트를 추가하고 이름을 **HelloEditor**로 설정합니다. 2. Event Handler에 **EnterEditorEvent**와 **EnterPlayEvent**를 추가하고, 각각의 핸들러 함수에 `log("Enter Editor Event")`와 `log("Enter Play Event" [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] | _OnUpdate(number delta) 메서드에서 self.Entity.TransformComponent.Position이 Vector3(0, 120, 0) 범위 내인지 검사하여, 조건이 맞을 때만 _EntityService:GetEntityByPath("/maps/map01/cape_anchor")를 호출하고 그 결과를 _SpawnService:SpawnByModelId(300, "cape_skin", anchorPos, anchorEntity)에 전달해 망토 스킨을 앵커에 부착하는 스크립트를 작성해줘 [answer] | 요청하신 로직을 mLua 스크립트 형식에 맞춰 작성했습니다. **주의사항:** 1. `OnUpdate`는 매 프레임 실행되므로, 망토 스킨이 이미 생성된 상태인지 확인하는 로직이 없으면 매 프레임마다 새로운 엔티티가 생성되어 메모리 리크 및 성능 저하가 발생합니다. 따라서 아래 코드에서는 `self.capeSkin` 프로퍼티를 활용해 **한 번만 생성**되도록 처리했습니다. 2. `_EntityService:GetEntityByPath`는 서버/클라이언트 모두에서 사용 가능하지만, 엔티티 생성(`_SpawnService:Spa [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 망토 제작 방법을 알아봅시다. 기본 망토에 컬러를 바꾸고 그 위에 그림을 그릴 수 있습니다. 망토 대신 풍선을 제작할 수도 있습니다. [아바타 아이템 제작의 기본 개념](/docs?postId=588)을 참고해 아바타의 기본 개념을 먼저 숙지하길 바랍니다. # 사전 준비 아이템 제작을 위해선 Adobe Photoshop이 필요합니다. 해당 소프트웨어를 설치한 후 아래 파일을 받아 엽니다. $$attachFile {"name":"Avatar_Cape.psd","url":"https://mod-file.dn.n
[task] | instruction_following [pass] | ⏳ 미판정 [title] | 에디터 서비스의 활용 [question] | 문서에 제시된 HelloEditor 스크립트 컴포넌트의 Event Handler 코드를 코드만 출력하고 설명은 주석으로 작성하세요. [answer] | ```lua -- HelloEditor 스크립트 컴포넌트의 Event Handler 코드 -- EditorService의 EnterEditorEvent와 EnterPlayEvent를 처리합니다. Event Handler: [service: EditorService] HandleEnterEditorEvent(EnterEditorEvent event) { --------------- Native Event Sender Info ---------------- -- Sender: EditorService -- Spa [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] | 리소스 저장소(Resource Storage)에서 아바타 아이템을 관리하거나 수정하려면 어떤 경로와 메뉴를 사용해야 하나요? [answer] | 리소스 저장소(Resource Storage)에서 아바타 아이템을 관리하거나 수정하려면 다음과 같은 경로와 메뉴를 사용합니다. 1. **리소스 저장소 진입** 상단 내비게이션 메뉴에서 **Panels - Resource Storage**를 클릭하여 리소스 저장소를 엽니다. 2. **아바타 아이템 위치 확인** 리소스 저장소 안의 **내 리소스** 폴더를 열고, **avatarItem** 폴더, 그리고 그 안의 구체적인 파츠 폴더(예: **coat**)로 들어가면 등록한 아바타 아이템을 확인할 수 있습니다. 3 [followup] | 'Detail Info' 팝업에서 '파일 열기'를 통해 PSD 파일을 교체하는 구체적인 단계와, RUID를 복사하여 다른 스크립트에서 참조하는 코드 예제는 어떻게 작성하나요? [followup_answer] | **1. 'Detail Info' 팝업에서 PSD 파일 교체 단계** 아바타 아이템 리소스 아이콘에서 **Detail Info**를 클릭하거나 아이콘을 더블클릭하여 세부 정보 팝업창을 엽니다. 해당 팝업창에서 **[파일 열기]** 버튼을 클릭하면 **AvatarItem Editor** 창이 열리며, 여기서 PSD 파일 교체 작업을 수행할 수 있습니다. **2. RUID를 복사하여 스크립트에서 참조하는 코드 예제** RUID는 리소스 아이콘의 콘텍스트 메뉴에서 **Copy RUID**를 선택하여 클립보드에 저장할 수 있습니다. [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 메이플스토리 월드에서 크리에이터는 직접 아바타 아이템을 제작할 수 있습니다. 아바타 아이템을 만들기 위해서는 **제작**과 **등록** 단계를 진행해야 합니다. 이번 가이드에서는 등록 과정에 대한 내용을 설명하며 제작 과정에 대해서는 아래 가이드를 참고 부탁드립니다. ##### 참고 가이드 * [기본 개념](/docs?postId=588) * [하의 만들기](/docs?postId=584) * [망토 만들기](/docs?postId=585) * [상의 만들기](/docs?postId=586) * [장갑 만들기]
[task] | two_turn [pass] | ⏳ 미판정 [title] | 모자 만들기 [question] | 모자의 7가지 유형(A~G)의 차이점과 각 유형에 따른 헤어 레이어 처리 방식을 설명해 주세요. [answer] | 모자는 총 7가지 유형(A~G)으로 나뉘며, 각 유형에 따라 착용 시 헤어 레이어와 다른 장식(눈, 얼굴, 귀고리)이 어떻게 처리되는지 차이가 있습니다. 모자는 유형별 전용 제작 시트 파일이 존재하며, 이는 모자 아이템의 vslot 특성 때문입니다. 각 유형별 차이점과 처리 방식은 다음과 같습니다. | 유형 | 이름 | 헤어 처리 | 다른 장식 처리 (눈/얼굴/귀고리) | 비고 | | :--- | :--- | :--- | :--- | :--- | | **A** | 뒤통수가 개방된 모자 | 헤어가 눌림 | 뒤통수가 개방되어 있어 [followup] | B 유형(뒤통수를 덮는 모자)과 G 유형(후드)을 제작할 때, `backHairBelowCapNarrow` 레이어와 눌린 헤어 처리 로직이 어떻게 다른지 구체적으로 비교해 주세요. [followup_answer] | 참고 문서를 기준으로 B 유형(뒤통수를 덮는 모자)과 G 유형(후드)의 헤어 처리 방식은 다음과 같이 명확히 다릅니다. **1. B 유형 (뒤통수를 덮는 모자)** * **기본 동작:** 모자를 착용하면 헤어가 눌립니다. * **헤어 레이어 처리:** 뒤통수를 덮는 구조이므로, 헤이는 **`backHairBelowCapNarrow`** 레이어로 표시됩니다. * **특징:** 모자 아래로 보이는 뒤통수 쪽 헤어가 '좁은(narrow)' 영역으로 제한되어 표시됩니다. 이는 모자가 뒤통수를 완전히 덮고 있어 모자 밖으로 드러 [scores] | [judge_reason] | [source_doc] | 모자는 총 7가지 유형으로 나뉩니다. 모자는 다른 아바타 아이템과 다르게 유형별 전용 제작 시트 파일이 있습니다. 이는 모자 아이템의 vslot과 관련된 특성 때문입니다. 제작에 앞서 해당 개념을 참고해, 유형에 맞는 시트로 아이템을 제작하길 권장합니다. #### 모자 유형 |@cols=2:@rows=1:샘플 | @cols=2:@rows=1:투시 | 유형 설명 | | --- | --- | --- | --- | --- | | | | | |A 유형: [뒤통수가 개방된 모자](/docs?postId=684) 모자를 쓰면
[task] | code [pass] | ⏳ 미판정 [title] | RectTileMap의 활용 [question] | UserService의 UserEnterEvent를 처리하여 새로 입장한 유저의 UserId를 log로 출력하고, _TimerService:SetTimerOnce를 이용해 5초 후 "환영합니다"를 log로 출력하는 스크립트를 작성해줘 [answer] | `UserService`의 `UserEnterEvent`를 처리하여 새로 입장한 유저의 `UserId`를 출력하고, `_TimerService:SetTimerOnce`를 이용해 5초 후 "환영합니다"를 출력하는 스크립트는 다음과 같습니다. ```lua Event Handler: [service: UserService] HandleUserEnterEvent(UserEnterEvent event) { local UserId = event.UserId log("User Enter: " .. UserId) [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] | 에디터에서 로그를 출력하는 데 필요한 스크립트 컴포넌트는 어떤 경로에서 추가해야 하나요? [answer] | 에디터에서 로그를 출력하는 스크립트 컴포넌트를 추가하려면, Hierarchy 뷰에서 **World - Common** 경로에 해당 컴포넌트를 추가해야 합니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 월드를 제작하고 테스트 플레이를 시작하면 라이프 사이클에 따라 이벤트 함수를 호출합니다. 이와 다르게 [EditorService](/apiReference/Services/EditorService)는 메이커에서 스크립트 사용을 지원합니다. 크리에이터는 **EditorService**를 이용해 자신이 필요한 제작 도구를 만들 수 있습니다. # 에디터 서비스 체험하기 EditorService를 활용해 로그를 남겨봅시다. 1. **MyDesk- Create Scripts - Create Component**를 선
[task] | code [pass] | ⏳ 미판정 [title] | RectTileMap의 활용 [question] | SpawnService의 SpawnByModelId를 호출하여 ID 100, 이름 "Crate", 좌표 Vector3(0,0,0)에 엔티티를 생성하고, 생성된 엔티티의 TransformComponent.Position을 log로 출력하는 OnBeginPlay 스크립트를 작성해줘 [answer] | `_SpawnService:SpawnByModelId` 메서드를 사용하여 지정한 ID, 이름, 좌표에 엔티티를 생성하고, 생성된 엔티티의 위치를 로그로 출력하는 `OnBeginPlay` 스크립트는 다음과 같습니다. ```lua Method: [server only] void OnBeginPlay() { local newEntity = _SpawnService:SpawnByModelId(100, "Crate", Vector3(0, 0, 0), self.Entity) log(newEntity.TransformCompon [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] | 에디터 서비스의 이벤트를 처리하기 위해 Event Handler 블록에 어떤 서비스 접두사를 붙여야 하나요? [answer] | 에디터 서비스의 이벤트를 처리하려면 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] | RectTileMap의 활용 [question] | EntityService를 이용해 "/maps/map01/obj" 경로에 있는 엔티티를 조회하고, 그 TransformComponent.Position의 Y 값이 10보다 클 때 log로 "높음"을 출력하는 OnUpdate 스크립트를 작성해줘 [answer] | EntityService의 `GetEntityByPath` 메서드로 엔티티를 조회하고, `OnUpdate`에서 해당 엔티티의 `TransformComponent.Position` Y 값을 확인하여 조건에 맞을 때 로그를 출력하는 스크립트는 다음과 같습니다. ```lua Method: [server only] void OnUpdate(number delta) { local targetEntity = _EntityService:GetEntityByPath("/maps/map01/obj") if targetEnt [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] | 선택된 스프라이트를 복제하여 타임라인 마지막에 추가하는 스크립트를 작성해줘 [answer] | 제시된 참고 문서에는 애니메이션 클립 편집기(AnimationClip Editor)의 UI 조작(드래그, 버튼 클릭, Delay 값 입력 등)에 대한 설명만 포함되어 있으며, 타임라인의 프레임을 직접 조작하거나 스프라이트를 복제하여 추가하는 mLua 스크립트 API나 메서드는 언급되어 있지 않습니다. 따라서 해당 동작을 수행하는 mLua 스크립트를 작성할 수 없습니다. [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] | RectTileMap의 활용 [question] | Z키와 X키를 눌러서 타일 종류를 바꾸는 기능 구현 시, InputService 서비스의 KeyDownEvent를 스크립트에 연결하는 올바른 절차는 무엇인가요? [answer] | Z키와 X키 입력을 감지하여 타일 종류를 변경하는 기능을 구현하기 위해 `InputService`의 `KeyDownEvent`를 스크립트에 연결하는 절차는 다음과 같습니다. 1. 스크립트 컴포넌트에 **Event Handler** 블록을 추가합니다. 2. 해당 이벤트 핸들러의 서비스 선택지를 `InputService`로 설정하고, 핸들러 이름은 `HandleKeyDownEvent`로 지정합니다. 3. 이벤트 매개변수로 `KeyDownEvent event`를 받도록 선언합니다. 4. 함수 본문 내에서 `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] | instruction_following [pass] | ⏳ 미판정 [title] | 에디터 서비스의 활용 [question] | UIGroupComponent의 GroupType을 EditorType으로 변경했을 때 버튼이 표시되는 조건과 작동 가능 상태에 대해 3문장 이내로 설명하세요. [answer] | 에디터 타입 UI는 월드를 플레이하거나 편집 중인 상태에서만 확인 및 기능 작동이 가능합니다. 이 조건이 충족되면 버튼은 클릭 가능한 상태로 표시되어 클릭 이벤트를 정상적으로 처리할 수 있습니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | UIGroupComponent의 **GroupType**을 변경해 에디터 타입의 UI를 구성할 수 있습니다. 에디터 타입 UI는 월드를 플레이하거나, 월드를 편집 중인 상태에서만 확인 및 기능 작동이 가능합니다. 간단한 예시를 통해 확인해보겠습니다. 1. UI 에디터를 엽니다. 2. 새로운 UIGroup을 추가합니다. 3. 추가한 UIGroup을 선택합니다. 4. 프로퍼티 에디터에서 UIGroupComponent의 GroupType을 **EditorType**으로 변경합
[task] | code [pass] | ⏳ 미판정 [title] | 망토 만들기 [question] | _HandleUserEnterEvent(UserEnterEvent event) 이벤트 핸들러에서 event.UserId를 확인하여 _UserService:GetUserInfo(event.UserId)로 정보를 조회한 뒤, 조회된 데이터의 이름이 "Creator"일 경우 _SpawnService:SpawnByModelId(200, "balloon_item", Vector3(10, 0, 10), self.Entity)를 실행하는 스크립트를 작성해줘 [answer] | 사용자가 요청한 `_UserService:GetUserInfo` API와 `event.UserId` 기반의 특정 조건 분기 로직은 제공된 참고 문서에 포함되어 있지 않습니다. 참고 문서에 포함된 `HandleUserEnterEvent` 예제는 `event.UserId`를 조회하여 `_UserService.UserEntities` 딕셔너리에서 해당 유저의 엔티티를 직접 가져와 이름(`playerEntity.Name`)을 출력하는 방식만 보여주며, `GetUserInfo` 메서드나 모델 ID를 숫자(200)로 전달하는 방식은 문서에 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 망토 제작 방법을 알아봅시다. 기본 망토에 컬러를 바꾸고 그 위에 그림을 그릴 수 있습니다. 망토 대신 풍선을 제작할 수도 있습니다. [아바타 아이템 제작의 기본 개념](/docs?postId=588)을 참고해 아바타의 기본 개념을 먼저 숙지하길 바랍니다. # 사전 준비 아이템 제작을 위해선 Adobe Photoshop이 필요합니다. 해당 소프트웨어를 설치한 후 아래 파일을 받아 엽니다. $$attachFile {"name":"Avatar_Cape.psd","url":"https://mod-file.dn.n
[task] | instruction_following [pass] | ⏳ 미판정 [title] | 에디터 서비스의 활용 [question] | 에디터 서비스에서 월드 로드 시 1회만 실행되는 초기화 이벤트 이름을 정확히 1개만 출력하세요. [answer] | 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] | code [pass] | ⏳ 미판정 [title] | 애니메이션 만들기 [question] | 스프라이트를 맨 앞으로, 한 칸 앞으로, 한 칸 뒤로, 맨 뒤로 이동시키는 프레임 조정 기능을 구현하는 스크립트를 작성해줘 [answer] | 제시된 참고 문서는 애니메이션 클립 에디터(GUI)에서 프레임을 드래그하거나 버튼을 눌러 조정하는 **에디터 사용법**만 다루고 있습니다. mLua 스크립트 API를 통해 런타임(Run-time) 중에 애니메이션 클립의 프레임 순서를 변경하거나, 스프라이트를 "맨 앞으로", "한 칸 앞으로/뒤로", "맨 뒤로" 이동시키는 **API 함수가 문서에 존재하지 않습니다.** 따라서 요청하신 기능을 구현하는 mLua 스크립트는 작성할 수 없습니다. 프레임 순서 조정은 게임 런타임이 아닌, 에디터에서 애니메이션 클립을 편집하는 단계에서만 [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] | Resource Storage에서 Make Animation Clip을 선택하는 것과 Animation Clip Editor의 새로 열기 버튼을 통해 불러오는 것의 절차적 차이는 무엇인가요? [answer] | Resource Storage에서 `Make Animation Clip`을 선택하는 것과 Animation Clip Editor의 `새로 열기` 버튼을 통해 불러오는 것의 절차적 차이는 다음과 같습니다. **1. Resource Storage를 통한 절차** 1. Scene 옆의 **Resource Storage** 또는 Panels - Resource Storage를 선택합니다. 2. MSW 리소스 - animationclip에서 원하는 애니메이션 클립의 콘텍스트 메뉴를 엽니다. 3. **Make Animation Clip [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 애니메이션 클립 에디터를 이용해 기존의 메이플스토리 월드 애니메이션을 편집하거나 직접 제작한 애니메이션을 월드에 활용할 수 있습니다. 애니메이션 클립 에디터의 구성과 사용 방법을 알아봅시다. # 애니메이션 클립 에디터 소개 | 숫자 | 설명 | | --- | --- | | | **[새로 열기]**, **[추가하기]** 버튼으로 불러온 스프라이트가 배치됩니다. | | | 타임라인에 추가한 스프라이트들이 차례로 재생되며 초록 십자선을 기준으로 애니메이션 재생 위치를 확인할 수 있습니다. 상단의 Scale 슬
[task] | instruction_following [pass] | ⏳ 미판정 [title] | 에디터 서비스의 활용 [question] | 버튼 클릭 시 엔티티를 스폰하는 예시 코드에서 `_EditorService` 를 통해 호출되는 메서드 두 가지를 줄바꿈으로 구분하여 목록으로 정리하세요. [answer] | 버튼 클릭 시 엔티티를 스폰하는 예시 코드에서 `_EditorService` 를 통해 호출되는 메서드는 다음과 같습니다. * SetSelectedModel * CreateSelectedModel [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 버튼 클릭 시 에디터 상에 엔티티를 스폰하여 배치할 수도 있습니다. 에디터 상태에서 버튼을 클릭할 때마다 오브젝트를 스폰하는 예시입니다. ```lua Event Handler: [self] HandleButtonClickEvent(ButtonClickEvent event) { --------------- Native Event Sender Info ---------------- -- Sender: ButtonComponent -- Space: Client --------------------------