[task] | diverse_qa [title] | 엔티티의 생성과 삭제, 유효성 체크 [category] | Guides [rephrased] | 질문: 스크립트에서 생성된 엔티티를 3초 후 삭제하기 위해 `OnUpdate` 함수에서 어떤 조건을 확인해야 하나요? 답변: `OnUpdate` 함수에서는 `self._T.time` 변수에 `delta` 값을 누적하여 3초 이상(`self._T.time >= 3`)이 되었을 때 `_EntityService:Destroy(self.SpawnedEntity)` 또는 `self.SpawnedEntity:Destroy()`를 호출하여 엔티티를 삭제합니다. 질문: 다음 코드 블록이 수행하는 주요 역할은 무엇인가요? ```lua if isv [original] | **SpawnService**의 스폰 기능을 통해 엔티티를 생성하고, 생성된 후 3초 후에 제거되도록 합니다. 예제는 위 엔티티 생성에서 사용한 **SpawnManager** 스크립트 컴포넌트를 활용합니다. 1. 프로퍼티를 추가하고, 타입과 이름을 다음과 같이 설정합니다. ```lua Property: [none] any SpawnedEntity = nil ``` 2. `SpawnByModelId` 함수를 다음과 같이 수정합니다. ```lua void SpawnByMode [chunk_id] | Guides:290:2
[task] | knowledge_list [title] | Hierarchy [category] | Guides [rephrased] | 제시된 문서 내용만을 기반으로 추출한 핵심 사실 목록입니다. 1. **Hierarchy** 탭은 제작 중인 게임의 엔티티 현황을 부모-자식 관계의 계층 구조로 표시하는 패널이며, 복잡한 맵에서 엔티티를 빠르게 찾거나 체계적으로 관리하는 데 사용됩니다. 2. Hierarchy의 최상위 계층은 **World** 엔트리이며, 이 아래에 **common**, **maps**, **ui** 엔트리가 기본 하위 엔트리로 소속되어 있습니다. 3. **common** 엔트리는 게임 전체에 적용되는 룰을 만들기 위해 사용되며, 컴포넌트를 추가하여 [original] | # 학습 과정 소개 **Hierarchy** 탭을 이용해 제작 현황을 확인하고, 제작 능률을 높일 수 있습니다. # Hierarchy 소개 **Hierarchy** 탭은 제작 중인 게임 현황을 **계층 구조(부모-자식)**로 볼 수 있는 패널입니다. 복잡하게 구성한 맵에서 원하는 엔티티를 빠르게 찾을 때 사용하거나, 체계적으로 엔티티를 관리할 때 사용합니다. 가장 상위인 **World** 계층 아래에 **common**, **maps**, **ui** 엔트리가 있으며 **maps**와 **ui** 엔트리는 각자 기본 하위 엔트 [chunk_id] | Guides:453:0
[task] | extract_knowledge [title] | 엔티티의 생성과 삭제, 유효성 체크 [category] | Guides [rephrased] | # 심화 엔티티의 생성과 삭제, 유효성 체크 ## 1. 개념 설명 엔티티 생성과 삭제는 월드 제작에서 핵심적인 기능입니다. `SpawnService`는 엔티티를 생성하는 함수를 제공하며, 주로 `SpawnByEntity`와 `SpawnByModelId` 두 가지 방식을 지원합니다. * **SpawnByEntity**: 기존에 맵에 배치된 엔티티를 복제하여 새로운 엔티티를 생성합니다. * **SpawnByModelId**: 워크스페이스(Workspace)에 추가된 모델을 템플릿으로 사용하여 엔티티를 생성합니다. 두 함수 [original] | # 학습 과정 소개 엔티티의 생성과 삭제는 월드를 제작하면서 가장 많이 사용하는 기능입니다. 이번 과정에서는 엔티티 생성과 삭제 방법, 그리고 엔티티 존재 여부를 확인하는 유효성 체크 기능을 살펴봅니다. # 엔티티 생성 **SpawnService**는 엔티티 생성 함수를 제공합니다. 주요 엔티티 생성 함수인 `SpawnByEntity`와 `SpawnByModelId`를 알아보겠습니다. ## SpawnByEntity 엔티티를 바탕으로 새로운 엔티티를 생성합니다. #### 매개 변수 |Parameter |Type |D [chunk_id] | Guides:290:0
[task] | distill [title] | 모델의 활용 [category] | Guides [rephrased] | # 모델 확장 (Model Extension) ## 개념 및 특징 **모델 확장**은 기존 모델의 컴포넌트와 프로퍼티 값을 물려받아 새로운 모델을 생성하는 방식입니다. 복사와 달리 기반 모델과 확장 모델 간 관계가 유지됩니다. * **동기화**: 기반 모델의 속성 변경은 확장 모델에 즉시 적용됩니다. * **편집 제한**: * 확장 모델은 기반 모델로부터 **물려받은 컴포넌트를 삭제할 수 없습니다**. (삭제 시 기반 모델에서 수행해야 함) * 기반 모델에 새 컴포넌트를 추가/삭제하면, 이를 기반으로 [original] | # 학습 과정 소개 이번 과정에서는 모델 확장과 모델 생성 방법, 그리고 모델 프로퍼티의 편집 방법을 알아봅니다. 본 과정을 진행하기 전에 [모델](https://mod-developers.nexon.com/docs?postId=55) 가이드를 먼저 살펴보면 도움이 됩니다. # 모델 확장 **모델**은 자신이 갖고 있던 속성, 즉 같은 컴포넌트와 프로퍼티 값을 물려받은 확장 모델을 생성할 수 있습니다. 얼핏 복사와 개념이 비슷한 것 같지만 복사와는 다릅니다. * **복사** * 원본 모델과 복사된 모델이 독립적으로 존 [chunk_id] | Guides:461:0
[task] | diverse_qa [title] | Hierarchy [category] | Guides [rephrased] | 질문: **Hierarchy** 탭의 주요 용도는 무엇인가요? 답변: 제작 중인 게임 현황을 계층 구조(부모-자식)로 확인할 수 있으며, 복잡하게 구성한 맵에서 원하는 엔티티를 빠르게 찾거나 체계적으로 엔티티를 관리할 때 사용합니다. 질문: Hierarchy에서 가장 상위에 위치한 엔트리 이름은 무엇이며, 그 아래에 기본적으로 속하는 하위 엔트리 세 가지를 모두 나열하세요. 답변: 가장 상위는 World이며, 그 아래에 속하는 기본 하위 엔트리는 common, maps, ui입니다. 질문: `common` 엔트리의 주요 기능은 [original] | # 학습 과정 소개 **Hierarchy** 탭을 이용해 제작 현황을 확인하고, 제작 능률을 높일 수 있습니다. # Hierarchy 소개 **Hierarchy** 탭은 제작 중인 게임 현황을 **계층 구조(부모-자식)**로 볼 수 있는 패널입니다. 복잡하게 구성한 맵에서 원하는 엔티티를 빠르게 찾을 때 사용하거나, 체계적으로 엔티티를 관리할 때 사용합니다. 가장 상위인 **World** 계층 아래에 **common**, **maps**, **ui** 엔트리가 있으며 **maps**와 **ui** 엔트리는 각자 기본 하위 엔트 [chunk_id] | Guides:453:0
[task] | distill [title] | Hierarchy [category] | Guides [rephrased] | # 메이커 Hierarchy ## 검색 검색 창은 탭 타이틀 바로 아래에 위치하며, 기준에 따라 결괏값이 달라집니다. * **Name**: **Workspace** 전 영역에서 이름이 일치하는 엔티티를 검색합니다. * **Component**: 검색어에 해당하는 컴포넌트를 포함하는 엔티티를 검색합니다. ## 엔트리별 콘텍스트 메뉴 Hierarchy 상위 엔트리별 우클릭 메뉴는 다음과 같습니다. 하위 엔티티는 특성에 따라 추가 메뉴가 활성화될 수 있습니다. | 엔트리 | 주요 메뉴 (설명) | | :--- | :--- [original] | 검색 창은 탭 타이틀 바로 아래에 위치합니다. 검색 기준에 따라 다른 결괏값이 나오기에 필요에 따라 선택해 검색합니다.검색 기준은 **Name**과 **Component** 두 가지이며, 다음과 같이 사용합니다. * **Name** : **Workspace**의 전 영역에서 검색한 이름과 맞는 값을 찾을 때 사용합니다. * **Component** : 엔티티 중 검색어에 해당하는 컴포넌트가 포함된 값을 찾을 때 사용합니다. | Name "chat" 검색 | Component "chat" 검색 | | -------------- | [chunk_id] | Guides:453:1
[task] | wikipedia [title] | Hierarchy [category] | Guides [rephrased] | # Hierarchy 검색 기능 메이커(Maker)의 Hierarchy 패널은 탭 타이틀 바로 아래에 검색 창을 제공합니다. 이 검색 창은 사용자가 선택한 기준에 따라 다른 결과를 반환하므로, 작업 목적에 맞는 검색 기준을 선택하여 사용해야 합니다. 검색 기준은 **Name**과 **Component** 두 가지로 구분됩니다. **Name** 기준 검색은 **Workspace** 전체 영역에서 이름이 검색어와 일치하는 엔티티를 찾는 데 사용됩니다. 반면, **Component** 기준 검색은 엔티티 목록 중 검색어와 일치하는 컴 [original] | 검색 창은 탭 타이틀 바로 아래에 위치합니다. 검색 기준에 따라 다른 결괏값이 나오기에 필요에 따라 선택해 검색합니다.검색 기준은 **Name**과 **Component** 두 가지이며, 다음과 같이 사용합니다. * **Name** : **Workspace**의 전 영역에서 검색한 이름과 맞는 값을 찾을 때 사용합니다. * **Component** : 엔티티 중 검색어에 해당하는 컴포넌트가 포함된 값을 찾을 때 사용합니다. | Name "chat" 검색 | Component "chat" 검색 | | -------------- | [chunk_id] | Guides:453:1
[task] | wikipedia [title] | 엔티티의 생성과 삭제, 유효성 체크 [category] | Guides [rephrased] | # 심화 엔티티의 생성과 삭제, 유효성 체크 이 가이드에서는 **SpawnService**를 사용하여 엔티티를 생성한 후, 생성 시점부터 3초가 경과하면 해당 엔티티를 자동으로 제거하는 방법을 설명합니다. 또한, 엔티티의 상태(삭제 대기 중 여부 등)를 정확히 파악하기 위한 유효성 체크 기능인 `isvalid` 함수에 대해 다룹니다. ## 1. 엔티티 생성 및 일정 시간 후 삭제 구현 본 예제는 이전 단계에서 사용했던 **SpawnManager** 스크립트 컴포넌트를 기반으로 작성되었습니다. ### 1.1. 프로퍼티 추가 [original] | **SpawnService**의 스폰 기능을 통해 엔티티를 생성하고, 생성된 후 3초 후에 제거되도록 합니다. 예제는 위 엔티티 생성에서 사용한 **SpawnManager** 스크립트 컴포넌트를 활용합니다. 1. 프로퍼티를 추가하고, 타입과 이름을 다음과 같이 설정합니다. ```lua Property: [none] any SpawnedEntity = nil ``` 2. `SpawnByModelId` 함수를 다음과 같이 수정합니다. ```lua void SpawnByMode [chunk_id] | Guides:290:2
[task] | extract_knowledge [title] | 엔티티의 생성과 삭제, 유효성 체크 [category] | Guides [rephrased] | # 심화 엔티티의 생성과 삭제, 유효성 체크 ## 1. 개념 설명 엔티티는 런타임 동안 생성되고 삭제될 수 있습니다. 삭제된 엔티티나 삭제 대기 중인 엔티티에 접근하거나 메서드를 호출하면 오류가 발생할 수 있으므로, 엔티티가 유효한 상태인지 확인하는 과정이 필요합니다. `isvalid` 함수는 주어진 엔티티가 현재 존재하는 유효한 객체인지를 검사하기 위해 사용됩니다. ## 2. API 사용법 ### `isvalid` * **매개 변수**: * `entity`: 유효성 체크 대상이 되는 엔티티를 넣어줍니다. [original] | | Parameter | Description | | :--: | ----------- | | entity | 유효성 체크 대상이 되는 엔티티를 넣어줍니다. | #### 반환 값 * 매개 변수로 넘겨진 엔티티가 존재하면 **true**를 반환합니다. * 엔티티가 nil이거나 삭제 대기 중, 또는 삭제된 엔티티라면 **false**를 반환합니다. #### 사용 예시 위 `Destroy` 함수 예제에 이어서 엔티티 삭제 전후로 `isvalid` 함수가 어떤 값을 반환하는지 확인하고 실제 사용법을 살펴봅니다. 1. **Spawn [chunk_id] | Guides:290:3
[task] | wikipedia [title] | Hierarchy [category] | Guides [rephrased] | # Hierarchy **Hierarchy** 탭은 메이플스토리 월드 메이커에서 현재 제작 중인 게임의 엔티티 구조를 **계층 구조(부모-자식)** 형태로 시각화하여 확인하고 관리하는 패널입니다. 복잡한 맵 환경에서 특정 엔티티를 빠르게 식별하거나, 대량의 엔티티를 체계적으로 조직화할 필요가 있을 때 이 기능을 활용합니다. ## 기본 구조와 엔트리 구성 Hierarchy 탭의 최상위 계층은 **World** 엔트리입니다. 이 아래에는 게임 제작의 기본 구성 요소인 **common**, **maps**, **ui** 엔트리가 하 [original] | # 학습 과정 소개 **Hierarchy** 탭을 이용해 제작 현황을 확인하고, 제작 능률을 높일 수 있습니다. # Hierarchy 소개 **Hierarchy** 탭은 제작 중인 게임 현황을 **계층 구조(부모-자식)**로 볼 수 있는 패널입니다. 복잡하게 구성한 맵에서 원하는 엔티티를 빠르게 찾을 때 사용하거나, 체계적으로 엔티티를 관리할 때 사용합니다. 가장 상위인 **World** 계층 아래에 **common**, **maps**, **ui** 엔트리가 있으며 **maps**와 **ui** 엔트리는 각자 기본 하위 엔트 [chunk_id] | Guides:453:0
[task] | diverse_qa [title] | 모델의 활용 [category] | Guides [rephrased] | 질문: 모델 확장 시, 기반 모델의 속성을 변경하면 확장 모델에도 적용됩니까? 답변: 네, 적용됩니다. 확장 모델은 기반 모델과의 관계가 유지되므로 기반 모델의 속성 변경은 확장 모델에도 반영됩니다. 질문: 모델의 '복사'와 '확장'의 가장 큰 차이는 무엇입니까? 답변: 복사는 원본과 복사본이 독립적으로 존재하여 속성 수정이 서로에게 영향을 주지 않는 반면, 확장은 기반 모델과 확장 모델의 관계가 유지되어 기반 모델의 변경이 확장 모델에도 적용됩니다. 질문: Workspace에서 확장 모델을 생성하기 위해 콘텍스트 메뉴에서 클릭 [original] | # 학습 과정 소개 이번 과정에서는 모델 확장과 모델 생성 방법, 그리고 모델 프로퍼티의 편집 방법을 알아봅니다. 본 과정을 진행하기 전에 [모델](https://mod-developers.nexon.com/docs?postId=55) 가이드를 먼저 살펴보면 도움이 됩니다. # 모델 확장 **모델**은 자신이 갖고 있던 속성, 즉 같은 컴포넌트와 프로퍼티 값을 물려받은 확장 모델을 생성할 수 있습니다. 얼핏 복사와 개념이 비슷한 것 같지만 복사와는 다릅니다. * **복사** * 원본 모델과 복사된 모델이 독립적으로 존 [chunk_id] | Guides:461:0
[task] | extract_knowledge [title] | 엔티티의 생성과 삭제, 유효성 체크 [category] | Guides [rephrased] | # 심화: 엔티티의 생성과 삭제, 유효성 체크 ## 개념 설명 메이플스토리 월드에서 런타임에 동적으로 엔티티를 생성하려면 `_SpawnService`를 사용해야 합니다. 정적 에디터에서 배치된 모델은 고정되어 있으므로, 스크립트로 제어 가능한 객체를 만들 때는 모델의 고유 식별자(Entry ID)를 기반으로 인스턴스를 생성하는 과정이 필요합니다. 생성된 엔티티는 즉시 사용 가능한 상태가 아닐 수 있으므로, 생성 결과에 대한 유효성 체크(`isvalid`)가 필수적입니다. 또한, 게임 로직 종료 시점에 더 이상 필요하지 않은 엔 [original] | 1. **Preset List**에서 원하는 모델의 콘텍스트 메뉴를 연 뒤, **Add to Workspace**를 눌러 **Workspace**에 모델을 추가합니다. 2. 추가한 모델의 콘텍스트 메뉴에서 **Copy Entry ID**를 눌러 **Entry ID**를 클립보드에 복사합니다. 3. **SpawnManager** 컴포넌트를 열고 `SpawnByModelId` 함수를 생성합니다. ```lua void SpawnByModelId() { local id = [chunk_id] | Guides:290:1
[task] | distill [title] | 모델의 활용 [category] | Guides [rephrased] | **모델의 활용** 엔티티 생성 시 **Preset List**의 모델을 주로 활용합니다. 이 모델은 **NativeModel**의 특성을 상속받아, 속성 변경 시 원본 **NativeModel** 수정이 필요하며, 이는 모든 파생 모델에 영향을 줘 불편합니다. **NativeModel**에서 독립적인 **신규 모델**을 생성하면 수정과 변형이 자유롭습니다. ### 신규 모델 생성 1. **Workspace**에서 `[+]` 버튼 또는 콘텍스트 메뉴에서 **Create Model**을 선택합니다. 2. 생성된 모델에는 컴포넌트가 [original] | 엔티티를 생성할 때는 주로 **Preset List**의 모델을 활용합니다. **Preset List**의 모델은 기본적으로 **NativeModel**의 특성을 물려받습니다. 그래서 **Preset List**의 모델 속성을 변경하려면 **NativeModel**을 수정해야 합니다. 하지만 **NativeModel**의 속성을 변경하면 해당 **NativeModel**에서 확장된 **Preset List**의 모델 속성이 모두 변경되어 버립니다. 작업 과정에서 원래 모델의 특성이 필요할 때는 또다시 수정해야 하므로 불편합니다. [chunk_id] | Guides:461:1
[task] | distill [title] | 모델의 활용 [category] | Guides [rephrased] | 모델은 엔티티 생성의 기본 단위이며, Preset List 의 모델은 NativeModel 에서 확장되어 해당 카테고리의 NativeModel 속성을 물려받습니다. 즉, Preset List 의 모델 동작을 변경하려면 원본 NativeModel 을 수정해야 합니다. 예: `Preset List - Object` 의 스케일 변경은 `NativeModel - MapObject` 의 `Scale` 값 수정으로 수행합니다. ## 모델 프로퍼티 모델/엔티티 프로퍼티 에디터 최상단, 특정 컴포넌트에 속하지 않은 프로퍼티들입니다. 이는 내부 [original] | 모델을 통해 엔티티를 생성할 수 있으며, **Preset List**에서 제공하는 **Preset**도 결국 모델이라는 것을 [Model](/docs?postId=55) 가이드를 통해 배웠습니다. **Preset List**의 모델은 **NativeModel**에서 확장되었기 때문에 **Preset List** 카테고리 단위로 **NativeModel**의 속성을 물려받습니다. 따라서 각 카테고리에 해당하는 **NativeModel**을 변경하면 **Preset List**의 모델에도 변화가 생깁니다. 예를 들어 **Preset [chunk_id] | Guides:461:2
[task] | extract_knowledge [title] | 엔티티의 생성과 삭제, 유효성 체크 [category] | Guides [rephrased] | # 심화 엔티티의 생성, 삭제 및 유효성 체크 ## 1. 개념 설명 `SpawnService`를 통해 엔티티를 생성한 후, 일정 시간(예: 3초)이 경과하면 해당 엔티티를 삭제하는 흐름을 구현할 수 있습니다. 이 과정에서 엔티티 참조 변수(`SpawnedEntity`)가 유효한 상태인지 확인하는 것이 중요합니다. 엔티티는 단순히 `nil`이 아닌 경우에도 "삭제 대기 중" 상태일 수 있으며, 이 상태에서는 엔티티의 값을 정상적으로 읽을 수 없습니다. 따라서 `nil` 체크 대신 글로벌 함수 `isvalid`를 사용하여 엔티티가 [original] | **SpawnService**의 스폰 기능을 통해 엔티티를 생성하고, 생성된 후 3초 후에 제거되도록 합니다. 예제는 위 엔티티 생성에서 사용한 **SpawnManager** 스크립트 컴포넌트를 활용합니다. 1. 프로퍼티를 추가하고, 타입과 이름을 다음과 같이 설정합니다. ```lua Property: [none] any SpawnedEntity = nil ``` 2. `SpawnByModelId` 함수를 다음과 같이 수정합니다. ```lua void SpawnByMode [chunk_id] | Guides:290:2
[task] | diverse_qa [title] | Hierarchy [category] | Guides [rephrased] | 질문: 메이커 사용 Hierarchy에서 검색 창은 어디에 위치합니까? 답변: 검색 창은 탭 타이틀 바로 아래에 위치합니다. 질문: Hierarchy의 검색 기준은 무엇으로 나뉘며 각각 어떤 용도로 사용됩니까? 답변: 검색 기준은 **Name**과 **Component** 두 가지입니다. **Name**은 **Workspace**의 전 영역에서 검색한 이름과 맞는 값을 찾을 때 사용하며, **Component**는 엔티티 중 검색어에 해당하는 컴포넌트가 포함된 값을 찾을 때 사용합니다. 질문: 'Name' 검색 기준을 사용할 때 [original] | 검색 창은 탭 타이틀 바로 아래에 위치합니다. 검색 기준에 따라 다른 결괏값이 나오기에 필요에 따라 선택해 검색합니다.검색 기준은 **Name**과 **Component** 두 가지이며, 다음과 같이 사용합니다. * **Name** : **Workspace**의 전 영역에서 검색한 이름과 맞는 값을 찾을 때 사용합니다. * **Component** : 엔티티 중 검색어에 해당하는 컴포넌트가 포함된 값을 찾을 때 사용합니다. | Name "chat" 검색 | Component "chat" 검색 | | -------------- | [chunk_id] | Guides:453:1
[task] | knowledge_list [title] | 모델의 활용 [category] | Guides [rephrased] | ```lua -- 문서 기반 사실 목록 -- 각 항목은 독립적인 문장입니다. 1. 모델은 자신이 갖고 있던 속성, 즉 같은 컴포넌트와 프로퍼티 값을 물려받은 확장 모델을 생성할 수 있습니다. 2. 모델의 복사는 원본 모델과 복사된 모델이 독립적으로 존재하여 속성 수정 시 서로에게 영향을 주지 않습니다. 3. 모델의 확장은 기반 모델과 확장 모델의 관계가 유지되며, 기반 모델의 속성 변경 시 확장 모델에도 적용됩니다. 4. 모델 확장은 확장 모델이 물려받은 속성을 삭제하지 못하는 등의 편집 제한이 있습니다. 5. Workspace에 [original] | # 학습 과정 소개 이번 과정에서는 모델 확장과 모델 생성 방법, 그리고 모델 프로퍼티의 편집 방법을 알아봅니다. 본 과정을 진행하기 전에 [모델](https://mod-developers.nexon.com/docs?postId=55) 가이드를 먼저 살펴보면 도움이 됩니다. # 모델 확장 **모델**은 자신이 갖고 있던 속성, 즉 같은 컴포넌트와 프로퍼티 값을 물려받은 확장 모델을 생성할 수 있습니다. 얼핏 복사와 개념이 비슷한 것 같지만 복사와는 다릅니다. * **복사** * 원본 모델과 복사된 모델이 독립적으로 존 [chunk_id] | Guides:461:0
[task] | extract_knowledge [title] | 모델의 활용 [category] | Guides [rephrased] | # 모델의 활용 ## 개념 설명 엔티티 생성 시 **Preset List**의 모델을 주로 활용하며, 이 모델들은 **NativeModel**의 특성을 물려받습니다. **Preset List** 모델의 속성을 변경하려면 **NativeModel**을 수정해야 하지만, 이는 해당 **NativeModel**에서 확장된 모든 **Preset List** 모델의 속성을 동시에 변경하는 결과를 초래하여 작업의 유연성을 떨어뜨립니다. **NativeModel**에 의존하지 않는 독립적인 신규 모델 생성을 통해 이러한 문제를 해결할 수 있 [original] | 엔티티를 생성할 때는 주로 **Preset List**의 모델을 활용합니다. **Preset List**의 모델은 기본적으로 **NativeModel**의 특성을 물려받습니다. 그래서 **Preset List**의 모델 속성을 변경하려면 **NativeModel**을 수정해야 합니다. 하지만 **NativeModel**의 속성을 변경하면 해당 **NativeModel**에서 확장된 **Preset List**의 모델 속성이 모두 변경되어 버립니다. 작업 과정에서 원래 모델의 특성이 필요할 때는 또다시 수정해야 하므로 불편합니다. [chunk_id] | Guides:461:1
[task] | wikipedia [title] | 모델의 활용 [category] | Guides [rephrased] | # 모델의 활용 메이플스토리 월드에서는 모델을 통해 엔티티를 생성할 수 있습니다. Preset List에서 제공하는 Preset 또한 기본적으로 모델로 구성되며, 이는 [Model](/docs?postId=55) 가이드를 통해 확인할 수 있습니다. Preset List의 모델은 NativeModel을 기반으로 확장되어 생성되므로, Preset List의 각 카테고리 단위로 해당 NativeModel의 속성을 물려받습니다. 이러한 구조로 인해 특정 카테고리에 해당하는 NativeModel을 수정하면, Preset List 내 해당 [original] | 모델을 통해 엔티티를 생성할 수 있으며, **Preset List**에서 제공하는 **Preset**도 결국 모델이라는 것을 [Model](/docs?postId=55) 가이드를 통해 배웠습니다. **Preset List**의 모델은 **NativeModel**에서 확장되었기 때문에 **Preset List** 카테고리 단위로 **NativeModel**의 속성을 물려받습니다. 따라서 각 카테고리에 해당하는 **NativeModel**을 변경하면 **Preset List**의 모델에도 변화가 생깁니다. 예를 들어 **Preset [chunk_id] | Guides:461:2
[task] | diverse_qa [title] | 모델의 활용 [category] | Guides [rephrased] | 질문: 엔티티를 생성할 때 주로 어떤 목록의 모델을 활용합니까? 답변: 엔티티를 생성할 때는 주로 Preset List의 모델을 활용합니다. 질문: Preset List의 모델은 기본적으로 어떤 모델의 특성을 물려받습니까? 답변: Preset List의 모델은 기본적으로 NativeModel의 특성을 물려받습니다. 질문: Preset List의 모델 속성을 변경하려면 무엇을 수정해야 하는가? 답변: Preset List의 모델 속성을 변경하려면 NativeModel을 수정해야 합니다. 질문: NativeModel의 속성을 변경 [original] | 엔티티를 생성할 때는 주로 **Preset List**의 모델을 활용합니다. **Preset List**의 모델은 기본적으로 **NativeModel**의 특성을 물려받습니다. 그래서 **Preset List**의 모델 속성을 변경하려면 **NativeModel**을 수정해야 합니다. 하지만 **NativeModel**의 속성을 변경하면 해당 **NativeModel**에서 확장된 **Preset List**의 모델 속성이 모두 변경되어 버립니다. 작업 과정에서 원래 모델의 특성이 필요할 때는 또다시 수정해야 하므로 불편합니다. [chunk_id] | Guides:461:1
[task] | knowledge_list [title] | 모델의 활용 [category] | Guides [rephrased] | 제시된 문서 내용만을 바탕으로 추출한 핵심 사실 목록입니다. * 엔티티 생성 시 주로 `Preset List`의 모델을 활용하며, `Preset List`의 모델은 기본적으로 `NativeModel`의 특성을 물려받습니다. * `Preset List`의 모델 속성을 변경하려면 `NativeModel`을 수정해야 하며, `NativeModel`의 속성을 변경하면 해당 `NativeModel`에서 확장된 `Preset List`의 모델 속성이 모두 변경됩니다. * `NativeModel`을 수정하지 않고도 `Preset L [original] | 엔티티를 생성할 때는 주로 **Preset List**의 모델을 활용합니다. **Preset List**의 모델은 기본적으로 **NativeModel**의 특성을 물려받습니다. 그래서 **Preset List**의 모델 속성을 변경하려면 **NativeModel**을 수정해야 합니다. 하지만 **NativeModel**의 속성을 변경하면 해당 **NativeModel**에서 확장된 **Preset List**의 모델 속성이 모두 변경되어 버립니다. 작업 과정에서 원래 모델의 특성이 필요할 때는 또다시 수정해야 하므로 불편합니다. [chunk_id] | Guides:461:1
[task] | wikipedia [title] | 모델의 활용 [category] | Guides [rephrased] | # 학습 과정 소개 본 가이드는 메이플스토리 월드(MapleStory Worlds) 개발 환경에서 모델을 활용하는 방법에 대한 개념적 이해를 돕기 위해 마련되었습니다. 주요 내용은 모델의 확장 및 생성 방법, 그리고 모델 프로퍼티의 편집 기법입니다. 본 과정을 진행하기 전에 [모델](https://mod-developers.nexon.com/docs?postId=55) 관련 가이드를 사전에 숙지하는 것이 권장됩니다. # 모델 확장 모델은 기존에 보유하던 속성, 즉 동일한 컴포넌트와 프로퍼티 값을 물려받아 확장 모델을 생성할 수 [original] | # 학습 과정 소개 이번 과정에서는 모델 확장과 모델 생성 방법, 그리고 모델 프로퍼티의 편집 방법을 알아봅니다. 본 과정을 진행하기 전에 [모델](https://mod-developers.nexon.com/docs?postId=55) 가이드를 먼저 살펴보면 도움이 됩니다. # 모델 확장 **모델**은 자신이 갖고 있던 속성, 즉 같은 컴포넌트와 프로퍼티 값을 물려받은 확장 모델을 생성할 수 있습니다. 얼핏 복사와 개념이 비슷한 것 같지만 복사와는 다릅니다. * **복사** * 원본 모델과 복사된 모델이 독립적으로 존 [chunk_id] | Guides:461:0
[task] | knowledge_list [title] | 모델의 활용 [category] | Guides [rephrased] | 제시된 원문에는 `mLua` 스크립트 언어의 구체적인 API 함수명, 매개변수, 반환 타입, 또는 서버/클라이언트 실행 공간 제약 사항이 포함되어 있지 않습니다. 원문은 모델(NativeModel, Preset)의 계층 구조, 모델 프로퍼티의 정의 및 편집 UI 조작법에 대한 설명만 담고 있습니다. 따라서 원문에 명시된 사실만 바탕으로 핵심 사항을 다음과 같이 정리합니다. 1. `Preset List`에서 제공하는 `Preset`은 모델이며, `NativeModel`에서 확장되어 생성됩니다. 2. `Preset List`의 모델 [original] | 모델을 통해 엔티티를 생성할 수 있으며, **Preset List**에서 제공하는 **Preset**도 결국 모델이라는 것을 [Model](/docs?postId=55) 가이드를 통해 배웠습니다. **Preset List**의 모델은 **NativeModel**에서 확장되었기 때문에 **Preset List** 카테고리 단위로 **NativeModel**의 속성을 물려받습니다. 따라서 각 카테고리에 해당하는 **NativeModel**을 변경하면 **Preset List**의 모델에도 변화가 생깁니다. 예를 들어 **Preset [chunk_id] | Guides:461:2
[task] | wikipedia [title] | 모델의 활용 [category] | Guides [rephrased] | # 개념 이해: 모델의 활용 메이플스토리 월드(MapleStory Worlds, 이하 MSW)에서 엔티티를 생성할 때 주로 **Preset List**에 포함된 모델을 사용합니다. **Preset List**의 모델은 기본적으로 **NativeModel**의 특성을 상속받습니다. 따라서 **Preset List** 내 모델의 속성을 변경하려면 원본인 **NativeModel**을 직접 수정해야 합니다. 하지만 **NativeModel**의 속성을 변경하면, 해당 **NativeModel**을 기반으로 확장된 모든 **Preset [original] | 엔티티를 생성할 때는 주로 **Preset List**의 모델을 활용합니다. **Preset List**의 모델은 기본적으로 **NativeModel**의 특성을 물려받습니다. 그래서 **Preset List**의 모델 속성을 변경하려면 **NativeModel**을 수정해야 합니다. 하지만 **NativeModel**의 속성을 변경하면 해당 **NativeModel**에서 확장된 **Preset List**의 모델 속성이 모두 변경되어 버립니다. 작업 과정에서 원래 모델의 특성이 필요할 때는 또다시 수정해야 하므로 불편합니다. [chunk_id] | Guides:461:1
[task] | distill [title] | 인내의 숲 만들기 [category] | Guides [rephrased] | # 인내의 숲 제작 가이드 점프를 이용해 발판을 넘어 목적지로 도달하는 '인내의 숲' 게임을 메이플스토리 월드에서 구현합니다. 배경, 타일, 엔티티(NPC, 풋홀드) 배치를 통해 기본 맵을 구성하고, 개인적인 아이디어(어두운 배경, NPC 배치 등)로 차별화할 수 있습니다. ## 1. 배경 설정 * **Preset List - Background**에서 원하는 배경(예: `back-56`)을 선택합니다. * 선택 시 **Scene** 뷰에 배경이 적용됩니다. ## 2. 타일(Tile) 배치 캐릭터가 이동할 수 있는 바닥 [original] | # 학습 과정 소개 "인내의 숲"을 알고 계신가요? 인내의 숲을 검색해보면 많은 모험가들의 이야기를 찾아볼 수 있습니다. $$youtube HXMM4Vbx8aA $$ 인내의 숲은 점프를 이용해 발판을 넘어가며 목적지로 올라가는 게임입니다. 여러분은 인내의 숲을 보다 재미있게 만들 수 있는 색다른 아이디어를 갖고 있을지도 모릅니다. * 기존 인내의 숲은 너무 쉬운데? * 이렇게 하면 더 재미있을 것 같아. * 순위를 매기면 더 재미있지 않을까? * 서로 공격할 수 있으면 좋겠어. 메이플스토리 월드에서 이러한 아이디어를 현실화할 [chunk_id] | Guides:464:0
[task] | distill [title] | 인내의 숲 만들기 [category] | Guides [rephrased] | # 인내의 숲 만들기 (함정·스폰·속성 설정) 본 가이드는 맵에 함정을 배치하고, 시작 위치 및 캐릭터 물리 속성을 조정하는 방법을 설명합니다. ## 1. 원숭이 함정 배치 및 방향 반전 `Preset List - Trap`에서 원숭이 함정을 선택합니다. 기본 동작은 오른쪽에서 왼쪽으로 바나나를 던지는 것입니다. **방향 반전 (오른쪽에서 왼쪽 → 왼쪽에서 오른쪽):** 원숭이 함정 엔티티를 선택한 후, `SpriteRendererComponent`의 `FlipX` 프로퍼티를 `true`로 설정합니다. ```lua -- 프로 [original] | 이번에는 캐릭터를 공격하는 함정을 곳곳에 설치하여 게임의 난이도를 올려보겠습니다. 1. **Preset List - Trap**에서 원숭이 함정을 선택합니다. 이 함정은 바나나를 던져 캐릭터를 공격합니다. 맵 곳곳에 추가 타일과 원숭이 함정을 배치합니다. 2. 원숭이 함정은 기본적으로 오른쪽에서 왼쪽으로 바나나를 던지기 때문에, 캐릭터의 오른쪽에 오도록 배치할 수밖에 없습니다. 바나나를 왼쪽에서 오른쪽으로 던지도록 수정해 봅시다. 원숭이 함정을 다음과 같이 왼쪽에 배치합니다. 원숭이 함정을 선택하고 **프로퍼티 에디터 [chunk_id] | Guides:464:1
[task] | extract_knowledge [title] | Hierarchy [category] | Guides [rephrased] | # Hierarchy 탭을 이용한 엔티티 계층 구조 관리 ## 개념 설명 **Hierarchy** 탭은 메이플스토리 월드에서 제작 중인 게임의 엔티티(Entity)를 **부모-자식(Hierarchy)** 계층 구조로 시각화하고 관리하는 패널입니다. 복잡한 맵에서 특정 엔티티를 탐색하거나, 다수의 엔티티를 그룹화하여 일괄 조작할 때 사용하며, 게임의 구조적 구성을 파악하는 데 핵심적인 역할을 합니다. ### 기본 계층 구조 최상위 노드는 **World**이며, 그 아래에 기본 엔트리가 다음과 같이 배치되어 있습니다. | 노드 [original] | # 학습 과정 소개 **Hierarchy** 탭을 이용해 제작 현황을 확인하고, 제작 능률을 높일 수 있습니다. # Hierarchy 소개 **Hierarchy** 탭은 제작 중인 게임 현황을 **계층 구조(부모-자식)**로 볼 수 있는 패널입니다. 복잡하게 구성한 맵에서 원하는 엔티티를 빠르게 찾을 때 사용하거나, 체계적으로 엔티티를 관리할 때 사용합니다. 가장 상위인 **World** 계층 아래에 **common**, **maps**, **ui** 엔트리가 있으며 **maps**와 **ui** 엔트리는 각자 기본 하위 엔트 [chunk_id] | Guides:453:0
[task] | knowledge_list [title] | 인내의 숲 만들기 [category] | Guides [rephrased] | ```lua -- 이 블록은 문서의 핵심 사실을 코드 주석 형태로 정리한 것입니다. -- 실제 실행 가능한 스크립트가 아니라, 문서 기반 기술 문서화 목적입니다. --[[ 1. [Preset List - Trap]의 원숭이 함정은 캐릭터를 공격하기 위해 바나나를 던지는 함정이며, 기본적으로 오른쪽에서 왼쪽 방향으로 바나나를 발사합니다. 2. 원숭이 함정의 발사 방향을 왼쪽에서 오른쪽으로 변경하려면, 해당 엔티티를 선택하여 [프로퍼티 에디터]의 [SpriteRendererComponent] 내 [FlipX] 체크박스를 활성화(체크) [original] | 이번에는 캐릭터를 공격하는 함정을 곳곳에 설치하여 게임의 난이도를 올려보겠습니다. 1. **Preset List - Trap**에서 원숭이 함정을 선택합니다. 이 함정은 바나나를 던져 캐릭터를 공격합니다. 맵 곳곳에 추가 타일과 원숭이 함정을 배치합니다. 2. 원숭이 함정은 기본적으로 오른쪽에서 왼쪽으로 바나나를 던지기 때문에, 캐릭터의 오른쪽에 오도록 배치할 수밖에 없습니다. 바나나를 왼쪽에서 오른쪽으로 던지도록 수정해 봅시다. 원숭이 함정을 다음과 같이 왼쪽에 배치합니다. 원숭이 함정을 선택하고 **프로퍼티 에디터 [chunk_id] | Guides:464:1
[task] | diverse_qa [title] | 모델의 활용 [category] | Guides [rephrased] | 질문: Preset List에서 제공하는 Preset의 본질적인 정체성은 무엇입니까? 답변: Preset List에서 제공하는 Preset도 결국 모델입니다. 질문: Preset List의 모델은 어떤 모델에서 확장되었습니까? 답변: Preset List의 모델은 NativeModel에서 확장되었습니다. 질문: Preset List 카테고리 단위로 NativeModel의 속성을 물려받는다는 것은 어떤 결과를 초래합니까? 답변: 각 카테고리에 해당하는 NativeModel을 변경하면 Preset List의 모델에도 변화가 생깁니다 [original] | 모델을 통해 엔티티를 생성할 수 있으며, **Preset List**에서 제공하는 **Preset**도 결국 모델이라는 것을 [Model](/docs?postId=55) 가이드를 통해 배웠습니다. **Preset List**의 모델은 **NativeModel**에서 확장되었기 때문에 **Preset List** 카테고리 단위로 **NativeModel**의 속성을 물려받습니다. 따라서 각 카테고리에 해당하는 **NativeModel**을 변경하면 **Preset List**의 모델에도 변화가 생깁니다. 예를 들어 **Preset [chunk_id] | Guides:461:2
[task] | extract_knowledge [title] | 모델의 활용 [category] | Guides [rephrased] | # 모델 확장 (Model Extension) ## 1. 개념 설명 **모델 확장**은 기존 모델(기반 모델)의 컴포넌트와 프로퍼티 값을 물려받아 새로운 모델을 생성하는 방식입니다. 단순 복사(Copy)와 달리, 기반 모델과 확장 모델 간의 관계가 유지되어 기반 모델의 변경 사항이 확장 모델에 반영됩니다. * **복사(Copy)와의 차이**: * **복사**: 원본과 복사본이 독립적으로 존재하며, 속성 수정 시 서로 영향을 주지 않음. * **확장**: 기반 모델의 속성 변경 시 확장 모델에도 자동 적용 [original] | # 학습 과정 소개 이번 과정에서는 모델 확장과 모델 생성 방법, 그리고 모델 프로퍼티의 편집 방법을 알아봅니다. 본 과정을 진행하기 전에 [모델](https://mod-developers.nexon.com/docs?postId=55) 가이드를 먼저 살펴보면 도움이 됩니다. # 모델 확장 **모델**은 자신이 갖고 있던 속성, 즉 같은 컴포넌트와 프로퍼티 값을 물려받은 확장 모델을 생성할 수 있습니다. 얼핏 복사와 개념이 비슷한 것 같지만 복사와는 다릅니다. * **복사** * 원본 모델과 복사된 모델이 독립적으로 존 [chunk_id] | Guides:461:0