[task] | diverse_qa [title] | 플레이어 카메라 제어 [category] | Guides [rephrased] | 질문: `UseCustomBound` 값이 `True`일 때 카메라 제한 영역을 정의하기 위해 사용할 수 있는 프로퍼티는 무엇인가요? 답변: `LeftBottom`과 `RightTop` 프로퍼티를 사용해 카메라 제한 영역을 정의할 수 있습니다. 질문: `Collider Edit` 버튼을 누르면 어떤 기능을 사용할 수 있나요? 답변: Scene에 표시되는 기즈모를 통해 카메라 제한 영역을 시각적으로 확인하거나, 핸들러를 통해 영역을 손쉽게 조절할 수 있습니다. 질문: `CameraComponent`의 `UseCustomBound` [original] | 카메라 제한 영역을 직접 정의해서 사용할 지 여부를 설정합니다. **UseCustomBound** 값이 **True**라면 **LeftBottom, RightTop** 프로퍼티를 사용해 카메라 제한 영역을 정의할 수 있습니다. **Collider Edit** 버튼을 누르면 Scene에 표시되는 기즈모를 통해 카메라 제한 영역을 시각적으로 확인하거나 핸들러를 통해 손쉽게 영역을 조절할 수 있습니다. CameraComponent - UseCustomBound 값이 **False**라면 맵 영역을 카메라 제한 영역으로 사용합니다. 맵 [chunk_id] | Guides:72:1
[task] | wikipedia [title] | 플레이어 카메라 제어 [category] | Guides [rephrased] | # 카메라 플레이어 카메라 제어 메이플스토리 월드의 게임 메인 카메라는 기본적으로 플레이어를 따라다니도록 설계되어 있습니다. 메인 카메라를 제어하는 `CameraComponent`는 `MapleStoryPlayer` 모델에 내장되어 있으며, 이 모델의 프로퍼티 에디터나 스크립트를 통해 주요 값을 수정할 수 있습니다. 본 섹션에서는 프로퍼티 에디터를 통해 `CameraComponent`의 각 속성을 수정하는 방법을 다루며, 카메라의 전반적인 동작 원리를 설명합니다. ## Camera 컴포넌트 접근 방법 `CameraCompone [original] | # 학습 과정 소개 게임의 메인 카메라는 항상 플레이어를 따라다닙니다. 메인 카메라를 제어하는 camera 컴포넌트는 MapleStoryPlayer 모델이 가지고 있으며 이 모델의 프로퍼티 에디터나 스크립트를 이용해 주요 값을 수정할 수 있습니다. 이번 과정에서는 Camera 컴포넌트를 프로퍼티 에디터를 통해 수정해보며 전반적인 기능을 알아보는 시간을 가져보도록 하겠습니다. # Camera 컴포넌트 접근 Workspace에서 DefaultPlayer 모델을 선택합니다. 프로퍼티 에디터에서 CameraComponent를 확인 [chunk_id] | Guides:72:0
[task] | distill [title] | NPC 대화창 만들기 [category] | Guides [rephrased] | # NPC 대화창 만들기: UI 구성 가이드 NPC 대화창 제작은 **UI 디자인**, **데이터 테이블 설정**, **스크립트 호출**의 3단계로 진행됩니다. ## 1. UI 디자인 UI 편집기를 통해 `UIGroup` 및 이미지 엔티티를 구성합니다. ### 1.1 UIGroup 설정 1. 새로운 `UIGroup`을 추가합니다. 2. 프로퍼티 에디터에서 `DefaultShow`를 `true`로 변경합니다. ### 1.2 TalkPanel (배경 패널) `UIGroup`에 이미지 엔티티를 추가하고 이름을 `TalkPanel [original] | # 학습 과정 소개 이번 과정에서는 NPC들의 대화를 표현하기 위한 대화창을 제작해볼 것입니다. UI 편집기를 이용해 대화창을 구성하고 데이터 테이블에 데이터를 세팅 후 스크립트를 이용해 호출할 것입니다. 과정의 진행 순서는 다음과 같습니다. 1. UI 디자인 2. 데이터 테이블 추가 3. 스크립트 제작 제작 예시는 다음과 같습니다. # UI 디자인 1. UI 편집기 버튼을 클릭합니다. 2. UI 디자인을 진행할 새로운 **UIGroup**을 추가합니다. UIGroup을 추가한 적이 없다면 UIGroup이 추가됩 [chunk_id] | Guides:74:0
[task] | knowledge_list [title] | NPC 대화창 만들기 [category] | Guides [rephrased] | 제시된 문서 내용에서 추출한 핵심 사실 목록입니다. 1. 대화창 제작 과정은 UI 편집기를 이용한 디자인, 데이터 테이블에 데이터 세팅, 그리고 스크립트를 이용한 호출이라는 3단계 순서로 진행됩니다. 2. UI 편집기에서 대화창을 구성하기 위해 새로운 `UIGroup` 엔티티를 추가해야 합니다. 3. 추가한 `UIGroup`의 프로퍼티 에디터에서 `DefaultShow` 값을 `true`로 설정해야 합니다. 4. 생성한 `UIGroup` 안에 이미지 엔티티를 추가하고, 해당 엔티티의 이름을 `TalkPanel`로 변경해야 합니다. [original] | # 학습 과정 소개 이번 과정에서는 NPC들의 대화를 표현하기 위한 대화창을 제작해볼 것입니다. UI 편집기를 이용해 대화창을 구성하고 데이터 테이블에 데이터를 세팅 후 스크립트를 이용해 호출할 것입니다. 과정의 진행 순서는 다음과 같습니다. 1. UI 디자인 2. 데이터 테이블 추가 3. 스크립트 제작 제작 예시는 다음과 같습니다. # UI 디자인 1. UI 편집기 버튼을 클릭합니다. 2. UI 디자인을 진행할 새로운 **UIGroup**을 추가합니다. UIGroup을 추가한 적이 없다면 UIGroup이 추가됩 [chunk_id] | Guides:74:0
[task] | extract_knowledge [title] | 플레이어 카메라 제어 [category] | Guides [rephrased] | # 카메라 플레이어 카메라 제어 ## 1. 개념 설명 `CameraComponent`는 카메라의 이동 범위를 제한하는 역할을 합니다. 이 제한 영역은 `UseCustomBound` 프로퍼티의 값에 따라 결정되며, `MapComponent`의 설정과 연동됩니다. * **직접 정의 모드 (`UseCustomBound = True`)**: 크리에이터가 `LeftBottom`과 `RightTop` 프로퍼티를 통해 좌하단과 우상단 좌표를 명시하여 카메라 제한 영역을 직접 지정합니다. 이 모드에서는 에디터의 `Collider Edit` [original] | 카메라 제한 영역을 직접 정의해서 사용할 지 여부를 설정합니다. **UseCustomBound** 값이 **True**라면 **LeftBottom, RightTop** 프로퍼티를 사용해 카메라 제한 영역을 정의할 수 있습니다. **Collider Edit** 버튼을 누르면 Scene에 표시되는 기즈모를 통해 카메라 제한 영역을 시각적으로 확인하거나 핸들러를 통해 손쉽게 영역을 조절할 수 있습니다. CameraComponent - UseCustomBound 값이 **False**라면 맵 영역을 카메라 제한 영역으로 사용합니다. 맵 [chunk_id] | Guides:72:1
[task] | distill [title] | NPC 대화창 만들기 [category] | Guides [rephrased] | ```markdown ## NPC 대화창 UI 구성 (Name, Text 엔티티) `TalkPanel`의 자식으로 `Name`과 `Text` 텍스트 엔티티를 추가합니다. ### 1. Name 엔티티 - **부모**: `TalkPanel` - **UITransformComponent**: - `PosX`: -600 - `PosY`: 110 - `Width`: 300 - `Height`: 100 - **SpriteGUIRendererComponent**: - `Color`: RGB(255, 255, 255, 0) [original] | 결과물은 다음과 같습니다. 10. 새로운 텍스트 엔티티를 추가합니다. 추가한 텍스트 엔티티를 클릭하고 이름을 **Name**으로 변경합니다. 11. **Name** 엔티티를 **TalkPanel**로 드래그하여 **TalkPanel**의 자식으로 설정합니다. 12. **Name** 엔티티의 프로퍼티를 다음과 같이 수정합니다. | 컴포넌트 | 프로퍼티 | 값 | | --- | --- | --- | | @cols=1:@rows=4:UITransformComponent | PosX | -600 | [chunk_id] | Guides:74:1
[task] | diverse_qa [title] | 플레이어 카메라 제어 [category] | Guides [rephrased] | 질문: 게임의 메인 카메라는 항상 어떤 대상을 따라다닙니까? 답변: 게임의 메인 카메라는 항상 플레이어를 따라다닙니다. 질문: 메인 카메라를 제어하는 camera 컴포넌트는 어떤 모델이 가지고 있습니까? 답변: 메인 카메라를 제어하는 camera 컴포넌트는 MapleStoryPlayer 모델이 가지고 있습니다. 질문: Camera 컴포넌트에 있는 주요 값은 어떻게 수정할 수 있습니까? 답변: MapleStoryPlayer 모델의 프로퍼티 에디터나 스크립트를 이용해 주요 값을 수정할 수 있습니다. 질문: DeadZone 속성이 [original] | # 학습 과정 소개 게임의 메인 카메라는 항상 플레이어를 따라다닙니다. 메인 카메라를 제어하는 camera 컴포넌트는 MapleStoryPlayer 모델이 가지고 있으며 이 모델의 프로퍼티 에디터나 스크립트를 이용해 주요 값을 수정할 수 있습니다. 이번 과정에서는 Camera 컴포넌트를 프로퍼티 에디터를 통해 수정해보며 전반적인 기능을 알아보는 시간을 가져보도록 하겠습니다. # Camera 컴포넌트 접근 Workspace에서 DefaultPlayer 모델을 선택합니다. 프로퍼티 에디터에서 CameraComponent를 확인 [chunk_id] | Guides:72:0
[task] | wikipedia [title] | NPC 대화창 만들기 [category] | Guides [rephrased] | NPC 대화창 제작 가이드의 후속 단계에서는 대화상자의 이름과 대화 내용을 표시하기 위한 텍스트 엔티티를 설정하고, 최종적으로 대화상자를 비활성화하는 과정을 다룹니다. 먼저 새로운 텍스트 엔티티를 추가한 뒤, 해당 엔티티를 클릭하여 이름을 **Name**으로 변경합니다. 이후 **Name** 엔티티를 **TalkPanel** 위젯으로 드래그하여 **TalkPanel**의 자식 엔티티로 설정합니다. **Name** 엔티티의 프로퍼티는 다음과 같이 수정합니다. **UITransformComponent**에서 PosX를 -600, P [original] | 결과물은 다음과 같습니다. 10. 새로운 텍스트 엔티티를 추가합니다. 추가한 텍스트 엔티티를 클릭하고 이름을 **Name**으로 변경합니다. 11. **Name** 엔티티를 **TalkPanel**로 드래그하여 **TalkPanel**의 자식으로 설정합니다. 12. **Name** 엔티티의 프로퍼티를 다음과 같이 수정합니다. | 컴포넌트 | 프로퍼티 | 값 | | --- | --- | --- | | @cols=1:@rows=4:UITransformComponent | PosX | -600 | [chunk_id] | Guides:74:1
[task] | wikipedia [title] | NPC 대화창 만들기 [category] | Guides [rephrased] | # 학습 과정 소개 본 문서는 NPC의 대화를 표현하기 위한 대화창 제작 과정을 안내합니다. 이 과정을 통해 UI 편집기를 사용하여 대화창의 시각적 요소를 구성하고, 데이터 테이블에 관련 데이터를 설정한 뒤, 이를 스크립트 기반으로 호출하는 방법을 학습합니다. 제작 과정은 크게 세 단계로 나뉩니다. 첫째는 UI 디자인 단계이며, 둘째는 데이터 테이블 추가 단계, 셋째는 스크립트 제작 단계입니다. ## UI 디자인 UI 편집기를 사용하여 대화창의 기본 구조와 시각적 요소를 설정하는 과정입니다. 먼저 UI 편집기 버튼을 클릭하 [original] | # 학습 과정 소개 이번 과정에서는 NPC들의 대화를 표현하기 위한 대화창을 제작해볼 것입니다. UI 편집기를 이용해 대화창을 구성하고 데이터 테이블에 데이터를 세팅 후 스크립트를 이용해 호출할 것입니다. 과정의 진행 순서는 다음과 같습니다. 1. UI 디자인 2. 데이터 테이블 추가 3. 스크립트 제작 제작 예시는 다음과 같습니다. # UI 디자인 1. UI 편집기 버튼을 클릭합니다. 2. UI 디자인을 진행할 새로운 **UIGroup**을 추가합니다. UIGroup을 추가한 적이 없다면 UIGroup이 추가됩 [chunk_id] | Guides:74:0
[task] | wikipedia [title] | 발판 만들기 [category] | Guides [rephrased] | # 지형 발판 만들기 메이플스토리 월드(MapleStory Worlds)의 지형 편집 기능 중 하나인 발판(Foothold)은 여러 오브젝트를 조합하여 게임 내 이동 경로를 구성하고 시각적 다양성을 부여하기 위해 사용됩니다. 이 섹션에서는 발판 생성을 위한 두 가지 핵심 컴포넌트인 `FootholdComponent`와 `CustomFootholdComponent`의 개념, 차이점, 그리고 실무적인 편집 방법에 대해 설명합니다. ## Foothold 모델을 이용한 발판 생성 기존에 제공되는 `Foothold` 모델을 사용하면 타 [original] | # 학습 과정 소개 여러 오브젝트를 사용해 발판을 만들어 게임의 보는 재미를 풍성하게 만들어봅시다. **FootholdComponent**와 **CustomFootholdComponent** 개념과 발판 편집 방법을 소개합니다. # Foothold 모델로 발판 만들기 **Foothold** 모델을 이용해 발판을 만드는 방법입니다. 타일이 아닌 **Foothold** 모델을 이용해 다채로운 길을 만들 수 있습니다. 1. **Preset List** 패널에서 **Foothold**를 선택합니다. 2. 원하는 모델을 선택해 **S [chunk_id] | Guides:71:0
[task] | extract_knowledge [title] | NPC 대화창 만들기 [category] | Guides [rephrased] | 제시된 원문은 mLua 스크립트 언어의 코드, API 정의, 또는 프로그래밍 로직을 포함하고 있지 않습니다. 원문은 맵 에디터(MapleStory Worlds Editor)를 사용하여 UI 엔티티(`Name`, `Text`)를 생성하고, 컴포넌트(`UITransformComponent`, `SpriteGUIRendererComponent`, `TextComponent`)의 프로퍼티 값을 수정하는 **GUI 기반 시각 편집 과정**만을 설명하고 있습니다. 따라서 요청하신 "개념 설명 → API 사용법 → 예제 → 주의사항" 구조로 [original] | 결과물은 다음과 같습니다. 10. 새로운 텍스트 엔티티를 추가합니다. 추가한 텍스트 엔티티를 클릭하고 이름을 **Name**으로 변경합니다. 11. **Name** 엔티티를 **TalkPanel**로 드래그하여 **TalkPanel**의 자식으로 설정합니다. 12. **Name** 엔티티의 프로퍼티를 다음과 같이 수정합니다. | 컴포넌트 | 프로퍼티 | 값 | | --- | --- | --- | | @cols=1:@rows=4:UITransformComponent | PosX | -600 | [chunk_id] | Guides:74:1
[task] | extract_knowledge [title] | 발판 만들기 [category] | Guides [rephrased] | # 지형 발판 만들기 ## 개념 설명 메이플스토리 월드의 지형 시스템은 `Foothold` 모델을 통해 캐릭터의 이동 경로를 정의합니다. 타일(Tile)이 아닌 독립적인 모델 객체를 사용하여 다채로운 길을 구성할 수 있으며, 이는 두 가지 핵심 컴포넌트로 관리됩니다. 1. **FootholdComponent**: 맵 전체의 발판 정보를 저장하고 제공하는 시스템 컴포넌트입니다. 사용자가 직접 수정하거나 생성하는 용도가 아니며, 프로퍼티 에디터에서 값을 확인만 가능합니다. 2. **CustomFootholdComponent** [original] | # 학습 과정 소개 여러 오브젝트를 사용해 발판을 만들어 게임의 보는 재미를 풍성하게 만들어봅시다. **FootholdComponent**와 **CustomFootholdComponent** 개념과 발판 편집 방법을 소개합니다. # Foothold 모델로 발판 만들기 **Foothold** 모델을 이용해 발판을 만드는 방법입니다. 타일이 아닌 **Foothold** 모델을 이용해 다채로운 길을 만들 수 있습니다. 1. **Preset List** 패널에서 **Foothold**를 선택합니다. 2. 원하는 모델을 선택해 **S [chunk_id] | Guides:71:0
[task] | distill [title] | NPC 대화창 만들기 [category] | Guides [rephrased] | # NPC 대화창 구현 (NPCTalk) ## 핵심 동작 * `KeyboardKey.Z` 입력 시 대화창 텍스트 갱신. * 데이터 소진 시 대화창 닫기. ## 구현 절차 1. **스크립트 컴포넌트 생성**: 이름을 `NPCTalk`로 설정. 2. **이벤트 핸들러 등록**: Entity Event Handler에 `KeyDownEvent` 추가 및 아래 코드 구현. ```lua local key = event.key if key == KeyboardKey.Z then self:Sh [original] | 스크립트에서 구현해야 할 주요 항목은 다음과 같습니다. * 특정 키를 입력하면 대화창이 출력됩니다. * 키를 입력할 때 마다 데이터의 내용이 대화창에 갱신됩니다. * 더 이상 사용할 데이터가 없으면 대화창을 닫습니다. 먼저 키 입력을 체크하여 대화창이 출력되도록 하겠습니다. 1. 새로운 스크립트 컴포넌트를 추가합니다. 컴포넌트 이름을 **NPCTalk**로 변경합니다. 2. **Workspace**에서 **NPCTalk** 스크립트를 열고, Entity Event Handler에 **KeyDownEvent**를 추가하고 아 [chunk_id] | Guides:74:3
[task] | knowledge_list [title] | NPC 대화창 만들기 [category] | Guides [rephrased] | 제시된 문서에는 "스크립트 추가" 제목만 존재하고, 실제 mLua 코드, API 명세, 매개변수, 반환 타입, 또는 서버/클라이언트 실행 공간 제약에 대한 정보가 포함되어 있지 않습니다. 따라서 요청하신 "API 이름·매개변수·반환 타입·동기화/서버·클라이언트 제약"을 명시하는 기술적 사실 추출은 불가능합니다. 문서에 명시된 내용만 바탕으로 추출 가능한 핵심 사실은 다음과 같습니다. 1. 데이터 테이블의 이름을 `NPCTalk`로 설정해야 한다. 2. `NPCTalk` 데이터 테이블에는 `name`, `portrait`, `te [original] | # 데이터 테이블 추가 1. 새로운 데이터를 추가합니다. 데이터의 이름을 **NPCTalk**으로 변경합니다. 2. 2개의 컬럼을 추가하고 각 컬럼 이름으로 **name, portrait, text** 를 입력합니다. 3. 사용하고 싶은 이름이나 텍스트, RUID를 사용하여 대사를 구성합니다. 예시의 경우 다음과 같은 값을 사용했습니다. | name | portrait | text | | --- | --- | --- | | 윌 |641962d7a2db445c9f1c58cfbec790a3 | 내가 [chunk_id] | Guides:74:2
[task] | diverse_qa [title] | NPC 대화창 만들기 [category] | Guides [rephrased] | 질문: Name 엔티티를 TalkPanel의 자식으로 설정하기 위해 어떤 조작을 수행해야 하나요? 답변: Name 엔티티를 TalkPanel로 드래그하여 TalkPanel의 자식으로 설정합니다. 질문: Name 엔티티의 UITransformComponent에서 PosX와 PosY 값은 각각 얼마로 설정해야 하나요? 답변: PosX는 -600, PosY는 110으로 설정해야 합니다. 질문: Name 엔티티의 SpriteGUIRendererComponent에서 Color 값을 흰색 투명도 0%로 설정하려면 어떤 RGB와 A 값을 사 [original] | 결과물은 다음과 같습니다. 10. 새로운 텍스트 엔티티를 추가합니다. 추가한 텍스트 엔티티를 클릭하고 이름을 **Name**으로 변경합니다. 11. **Name** 엔티티를 **TalkPanel**로 드래그하여 **TalkPanel**의 자식으로 설정합니다. 12. **Name** 엔티티의 프로퍼티를 다음과 같이 수정합니다. | 컴포넌트 | 프로퍼티 | 값 | | --- | --- | --- | | @cols=1:@rows=4:UITransformComponent | PosX | -600 | [chunk_id] | Guides:74:1
[task] | knowledge_list [title] | NPC 대화창 만들기 [category] | Guides [rephrased] | 제시된 문서 내용만 기반으로 추출한 핵심 사실 목록입니다. * `NPCTalk` 스크립트 컴포넌트 내에서 `KeyDownEvent` 이벤트 핸들러를 구현하여, 입력된 키가 `KeyboardKey.Z`와 일치할 경우 `self:ShowNextText()` 메서드를 호출하도록 처리합니다. * `KeyDownEvent` 이벤트 핸들러의 매개변수 `event` 객체를 통해 `event.key` 속성에 접근하여 현재 입력된 키 값을 `local key` 변수에 저장합니다. * `ShowNextText()` 메서드는 문서 내에서 [original] | 스크립트에서 구현해야 할 주요 항목은 다음과 같습니다. * 특정 키를 입력하면 대화창이 출력됩니다. * 키를 입력할 때 마다 데이터의 내용이 대화창에 갱신됩니다. * 더 이상 사용할 데이터가 없으면 대화창을 닫습니다. 먼저 키 입력을 체크하여 대화창이 출력되도록 하겠습니다. 1. 새로운 스크립트 컴포넌트를 추가합니다. 컴포넌트 이름을 **NPCTalk**로 변경합니다. 2. **Workspace**에서 **NPCTalk** 스크립트를 열고, Entity Event Handler에 **KeyDownEvent**를 추가하고 아 [chunk_id] | Guides:74:3
[task] | extract_knowledge [title] | Event System [category] | Guides [rephrased] | # 이벤트 시스템 (Event System) ## 1. 개념 설명 메이플스토리 월드(mLua)의 이벤트 시스템은 **행위 발생 주체**와 **행동 실행 주체**의 책임을 분리하여 로직을 구성하는 방식입니다. 일반 로직에서는 행위가 일어난 주체가 해당 행위에 따른 모든 처리(HP 감소, 이펙트 표시 등)를 직접 관리하지만, 이벤트 시스템에서는 행위 발생 주체가 단순히 **사건의 발생 정보(타이밍 및 데이터)**를 전송하고, 이를 수신한 **행동 실행 주체**들이 내부적으로 정해진 행동을 수행하도록 합니다. 이 시스템은 다음과 같 [original] | # 학습 과정 소개 크리에이터는 로직을 여러 가지 방법으로 작성할 수 있습니다. 그 방법 중 하나는 **이벤트**를 활용하는 것입니다. 이번 시간에는 메이플스토리 월드의 이벤트 시스템과 여러 이벤트를 다루는 방법을 살펴봅니다. # 이벤트 기반의 로직 구성 로직을 작성하다 보면 **특정 타이밍에 해야 할 일**이 생깁니다. 그럴 때는 **행위가 일어난 주체**가 무엇을 할 것인지 결정해야 합니다. 예를 들어, 월드에서 캐릭터가 공격받았을 때 아래와 같이 구현한다고 가정해 봅시다. 1. **캐릭터의 HP를 감소시키고** 2. [chunk_id] | Guides:73:0
[task] | diverse_qa [title] | NPC 대화창 만들기 [category] | Guides [rephrased] | 질문: 이번 학습 과정에서 제작할 NPC 대화창의 주요 구성 요소는 무엇이며, 진행 순서는 어떻게 되나요? 답변: NPC 대화창은 UI 편집기를 이용해 구성하고 데이터 테이블에 데이터를 세팅한 후 스크립트로 호출하여 제작하며, 진행 순서는 1. UI 디자인, 2. 데이터 테이블 추가, 3. 스크립트 제작 순으로 진행됩니다. 질문: UI 편집기에서 새로운 대화창을 만들기 위해 먼저 추가해야 하는 UI 그룹의 이름은 무엇인가요? 답변: UI 편집기에서 새로운 대화창을 만들기 위해 먼저 추가해야 하는 UI 그룹의 이름은 **UIGrou [original] | # 학습 과정 소개 이번 과정에서는 NPC들의 대화를 표현하기 위한 대화창을 제작해볼 것입니다. UI 편집기를 이용해 대화창을 구성하고 데이터 테이블에 데이터를 세팅 후 스크립트를 이용해 호출할 것입니다. 과정의 진행 순서는 다음과 같습니다. 1. UI 디자인 2. 데이터 테이블 추가 3. 스크립트 제작 제작 예시는 다음과 같습니다. # UI 디자인 1. UI 편집기 버튼을 클릭합니다. 2. UI 디자인을 진행할 새로운 **UIGroup**을 추가합니다. UIGroup을 추가한 적이 없다면 UIGroup이 추가됩 [chunk_id] | Guides:74:0
[task] | diverse_qa [title] | NPC 대화창 만들기 [category] | Guides [rephrased] | 질문: 새로운 데이터 테이블을 추가할 때 데이터 이름을 무엇으로 설정해야 하나요? 답변: 데이터 이름을 **NPCTalk**으로 변경해야 합니다. 질문: NPC 대화창을 위해 데이터 테이블에 추가해야 하는 컬럼은 몇 개인가요? 답변: 2개의 컬럼을 추가합니다. (참고: 문서 본문에서는 2개라고 명시하였으나, 실제로는 name, portrait, text로 3개의 컬럼 이름을 입력하도록 지시하고 있습니다.) 질문: 데이터 테이블에 입력해야 하는 컬럼 이름들을 모두 나열해 보세요. 답변: 컬럼 이름은 **name**, **portr [original] | # 데이터 테이블 추가 1. 새로운 데이터를 추가합니다. 데이터의 이름을 **NPCTalk**으로 변경합니다. 2. 2개의 컬럼을 추가하고 각 컬럼 이름으로 **name, portrait, text** 를 입력합니다. 3. 사용하고 싶은 이름이나 텍스트, RUID를 사용하여 대사를 구성합니다. 예시의 경우 다음과 같은 값을 사용했습니다. | name | portrait | text | | --- | --- | --- | | 윌 |641962d7a2db445c9f1c58cfbec790a3 | 내가 [chunk_id] | Guides:74:2
[task] | knowledge_list [title] | NPC 대화창 만들기 [category] | Guides [rephrased] | 제시된 원문에는 mLua 스크립트 언어의 코드, API, 메서드, 이벤트 핸들러, 동기화 속성 등 기술적 정의가 포함되어 있지 않습니다. 해당 문서는 메이플스토리 월드 에디터의 **UI 엔티티 구성 및 프로퍼티 설정 절차**만을 설명하고 있습니다. 따라서 요청하신 "API 이름·매개변수·반환 타입·동기화/서버·클라이언트 제약"에 대한 기술적 사실은 원문에 존재하지 않으므로, **원문에 명시된 엔티티 구조 및 UI 프로퍼티 설정 사실**만을 독립적인 문장으로 정리합니다. ```lua -- 원문에 mLua 스크립트 코드가 포함되어 [original] | 결과물은 다음과 같습니다. 10. 새로운 텍스트 엔티티를 추가합니다. 추가한 텍스트 엔티티를 클릭하고 이름을 **Name**으로 변경합니다. 11. **Name** 엔티티를 **TalkPanel**로 드래그하여 **TalkPanel**의 자식으로 설정합니다. 12. **Name** 엔티티의 프로퍼티를 다음과 같이 수정합니다. | 컴포넌트 | 프로퍼티 | 값 | | --- | --- | --- | | @cols=1:@rows=4:UITransformComponent | PosX | -600 | [chunk_id] | Guides:74:1
[task] | distill [title] | NPC 대화창 만들기 [category] | Guides [rephrased] | # 데이터 테이블 추가 `NPCTalk` 데이터 테이블을 생성하고, `name`, `portrait`, `text` 컬럼을 추가합니다. | 컬럼 | 용도 | | :--- | :--- | | `name` | 캐릭터 이름 | | `portrait` | 캐릭터 초상화 RUID | | `text` | 대사 내용 | **데이터 예시:** | name | portrait | text | | :--- | :--- | :--- | | 윌 | 641962d7a2db445c9f1c58cfbec790a3 | 내가 이 역할을 맡게 될 줄이야. | [original] | # 데이터 테이블 추가 1. 새로운 데이터를 추가합니다. 데이터의 이름을 **NPCTalk**으로 변경합니다. 2. 2개의 컬럼을 추가하고 각 컬럼 이름으로 **name, portrait, text** 를 입력합니다. 3. 사용하고 싶은 이름이나 텍스트, RUID를 사용하여 대사를 구성합니다. 예시의 경우 다음과 같은 값을 사용했습니다. | name | portrait | text | | --- | --- | --- | | 윌 |641962d7a2db445c9f1c58cfbec790a3 | 내가 [chunk_id] | Guides:74:2
[task] | diverse_qa [title] | Event System [category] | Guides [rephrased] | 질문: 메이플스토리 월드에서 크리에이터가 특정 타이밍에 실행해야 할 로직을 작성할 때 활용할 수 있는 방법 중 하나는 무엇인가요? 답변: 크리에이터는 **이벤트**를 활용하여 특정 타이밍에 실행해야 할 로직을 작성할 수 있습니다. 질문: 일반 로직과 이벤트 기반 로직에서 '행동을 처리하는 주체'는 각각 누구인가요? 답변: 일반 로직에서는 **행위가 일어난 주체**가 일을 처리하고, 이벤트 시스템에서는 **행동 실행 주체**가 일을 처리합니다. 질문: 캐릭터가 공격받았을 때 HP 감소, 대미지 표시, 무적 처리를 일반 로직 방식으 [original] | # 학습 과정 소개 크리에이터는 로직을 여러 가지 방법으로 작성할 수 있습니다. 그 방법 중 하나는 **이벤트**를 활용하는 것입니다. 이번 시간에는 메이플스토리 월드의 이벤트 시스템과 여러 이벤트를 다루는 방법을 살펴봅니다. # 이벤트 기반의 로직 구성 로직을 작성하다 보면 **특정 타이밍에 해야 할 일**이 생깁니다. 그럴 때는 **행위가 일어난 주체**가 무엇을 할 것인지 결정해야 합니다. 예를 들어, 월드에서 캐릭터가 공격받았을 때 아래와 같이 구현한다고 가정해 봅시다. 1. **캐릭터의 HP를 감소시키고** 2. [chunk_id] | Guides:73:0
[task] | diverse_qa [title] | NPC 대화창 만들기 [category] | Guides [rephrased] | 질문: NPC 대화창 구현 시 스크립트에서 처리해야 하는 세 가지 주요 항목은 무엇인가요? 답변: 특정 키 입력 시 대화창 출력, 키 입력마다 대화창 데이터 갱신, 더 이상 사용할 데이터가 없을 때 대화창 닫기입니다. 질문: 키 입력을 감지하기 위해 Entity Event Handler에 추가해야 하는 이벤트 이름은 무엇인가요? 답변: KeyDownEvent 질문: 아래 코드에서 `KeyboardKey.Z`가 감지되었을 때 호출되는 함수의 이름은 무엇인가요? ```lua if key == KeyboardKey.Z then [original] | 스크립트에서 구현해야 할 주요 항목은 다음과 같습니다. * 특정 키를 입력하면 대화창이 출력됩니다. * 키를 입력할 때 마다 데이터의 내용이 대화창에 갱신됩니다. * 더 이상 사용할 데이터가 없으면 대화창을 닫습니다. 먼저 키 입력을 체크하여 대화창이 출력되도록 하겠습니다. 1. 새로운 스크립트 컴포넌트를 추가합니다. 컴포넌트 이름을 **NPCTalk**로 변경합니다. 2. **Workspace**에서 **NPCTalk** 스크립트를 열고, Entity Event Handler에 **KeyDownEvent**를 추가하고 아 [chunk_id] | Guides:74:3
[task] | wikipedia [title] | NPC 대화창 만들기 [category] | Guides [rephrased] | # 데이터 테이블 추가 NPC 대화창을 만들기 위해 데이터 테이블을 구성하는 과정은 다음과 같다. 첫째, 새로운 데이터를 추가하고 데이터 이름을 **NPCTalk**으로 설정한다. 둘째, 데이터 테이블에 **name**, **portrait**, **text**라는 이름의 3개 컬럼을 추가한다. 셋째, 원하는 캐릭터 이름, 텍스트 내용, 그리고 포트레이트(얼굴)를 나타내는 RUID(Unique ID)를 이용하여 대사 데이터를 입력한다. 아래는 예제에 사용된 데이터 값이다. * **name**: 윌, **portrait* [original] | # 데이터 테이블 추가 1. 새로운 데이터를 추가합니다. 데이터의 이름을 **NPCTalk**으로 변경합니다. 2. 2개의 컬럼을 추가하고 각 컬럼 이름으로 **name, portrait, text** 를 입력합니다. 3. 사용하고 싶은 이름이나 텍스트, RUID를 사용하여 대사를 구성합니다. 예시의 경우 다음과 같은 값을 사용했습니다. | name | portrait | text | | --- | --- | --- | | 윌 |641962d7a2db445c9f1c58cfbec790a3 | 내가 [chunk_id] | Guides:74:2
[task] | wikipedia [title] | NPC 대화창 만들기 [category] | Guides [rephrased] | # NPC 대화창 만들기 메이플스토리 월드(MapleStory Worlds)에서 NPC 대화창 기능을 구현하기 위해 스크립트 컴포넌트 내에서 처리해야 하는 핵심 로직은 다음 세 가지입니다. 먼저, 사용자가 특정 키를 입력하면 대화창이 출력되어야 합니다. 두 번째로, 키가 입력될 때마다 대화창에 표시되는 데이터 내용이 갱신되어야 합니다. 마지막으로, 더 이상 표시할 데이터가 없으면 대화창을 자동으로 닫아야 합니다. 본 가이드에서는 이 중 첫 번째 단계인 ‘키 입력 감지 및 대화창 출력 트리거’ 구현 과정을 중심으로 설명합니다. [original] | 스크립트에서 구현해야 할 주요 항목은 다음과 같습니다. * 특정 키를 입력하면 대화창이 출력됩니다. * 키를 입력할 때 마다 데이터의 내용이 대화창에 갱신됩니다. * 더 이상 사용할 데이터가 없으면 대화창을 닫습니다. 먼저 키 입력을 체크하여 대화창이 출력되도록 하겠습니다. 1. 새로운 스크립트 컴포넌트를 추가합니다. 컴포넌트 이름을 **NPCTalk**로 변경합니다. 2. **Workspace**에서 **NPCTalk** 스크립트를 열고, Entity Event Handler에 **KeyDownEvent**를 추가하고 아 [chunk_id] | Guides:74:3
[task] | wikipedia [title] | Event System [category] | Guides [rephrased] | # 이벤트 시스템 (Event System) 메이플스토리 월드의 크리에이터는 게임 로직을 구현하기 위해 다양한 프로그래밍 패러다임을 활용할 수 있으며, 그 중 하나가 **이벤트(Event)** 기반의 로직 설계입니다. 본 문서에서는 메이플스토리 월드의 이벤트 시스템 구조와 여러 이벤트를 다루는 방법에 대해 설명합니다. ## 이벤트 기반 로직의 구성 원리 게임 로직을 작성하는 과정에서 특정 시점에 실행해야 할 작업이 발생하면, 해당 작업을 수행할 주체와 실행 내용을 결정해야 합니다. 예를 들어, 월드 내 캐릭터가 공격을 받았을 [original] | # 학습 과정 소개 크리에이터는 로직을 여러 가지 방법으로 작성할 수 있습니다. 그 방법 중 하나는 **이벤트**를 활용하는 것입니다. 이번 시간에는 메이플스토리 월드의 이벤트 시스템과 여러 이벤트를 다루는 방법을 살펴봅니다. # 이벤트 기반의 로직 구성 로직을 작성하다 보면 **특정 타이밍에 해야 할 일**이 생깁니다. 그럴 때는 **행위가 일어난 주체**가 무엇을 할 것인지 결정해야 합니다. 예를 들어, 월드에서 캐릭터가 공격받았을 때 아래와 같이 구현한다고 가정해 봅시다. 1. **캐릭터의 HP를 감소시키고** 2. [chunk_id] | Guides:73:0
[task] | extract_knowledge [title] | 플레이어 카메라 제어 [category] | Guides [rephrased] | # 플레이어 카메라 제어 메이플스토리 월드에서 메인 카메라는 기본적으로 `MapleStoryPlayer` 모델을 따라다니도록 설계되어 있습니다. 카메라의 동작은 `MapleStoryPlayer` 모델에 내장된 `CameraComponent`를 통해 제어되며, 이 컴포넌트의 프로퍼티를 수정함으로써 카메라의 추적 범위, 움직임 부드러움, 위치 오프셋, 회전 각도 및 줌 기능을 설정할 수 있습니다. ## 1. 개념 및 프로퍼티 설명 `CameraComponent`는 플레이어의 위치에 따라 카메라가 반응하는 방식을 정의하는 여러 프로 [original] | # 학습 과정 소개 게임의 메인 카메라는 항상 플레이어를 따라다닙니다. 메인 카메라를 제어하는 camera 컴포넌트는 MapleStoryPlayer 모델이 가지고 있으며 이 모델의 프로퍼티 에디터나 스크립트를 이용해 주요 값을 수정할 수 있습니다. 이번 과정에서는 Camera 컴포넌트를 프로퍼티 에디터를 통해 수정해보며 전반적인 기능을 알아보는 시간을 가져보도록 하겠습니다. # Camera 컴포넌트 접근 Workspace에서 DefaultPlayer 모델을 선택합니다. 프로퍼티 에디터에서 CameraComponent를 확인 [chunk_id] | Guides:72:0
[task] | extract_knowledge [title] | NPC 대화창 만들기 [category] | Guides [rephrased] | # NPC 대화창 구현: 키 입력 이벤트 처리 ## 개념 설명 NPC 대화창을 구현하기 위해 스크립트에서 특정 키 입력을 감지하고, 해당 입력에 따라 대화 내용을 갱신하거나 창을 닫는 로직을 처리해야 합니다. 이 절에서는 대화창의 시작점인 **키 입력 감지** 및 **이벤트 핸들러 연결** 과정을 다룹니다. ## API 사용법 키 입력 감지를 위해 `Entity Event Handler` 블록 내 `KeyDownEvent`를 사용합니다. 이벤트 발생 시 `event` 객체를 통해 눌린 키 정보를 얻으며, `KeyboardKey` [original] | 스크립트에서 구현해야 할 주요 항목은 다음과 같습니다. * 특정 키를 입력하면 대화창이 출력됩니다. * 키를 입력할 때 마다 데이터의 내용이 대화창에 갱신됩니다. * 더 이상 사용할 데이터가 없으면 대화창을 닫습니다. 먼저 키 입력을 체크하여 대화창이 출력되도록 하겠습니다. 1. 새로운 스크립트 컴포넌트를 추가합니다. 컴포넌트 이름을 **NPCTalk**로 변경합니다. 2. **Workspace**에서 **NPCTalk** 스크립트를 열고, Entity Event Handler에 **KeyDownEvent**를 추가하고 아 [chunk_id] | Guides:74:3
[task] | distill [title] | NPC 대화창 만들기 [category] | Guides [rephrased] | **NPCTalk 스크립트 구성** **1. Property 추가** `Sync` 설정 없이 아래 프로퍼티를 선언합니다. ```lua [None] number count = 0 any npcTalkData = nil Entity uiNameEntity = nil Entity uiMessageEntity = nil Entity uiTalkPanel = nil Entity uiPortraitEntity = nil ``` * `count`: 참조할 데이터 `rowIndex` 관리. 데이터 설정 시 1씩 증가. * `npcTa [original] | 6. 로그가 정상 출력된다면 플레이를 종료하고 **NPCTalk** 스크립트를 다시 열고, 아래와 같이 제작에 필요한 프로퍼티를 추가합니다. | type | name | value | Sync | 설명 | | --- | --- | --- | --- | --- | | number | count | 0 |none | 스크립트에서 참조할 데이터의 rowIndex를 결정하기 위해 사용합니다. 데이터를 셋팅할때 마다 값을 1씩 증가시켜 다음줄의 데이터를 참조할 수 있도록 합니다.| | any | npc [chunk_id] | Guides:74:4
[task] | extract_knowledge [title] | NPC 대화창 만들기 [category] | Guides [rephrased] | # NPC 대화창 UI 구성 ## 개념 설명 메이플스토리 월드에서 NPC의 대사를 시각적으로 표현하기 위해 대화창(Dialog Box) UI를 구성할 수 있습니다. 이 과정은 **UIGroup**을 기반으로 배경 패널(`TalkPanel`)과 캐릭터 초상화(`Portrait`) 이미지를 배치하여 이루어집니다. UI 편집기를 통해 엔티티의 위치, 크기, 색상 및 투명도를 설정하고, 엔티티 간의 위계(Hierarchy) 관계를 설정하여 대화창의 기본 레이아웃을 완성합니다. ## API 사용법 본 절에서는 mLua 스크립트 API가 [original] | # 학습 과정 소개 이번 과정에서는 NPC들의 대화를 표현하기 위한 대화창을 제작해볼 것입니다. UI 편집기를 이용해 대화창을 구성하고 데이터 테이블에 데이터를 세팅 후 스크립트를 이용해 호출할 것입니다. 과정의 진행 순서는 다음과 같습니다. 1. UI 디자인 2. 데이터 테이블 추가 3. 스크립트 제작 제작 예시는 다음과 같습니다. # UI 디자인 1. UI 편집기 버튼을 클릭합니다. 2. UI 디자인을 진행할 새로운 **UIGroup**을 추가합니다. UIGroup을 추가한 적이 없다면 UIGroup이 추가됩 [chunk_id] | Guides:74:0