[task] | extract_knowledge [title] | 엔티티와 컴포넌트 참조 [category] | Guides [rephrased] | # 엔티티 조회: 경로 기반 서비스 메서드 mLua 스크립트에서 특정 엔티티에 접근하기 위해서는 `_EntityService`를 사용하여 엔티티의 월드 경로(World Path)를 기준으로 조회합니다. 엔티티 경로는 `/maps/`로 시작하여 하위 엔티티 이름을 순서대로 나열한 문자열입니다. 예를 들어 `map01` 맵 안에 `object_1` 엔티티가 있다면 그 경로는 `"/maps/map01/object_1"`이 됩니다. ## 1. GetEntityByPath() `_EntityService:GetEntityByPath(w [original] | 찾으려는 엔티티 경로(Path)를 매개 변수로 넘겨주면, 해당 경로의 엔티티를 반환하는 함수입니다. 가장 보편적으로 사용되는 함수입니다. * **매개 변수** | Parameter | Type | Description | | --- | --- | --- | | worldPath | string | 얻고자 하는 엔티티 경로를 넣어줍니다. 경로는 /maps/부터 시작해서 하위 엔티티들을 입력합니다. 예를 들어 다음과 같은 계층 구조에서 "object_1"의 경로는 다음과 같습니다. "/maps/map01 [chunk_id] | Guides:164:2
[task] | distill [title] | 엔티티와 컴포넌트 참조 [category] | Guides [rephrased] | # 엔티티와 컴포넌트 참조 컴포넌트는 엔티티를 통해 접근해야 하며, 일반적 접근 식은 `Entity.컴포넌트명` 입니다. 네이티브 컴포넌트는 스크립트 에디터에서 자동 완성됩니다. ### 접근 예시 ```lua [client only] void OnBeginPlay() { local myPlayerEntity = _UserService.LocalPlayer local rigidbody = myPlayerEntity.RigidbodyComponent if rigidbody == nil then [original] | 컴포넌트는 엔티티를 작동시키는 구성품입니다. 그러므로 반드시 엔티티를 통해 컴포넌트로 접근해야 합니다. 일반적으로 **Entity.컴포넌트 명** 형태로 컴포넌트에 접근할 수 있습니다. 네이티브 컴포넌트는 스크립트 에디터에서 컴포넌트 명이 자동 완성됩니다. 다음은 내 플레이어 엔티티의 **RigidbodyComponent**에 접근하는 예시 코드입니다. ```lua [client only] void OnBeginPlay() { local myPlayerEntity = _UserService.LocalPlayer [chunk_id] | Guides:164:5
[task] | wikipedia [title] | 엔티티와 컴포넌트 참조 [category] | Guides [rephrased] | # 엔티티와 컴포넌트 참조 ## 엔티티 ID를 이용한 참조 `GetEntity` 함수는 매개변수로 엔티티 ID를 전달받아 해당 ID를 가진 엔티티를 반환합니다. 엔티티의 계층 구조가 동적으로 변경되거나 엔티티 이름 변경으로 인해 경로가 변할 가능성이 있는 경우, 유니크한 ID를 사용하여 엔티티를 조회하는 것이 효율적입니다. `GetEntity` 함수는 `string` 타입의 `ID` 매개변수를 취하며, 이는 조회하고자 하는 엔티티의 ID를 의미합니다. 엔티티의 ID는 엔티티의 컨텍스트 메뉴에서 **Copy Entity ID** [original] | 매개 변수로 엔티티 ID를 넘겨주면 해당 ID의 엔티티를 반환하는 함수입니다. 엔티티의 계층 구조가 동적으로 변경되거나 엔티티의 이름이 바뀌면서 경로가 변경될 여지가 있으면, 유니크한 ID를 이용해 엔티티를 받아올 수 있는 GetEntity를 사용하는 것이 효율적입니다. * **매개 변수** | Parameter | Type | Description | | --- | --- | --- | | ID | string | 얻고자 하는 엔티티 ID를 넣어줍니다. 엔티티의 콘텍스트 메뉴에서 **Copy Entity I [chunk_id] | Guides:164:3
[task] | wikipedia [title] | 엔티티와 컴포넌트 참조 [category] | Guides [rephrased] | `Entity:GetFirstChildComponentByTypeName(string typename, bool recursive)` 메서드는 엔티티의 하위 엔티티들을 순회하며, 지정된 이름과 일치하는 컴포넌트를 가진 첫 번째 엔티티의 해당 컴포넌트를 반환합니다. 이 메서드는 두 개의 매개 변수를 받습니다. 첫 번째 매개 변수인 `typename`은 string 타입으로, 검색하고자 하는 컴포넌트의 이름을 지정합니다. 두 번째 매개 변수인 `recursive`는 bool 타입으로, 검색 범위를 결정합니다. `true`로 설정하면 하 [original] | > **Component Entity:GetFirstChildComponentByTypeName(string typename, bool recursive)** > 하위 엔티티들을 순회하면서 하위 엔티티에 typename과 일치하는 컴포넌트가 있으면, 해당 컴포넌트를 반환합니다. > * **매개 변수** > > | Parameter | Type | Description | > | --- | --- | --- | > | typename | string | 찾고자 하는 컴포넌트의 이름을 입력합니다. | > [chunk_id] | Guides:164:6
[task] | wikipedia [title] | 엔티티와 컴포넌트 참조 [category] | Guides [rephrased] | # 엔티티와 컴포넌트 참조 mLua 스크립트에서 엔티티를 참조하기 위해 `_EntityService`는 특정 경로를 기반으로 엔티티를 검색하는 두 가지 주요 함수를 제공합니다. 이 섹션에서는 `GetEntityByPath()`와 `GetEntitiesByPath()` 함수의 동작 방식, 매개 변수, 반환 값, 그리고 사용 예시를 설명합니다. ## GetEntityByPath() `GetEntityByPath()`는 찾으려는 엔티티의 경로(Path)를 매개 변수로 전달받아, 해당 경로에 해당하는 단 하나의 엔티티를 반환하는 함수 [original] | 찾으려는 엔티티 경로(Path)를 매개 변수로 넘겨주면, 해당 경로의 엔티티를 반환하는 함수입니다. 가장 보편적으로 사용되는 함수입니다. * **매개 변수** | Parameter | Type | Description | | --- | --- | --- | | worldPath | string | 얻고자 하는 엔티티 경로를 넣어줍니다. 경로는 /maps/부터 시작해서 하위 엔티티들을 입력합니다. 예를 들어 다음과 같은 계층 구조에서 "object_1"의 경로는 다음과 같습니다. "/maps/map01 [chunk_id] | Guides:164:2
[task] | diverse_qa [title] | 엔티티와 컴포넌트 참조 [category] | Guides [rephrased] | 질문: `_UserService.UserEntities` 프로퍼티는 어떤 형태의 데이터를 반환하며, 그 Key와 Value는 각각 무엇인가요? 답변: `_UserService.UserEntities`는 게임에 접속해 있는 모든 플레이어 엔티티를 딕셔너리 형태로 받아오는 읽기 전용 프로퍼티이며, Key는 string 타입의 UserId이고 Value는 Entity 타입의 PlayerEntity입니다. 질문: `_UserService.UserEntities` 딕셔너리의 Key인 UserId는 어떻게 생성되며, 플레이어 엔티티의 이름과 [original] | 게임에 접속해 있는 모든 플레이어 엔티티를 딕셔너리 형태로 받아오는 읽기 전용 프로퍼티입니다. * Key: string UserId * Value: Entity PlayerEntity key 값인 UserId는 유저가 메이플스토리 월드에 가입 시 생성한 Id로 UserId와 플레이어 엔티티의 이름을 동일하게 사용하고 있습니다. ```lua void PrintUserEntitiesName() { log(_UserService:GetUserCount()) local playerEntitiesDic = _UserServi [chunk_id] | Guides:164:4
[task] | diverse_qa [title] | 엔티티와 컴포넌트 참조 [category] | Guides [rephrased] | 질문: `_EntityService:GetEntity` 함수는 어떤 매개 변수를 요구하며, 이 함수의 주요 용도는 무엇인가요? 답변: `_EntityService:GetEntity` 함수는 `string` 타입의 엔티티 ID를 매개 변수로 요구하며, 해당 ID에 해당하는 엔티티 객체를 반환합니다. 이는 엔티티의 계층 구조나 이름이 변경되어 경로가 변할 수 있는 경우, 유니크한 ID를 통해 안정적으로 엔티티를 참조할 때 효율적입니다. 질문: 엔티티의 ID를 스크립트 외부에서 얻는 가장 간단한 방법은 무엇인가요? 답변: 엔티티의 콘텍 [original] | 매개 변수로 엔티티 ID를 넘겨주면 해당 ID의 엔티티를 반환하는 함수입니다. 엔티티의 계층 구조가 동적으로 변경되거나 엔티티의 이름이 바뀌면서 경로가 변경될 여지가 있으면, 유니크한 ID를 이용해 엔티티를 받아올 수 있는 GetEntity를 사용하는 것이 효율적입니다. * **매개 변수** | Parameter | Type | Description | | --- | --- | --- | | ID | string | 얻고자 하는 엔티티 ID를 넣어줍니다. 엔티티의 콘텍스트 메뉴에서 **Copy Entity I [chunk_id] | Guides:164:3
[task] | distill [title] | 함수 [category] | Guides [rephrased] | # 스크립트 이해: 함수 메이플스토리 월드의 **메소드(함수)**는 객체지향 프로그래밍에서 특정 액션을 수행하는 코드 집합입니다. 호출 주체에 따라 **기본 이벤트 메소드**와 **사용자 지정 메소드**로 구분됩니다. | 구분 | 특징 | | :--- | :--- | | **기본 이벤트 메소드** | - 게임 시작, 플레이 중, 종료 등 특정 시점에 시스템이 자동 호출<br>- 이름, 리턴 타입, 매개변수 설정 불가<br>- 모든 동작의 진입점<br>- 다른 사용자 지정 함수에서 호출 불가 | | **사용자 지정 메소드** | [original] | # 학습 과정 소개 함수에 대한 간략한 소개와 함께 함수의 선언과 정의, 호출에 대해 알아봅니다. # 메소드 소개 **컴포넌트**는 기본적으로 **프로퍼티**와 **메소드**로 구성됩니다. 그중 함수는 객체지향 프로그래밍에서 사용되는 용어로, 특정 액션을 수행하기 위한 코드들의 집합체라 할 수 있습니다. 메이플스토리 월드의 함수는 함수의 호출 주체가 누구냐에 따라 **기본 이벤트 메소드**와 **사용자 지정 메소드**로 나눌 수 있습니다. 기본 이벤트 함수는 게임 시작, 플레이 중, 게임 종료 시 등 특정 이벤트가 발생했을 때 [chunk_id] | Guides:172:0
[task] | extract_knowledge [title] | 엔티티와 컴포넌트 참조 [category] | Guides [rephrased] | # 엔티티 참조: ID 기반 조회 및 고유 엔티티 접근 mLua 환경에서는 계층 구조의 동적 변경이나 이름 변경에 영향을 받지 않고 엔티티를 안정적으로 참조하기 위해 유니크한 ID를 사용하거나, 게임 내 단일 인스턴스로 존재하는 고유 엔티티(world, map)를 직접 참조하는 방법이 제공된다. ## 1. ID를 이용한 엔티티 조회 (`_EntityService:GetEntity`) 엔티티의 계층 구조가 바뀌거나 이름이 변경되어 경로가 변할 경우, 유니크한 ID를 매개변수로 전달하여 엔티티를 반환받는 `_EntityServic [original] | 매개 변수로 엔티티 ID를 넘겨주면 해당 ID의 엔티티를 반환하는 함수입니다. 엔티티의 계층 구조가 동적으로 변경되거나 엔티티의 이름이 바뀌면서 경로가 변경될 여지가 있으면, 유니크한 ID를 이용해 엔티티를 받아올 수 있는 GetEntity를 사용하는 것이 효율적입니다. * **매개 변수** | Parameter | Type | Description | | --- | --- | --- | | ID | string | 얻고자 하는 엔티티 ID를 넣어줍니다. 엔티티의 콘텍스트 메뉴에서 **Copy Entity I [chunk_id] | Guides:164:3
[task] | distill [title] | 함수 [category] | Guides [rephrased] | ### 메소드 호출 규칙 메소드는 **`객체:메소드명(매개변수)`** 형식으로 호출합니다. #### 1. 동일 컴포넌트 내 메소드 현재 컴포넌트를 가리키는 `self`를 사용합니다. ```lua void OnBeginPlay() { self:MethodPractice("MethodCallTest") } void MethodPractice(string parameter) { log(parameter) } ``` #### 2. 다른 컴포넌트 또는 서비스 엔티티를 통해 다른 컴포넌트 객체를 참조하거나, 언더스코어(` [original] | 메소드 내부에서는 다른 메소드를 호출해서 다른 함수의 기능을 작동시킬 수 있습니다. 기본적으로 메소드는 **컴포넌트 객체(또는 서비스):메소드명(매개 변수)** 형식으로 호출합니다. #### 동일한 컴포넌트 내 메소드 호출 시 동일 컴포넌트의 메소드를 호출할 때는 다음과 같이 **self:메소드명(매개 변수)** 형식으로 호출합니다. (**self**는 현재 작동 중인 메소드를 포함하고 있는 컴포넌트 객체를 의미합니다.) ```lua --개념 이해를 돕기 위한 코드로, 컴포넌트에 적용 시 정상적으로 동작하지 않을 수 있습니다. [chunk_id] | Guides:172:1
[task] | diverse_qa [title] | 엔티티와 컴포넌트 참조 [category] | Guides [rephrased] | 질문: `Entity:GetFirstChildComponentByTypeName` 메서드의 주요 기능은 무엇인가요? 답변: 하위 엔티티들을 순회하면서, 매개변수로 주어진 typename과 일치하는 컴포넌트가 있는 첫 번째 하위 엔티티의 해당 컴포넌트를 반환하는 기능입니다. 질문: `GetFirstChildComponentByTypeName` 메서드의 첫 번째 매개변수 `typename`의 타입과 역할은 무엇인가요? 답변: 타입은 `string`이며, 찾고자 하는 컴포넌트의 이름을 입력하는 역할을 합니다. 질문: `GetFirst [original] | > **Component Entity:GetFirstChildComponentByTypeName(string typename, bool recursive)** > 하위 엔티티들을 순회하면서 하위 엔티티에 typename과 일치하는 컴포넌트가 있으면, 해당 컴포넌트를 반환합니다. > * **매개 변수** > > | Parameter | Type | Description | > | --- | --- | --- | > | typename | string | 찾고자 하는 컴포넌트의 이름을 입력합니다. | > [chunk_id] | Guides:164:6
[task] | wikipedia [title] | 엔티티와 컴포넌트 참조 [category] | Guides [rephrased] | # 엔티티와 컴포넌트 참조 메이플스토리 월드(mLua)에서 컴포넌트는 엔티티를 작동시키는 기본 구성 요소입니다. 따라서 컴포넌트는 반드시 엔티티를 매개로 하여 접근해야 하며, 직접 독립적으로 호출할 수 없습니다. 일반적인 접근 문법은 `Entity.컴포넌트명` 형태를 따릅니다. 예를 들어, 특정 엔티티의 물리 엔진 관련 기능을 제어하기 위해 `RigidbodyComponent`에 접근하는 경우, 해당 엔티티 객체에 점을 찍고 컴포넌트 이름을 붙여 사용하게 됩니다. 네이티브 컴포넌트는 스크립트 에디터에서 컴포넌트 이름이 자동 완성 [original] | 컴포넌트는 엔티티를 작동시키는 구성품입니다. 그러므로 반드시 엔티티를 통해 컴포넌트로 접근해야 합니다. 일반적으로 **Entity.컴포넌트 명** 형태로 컴포넌트에 접근할 수 있습니다. 네이티브 컴포넌트는 스크립트 에디터에서 컴포넌트 명이 자동 완성됩니다. 다음은 내 플레이어 엔티티의 **RigidbodyComponent**에 접근하는 예시 코드입니다. ```lua [client only] void OnBeginPlay() { local myPlayerEntity = _UserService.LocalPlayer [chunk_id] | Guides:164:5
[task] | extract_knowledge [title] | 엔티티와 컴포넌트 참조 [category] | Guides [rephrased] | # `Entity:GetFirstChildComponentByTypeName` ## 개념 설명 `Entity:GetFirstChildComponentByTypeName` 메서드는 현재 엔티티의 하위 엔티티들을 순회하며, 지정된 이름(`typename`)과 일치하는 컴포넌트를 찾습니다. 찾은 컴포넌트가 있으면 해당 컴포넌트를 반환하며, 없으면 반환 값이 없습니다. 이 메서드는 특정 이름을 가진 컴포넌트가 포함된 하위 엔티티를 효율적으로 찾는 데 사용됩니다. ## API 사용법 **메서드 시그니처** ```lua Component [original] | > **Component Entity:GetFirstChildComponentByTypeName(string typename, bool recursive)** > 하위 엔티티들을 순회하면서 하위 엔티티에 typename과 일치하는 컴포넌트가 있으면, 해당 컴포넌트를 반환합니다. > * **매개 변수** > > | Parameter | Type | Description | > | --- | --- | --- | > | typename | string | 찾고자 하는 컴포넌트의 이름을 입력합니다. | > [chunk_id] | Guides:164:6
[task] | wikipedia [title] | 엔티티와 컴포넌트 참조 [category] | Guides [rephrased] | # _UserService API 및 엔티티-컴포넌트 상호작용 메이플스토리 월드 스크립트 환경에서 사용자 관리와 엔티티 제어는 `_UserService` 서비스와 컴포넌트 접근 방식을 통해 이루어집니다. 본 섹션에서는 게임에 접속한 플레이어 엔티티를 조회하고 관리하는 핵심 프로퍼티 및 메서드, 그리고 게임 실행 중 컴포넌트의 동적 제어를 위한 접근 방식을 설명합니다. ## 1. _UserService.UserEntities `_UserService.UserEntities`는 현재 게임에 접속해 있는 모든 플레이어 엔티티를 딕셔 [original] | 게임에 접속해 있는 모든 플레이어 엔티티를 딕셔너리 형태로 받아오는 읽기 전용 프로퍼티입니다. * Key: string UserId * Value: Entity PlayerEntity key 값인 UserId는 유저가 메이플스토리 월드에 가입 시 생성한 Id로 UserId와 플레이어 엔티티의 이름을 동일하게 사용하고 있습니다. ```lua void PrintUserEntitiesName() { log(_UserService:GetUserCount()) local playerEntitiesDic = _UserServi [chunk_id] | Guides:164:4
[task] | distill [title] | 엔티티의 충돌 [category] | Guides [rephrased] | # 충돌 엔티티의 충돌 **충돌**은 충돌체를 포함하는 엔티티의 충돌 영역이 교차하는 것입니다. 엔티티에 `TriggerComponent`(충돌 범위) 또는 `HitComponent`(피격 범위)를 추가하면 충돌체가 자동 생성됩니다. ## 충돌체 편집 - **활성화**: 프로퍼티 에디터의 `[Edit]` 버튼 클릭 시 충돌 영역이 초록색으로 변하며 편집 가능 상태가 됩니다. - **속성 수정**: 크기는 포인트 드래그로, 위치는 `ColliderOffset` 드래그로 설정합니다. ## ColliderType 충돌체 형태는 세 [original] | # 학습 과정 소개 충돌 이벤트와 충돌 처리 방법에 대해 알아봅시다. ##### 참고 가이드 [Event System](https://mod-developers.nexon.com/docs?postId=73) [Entity Event System](https://mod-developers.nexon.com/docs?postId=176) # 충돌 **충돌**이란 충돌체를 포함하는 엔티티'의 충돌 영역이 서로 교차하는 것을 말합니다. 엔티티에 [TriggerComponent](/apiReference/Components/Trigge [chunk_id] | Guides:175:0
[task] | diverse_qa [title] | 엔티티와 컴포넌트 참조 [category] | Guides [rephrased] | 질문: 컴포넌트에 접근하기 위해 반드시 필요한 전제 조건은 무엇인가요? 답변: 컴포넌트는 엔티티를 작동시키는 구성품이므로, 반드시 엔티티를 통해 컴포넌트로 접근해야 합니다. 질문: 일반적으로 엔티티의 특정 컴포넌트에 접근하는 문법 형태는 무엇인가요? 답변: 일반적으로 **Entity.컴포넌트 명** 형태로 컴포넌트에 접근할 수 있습니다. 질문: 네이티브 컴포넌트 이름은 어떻게 확인하거나 입력할 수 있나요? 답변: 네이티브 컴포넌트는 스크립트 에디터에서 컴포넌트 명이 자동 완성되므로 이를 통해 확인하거나 입력할 수 있습니다. 질 [original] | 컴포넌트는 엔티티를 작동시키는 구성품입니다. 그러므로 반드시 엔티티를 통해 컴포넌트로 접근해야 합니다. 일반적으로 **Entity.컴포넌트 명** 형태로 컴포넌트에 접근할 수 있습니다. 네이티브 컴포넌트는 스크립트 에디터에서 컴포넌트 명이 자동 완성됩니다. 다음은 내 플레이어 엔티티의 **RigidbodyComponent**에 접근하는 예시 코드입니다. ```lua [client only] void OnBeginPlay() { local myPlayerEntity = _UserService.LocalPlayer [chunk_id] | Guides:164:5
[task] | knowledge_list [title] | 엔티티의 충돌 [category] | Guides [rephrased] | 제시된 문서 내용에만 기반하여 추출한 핵심 사실 목록입니다. 1. 충돌은 충돌체를 포함하는 엔티티의 충돌 영역이 서로 교차하는 것을 의미하며, 엔티티에 `TriggerComponent` 또는 `HitComponent`를 추가하면 충돌체가 자동 생성됩니다. 2. 충돌체의 크기, 위치, 형태 등 속성은 `TriggerComponent`와 `HitComponent`의 프로퍼티를 통해 편집할 수 있으며, `TriggerComponent`는 충돌 범위 설정, `HitComponent`는 피격 범위 설정 시 각각 충돌체를 사용합니다. 3. [original] | # 학습 과정 소개 충돌 이벤트와 충돌 처리 방법에 대해 알아봅시다. ##### 참고 가이드 [Event System](https://mod-developers.nexon.com/docs?postId=73) [Entity Event System](https://mod-developers.nexon.com/docs?postId=176) # 충돌 **충돌**이란 충돌체를 포함하는 엔티티'의 충돌 영역이 서로 교차하는 것을 말합니다. 엔티티에 [TriggerComponent](/apiReference/Components/Trigge [chunk_id] | Guides:175:0
[task] | knowledge_list [title] | 함수 [category] | Guides [rephrased] | 1. 메소드 내부에서는 다른 메소드를 호출하여 다른 함수의 기능을 작동시킬 수 있습니다. 2. 메소드는 기본적으로 **컴포넌트 객체(또는 서비스):메소드명(매개 변수)** 형식으로 호출됩니다. 3. 동일한 컴포넌트 내부에서 다른 메소드를 호출할 때는 **self:메소드명(매개 변수)** 형식을 사용합니다. 4. **self**는 현재 작동 중인 메소드를 포함하고 있는 컴포넌트 객체를 의미합니다. 5. 다른 컴포넌트의 메소드를 호출할 때는 **컴포넌트 객체:메소드명(매개 변수)** 형식을 사용합니다. 6. 다른 컴포넌트 객체는 일반적 [original] | 메소드 내부에서는 다른 메소드를 호출해서 다른 함수의 기능을 작동시킬 수 있습니다. 기본적으로 메소드는 **컴포넌트 객체(또는 서비스):메소드명(매개 변수)** 형식으로 호출합니다. #### 동일한 컴포넌트 내 메소드 호출 시 동일 컴포넌트의 메소드를 호출할 때는 다음과 같이 **self:메소드명(매개 변수)** 형식으로 호출합니다. (**self**는 현재 작동 중인 메소드를 포함하고 있는 컴포넌트 객체를 의미합니다.) ```lua --개념 이해를 돕기 위한 코드로, 컴포넌트에 적용 시 정상적으로 동작하지 않을 수 있습니다. [chunk_id] | Guides:172:1
[task] | distill [title] | 엔티티의 충돌 [category] | Guides [rephrased] | `TriggerComponent`는 충돌 이벤트 발생 시 호출되는 함수를 오버라이딩할 수 있습니다. **오버라이딩 가능 함수** * **OnEnterTriggerBody**: 충돌 시작 시 1회 호출 * **OnStayTriggerBody**: 충돌 유지 중 프레임마다 호출 * **OnLeaveTriggerBody**: 충돌 종료 시 1회 호출 **매개 변수** * 충돌 이벤트 객체: 충돌한 상대 엔티티 정보 포함 [original] | 다른 스크립트 컴포넌트와는 달리, 확장된 **TriggerComponent**에는 몇 가지 함수를 오버라이딩할 수 있습니다. 이 함수들은 충돌 이벤트가 발생할 때 호출되는 것입니다. 이 함수를 추가하면 해당 함수의 정의부를 편집하여 오버라이딩할 수 있습니다. 오버라이딩할 수 있는 함수는 총 세 가지입니다. 다음은 함수별 호출 시점입니다. * **OnEnterTriggerBody** :엔티티 간 충돌이 처음 발생했을 때 1회 호출됩니다. * **OnStayTriggerBody**: 엔티티 간 충돌이 발생한 뒤, 두 엔티티가 겹쳐 [chunk_id] | Guides:175:2
[task] | knowledge_list [title] | 엔티티의 충돌 [category] | Guides [rephrased] | * 확장된 **TriggerComponent**는 다른 스크립트 컴포넌트와 달리 충돌 이벤트 발생 시 호출되는 특정 함수들을 오버라이딩할 수 있습니다. * **OnEnterTriggerBody** 함수는 엔티티 간 충돌이 처음 발생했을 때 1회 호출되며, 매개 변수로 충돌 이벤트 객체를 전달받습니다. * **OnStayTriggerBody** 함수는 엔티티 간 충돌이 발생한 뒤 두 엔티티가 겹쳐있는 동안 프레임마다 호출되며, 매개 변수로 충돌 이벤트 객체를 전달받습니다. * **OnLeaveTriggerBody** 함 [original] | 다른 스크립트 컴포넌트와는 달리, 확장된 **TriggerComponent**에는 몇 가지 함수를 오버라이딩할 수 있습니다. 이 함수들은 충돌 이벤트가 발생할 때 호출되는 것입니다. 이 함수를 추가하면 해당 함수의 정의부를 편집하여 오버라이딩할 수 있습니다. 오버라이딩할 수 있는 함수는 총 세 가지입니다. 다음은 함수별 호출 시점입니다. * **OnEnterTriggerBody** :엔티티 간 충돌이 처음 발생했을 때 1회 호출됩니다. * **OnStayTriggerBody**: 엔티티 간 충돌이 발생한 뒤, 두 엔티티가 겹쳐 [chunk_id] | Guides:175:2
[task] | knowledge_list [title] | 함수 [category] | Guides [rephrased] | 제시된 문서 내용에 기반하여 핵심 사실을 추출하고, 요청하신 형식(독립적 문장, API/타입/제약 명시)에 맞게 정리한 목록입니다. **주의:** 원문에 명시되지 않은 구체적인 API 함수명(예: `OnStart`, `OnUpdate` 등 특정 이름), 매개변수의 구체적인 타입 목록, 또는 반환 타입의 세부 동작은 추측하여 작성하지 않았습니다. 원문에 있는 정보만 엄격히 따랐습니다. 1. 컴포넌트는 기본적으로 **프로퍼티**와 **메소드**로 구성되며, 함수는 특정 액션을 수행하기 위한 코드들의 집합체이다. 2. 메이플스토리 월 [original] | # 학습 과정 소개 함수에 대한 간략한 소개와 함께 함수의 선언과 정의, 호출에 대해 알아봅니다. # 메소드 소개 **컴포넌트**는 기본적으로 **프로퍼티**와 **메소드**로 구성됩니다. 그중 함수는 객체지향 프로그래밍에서 사용되는 용어로, 특정 액션을 수행하기 위한 코드들의 집합체라 할 수 있습니다. 메이플스토리 월드의 함수는 함수의 호출 주체가 누구냐에 따라 **기본 이벤트 메소드**와 **사용자 지정 메소드**로 나눌 수 있습니다. 기본 이벤트 함수는 게임 시작, 플레이 중, 게임 종료 시 등 특정 이벤트가 발생했을 때 [chunk_id] | Guides:172:0
[task] | extract_knowledge [title] | 엔티티와 컴포넌트 참조 [category] | Guides [rephrased] | # 엔티티와 컴포넌트 참조 ## 1. 개념 설명 mLua 스크립트에서는 `_UserService` 서비스를 통해 게임에 접속한 플레이어 엔티티와 클라이언트 로컬 플레이어 엔티티를 참조할 수 있습니다. 또한, 엔티티에 포함된 컴포넌트의 프로퍼티를 동적으로 설정하거나 메서드를 호출하여 게임 실행 중 기능을 제어할 수 있습니다. * **UserEntities**: 현재 게임에 접속해 있는 모든 플레이어 엔티티를 `UserId`를 키(Key)로, 플레이어 엔티티를 값(Value)으로 가지는 읽기 전용 딕셔너리입니다. * **L [original] | 게임에 접속해 있는 모든 플레이어 엔티티를 딕셔너리 형태로 받아오는 읽기 전용 프로퍼티입니다. * Key: string UserId * Value: Entity PlayerEntity key 값인 UserId는 유저가 메이플스토리 월드에 가입 시 생성한 Id로 UserId와 플레이어 엔티티의 이름을 동일하게 사용하고 있습니다. ```lua void PrintUserEntitiesName() { log(_UserService:GetUserCount()) local playerEntitiesDic = _UserServi [chunk_id] | Guides:164:4
[task] | extract_knowledge [title] | 함수 [category] | Guides [rephrased] | # mLua 함수(메소드) ## 1. 개념 설명 메이플스토리 월드의 스크립트 컴포넌트는 **프로퍼티**와 **메소드**로 구성됩니다. 여기서 메소드(함수)는 특정 액션을 수행하기 위한 코드 집합체를 의미합니다. 호출 주체에 따라 두 가지 유형으로 나뉩니다. * **기본 이벤트 메소드**: 게임 시작, 플레이 중, 종료 시 등 시스템 내부에서 특정 이벤트 발생 시 자동 호출됩니다. 호출 시점과 함수 이름이 고정되어 있으며, 다른 사용자 지정 함수에서 직접 호출할 수 없습니다. 모든 게임 액션의 진입점 역할을 합니다. * * [original] | # 학습 과정 소개 함수에 대한 간략한 소개와 함께 함수의 선언과 정의, 호출에 대해 알아봅니다. # 메소드 소개 **컴포넌트**는 기본적으로 **프로퍼티**와 **메소드**로 구성됩니다. 그중 함수는 객체지향 프로그래밍에서 사용되는 용어로, 특정 액션을 수행하기 위한 코드들의 집합체라 할 수 있습니다. 메이플스토리 월드의 함수는 함수의 호출 주체가 누구냐에 따라 **기본 이벤트 메소드**와 **사용자 지정 메소드**로 나눌 수 있습니다. 기본 이벤트 함수는 게임 시작, 플레이 중, 게임 종료 시 등 특정 이벤트가 발생했을 때 [chunk_id] | Guides:172:0
[task] | diverse_qa [title] | 함수 [category] | Guides [rephrased] | 질문: mLua에서 메소드를 호출하는 기본 형식은 무엇인가요? 답변: 기본적으로 메소드는 **컴포넌트 객체(또는 서비스):메소드명(매개 변수)** 형식으로 호출합니다. 질문: 동일한 컴포넌트 내에서 다른 메소드를 호출할 때 사용하는 형식은 무엇인가요? 답변: **self:메소드명(매개 변수)** 형식으로 호출합니다. 질문: mLua 코드에서 `self`는 무엇을 의미하나요? 답변: **self**는 현재 작동 중인 메소드를 포함하고 있는 컴포넌트 객체를 의미합니다. 질문: 다른 컴포넌트의 메소드를 호출할 때 일반적으로 해당 컴 [original] | 메소드 내부에서는 다른 메소드를 호출해서 다른 함수의 기능을 작동시킬 수 있습니다. 기본적으로 메소드는 **컴포넌트 객체(또는 서비스):메소드명(매개 변수)** 형식으로 호출합니다. #### 동일한 컴포넌트 내 메소드 호출 시 동일 컴포넌트의 메소드를 호출할 때는 다음과 같이 **self:메소드명(매개 변수)** 형식으로 호출합니다. (**self**는 현재 작동 중인 메소드를 포함하고 있는 컴포넌트 객체를 의미합니다.) ```lua --개념 이해를 돕기 위한 코드로, 컴포넌트에 적용 시 정상적으로 동작하지 않을 수 있습니다. [chunk_id] | Guides:172:1
[task] | wikipedia [title] | 엔티티의 충돌 [category] | Guides [rephrased] | # 충돌 엔티티의 충돌 메이플스토리 월드(MapleStory Worlds)의 mLua 스크립트 환경에서 확장된 `TriggerComponent`는 다른 일반 스크립트 컴포넌트와 달리 충돌 이벤트 발생 시점에 호출되는 특정 함수를 오버라이딩할 수 있는 특성이 있습니다. 개발자는 해당 함수의 정의부를 편집함으로써 충돌 로직을 직접 구현할 수 있으며, 오버라이딩 가능한 함수는 총 세 가지입니다. 첫째, `OnEnterTriggerBody` 함수는 두 엔티티 간의 충돌이 처음 발생했을 때 1회만 호출됩니다. 이는 충돌 시작 시점의 초기 [original] | 다른 스크립트 컴포넌트와는 달리, 확장된 **TriggerComponent**에는 몇 가지 함수를 오버라이딩할 수 있습니다. 이 함수들은 충돌 이벤트가 발생할 때 호출되는 것입니다. 이 함수를 추가하면 해당 함수의 정의부를 편집하여 오버라이딩할 수 있습니다. 오버라이딩할 수 있는 함수는 총 세 가지입니다. 다음은 함수별 호출 시점입니다. * **OnEnterTriggerBody** :엔티티 간 충돌이 처음 발생했을 때 1회 호출됩니다. * **OnStayTriggerBody**: 엔티티 간 충돌이 발생한 뒤, 두 엔티티가 겹쳐 [chunk_id] | Guides:175:2
[task] | wikipedia [title] | 함수 [category] | Guides [rephrased] | # 스크립트 이해: 함수 본 가이드는 메이플스토리 월드(MapleStory Worlds)의 mLua 스크립트 언어에서 함수의 개념, 선언, 정의, 호출 방식 및 매개 변수 처리에 대한 기본 사항을 설명합니다. ## 함수의 분류 메이플스토리 월드의 컴포넌트(Component)는 기본적으로 프로퍼티(Property)와 메소드(Method)로 구성됩니다. 여기서 함수는 객체지향 프로그래밍에서 특정 액션을 수행하기 위한 코드 집합체를 의미합니다. 메이플스토리 월드의 함수는 호출 주체에 따라 **기본 이벤트 메소드**와 **사용자 지정 [original] | # 학습 과정 소개 함수에 대한 간략한 소개와 함께 함수의 선언과 정의, 호출에 대해 알아봅니다. # 메소드 소개 **컴포넌트**는 기본적으로 **프로퍼티**와 **메소드**로 구성됩니다. 그중 함수는 객체지향 프로그래밍에서 사용되는 용어로, 특정 액션을 수행하기 위한 코드들의 집합체라 할 수 있습니다. 메이플스토리 월드의 함수는 함수의 호출 주체가 누구냐에 따라 **기본 이벤트 메소드**와 **사용자 지정 메소드**로 나눌 수 있습니다. 기본 이벤트 함수는 게임 시작, 플레이 중, 게임 종료 시 등 특정 이벤트가 발생했을 때 [chunk_id] | Guides:172:0
[task] | diverse_qa [title] | 엔티티의 충돌 [category] | Guides [rephrased] | 질문: 충돌(Collision)의 정의는 무엇인가요? 답변: 충돌이란 충돌체를 포함하는 엔티티의 충돌 영역이 서로 교차하는 것을 말합니다. 질문: 엔티티에 충돌체를 자동 생성하려면 어떤 컴포넌트를 추가해야 하나요? 답변: TriggerComponent 또는 HitComponent를 추가하면 충돌체가 자동 생성됩니다. 질문: TriggerComponent와 HitComponent는 각각 어떤 범위를 설정할 때 사용하나요? 답변: TriggerComponent는 충돌 범위를 설정할 때, HitComponent는 피격 범위를 설정할 [original] | # 학습 과정 소개 충돌 이벤트와 충돌 처리 방법에 대해 알아봅시다. ##### 참고 가이드 [Event System](https://mod-developers.nexon.com/docs?postId=73) [Entity Event System](https://mod-developers.nexon.com/docs?postId=176) # 충돌 **충돌**이란 충돌체를 포함하는 엔티티'의 충돌 영역이 서로 교차하는 것을 말합니다. 엔티티에 [TriggerComponent](/apiReference/Components/Trigge [chunk_id] | Guides:175:0
[task] | extract_knowledge [title] | 엔티티와 컴포넌트 참조 [category] | Guides [rephrased] | # 엔티티와 컴포넌트 참조 ## 개념 설명 컴포넌트(Component)는 엔티티(Entity)를 작동시키는 구성품입니다. 컴포넌트는 독립적으로 존재하지 않으므로, 반드시 엔티티를 통해 접근해야 합니다. 접근 방식은 네이티브 컴포넌트와 스크립트 컴포넌트 모두 동일하며, `Entity.컴포넌트명` 형태의 점 표기법(dot notation)을 사용합니다. ## API 사용법 ### 1. 기본 접근 방식 엔티티 객체에 특정 컴포넌트의 이름을 붙여 직접 참조합니다. * **네이티브 컴포넌트**: 스크립트 에디터에서 컴포넌트 명이 자 [original] | 컴포넌트는 엔티티를 작동시키는 구성품입니다. 그러므로 반드시 엔티티를 통해 컴포넌트로 접근해야 합니다. 일반적으로 **Entity.컴포넌트 명** 형태로 컴포넌트에 접근할 수 있습니다. 네이티브 컴포넌트는 스크립트 에디터에서 컴포넌트 명이 자동 완성됩니다. 다음은 내 플레이어 엔티티의 **RigidbodyComponent**에 접근하는 예시 코드입니다. ```lua [client only] void OnBeginPlay() { local myPlayerEntity = _UserService.LocalPlayer [chunk_id] | Guides:164:5
[task] | distill [title] | Entity Event System [category] | Guides [rephrased] | # Entity Event System ## 개념 컴포넌트는 엔티티를 중계자로 사용하여 이벤트를 등록하고 발생시킵니다. 기본적으로 자기 자신의 엔티티에 연결하지만, 맵 엔티티와 월드 엔티티 등 다른 엔티티 간에도 이벤트를 주고받을 수 있습니다. ## 이벤트 타입 생성 1. `Workspace - MyDesk` > **Create EventType** 클릭 2. 이름: `SunriseEvent` 3. 스크립트 내 Property 추가: ```lua Property: boolean isSunrise = false ``` ## 컴포 [original] | # 학습 과정 소개 메이플스토리 월드에서는 Entity Event System을 사용해 이벤트를 제어할 수 있습니다. 이번 시간에는 Entity Event System을 이용해 "뱀파이어 vs 헌터"의 게임 요소 중 하나를 만들어봅시다. 다음 가이드를 먼저 학습하면 이번 과정을 이해하는 데 많은 도움이 됩니다. [Event System](https://mod-developers.nexon.com/docs?postId=73) # Entity Event System 이벤트를 받고 보내려면 먼저 Entity Event System을 [chunk_id] | Guides:176:0
[task] | knowledge_list [title] | 엔티티의 충돌 [category] | Guides [rephrased] | 제시된 문서 내용에 기반하여 핵심 사실을 정리한 목록입니다. 1. 충돌 이벤트 발생 후 추가 액션을 수행하기 위해 **Entity Event System**을 활용하거나, **TriggerComponent**를 확장한 컴포넌트를 사용해야 하며, 기본 **TriggerComponent**만으로는 충돌 발생 시 특별한 변화나 액션이 일어나지 않습니다. 2. **Entity Event System** 구조가 작동하려면 충돌할 엔티티에 **TriggerComponent**와 액션을 수행하는 스크립트 컴포넌트(리액터)가 모두 추가되어 있어 [original] | 충돌 이벤트 이후 액션은 **Entity Event System**을 활용하거나, **확장된 TriggerComponent** 활용합니다. 월드에 **TriggerComponent**를 포함하는 A와 B, 두 엔티티가 있다고 가정해 봅시다. A와 B가 부딪히면 충돌 이벤트가 발생합니다. 그러나 이후 특별한 변화가 일어나지 않을 것입니다. 충돌 이벤트 발생을 한 뒤 일어날 추가 액션이 없기 때문입니다. **TriggerComponent**를 활용하면 충돌 이벤트가 발생할 때 일어날 액션을 추가할 수 있습니다. 예를 들어 A와 B가 충 [chunk_id] | Guides:175:1