[task] | extract_knowledge [title] | RoomService를 활용해 룸끼리 통신하기 [category] | Guides [rephrased] | # RoomService를 활용한 룸 유형별 UI 제어 ## 1. 개념 설명 메이플스토리 월드에서 룸(Room)은 크게 **정적 룸(Static Room)**과 **인스턴스 룸(Instance Room)**으로 구분됩니다. 두 룸 유형은 사용자가 경험하는 게임 상태와 인터페이스가 다르므로, 클라이언트 측 로직에서 현재 룸의 유형을 판별하여 적절한 UI 요소를 표시하거나 숨기는 것이 필요합니다. `_RoomService` API를 사용하면 현재 스크립트가 실행 중인 룸이 인스턴스 룸인지 여부를 확인하고, 이에 따라 엔티티의 활성 상 [original] | 1. **Workspace - MyDesk의 콘텍스트 메뉴에서 Create Scripts - Create Logic**을 선택해 새로운 **StaticRoomLogic**을 만듭니다. 2. 새로운 **ButtonEnter** 프로퍼티를 추가하고, 반환 타입을 Entity로 변경합니다. **Btn_Enter**을 연결합니다. ```lua Property: [None] Entity ButtonEnter = /ui/DefaultGroup/Btn_Enter ``` 3. 정적 룸에서만 인스턴스 룸으로 갈 [chunk_id] | Guides:1035:1
[task] | distill [title] | RoomService를 활용해 룸끼리 통신하기 [category] | Guides [rephrased] | # 공유 메모리 활용 (RoomService) 인스턴스 룸에 입장 시 공유 메모리의 데이터를 읽어 UI에 표시하는 로직입니다. ## 1. UI 및 프로퍼티 설정 `DefaultGroup`에 텍스트 UI를 추가하고 이름 `Txt_RoomTitle`로 설정합니다. `InstanceRoomLogic` 컴포넌트에 해당 UI를 연결하는 프로퍼티와 동기화될 제목 문자열 프로퍼티를 추가합니다. ```lua Property: [None] Entity TextRoomTitle = /ui/DefaultGroup/Txt_RoomTitle [Sy [original] | # 공유 메모리 활용 위에서 만든 예제 월드에서 새로운 UI를 추가하고, 해당 인스턴스 룸에 입장했을 때 공유 메모리 내용이 나타나도록 만들어 봅시다. 1. 텍스트 UI를 DefaultGroup에 추가하고 **Txt_RoomTitle** 이름으로 설정합니다. 2. **InstanceRoomLogic**에 새로운 Entity 타입의 **TextRoomTitle** 프로퍼티를 추가합니다. Txt_RoomTitle UI를 연결합니다. ```lua Property: [None] Entity TextRoom [chunk_id] | Guides:1035:6
[task] | diverse_qa [title] | RoomService를 활용해 룸끼리 통신하기 [category] | Guides [rephrased] | 질문: `RoomService`를 활용해 인스턴스 룸의 상태를 정적 룸에 공유하기 위해 먼저 생성해야 하는 이벤트의 이름은 무엇인가요? 답변: `RoomStateChangedEvent`입니다. 질문: `RoomStateChangedEvent`에 추가되는 `IsPlaying` 프로퍼티의 데이터 타입과 초기값은 무엇인가요? 답변: 데이터 타입은 `boolean`이며, 초기값은 `false`입니다. 질문: `InstanceRoomLogic` 스크립트에서 인스턴스 룸이 생성될 때 최초 한 번 수행되는 동작을 트리거하는 이벤트 핸들러의 [original] | 새로운 이벤트를 생성하고, 그 이벤트를 사용해 인스턴스 룸의 상태를 정적 룸에 공유하게 만들어 봅시다. 1. **Workspace - MyDesk의 콘텍스트 메뉴에서 Create Scripts - Create Event**를 선택해 새로운 **RoomStateChangedEvent**를 생성합니다. 2. boolean 타입의 **IsPlaying** 프로퍼티를 추가합니다. ```lua Property: boolean IsPlaying = false ``` 3. **InstanceRoomLogic**을 [chunk_id] | Guides:1035:4
[task] | knowledge_list [title] | RoomService를 활용해 룸끼리 통신하기 [category] | Guides [rephrased] | 제시된 문서 원문에 포함된 정보만 바탕으로 핵심 사실을 추출하여 정리합니다. 1. `ReadTitleFromSharedMemory` 메서드는 `[server only]` 실행 공간으로 선언되어 서버에서만 동작합니다. 2. `_RoomService:GetSharedMemory(memKey)` 메서드는 매개변수 `memKey`(string)를 받아 `(number code, SharedMemory mem)` 형태의 코드를 반환하며, 여기서 `code`는 `SharedMemoryResultCode` 타입입니다. 3. `_RoomServ [original] | ```lua [server only] void ReadTitleFromSharedMemory() { local memKey = "ExampleRoom" local varName = "roomTitle" local code, mem = _RoomService:GetSharedMemory(memKey) if code ~= SharedMemoryResultCode.OK then error ("Failed to G [chunk_id] | Guides:1035:7
[task] | knowledge_list [title] | RoomService를 활용해 룸끼리 통신하기 [category] | Guides [rephrased] | * `RoomSharedMemory`와 공유 변수 이름은 알파벳 대소문자, 숫자, 공백, `_`, `-` 문자만 사용할 수 있으며, 길이는 최소 1글자 이상 최대 100글자까지 가능합니다. * 하나의 월드(World)에서 생성할 수 있는 `RoomSharedMemory` 인스턴스는 최대 100개까지 제한됩니다. * 하나의 공유 변수에 저장할 수 있는 데이터의 최대 크기는 80,000 bytes입니다. * `RoomSharedMemory` 인스턴스 1개의 전체 용량(총 저장량)은 80MiB를 초과할 수 없습니다. * [original] | # RoomSharedMemory 제한 사항 RoomSharedMemory를 사용할 때는 아래의 제한 사항을 염두에 두고 사용해야 합니다. #### 작명 규칙 RoomSharedMemory와 공유 변수 이름은 아래 문자로만 작명할 수 있습니다. 최소 1글자 이상의 이름이어야 하며, 최대 100글자 이름일 수 있습니다. * **알파벳 대,소문자** * **숫자** * **공백** * **_, -** #### 수량 및 용량 제한 * 한 월드 당 생성 가능한 RoomSharedMemory는 최대 100개입니다. * 하나의 공유 [chunk_id] | Guides:1035:8
[task] | diverse_qa [title] | RoomService를 활용해 룸끼리 통신하기 [category] | Guides [rephrased] | 질문: 정적 룸과 인스턴스 룸에서 로직이 어떻게 실행되며, 이를 통해 UI를 갱신하기 위해 어떤 조치가 필요한가요? 답변: 정적 룸과 인스턴스 룸에서 로직은 별도로 실행되므로, 인스턴스 룸의 변경된 IsPlaying 값을 정적 룸에 전달해야 하며, 이를 통해 정적 룸의 UI를 갱신하는 코드를 작성해야 합니다. 질문: StaticRoomLogic의 OnUpdate 함수에서 정적 룸에서만 실행되도록 하기 위한 조건문은 무엇인가요? 답변: _RoomService:IsInstanceRoom() == true 이면 함수를 즉시 종료(ret [original] | InstanceRoomLogic의 IsPlaying 프로퍼티 값에 따라 버튼의 내용이 바뀔 수 있도록 만들어 봅시다. 정적 룸과 인스턴스 룸에서 로직은 별도로 실행되므로 인스턴스 룸의 변경된 IsPlaying 값을 정적 룸에 전달해야 합니다. 아래 그림과 같이 IsPlaying 값을 전달할 수 있도록 UI를 변경하는 코드를 작성해 봅시다. 1. StaticRoomLogic에 `OnUpdate`를 추가합니다. ```lua [client only] void OnUpdate(number delta) { [chunk_id] | Guides:1035:2
[task] | diverse_qa [title] | RoomService를 활용해 룸끼리 통신하기 [category] | Guides [rephrased] | 질문: `_RoomService:GetSharedMemory(memKey)` 호출 시 반환되는 값은 무엇이며, 성공을 확인하는 조건은 무엇인가요? 답변: 반환되는 값은 `code`와 `mem`입니다. 성공을 확인하기 위해서는 `code`가 `SharedMemoryResultCode.OK`와 같아야 합니다. 질문: `mem:GetVariableAndWait(varName)`의 결과에서 변수의 값을 추출하기 위해 접근하는 경로는 무엇인가요? 답변: `getResult.Info.Value` 경로를 통해 값을 추출합니다. 질문: 공유 [original] | ```lua [server only] void ReadTitleFromSharedMemory() { local memKey = "ExampleRoom" local varName = "roomTitle" local code, mem = _RoomService:GetSharedMemory(memKey) if code ~= SharedMemoryResultCode.OK then error ("Failed to G [chunk_id] | Guides:1035:7
[task] | extract_knowledge [title] | RoomService를 활용해 룸끼리 통신하기 [category] | Guides [rephrased] | # RoomEndEvent를 활용한 인스턴스 룸 상태 초기화 ## 개념 설명 `RoomEndEvent`는 특정 룸이 종료(파괴)될 때 발생하는 이벤트입니다. 이 이벤트 핸들러를 통해 인스턴스 룸이 파괴되는 시점에 게임 로직 상태(예: `IsPlaying`)를 초기화하고, 해당 상태 변경을 다른 룸(예: 정적 룸)으로 전달할 수 있습니다. 이는 인스턴스 룸이 사라진 후에도 메인 게임 로직이 정상적으로 동작하도록 보장하기 위한 목적으로 사용됩니다. ## API 사용법 1. **이벤트 핸들러 정의**: `[service: RoomS [original] | 6. **RoomEndEvent**를 추가합니다. 인스턴스 룸이 파괴될 때 IsPlaying 상태를 초기화할 수 있도록 아래와 같이 작성합니다. ```lua [service: RoomService] HandleRoomEndEvent(RoomEndEvent event) { --------------- Native Event Sender Info ---------------- -- Sender: RoomService -- Space: Server -- [chunk_id] | Guides:1035:5
[task] | wikipedia [title] | RoomService를 활용해 룸끼리 통신하기 [category] | Guides [rephrased] | ## RoomService를 활용한 룸 간 통신 mLua 환경에서 서로 다른 룸(Room) 간의 데이터 교환은 `RoomService`가 제공하는 공유 메모리(Shared Memory) 기능을 통해 수행됩니다. 이 메커니즘은 특정 키(`memKey`)를 기준으로 메모리 공간을 생성하고, 그 안에 변수를 저장하거나 읽어오는 방식으로 동작합니다. 아래 코드 예제는 `ExampleRoom`이라는 키로 공유 메모리를 조회한 후, `roomTitle`이라는 이름의 변수 값을 대기하며 읽어오는 `ReadTitleFromSharedMemor [original] | ```lua [server only] void ReadTitleFromSharedMemory() { local memKey = "ExampleRoom" local varName = "roomTitle" local code, mem = _RoomService:GetSharedMemory(memKey) if code ~= SharedMemoryResultCode.OK then error ("Failed to G [chunk_id] | Guides:1035:7
[task] | diverse_qa [title] | RoomService를 활용해 룸끼리 통신하기 [category] | Guides [rephrased] | 질문: RoomSharedMemory와 공유 변수 이름 작명 시 사용할 수 있는 문자는 무엇이며, 이름 길이의 최소/최대 제한은 어떻게 되나요? 답변: RoomSharedMemory와 공유 변수 이름은 알파벳 대소문자, 숫자, 공백, 밑줄(_), 하이픈(-)로만 작명할 수 있으며, 최소 1글자 이상, 최대 100글자까지 가능합니다. 질문: 한 월드 내에서 생성할 수 있는 RoomSharedMemory의 최대 개수는 몇 개인가요? 답변: 한 월드 당 생성 가능한 RoomSharedMemory는 최대 100개입니다. 질문: 하나의 [original] | # RoomSharedMemory 제한 사항 RoomSharedMemory를 사용할 때는 아래의 제한 사항을 염두에 두고 사용해야 합니다. #### 작명 규칙 RoomSharedMemory와 공유 변수 이름은 아래 문자로만 작명할 수 있습니다. 최소 1글자 이상의 이름이어야 하며, 최대 100글자 이름일 수 있습니다. * **알파벳 대,소문자** * **숫자** * **공백** * **_, -** #### 수량 및 용량 제한 * 한 월드 당 생성 가능한 RoomSharedMemory는 최대 100개입니다. * 하나의 공유 [chunk_id] | Guides:1035:8
[task] | distill [title] | RoomService를 활용해 룸끼리 통신하기 [category] | Guides [rephrased] | # RoomService: 룸 간 통신 (공유 메모리) 룸 간 데이터 교환은 `SharedMemory` 객체를 통해 수행됩니다. ## 핵심 API ### 1. 공유 메모리 접근 및 변수 조회 * **`_RoomService:GetSharedMemory(memKey)`** * `memKey`: 공유 메모리 식별자 (`string`) * 반환: `(code, mem)` * `code`: `SharedMemoryResultCode` (성공 시 `.OK`) * `mem`: [original] | ```lua [server only] void ReadTitleFromSharedMemory() { local memKey = "ExampleRoom" local varName = "roomTitle" local code, mem = _RoomService:GetSharedMemory(memKey) if code ~= SharedMemoryResultCode.OK then error ("Failed to G [chunk_id] | Guides:1035:7
[task] | extract_knowledge [title] | RoomService를 활용해 룸끼리 통신하기 [category] | Guides [rephrased] | # RoomService를 활용한 룸 간 상태 동기화 ## 1. 개념 설명 메이플스토리 월드에서 정적 룸(Static Room)과 인스턴스 룸(Instance Room)은 독립적인 로직 환경으로 실행됩니다. 따라서 인스턴스 룸 내에서 변경된 상태(예: 게임 진행 여부)를 정적 룸의 UI에 반영하려면, 각 룸의 로직 스크립트에서 해당 상태를 주기적으로 조회하고 갱신하는 로직이 필요합니다. `_RoomService:IsInstanceRoom()` 메서드를 사용하여 현재 실행 환경이 정적 룸인지 인스턴스 룸인지 구분하고, 각 환경에 맞 [original] | InstanceRoomLogic의 IsPlaying 프로퍼티 값에 따라 버튼의 내용이 바뀔 수 있도록 만들어 봅시다. 정적 룸과 인스턴스 룸에서 로직은 별도로 실행되므로 인스턴스 룸의 변경된 IsPlaying 값을 정적 룸에 전달해야 합니다. 아래 그림과 같이 IsPlaying 값을 전달할 수 있도록 UI를 변경하는 코드를 작성해 봅시다. 1. StaticRoomLogic에 `OnUpdate`를 추가합니다. ```lua [client only] void OnUpdate(number delta) { [chunk_id] | Guides:1035:2
[task] | distill [title] | 파티클 사용하기 [category] | Guides [rephrased] | # 파티클 컴포넌트 가이드 파티클은 눈, 비, 먼지 등 다수의 작은 입자를 표현하는 컴포넌트입니다. 입자의 속성과 재생 상태를 제어합니다. ## 사용 방법 1. **Preset List 배치**: `Preset List > Particle Effect`에서 파티클을 선택하여 `Scene`에 배치. 2. **컴포넌트 추가**: 대상 엔티티의 `Property`에 파티클 컴포넌트를 직접 추가. 3. **Workspace 배치**: `Workspace`에서 파티클 모델을 선택해 `Scene`에 배치. ## 컴포넌트 종류 월드(Wor [original] | # 학습 과정 소개 파티클이란 눈이나 비, 먼지 같은 다수의 작은 입자를 말합니다. 파티클 컴포넌트를 통해 입자의 속성과 재생 상태를 제어할 수 있습니다. 이번 시간에는 파티클 컴포넌트의 개념과 활용 방법을 살펴봅시다. ##### 참고 API Reference [BaseParticleComponent](/apiReference/Components/BaseParticleComponent) [AreaParticleComponent](/apiReference/Components/AreaParticleComponent) [BasicPa [chunk_id] | Guides:1036:0
[task] | wikipedia [title] | RoomService를 활용해 룸끼리 통신하기 [category] | Guides [rephrased] | # RoomService를 활용한 룸 간 통신 MapleStory Worlds의 `RoomService`는 인스턴스 룸(Instance Room)과 정적 룸(Static Room) 간의 상태 공유와 통신을 가능하게 하는 핵심 서비스입니다. 이 가이드에서는 커스텀 이벤트를 생성하여 인스턴스 룸의 플레이 상태(`IsPlaying`)를 정적 룸에 실시간으로 전송하는 과정을 단계별로 설명합니다. 이 방식을 통해 클라이언트 또는 다른 서버 로직이 인스턴스 룸의 현재 상태를 파악할 수 있습니다. ## 1. 커스텀 이벤트 생성 먼저, 데이 [original] | 새로운 이벤트를 생성하고, 그 이벤트를 사용해 인스턴스 룸의 상태를 정적 룸에 공유하게 만들어 봅시다. 1. **Workspace - MyDesk의 콘텍스트 메뉴에서 Create Scripts - Create Event**를 선택해 새로운 **RoomStateChangedEvent**를 생성합니다. 2. boolean 타입의 **IsPlaying** 프로퍼티를 추가합니다. ```lua Property: boolean IsPlaying = false ``` 3. **InstanceRoomLogic**을 [chunk_id] | Guides:1035:4
[task] | wikipedia [title] | RoomService를 활용해 룸끼리 통신하기 [category] | Guides [rephrased] | # 공유 메모리 활용 이 섹션에서는 이전에 구성한 예제 월드에 텍스트 UI를 추가하고, 인스턴스 룸에 입장할 때 공유 메모리에 저장된 룸 이름이 해당 UI에 표시되도록 하는 방법을 다룹니다. 이 과정을 통해 RoomService의 공유 메모리 기능을 활용한 룸 간 통신 구조를 확인할 수 있습니다. ## UI 및 프로퍼티 구성 먼저, UI를 구성하고 이를 스크립트 컴포넌트에 연결합니다. 1. **DefaultGroup**에 텍스트 UI를 추가하고 이름을 **Txt_RoomTitle**로 설정합니다. 2. **Instance [original] | # 공유 메모리 활용 위에서 만든 예제 월드에서 새로운 UI를 추가하고, 해당 인스턴스 룸에 입장했을 때 공유 메모리 내용이 나타나도록 만들어 봅시다. 1. 텍스트 UI를 DefaultGroup에 추가하고 **Txt_RoomTitle** 이름으로 설정합니다. 2. **InstanceRoomLogic**에 새로운 Entity 타입의 **TextRoomTitle** 프로퍼티를 추가합니다. Txt_RoomTitle UI를 연결합니다. ```lua Property: [None] Entity TextRoom [chunk_id] | Guides:1035:6
[task] | extract_knowledge [title] | RoomService를 활용해 룸끼리 통신하기 [category] | Guides [rephrased] | # RoomService를 활용한 정적 룸과 인스턴스 룸 간 통신 ## 개념 설명 메이플스토리 월드(mLua)에서는 `RoomService`를 사용하여 정적 룸(Static Room)과 인스턴스 룸(Instance Room) 사이의 사용자 이동 및 상태 공유를 처리합니다. 이 기법은 특정 조건(예: UI 버튼 클릭)이 충족되면 현재 정적 룸에 있는 플레이어를 지정된 인스턴스 룸으로 이동시키는 데 사용됩니다. 인스턴스 룸은 `roomKey`라는 문자열 식별자를 통해 생성 및 참조되며, 해당 키를 기반으로 유저를 이동 시킬 수 있습니 [original] | 입장 버튼을 누른 플레이어가 인스턴스 룸에 입장할 수 있게 아래와 같이 작성합니다. 1. **StaticRoomLogic**에 새로운 **EnterInstanceRoom**을 추가합니다. Add Parameter를 누른 뒤, string 타입의 userId 매개 변수를 추가합니다. `RoomService`를 활용해 인스턴스 룸의 key를 가져오고, 유저를 해당 인스턴스 룸으로 보낼 수 있게 아래와 같이 작성합니다. ```lua [server] void EnterInstanceRoom(string userId) [chunk_id] | Guides:1035:3
[task] | knowledge_list [title] | 파티클 사용하기 [category] | Guides [rephrased] | 제공된 문서 내용에만 기반하여 핵심 사실을 정리한 목록입니다. ```lua -- 문서에 명시된 API 및 컴포넌트 정보 요약 -- 실제 코드 실행이 아닌, 문서 기반 사실 나열 ``` * 파티클은 눈, 비, 먼지 등 다수의 작은 입자를 의미하며, `BaseParticleComponent`를 상속한 컴포넌트를 통해 입자의 속성과 재생 상태를 제어할 수 있습니다. * 파티클을 사용하는 방법은 총 3가지로, Preset List의 'Particle Effect'에서 Scene에 배치하는 것, 파티클을 생성할 엔티티의 Prope [original] | # 학습 과정 소개 파티클이란 눈이나 비, 먼지 같은 다수의 작은 입자를 말합니다. 파티클 컴포넌트를 통해 입자의 속성과 재생 상태를 제어할 수 있습니다. 이번 시간에는 파티클 컴포넌트의 개념과 활용 방법을 살펴봅시다. ##### 참고 API Reference [BaseParticleComponent](/apiReference/Components/BaseParticleComponent) [AreaParticleComponent](/apiReference/Components/AreaParticleComponent) [BasicPa [chunk_id] | Guides:1036:0
[task] | diverse_qa [title] | RoomService를 활용해 룸끼리 통신하기 [category] | Guides [rephrased] | 질문: 문서에서 설명하는 공유 메모리 활용 예제의 최종 목표는 무엇인가요? 답변: 인스턴스 룸에 입장했을 때, 공유 메모리에 저장된 내용을 텍스트 UI를 통해 화면에 나타나도록 만드는 것입니다. 질문: 공유 메모리 내용을 표시하기 위해 추가하는 텍스트 UI의 이름은 무엇인가요? 답변: Txt_RoomTitle 입니다. 질문: `InstanceRoomLogic` 스크립트에 추가되는 `TextRoomTitle` 프로퍼티의 타입과 실행 공간(Attribute)은 각각 무엇인가요? 답변: 타입은 `Entity` 이고, 실행 공간은 `[ [original] | # 공유 메모리 활용 위에서 만든 예제 월드에서 새로운 UI를 추가하고, 해당 인스턴스 룸에 입장했을 때 공유 메모리 내용이 나타나도록 만들어 봅시다. 1. 텍스트 UI를 DefaultGroup에 추가하고 **Txt_RoomTitle** 이름으로 설정합니다. 2. **InstanceRoomLogic**에 새로운 Entity 타입의 **TextRoomTitle** 프로퍼티를 추가합니다. Txt_RoomTitle UI를 연결합니다. ```lua Property: [None] Entity TextRoom [chunk_id] | Guides:1035:6
[task] | extract_knowledge [title] | RoomService를 활용해 룸끼리 통신하기 [category] | Guides [rephrased] | # RoomService를 활용한 룸 간 통신 ## 개념 설명 `RoomService`는 게임 로직에서 인스턴스 룸(Instance Room)과 정적 룸(Static Room) 사이의 상태 정보를 주고받기 위해 사용됩니다. 기본적으로 독립적으로 실행되는 인스턴스 룸의 상태 변화를 정적 룸에 전달하거나, 정적 룸에서 인스턴스 룸으로 명령을 내리는 등 룸 간의 통신을 처리합니다. 통신을 위해 커스텀 이벤트(Custom Event)를 생성하여 데이터를 캡슐화하고, `RoomService` API를 통해 해당 이벤트를 전송 및 수신하는 [original] | 새로운 이벤트를 생성하고, 그 이벤트를 사용해 인스턴스 룸의 상태를 정적 룸에 공유하게 만들어 봅시다. 1. **Workspace - MyDesk의 콘텍스트 메뉴에서 Create Scripts - Create Event**를 선택해 새로운 **RoomStateChangedEvent**를 생성합니다. 2. boolean 타입의 **IsPlaying** 프로퍼티를 추가합니다. ```lua Property: boolean IsPlaying = false ``` 3. **InstanceRoomLogic**을 [chunk_id] | Guides:1035:4
[task] | wikipedia [title] | 파티클 사용하기 [category] | Guides [rephrased] | # 파티클 사용 가이드 파티클(Particle)은 눈, 비, 먼지 등과 같이 다수의 작은 입자를 의미하며, 이러한 입자의 속성과 재생 상태를 제어하기 위해 파티클 컴포넌트를 사용합니다. 본 가이드에서는 메이플스토리 월드(MapleStory Worlds) 환경에서 파티클 컴포넌트의 개념과 활용 방법을 설명합니다. ## 참고 API 파티클 관련 개발 시 참조할 수 있는 주요 API는 다음과 같습니다. * **컴포넌트 (Components)** * 기본 타입: `BaseParticleComponent`, `AreaP [original] | # 학습 과정 소개 파티클이란 눈이나 비, 먼지 같은 다수의 작은 입자를 말합니다. 파티클 컴포넌트를 통해 입자의 속성과 재생 상태를 제어할 수 있습니다. 이번 시간에는 파티클 컴포넌트의 개념과 활용 방법을 살펴봅시다. ##### 참고 API Reference [BaseParticleComponent](/apiReference/Components/BaseParticleComponent) [AreaParticleComponent](/apiReference/Components/AreaParticleComponent) [BasicPa [chunk_id] | Guides:1036:0
[task] | extract_knowledge [title] | RoomService를 활용해 룸끼리 통신하기 [category] | Guides [rephrased] | # RoomSharedMemory 제한 사항 `RoomSharedMemory`는 룸 간 통신을 위해 데이터를 공유하는 메커니즘입니다. 이 기능을 사용할 때 반드시 준수해야 하는 작명 규칙과 용량 제한이 존재하며, 이를 초과할 경우 정상 동작을 보장하지 않습니다. ## 1. 작명 규칙 `RoomSharedMemory` 객체 이름과 공유 변수 이름은 다음 규칙에 따라 정의되어야 합니다. * **허용 문자**: 알파벳 대/소문자, 숫자, 공백, 언더스코어(`_`), 하이픈(`-`) * **길이 제한**: 최소 1글자 이상, [original] | # RoomSharedMemory 제한 사항 RoomSharedMemory를 사용할 때는 아래의 제한 사항을 염두에 두고 사용해야 합니다. #### 작명 규칙 RoomSharedMemory와 공유 변수 이름은 아래 문자로만 작명할 수 있습니다. 최소 1글자 이상의 이름이어야 하며, 최대 100글자 이름일 수 있습니다. * **알파벳 대,소문자** * **숫자** * **공백** * **_, -** #### 수량 및 용량 제한 * 한 월드 당 생성 가능한 RoomSharedMemory는 최대 100개입니다. * 하나의 공유 [chunk_id] | Guides:1035:8
[task] | distill [title] | 파티클 사용하기 [category] | Guides [rephrased] | # UI 파티클 컴포넌트 UI 전용 파티클 제어 컴포넌트입니다. ## UIBasicParticleComponent 일반 파티클을 제어합니다. | 프로퍼티 | 설명 | | :--- | :--- | | `ParticleType` | 파티클 타입 설정. 타입에 따라 지원 프로퍼티가 다름. | | `Color` | 파티클 색상 보정. | | `LocalScale` | 파티클 전체 크기. | | `PlaySpeed` | 재생 속도. `0`이면 일시 정지. 음수는 `0`으로 취급. | | `ParticleSize` | 개별 입자 크기. [original] | [UIBasicParticleComponent](/apiReference/Components/UIBasicParticleComponent)는 일반적인 파티클을 제어하는 컴포넌트입니다. UI에서만 사용 가능합니다. 주요 프로퍼티를 살펴봅시다. | 프로퍼티 | 설명 | | :---: | --- | | ParticleType | 생성할 파티클의 타입을 설정합니다. 파티클 타입에 따라 지원되는 프로퍼티가 달라집니다. | | Color | 렌더링 될 파티클의 색상을 보정합니다.| | LocalScale | 파티클의 크기입니다. | | [chunk_id] | Guides:1036:2
[task] | extract_knowledge [title] | 파티클 사용하기 [category] | Guides [rephrased] | # 파티클 컴포넌트 사용법 ## 1. 개념 설명 **파티클(Particle)** 은 눈, 비, 먼지 등 다수의 작은 입자를 의미하며, 이를 통해 다양한 입자 움직임을 연출하는 데 사용됩니다. mLua 환경에서는 파티클의 속성과 재생 상태를 제어하기 위해 **파티클 컴포넌트(Particle Component)** 를 활용합니다. 파티클 컴포넌트는 적용 대상에 따라 **월드(World)** 용과 **UI** 용으로 나뉘며, 각각 3가지 유형이 존재합니다. | 구분 | 컴포넌트 이름 | | :--- | :--- | | **월드용* [original] | # 학습 과정 소개 파티클이란 눈이나 비, 먼지 같은 다수의 작은 입자를 말합니다. 파티클 컴포넌트를 통해 입자의 속성과 재생 상태를 제어할 수 있습니다. 이번 시간에는 파티클 컴포넌트의 개념과 활용 방법을 살펴봅시다. ##### 참고 API Reference [BaseParticleComponent](/apiReference/Components/BaseParticleComponent) [AreaParticleComponent](/apiReference/Components/AreaParticleComponent) [BasicPa [chunk_id] | Guides:1036:0
[task] | distill [title] | 파티클 사용하기 [category] | Guides [rephrased] | # 파티클 컴포넌트 가이드 파티클 연출을 위해 `BasicParticleComponent`, `SpriteParticleComponent`, `AreaParticleComponent`, `UIBasicParticleComponent`를 사용합니다. ## BasicParticleComponent 일반 파티클을 제어하는 기본 컴포넌트입니다. | 프로퍼티 | 설명 | | :--- | :--- | | `ParticleType` | 파티클 타입 설정. 타입별 지원 프로퍼티가 다름. | | `Color` | 렌더링 색상 보정. | | ` [original] | [BasicParticleComponent](/apiReference/Components/BasicParticleComponent)는 일반적인 파티클을 제어하는 컴포넌트입니다. | 프로퍼티 | 설명 | | :---: | --- | | ParticleType | 생성할 파티클의 타입을 설정합니다. 파티클 타입에 따라 지원되는 프로퍼티가 달라집니다. | | Color | 렌더링 될 파티클의 색상을 보정합니다. | | Loop | 파티클 반복 재생 여부를 설정합니다. | | ParticleCount | 파티클 입자 개수를 설 [chunk_id] | Guides:1036:1
[task] | extract_knowledge [title] | RoomService를 활용해 룸끼리 통신하기 [category] | Guides [rephrased] | # RoomService를 활용한 룸 간 통신: 공유 메모리 ## 1. 개념 설명 `_RoomService`는 서로 다른 룸(Room) 간의 데이터 교환을 가능하게 하는 서비스입니다. 이 문서의 예제에서는 '공유 메모리(Shared Memory)'라는 메커니즘을 사용하여 한 룸에서 생성된 데이터(예: `roomTitle`)를 다른 룸에서 읽어오는 과정을 보여줍니다. 공유 메모리는 `memKey`라는 키로 식별되며, 내부에는 `varName`을 가진 변수들이 저장됩니다. 데이터를 읽은 후 더 이상 필요하지 않을 경우, 공유 메모리 [original] | ```lua [server only] void ReadTitleFromSharedMemory() { local memKey = "ExampleRoom" local varName = "roomTitle" local code, mem = _RoomService:GetSharedMemory(memKey) if code ~= SharedMemoryResultCode.OK then error ("Failed to G [chunk_id] | Guides:1035:7
[task] | diverse_qa [title] | 파티클 사용하기 [category] | Guides [rephrased] | 질문: 파티클(Particle)의 정의는 무엇인가요? 답변: 파티클이란 눈이나 비, 먼지 같은 다수의 작은 입자를 말합니다. 질문: 파티클 컴포넌트를 통해 어떤 것들을 제어할 수 있나요? 답변: 파티클 컴포넌트를 통해 입자의 속성과 재생 상태를 제어할 수 있습니다. 질문: 파티클을 사용하는 방법은 총 몇 가지이며, 각각 무엇인가요? 답변: 파티클을 사용하는 방법은 세 가지이며, 각각 'Preset List에서 배치', '엔티티에 파티클 컴포넌트 추가', 'Workspace에서 추가'입니다. 질문: Preset List를 통해 [original] | # 학습 과정 소개 파티클이란 눈이나 비, 먼지 같은 다수의 작은 입자를 말합니다. 파티클 컴포넌트를 통해 입자의 속성과 재생 상태를 제어할 수 있습니다. 이번 시간에는 파티클 컴포넌트의 개념과 활용 방법을 살펴봅시다. ##### 참고 API Reference [BaseParticleComponent](/apiReference/Components/BaseParticleComponent) [AreaParticleComponent](/apiReference/Components/AreaParticleComponent) [BasicPa [chunk_id] | Guides:1036:0
[task] | knowledge_list [title] | 타입의 이해 [category] | Guides [rephrased] | * **타입(Type)** 은 여러 가지 프로퍼티 및 함수를 조합하여 하나의 새로운 사용자 정의 자료형을 만드는 메커니즘으로, 유사한 성격의 데이터를 묶어 제어하고 관리함으로써 코드 재사용성과 유지 보수성을 높이는 데 활용됩니다. * 타입은 컴포넌트와 구별되는 특성으로, 엔티티(Entity)에 추가할 수 없으며 실행 제어 기능을 지원하지 않고 이벤트 핸들러(Event Handler)를 포함하지 않습니다. * 타입은 각 사용처에 맞는 Native 기능과 연동되며, 일부 타입은 Native에서 이미 동작이 정의된 **기본 이 [original] | # 학습 과정 소개 타입(Type)의 개념과 활용 방법을 소개합니다. # 타입이란? 메이플스토리 월드에서 **타입**이란 여러 가지 프로퍼티 및 함수를 조합하여 하나의 새로운 데이터 유형을 만드는 사용자 정의 자료형을 말합니다. 타입을 활용하면 유사한 성격의 데이터를 한 번에 묶어서 제어하고 관리할 수 있어 코드를 재사용하기 좋습니다. 또한 코드를 유지 보수할 때 유용합니다. ## 타입과 컴포넌트의 차이 타입은 컴포넌트와 비슷하지만 다음과 같은 차이점이 있습니다. * 타입은 컴포넌트가 아니므로 엔티티에 추가할 수 없습니다. [chunk_id] | Guides:1038:0
[task] | distill [title] | 타입의 이해 [category] | Guides [rephrased] | # 타입의 이해 **타입(Type)**은 프로퍼티와 함수를 조합한 사용자 정의 자료형입니다. 유사 데이터를 묶어 관리하고 재사용성을 높입니다. ## 타입 vs 컴포넌트 * **엔티티 연결 불가**: 컴포넌트와 달리 엔티티에 추가할 수 없습니다. * **실행 제어 미지원**: 실행 제어 기능을 지원하지 않습니다. * **이벤트 핸들러 없음**: `Event Handler:` 블록을 정의할 수 없습니다. * **기본 이벤트 함수**: 용도에 맞는 기본 이벤트 함수가 제공될 수 있으며, Native에서 동작이 정의되어 [original] | # 학습 과정 소개 타입(Type)의 개념과 활용 방법을 소개합니다. # 타입이란? 메이플스토리 월드에서 **타입**이란 여러 가지 프로퍼티 및 함수를 조합하여 하나의 새로운 데이터 유형을 만드는 사용자 정의 자료형을 말합니다. 타입을 활용하면 유사한 성격의 데이터를 한 번에 묶어서 제어하고 관리할 수 있어 코드를 재사용하기 좋습니다. 또한 코드를 유지 보수할 때 유용합니다. ## 타입과 컴포넌트의 차이 타입은 컴포넌트와 비슷하지만 다음과 같은 차이점이 있습니다. * 타입은 컴포넌트가 아니므로 엔티티에 추가할 수 없습니다. [chunk_id] | Guides:1038:0
[task] | diverse_qa [title] | 파티클 사용하기 [category] | Guides [rephrased] | 질문: [BasicParticleComponent]는 어떤 용도로 사용되는 컴포넌트인가요? 답변: [BasicParticleComponent]는 일반적인 파티클을 제어하는 데 사용되는 컴포넌트입니다. 질문: [BasicParticleComponent]의 ParticleType 프로퍼티가 변경되면 어떤 영향이 있나요? 답변: ParticleType은 생성할 파티클의 타입을 설정하며, 파티클 타입에 따라 지원되는 프로퍼티가 달라집니다. 질문: 파티클 전체의 크기를 제어하고 싶을 때 [BasicParticleComponent]의 어떤 [original] | [BasicParticleComponent](/apiReference/Components/BasicParticleComponent)는 일반적인 파티클을 제어하는 컴포넌트입니다. | 프로퍼티 | 설명 | | :---: | --- | | ParticleType | 생성할 파티클의 타입을 설정합니다. 파티클 타입에 따라 지원되는 프로퍼티가 달라집니다. | | Color | 렌더링 될 파티클의 색상을 보정합니다. | | Loop | 파티클 반복 재생 여부를 설정합니다. | | ParticleCount | 파티클 입자 개수를 설 [chunk_id] | Guides:1036:1
[task] | wikipedia [title] | 타입의 이해 [category] | Guides [rephrased] | # 타입의 이해 **타입(Type)** 은 메이플스토리 월드에서 여러 프로퍼티와 함수를 조합하여 하나의 새로운 데이터 유형을 만드는 사용자 정의 자료형입니다. 유형화된 데이터를 묶어 제어하고 관리할 수 있어 코드 재사용성이 높아지고 유지 보수가 용이해집니다. ## 타입과 컴포넌트의 차이 타입은 컴포넌트와 유사한 구조를 가지지만 다음과 같은 차이점이 있습니다. * 타입은 컴포넌트가 아니므로 엔티티에 추가할 수 없습니다. * 타입은 실행 제어 기능을 지원하지 않습니다. * 타입에는 이벤트 핸들러가 없습니다. * 각 [original] | # 학습 과정 소개 타입(Type)의 개념과 활용 방법을 소개합니다. # 타입이란? 메이플스토리 월드에서 **타입**이란 여러 가지 프로퍼티 및 함수를 조합하여 하나의 새로운 데이터 유형을 만드는 사용자 정의 자료형을 말합니다. 타입을 활용하면 유사한 성격의 데이터를 한 번에 묶어서 제어하고 관리할 수 있어 코드를 재사용하기 좋습니다. 또한 코드를 유지 보수할 때 유용합니다. ## 타입과 컴포넌트의 차이 타입은 컴포넌트와 비슷하지만 다음과 같은 차이점이 있습니다. * 타입은 컴포넌트가 아니므로 엔티티에 추가할 수 없습니다. [chunk_id] | Guides:1038:0