[task] | wikipedia [title] | Physics Owner 지정하기 [category] | Guides [rephrased] | # 충돌 Physics Owner 지정하기 메이플스토리 월드의 물리 시스템에서 엔티티의 물리 행동을 제어하기 위해 `PhysicsRigidbodyComponent`를 사용합니다. 이 컴포넌트는 클라이언트가 특정 엔티티의 물리 상태 변경을 주도하도록 지정하는 메서드를 제공합니다. ## 관련 메서드 `PhysicsRigidbodyComponent`의 주요 메서드는 다음과 같습니다. * **SetClientAsPhysicsOwner**: 지정된 사용자를 해당 엔티티의 물리 소유자(Physics Owner)로 설정합니다. 이는 [original] | Method: void OnBeginPlay() { self:InitDirs() self:StartGame() } void InitDirs() { self.Dirs[1] = Vector3(math.sqrt(3)/2, 1/2, 0) self.Dirs[2] = Vector3(0, -1,0) self.Dirs[3] = Vector3(-math.sqrt(3)/2, 1/2, 0) } [server only] v [chunk_id] | Guides:1369:2
[task] | extract_knowledge [title] | MSW MCP [category] | Guides [rephrased] | # MCP 서버 등록 및 설정 MapleStory Worlds(MSW) 개발 환경에서 Codex CLI와 Google Antigravity IDE를 사용할 경우, MCP(Model Context Protocol) 서버를 등록하여 도구와 연동할 수 있습니다. 이 절에서는 `msw-maker-mcp`(로컬 stdio 서버)와 `msw-mcp`(원격 HTTP 서버)의 등록 방법과 설정 파일 구성을 다룹니다. ## 1. 개념 설명 MCP 서버는 AI 에이전트(Codex, Antigravity IDE 등)가 외부 도구나 API에 접근할 [original] | 1. Terminal에서 운영체제에 맞는 명령어를 입력하고, 서버를 등록합니다. 이 등록은 **사용자 글로벌 경로 (`~/.codex/config.toml`) 에 저장**되어 모든 Codex 세션에 공통 적용됩니다. **Windows(stdio)**: ```lua codex mcp add msw-maker-mcp -- cmd.exe /c call "%LOCALAPPDATA%\Nexon\MapleStory Worlds\MakerMCP\msw-maker-mcp.bat" ``` **macOS [chunk_id] | Guides:1368:8
[task] | knowledge_list [title] | 클라이언트의 TimeScale 조정하기 [category] | Guides [rephrased] | * `UtilLogic` 서비스의 `SetClientTimeScale()` 메서드는 클라이언트에서 `Update(deltaTime)`으로 전달되는 `deltaTime` 값을 변경하여 애니메이션 재생 속도, 이동 속도, 물리 속도 등 월드 전체의 시간을 제어하는 데 사용됩니다. * `UtilLogic`의 `SetClientTimeScale()` 메서드는 기본값 **1**을 가지며, 허용 범위는 **0 ~ 100** 사이이며 음수값을 사용할 수 없습니다. * `UtilLogic`의 `SetClientTimeScale()` 메 [original] | [UtilLogic](/apiReference/Logics/UtilLogic)의 `SetClientTimeScale()`를 사용해 클라이언트의 애니메이션 재생 속도, 이동 속도, 물리의 속도를 제어할 수 있습니다. 이 메소드를 활용해 카메라 효과를 조절하거나, 애니메이션 재생 속도를 제어해 더욱 몰입감 있는 월드를 제작할 수 있습니다. ##### 참고 가이드 * [UtilLogic](/apiReference/Logics/UtilLogic) ## SetClientTimeScale `SetClientTimeScale()`를 사용해 [chunk_id] | Guides:1370:0
[task] | distill [title] | 클라이언트의 TimeScale 조정하기 [category] | Guides [rephrased] | **클라이언트 TimeScale 독립성 및 동기화 규칙** 각 클라이언트는 자체 `TimeScale` 값을 독립적으로 적용하며, 이는 월드 내 다른 클라이언트의 시각적 경험에 영향을 줍니다. 1. **위치 동기화 제한**: * 엔티티의 위치 변화 속도는 **수신 측 클라이언트**의 `TimeScale`에 따라 결정됩니다. * 예: `TimeScale`이 느린 클라이언트 B의 움직임은, `TimeScale`이 빠른 클라이언트 A에게도 느리게 반영됩니다. 2. **애니메이션/효과 독립성**: * [original] | 한 월드에 접속한 여러 클라이언트가 서로 다른 TimeScale 값을 가질 때 클라이언트는 각각의 월드 속도를 따릅니다. 예를 들어 플레이어A는 TimeScale 값이 빨라지는 영역에 있고, 플레이어B는 TimeScale 값이 느린 영역에 있는 상황이라 생각해봅시다. 플레이어A의 TimeScale이 빠름에도 플레이어B가 뛰는 모습이 매우 느리게 보입니다. 플레이어B의 위치 정보는 클라이언트B의 TimeScale에 따라 변화 속도가 결정되기 때문입니다. 이 때문에 클라이언트B의 속도가 느리다면, 클라이언트A에서도 플레이어B의 이동 및 [chunk_id] | Guides:1370:2
[task] | knowledge_list [title] | 클라이언트의 TimeScale 조정하기 [category] | Guides [rephrased] | * 한 월드에 접속한 여러 클라이언트가 서로 다른 TimeScale 값을 가질 경우, 각 클라이언트는 해당 클라이언트가 가지는 TimeScale 값을 기준으로 월드 속도를 적용합니다. * TimeScale 값이 다른 두 클라이언트(예: 빠른 영역의 플레이어A, 느린 영역의 플레이어B) 간에는, 위치 정보가 수신자의 TimeScale에 따라 변화 속도가 결정되어 느린 클라이언트의 대상 이동이 빠른 클라이언트에서도 느리게 반영됩니다. * 점프, 공격, AnimationClip 등의 재생 속도는 각 클라이언트가 자체적으로 처리 [original] | 한 월드에 접속한 여러 클라이언트가 서로 다른 TimeScale 값을 가질 때 클라이언트는 각각의 월드 속도를 따릅니다. 예를 들어 플레이어A는 TimeScale 값이 빨라지는 영역에 있고, 플레이어B는 TimeScale 값이 느린 영역에 있는 상황이라 생각해봅시다. 플레이어A의 TimeScale이 빠름에도 플레이어B가 뛰는 모습이 매우 느리게 보입니다. 플레이어B의 위치 정보는 클라이언트B의 TimeScale에 따라 변화 속도가 결정되기 때문입니다. 이 때문에 클라이언트B의 속도가 느리다면, 클라이언트A에서도 플레이어B의 이동 및 [chunk_id] | Guides:1370:2
[task] | wikipedia [title] | 클라이언트의 TimeScale 조정하기 [category] | Guides [rephrased] | # 게임 로직 클라이언트의 TimeScale 조정하기 `UtilLogic` 컴포넌트의 `SetClientTimeScale()` 메소드를 사용하면 클라이언트에서 실행되는 애니메이션 재생 속도, 이동 속도, 물리 시뮬레이션 속도를 제어할 수 있습니다. 이를 통해 카메라 효과 연출이나 애니메이션 재생 속도 조절을 수행하여 몰입감 있는 월드 경험을 구현할 수 있습니다. ## SetClientTimeScale 메소드 `SetClientTimeScale()` 메소드는 클라이언트에서 `Update(deltaTime)` 함수에 전달되는 `d [original] | [UtilLogic](/apiReference/Logics/UtilLogic)의 `SetClientTimeScale()`를 사용해 클라이언트의 애니메이션 재생 속도, 이동 속도, 물리의 속도를 제어할 수 있습니다. 이 메소드를 활용해 카메라 효과를 조절하거나, 애니메이션 재생 속도를 제어해 더욱 몰입감 있는 월드를 제작할 수 있습니다. ##### 참고 가이드 * [UtilLogic](/apiReference/Logics/UtilLogic) ## SetClientTimeScale `SetClientTimeScale()`를 사용해 [chunk_id] | Guides:1370:0
[task] | extract_knowledge [title] | Physics Owner 지정하기 [category] | Guides [rephrased] | # 충돌 Physics Owner 지정하기 ## 개념 설명 mLua 환경에서 물리 시뮬레이션(Physics)을 수행하는 엔티티는 네트워크 상태 동기화를 위해 특정 클라이언트를 "Physics Owner"로 지정할 수 있습니다. `PhysicsRigidbodyComponent`를 통해 특정 사용자를 Physics Owner로 설정하면, 해당 사용자의 입력이나 로직이 물리 상태에 우선적으로 반영되도록 제어합니다. ## API 사용법 물리 엔티티의 Owner를 변경하거나 설정하기 위해 `PhysicsRigidbodyComponent` [original] | Method: void OnBeginPlay() { self:InitDirs() self:StartGame() } void InitDirs() { self.Dirs[1] = Vector3(math.sqrt(3)/2, 1/2, 0) self.Dirs[2] = Vector3(0, -1,0) self.Dirs[3] = Vector3(-math.sqrt(3)/2, 1/2, 0) } [server only] v [chunk_id] | Guides:1369:2
[task] | extract_knowledge [title] | Physics Owner 지정하기 [category] | Guides [rephrased] | # 충돌 시 강체 제어: Physics Owner 지정과 물리 이벤트 처리 ## 1. 개념 설명 메이플스토리 월드의 물리 시스템에서 강체(Rigidbody) 간의 충돌은 호스트 클라이언트에서 연산된 후 서버를 거쳐 모든 클라이언트에 동기화됩니다. 이 과정에서 물리 연산의 특성상 충돌 직후 약간의 위치 떨림(Jitter)이 발생할 수 있습니다. 강체가 충돌한 직후 반발 없이 즉시 멈추게 하려면 `PhysicsColliderComponent`의 `EnableContactEvent`를 활성화하여 `HandlePhysicsContac [original] | 예제를 통해 기본 물리 연산의 작동 방식을 살펴봅시다. 각기 다른 방향에서 같은 속도로 이동하는 눈덩이가 충돌하게 만들고 충돌 직후 반발 없이 바로 멈추도록 예제를 만들어 봅시다. 이 예제를 만들면 크리에이터는 강체들이 충돌한 직후 어떠한 반발도 없이 즉시 충돌한 지점에서 멈출 수 있을 거라고 생각합니다. 그러나 호스트 클라이언트가 연산한 값을 서버가 받은 뒤 모든 클라이언트에게 동기화해주는 과정에서 충돌 직후 약간의 떨림이 발생하는 것을 확인할 수 있습니다. ![[object Object]](https://mod-file.dn. [chunk_id] | Guides:1369:1
[task] | wikipedia [title] | 클라이언트의 TimeScale 조정하기 [category] | Guides [rephrased] | **게임 로직 클라이언트의 TimeScale 조정** 메이플스토리 월드에서 한 월드에 접속한 여러 클라이언트가 서로 다른 `TimeScale` 값을 설정하고 있을 경우, 각 클라이언트는 해당 클라이언트에 할당된 `TimeScale` 값을 기준으로 월드의 시간 흐름과 속도를 처리합니다. 이러한 환경에서는 클라이언트 간의 시각적 및 물리적 동기화 불일치가 발생할 수 있습니다. 구체적인 사례를 살펴보면, 플레이어 A는 `TimeScale` 값이 빠르게 설정된 영역에 위치하고 있고, 플레이어 B는 `TimeScale` 값이 느리게 설정 [original] | 한 월드에 접속한 여러 클라이언트가 서로 다른 TimeScale 값을 가질 때 클라이언트는 각각의 월드 속도를 따릅니다. 예를 들어 플레이어A는 TimeScale 값이 빨라지는 영역에 있고, 플레이어B는 TimeScale 값이 느린 영역에 있는 상황이라 생각해봅시다. 플레이어A의 TimeScale이 빠름에도 플레이어B가 뛰는 모습이 매우 느리게 보입니다. 플레이어B의 위치 정보는 클라이언트B의 TimeScale에 따라 변화 속도가 결정되기 때문입니다. 이 때문에 클라이언트B의 속도가 느리다면, 클라이언트A에서도 플레이어B의 이동 및 [chunk_id] | Guides:1370:2
[task] | diverse_qa [title] | 클라이언트의 TimeScale 조정하기 [category] | Guides [rephrased] | 질문: `SetClientTimeScale()` 메소드를 사용하여 제어할 수 있는 클라이언트의 속성에는 어떤 것들이 있나요? 답변: 클라이언트의 애니메이션 재생 속도, 이동 속도, 물리의 속도를 제어할 수 있습니다. 질문: `SetClientTimeScale()` 메소드의 기본값은 얼마이며, 허용되는 값의 범위는 무엇인가요? 답변: 기본값은 1이며, 0부터 100 사이의 값을 사용할 수 있습니다. 질문: `SetClientTimeScale()` 메소드에 음수값을 사용할 수 있나요? 답변: 아니요, 음수값은 사용할 수 없습니다. [original] | [UtilLogic](/apiReference/Logics/UtilLogic)의 `SetClientTimeScale()`를 사용해 클라이언트의 애니메이션 재생 속도, 이동 속도, 물리의 속도를 제어할 수 있습니다. 이 메소드를 활용해 카메라 효과를 조절하거나, 애니메이션 재생 속도를 제어해 더욱 몰입감 있는 월드를 제작할 수 있습니다. ##### 참고 가이드 * [UtilLogic](/apiReference/Logics/UtilLogic) ## SetClientTimeScale `SetClientTimeScale()`를 사용해 [chunk_id] | Guides:1370:0
[task] | diverse_qa [title] | Physics Owner 지정하기 [category] | Guides [rephrased] | 질문: `SetServerAsPhysicsOwner()` 메서드를 호출하면 Physics Owner가 어디로 설정되나요? 답변: Physics Owner가 Server로 설정됩니다. 질문: Physics Owner를 Server로 설정하면 물리 연산과 관련된 처리는 어디에서 이루어지나요? 답변: 충돌 이벤트 전달, 명령 전달 등 모든 물리 연산과 관련된 처리가 서버에서 이루어집니다. 질문: 서버에서 물리 연산을 처리할 때의 가장 큰 장점은 무엇인가요? 답변: 충돌 후의 명령을 바로 수행하고 동기화할 수 있기 때문에 충돌 시 지연 [original] | `SetServerAsPhysicsOwner()` 사용해 Physics Owner를 **Server**로 설정하면 서버에서 충돌 이벤트 전달, 명령 전달 등 모든 물리 연산과 관련된 처리를 서버에서 처리합니다. 충돌 후의 명령을 바로 수행하고, 동기화할 수 있기 때문에 충돌 시 지연되는 모습이 나타나지 않습니다. 그러나 서버에서 연산을 과도하게 처리할 경우 부하가 발생해 월드가 느려지게 될 수 있습니다. 서버에서 물리 연산을 할 경우 불필요한 연산을 최소화하고, 프로파일러와 디버깅을 활용해 월드의 성능을 최적화하는 작업을 반드시 [chunk_id] | Guides:1369:4
[task] | distill [title] | 클라이언트의 TimeScale 조정하기 [category] | Guides [rephrased] | `UtilLogic:SetClientTimeScale()` 적용 대상 및 예외 목록입니다. ### 적용 대상 (TimeScale 영향을 받음) | 대상 | 설명/조건 | | :--- | :--- | | **AIComponent** | `OnBehave()`의 `Delta` 값이 TimeScale만큼 변형됨. **UpdateAuthority**가 Client일 때만 적용. | | **BackgroundComponent** | 타입이 **Template**인 경우 배경 애니메이션 적용. | | **CameraComponent** | [original] | `UtilLogic:SetClientTimeScale()`에 영향을 받는 목록입니다. 이름 | 설명 | ---|---| AIComponent | `OnBehave()`의 `Delta`이 TimeScale 값을 곱한 값만큼 변합니다. AIComponent 컴포넌트의 **UpdateAuthority**가 Client일 때 영향을 받습니다. | BackgroundComponent | 타입이 Template인 경우 배경의 애니메이션이 영향을 받습니다. | CameraComponent| `ZoomTo()`가 영향을 받습니다. | [chunk_id] | Guides:1370:1
[task] | extract_knowledge [title] | 클라이언트의 TimeScale 조정하기 [category] | Guides [rephrased] | # 클라이언트 TimeScale 조정 ## 개념 설명 `UtilLogic`의 `SetClientTimeScale()` 메서드는 클라이언트 환경의 시간 흐름을 제어하는 API입니다. 이 메서드를 호출하면 클라이언트에서 `Update(deltaTime)`으로 전달되는 `deltaTime` 값이 변경되며, 이를 통해 애니메이션 재생 속도, 이동 속도, 물리 속도를 조절할 수 있습니다. 핵심 동작 원리는 다음과 같습니다. * **기본값 및 범위:** 기본값은 `1`이며, `0`부터 `100`까지의 값만 사용할 수 있습니다. 음수 값 [original] | [UtilLogic](/apiReference/Logics/UtilLogic)의 `SetClientTimeScale()`를 사용해 클라이언트의 애니메이션 재생 속도, 이동 속도, 물리의 속도를 제어할 수 있습니다. 이 메소드를 활용해 카메라 효과를 조절하거나, 애니메이션 재생 속도를 제어해 더욱 몰입감 있는 월드를 제작할 수 있습니다. ##### 참고 가이드 * [UtilLogic](/apiReference/Logics/UtilLogic) ## SetClientTimeScale `SetClientTimeScale()`를 사용해 [chunk_id] | Guides:1370:0
[task] | distill [title] | 클라이언트의 TimeScale 조정하기 [category] | Guides [rephrased] | **클라이언트 TimeScale 조정** `TimeScale` 값 변화에 따라 월드 전체의 시간 흐름을 조절합니다. `TriggerComponent` 영역 진입 시 `ChangeRate`에 따라 `TimeScale`이 증감하며, 값은 `0.36 ~ 5` 범위 내에서 클램프됩니다. ### 1. 로직 구성 `Workspace - MyDesk`에 `CurrentTime` 로직을 생성하여 현재 시간 배율을 관리합니다. ```lua Property: [None] number NowTimeScale = 1 ``` ### 2. 컴포넌트 [original] | 주황색 광선 영역에 닿으면 TimeScale 값이 증가하고, 초록색 광선 영역에서는 TimeScale 값이 감소하게 만들어 봅시다. TimeScale 값 변화에 따라 월드 전체의 시간의 흐름이 달라지는 것을 확인할 수 있습니다. TimeScale의 변화를 확인하기 위해 맵에 엔티티를 추가하고, 머티리얼을 지정해봅시다. 머티리얼 지정 방법은 [머티리얼 응용하기](/docs?postId=1323)를 참고하세요. 1. 맵에 새로운 **SpeedUpLight** 엔티티를 생성하고, **TriggerComponent**를 추가합니다 [chunk_id] | Guides:1370:3
[task] | extract_knowledge [title] | 클라이언트의 TimeScale 조정하기 [category] | Guides [rephrased] | # 클라이언트 TimeScale 조정 시 동기화 문제 ## 1. 개념 설명 mLua 환경에서 `TimeScale`은 해당 클라이언트의 시간 진행 속도를 제어하는 값입니다. 한 월드에 접속한 여러 클라이언트가 서로 다른 `TimeScale` 값을 가질 경우, 각 클라이언트는 **자신의** `TimeScale`에 따라 월드 속도를 인식합니다. 이때 위치 정보의 동기화에 중요한 제약이 발생합니다. * **위치 동기화**: 다른 플레이어의 위치 정보는 **해당 위치를 소유한 클라이언트(예: 플레이어B의 클라이언트)** 의 `Time [original] | 한 월드에 접속한 여러 클라이언트가 서로 다른 TimeScale 값을 가질 때 클라이언트는 각각의 월드 속도를 따릅니다. 예를 들어 플레이어A는 TimeScale 값이 빨라지는 영역에 있고, 플레이어B는 TimeScale 값이 느린 영역에 있는 상황이라 생각해봅시다. 플레이어A의 TimeScale이 빠름에도 플레이어B가 뛰는 모습이 매우 느리게 보입니다. 플레이어B의 위치 정보는 클라이언트B의 TimeScale에 따라 변화 속도가 결정되기 때문입니다. 이 때문에 클라이언트B의 속도가 느리다면, 클라이언트A에서도 플레이어B의 이동 및 [chunk_id] | Guides:1370:2
[task] | wikipedia [title] | 클라이언트의 TimeScale 조정하기 [category] | Guides [rephrased] | # 게임 로직 클라이언트의 TimeScale 조정하기 mLua에서 `UtilLogic:SetClientTimeScale()` 메서드를 호출하면, 해당 클라이언트 환경에서 실행되는 특정 게임 로직 및 시스템의 시간 흐름이 조절됩니다. 이 메서드의 영향을 받는 대상과 영향을 받지 않는 대상은 다음과 같이 구분됩니다. ## 영향을 받는 대상 `UtilLogic:SetClientTimeScale()` 호출 시 시간 흐름이 변하는 대상과 그 조건은 다음과 같습니다. **AIComponent** `OnBehave()` 메서드에 전달되는 [original] | `UtilLogic:SetClientTimeScale()`에 영향을 받는 목록입니다. 이름 | 설명 | ---|---| AIComponent | `OnBehave()`의 `Delta`이 TimeScale 값을 곱한 값만큼 변합니다. AIComponent 컴포넌트의 **UpdateAuthority**가 Client일 때 영향을 받습니다. | BackgroundComponent | 타입이 Template인 경우 배경의 애니메이션이 영향을 받습니다. | CameraComponent| `ZoomTo()`가 영향을 받습니다. | [chunk_id] | Guides:1370:1
[task] | diverse_qa [title] | 클라이언트의 TimeScale 조정하기 [category] | Guides [rephrased] | 질문: 한 월드에 접속한 여러 클라이언트가 서로 다른 TimeScale 값을 가질 때 각 클라이언트는 어떤 속도를 따르나요? 답변: 각 클라이언트는 자신의 TimeScale 값을 따릅니다. 질문: 플레이어A가 TimeScale이 빠른 영역에 있고, 플레이어B가 TimeScale이 느린 영역에 있을 때, 클라이언트A에서 플레이어B의 이동은 어떻게 보이나요? 답변: 클라이언트A에서도 플레이어B의 이동 및 위치 변화가 매우 느리게 반영됩니다. 질문: 클라이언트A에서 플레이어B의 이동이 느리게 보이는 원인은 무엇인가요? 답변: 플레이어 [original] | 한 월드에 접속한 여러 클라이언트가 서로 다른 TimeScale 값을 가질 때 클라이언트는 각각의 월드 속도를 따릅니다. 예를 들어 플레이어A는 TimeScale 값이 빨라지는 영역에 있고, 플레이어B는 TimeScale 값이 느린 영역에 있는 상황이라 생각해봅시다. 플레이어A의 TimeScale이 빠름에도 플레이어B가 뛰는 모습이 매우 느리게 보입니다. 플레이어B의 위치 정보는 클라이언트B의 TimeScale에 따라 변화 속도가 결정되기 때문입니다. 이 때문에 클라이언트B의 속도가 느리다면, 클라이언트A에서도 플레이어B의 이동 및 [chunk_id] | Guides:1370:2
[task] | knowledge_list [title] | 클라이언트의 TimeScale 조정하기 [category] | Guides [rephrased] | `UtilLogic:SetClientTimeScale()` 함수에 의해 영향을 받는 대상과 영향을 받지 않는 대상, 그리고 각 대상의 구체적인 제약 조건 및 동작 방식을 정리한 핵심 사실 목록입니다. 1. `AIComponent`의 `OnBehave()` 메서드에서 전달되는 `Delta` 값은 `TimeScale` 값과 곱해져 변경되며, 이 영향은 해당 컴포넌트의 `UpdateAuthority`가 `Client`일 때만 발생합니다. 2. `BackgroundComponent`는 타입이 `Template`인 경우에만 배경 애니메이션 [original] | `UtilLogic:SetClientTimeScale()`에 영향을 받는 목록입니다. 이름 | 설명 | ---|---| AIComponent | `OnBehave()`의 `Delta`이 TimeScale 값을 곱한 값만큼 변합니다. AIComponent 컴포넌트의 **UpdateAuthority**가 Client일 때 영향을 받습니다. | BackgroundComponent | 타입이 Template인 경우 배경의 애니메이션이 영향을 받습니다. | CameraComponent| `ZoomTo()`가 영향을 받습니다. | [chunk_id] | Guides:1370:1
[task] | extract_knowledge [title] | Physics Owner 지정하기 [category] | Guides [rephrased] | # 충돌 Physics Owner 지정하기 ## 1. 개념 설명 메이플스토리 월드(mLua)에서 물리 연산(충돌 감지, 힘 적용 등)이 수행되는 대상은 **Physics Owner**로 설정할 수 있습니다. 기본적으로 물리 연산은 클라이언트에서 수행되지만, `SetServerAsPhysicsOwner()` 메서드를 호출하여 Physics Owner를 **Server**로 변경할 수 있습니다. * **Server Owner:** 충돌 이벤트 전달 및 명령 수행이 서버에서 처리됩니다. 충돌 발생 시 명령이 즉시 실행되고 동기화 [original] | `SetServerAsPhysicsOwner()` 사용해 Physics Owner를 **Server**로 설정하면 서버에서 충돌 이벤트 전달, 명령 전달 등 모든 물리 연산과 관련된 처리를 서버에서 처리합니다. 충돌 후의 명령을 바로 수행하고, 동기화할 수 있기 때문에 충돌 시 지연되는 모습이 나타나지 않습니다. 그러나 서버에서 연산을 과도하게 처리할 경우 부하가 발생해 월드가 느려지게 될 수 있습니다. 서버에서 물리 연산을 할 경우 불필요한 연산을 최소화하고, 프로파일러와 디버깅을 활용해 월드의 성능을 최적화하는 작업을 반드시 [chunk_id] | Guides:1369:4
[task] | distill [title] | DataStorage 사용량 제한 활용하기 2 [category] | Guides [rephrased] | # DB DataStorage 사용량 제한 활용하기 2 DataStorage의 **Credit** 소모를 줄이기 위해, 데이터 값이 변경될 때만 저장 요청을 보내는 패턴을 사용하세요. ### 핵심 규칙 * **조건부 저장**: `SetAndWait`, `SetAsync` 호출 전, 기존 값과 새 값이 동일한지 비교하여 동일하면 요청을 생략합니다. * **캐싱 전략**: 다른 인스턴스에서 수정 가능성이 없는 데이터는 월드 인스턴스의 **Lua Table**에 캐싱하는 것을 권장합니다. * **주의사항**: * [original] | # 학습 과정 소개 DataStorage를 효율적으로 활용하지 않으면 사용량 제한에 도달해 데이터 저장, 조회에 실패해 데이터를 관리에 어려움을 겪을 수 있습니다. DataStorage의 사용량을 효과적으로 관리하는 방법에 대해 알아봅시다. ##### 가이드 * [DataStorage 사용량 제한 알아보기](https://maplestoryworlds-creators.nexon.com/ko/docs/?postId=1044) * [DataStorage 사용량 제한 활용하기](https://maplestoryworlds-creato [chunk_id] | Guides:1372:0
[task] | knowledge_list [title] | 클라이언트의 TimeScale 조정하기 [category] | Guides [rephrased] | 제시된 문서에 명시된 정보만을 기반으로 핵심 사실을 정리한 목록입니다. 1. `CurrentTime` 로직 컴포넌트의 `NowTimeScale` 프로퍼티는 `[None]` 동기화 속성을 가지며, 기본값은 `1`인 `number` 타입입니다. 2. `ChangeSpeed` 컴포넌트의 `ChangeRate` 프로퍼티는 `[Sync]` 동기화 속성을 가지며, 기본값은 `0`인 `number` 타입입니다. 3. `ChangeSpeed` 컴포넌트의 `ChangeScale` 메서드는 `[client]` 실행 공간에서만 동작하며, `_Curr [original] | 주황색 광선 영역에 닿으면 TimeScale 값이 증가하고, 초록색 광선 영역에서는 TimeScale 값이 감소하게 만들어 봅시다. TimeScale 값 변화에 따라 월드 전체의 시간의 흐름이 달라지는 것을 확인할 수 있습니다. TimeScale의 변화를 확인하기 위해 맵에 엔티티를 추가하고, 머티리얼을 지정해봅시다. 머티리얼 지정 방법은 [머티리얼 응용하기](/docs?postId=1323)를 참고하세요. 1. 맵에 새로운 **SpeedUpLight** 엔티티를 생성하고, **TriggerComponent**를 추가합니다 [chunk_id] | Guides:1370:3
[task] | distill [title] | AI 스킬 셋 설치 [category] | Guides [rephrased] | ## MCP AI 스킬 셋 설치 ### 사전 요구 사항 - **월드 설정**: `LocalWorkspace`, `ExtendedScriptFormat` 활성화 필수. - **AI 에이전트**: VS Code, Cursor, Claude Code 등 설치 및 구독 완료 상태. - **OS/클라이언트**: - macOS: Apple Silicon(arm64) 또는 Intel(x86_64)에 맞는 클라이언트 설치. - macOS Gatekeeper 차단 시: **시스템 설정 > 개인정보 보호 및 보안**에서 바이너리 실행 [original] | ## 사전 준비 AI 스킬 셋을 사용하려면 몇 가지 사전 준비가 필요합니다. - 크리에이터의 월드가 **LocalWorkspace, ExtendedScriptFormat**을 모두 활성화한 상태여야 합니다. - [VS Code](https://code.visualstudio.com), [Cursor](https://cursor.com), [Claude Code](https://claude.com/product/claude-code) 등 크리에이터가 사용할 AI 에이전트가 **설치, 구독**된 상태여야 합니다. - macOS의 경 [chunk_id] | Guides:1373:0
[task] | knowledge_list [title] | DataStorage 사용량 제한 활용하기 2 [category] | Guides [rephrased] | 제공된 문서의 내용을 바탕으로 핵심 사실을 추출하여 정리한 목록입니다. 1. `DataStorage`의 `SetAndWait` 및 `SetAsync`와 같은 `Set` 계열 함수를 호출할 경우, 저장하려는 신규 데이터와 이전 데이터가 동일하더라도 **Credit**이 소모되므로, 값이 변경되었을 때만 DataStorage로 변경 요청을 보내는 것이 Credit 절약에 효과적입니다. 2. 특정 유저가 여러 인스턴스에 동시에 접속하여 데이터를 변경하는 상황이 아닌 경우, `UserDataStorage`에 대해 데이터 변경 시에만 저장 [original] | # 학습 과정 소개 DataStorage를 효율적으로 활용하지 않으면 사용량 제한에 도달해 데이터 저장, 조회에 실패해 데이터를 관리에 어려움을 겪을 수 있습니다. DataStorage의 사용량을 효과적으로 관리하는 방법에 대해 알아봅시다. ##### 가이드 * [DataStorage 사용량 제한 알아보기](https://maplestoryworlds-creators.nexon.com/ko/docs/?postId=1044) * [DataStorage 사용량 제한 활용하기](https://maplestoryworlds-creato [chunk_id] | Guides:1372:0
[task] | diverse_qa [title] | DataStorage 사용량 제한 활용하기 2 [category] | Guides [rephrased] | 질문: DataStorage를 효율적으로 활용하지 못할 경우 어떤 문제가 발생할 수 있나요? 답변: DataStorage를 효율적으로 활용하지 않으면 사용량 제한에 도달하여 데이터 저장 및 조회에 실패하고, 데이터 관리에 어려움을 겪을 수 있습니다. 질문: Credit 소모를 줄이기 위해 DataStorage에 변경 요청을 보낼 때 지켜야 할 원칙은 무엇인가요? 답변: 값이 실제로 변경될 때만 DataStorage로 변경 요청을 보내야 Credit을 절약할 수 있습니다. 질문: 저장하고자 하는 신규 데이터와 이전 데이터가 동일한 [original] | # 학습 과정 소개 DataStorage를 효율적으로 활용하지 않으면 사용량 제한에 도달해 데이터 저장, 조회에 실패해 데이터를 관리에 어려움을 겪을 수 있습니다. DataStorage의 사용량을 효과적으로 관리하는 방법에 대해 알아봅시다. ##### 가이드 * [DataStorage 사용량 제한 알아보기](https://maplestoryworlds-creators.nexon.com/ko/docs/?postId=1044) * [DataStorage 사용량 제한 활용하기](https://maplestoryworlds-creato [chunk_id] | Guides:1372:0
[task] | knowledge_list [title] | AI 스킬 셋 설치 [category] | Guides [rephrased] | * AI 스킬 셋을 사용하려면 크리에이터의 월드가 `LocalWorkspace`와 `ExtendedScriptFormat` 옵션이 모두 활성화된 상태여야 합니다. * AI 스킬 셋을 사용하려면 VS Code, Cursor, Claude Code와 같은 AI 에이전트가 크리에이터 환경에 설치 및 구독되어 있어야 합니다. * macOS 환경에서는 Apple Silicon(arm64) 또는 Intel(x86_64) 아키텍처에 맞는 메이플스토리 월드 클라이언트가 설치되어 있어야 하며, Gatekeeper로 인해 실행이 차단될 경 [original] | ## 사전 준비 AI 스킬 셋을 사용하려면 몇 가지 사전 준비가 필요합니다. - 크리에이터의 월드가 **LocalWorkspace, ExtendedScriptFormat**을 모두 활성화한 상태여야 합니다. - [VS Code](https://code.visualstudio.com), [Cursor](https://cursor.com), [Claude Code](https://claude.com/product/claude-code) 등 크리에이터가 사용할 AI 에이전트가 **설치, 구독**된 상태여야 합니다. - macOS의 경 [chunk_id] | Guides:1373:0
[task] | distill [title] | AI ToolKit [category] | Guides [rephrased] | # MCP AI ToolKit AI ToolKit을 활성화하면 명령어로 월드를 제작할 수 있습니다. 사용 전 **로컬 워크스페이스**, **ExtendedScriptFormat**, **MCP 서버**, **AI 스킬 셋** 설정 및 별도 AI 에이전트 구독이 필수입니다. ## 1. 로컬 워크스페이스 및 ExtendedScriptFormat 1. `만들기 > AI와 함께 월드 만들기` 또는 `만들기 > 새로 만들기 > AI 스타터 템플릿`으로 월드 생성. 2. `AI Lab > AI ToolKit Settings` 진입. 3. [original] | 메이플스토리 월드에서 제공하는 AI ToolKit 기능을 활성화하면 간단한 명령을 통해 월드를 제작할 수 있습니다. AI ToolKit을 사용하기 위해서는 사전 준비 단계와 별도의 AI 에이전트 구독이 필요합니다. ## 로컬 워크스페이스 AI ToolKit을 사용하기 위해서는 반드시 **로컬 워크스페이스와 ExtendedScriptFormat**을 사용해야 합니다. 로컬 워크스페이스에 대한 내용은 [LocalWorkspace](docs/?postId=1165) 가이드를 참고하세요. AI ToolKit은 AI ToolKit Se [chunk_id] | Guides:1374:0
[task] | diverse_qa [title] | 클라이언트의 TimeScale 조정하기 [category] | Guides [rephrased] | 질문: `UtilLogic:SetClientTimeScale()`이 영향을 받는 컴포넌트 목록 중 AIComponent의 `OnBehave()` 메서드에서 어떤 값이 TimeScale에 영향을 받나요? 답변: AIComponent의 `OnBehave()` 메서드에서 `Delta` 값이 TimeScale 값을 곱한 값만큼 변합니다. 질문: AIComponent가 `UtilLogic:SetClientTimeScale()`의 영향을 받으려면 어떤 조건이 필요합니까? 답변: AIComponent 컴포넌트의 **UpdateAuthority [original] | `UtilLogic:SetClientTimeScale()`에 영향을 받는 목록입니다. 이름 | 설명 | ---|---| AIComponent | `OnBehave()`의 `Delta`이 TimeScale 값을 곱한 값만큼 변합니다. AIComponent 컴포넌트의 **UpdateAuthority**가 Client일 때 영향을 받습니다. | BackgroundComponent | 타입이 Template인 경우 배경의 애니메이션이 영향을 받습니다. | CameraComponent| `ZoomTo()`가 영향을 받습니다. | [chunk_id] | Guides:1370:1
[task] | wikipedia [title] | 클라이언트의 TimeScale 조정하기 [category] | Guides [rephrased] | # 게임 로직 클라이언트의 TimeScale 조정하기 본 문서는 메이플스토리 월드에서 클라이언트의 `TimeScale` 값을 조정하여 월드 전체의 시간 흐름을 변화시키는 방법을 설명한다. 예시 시나리오는 주황색 광선 영역에 닿으면 `TimeScale` 값이 증가하고, 초록색 광선 영역에서는 `TimeScale` 값이 감소하도록 설정하는 것이다. `TimeScale` 값의 변화에 따라 월드 내 시간의 흐름이 달라지는 효과를 확인할 수 있으며, 시각적 확인을 위해 맵에 엔티티를 추가하고 머티리얼을 지정할 수 있다. 머티리얼 지정 방법 [original] | 주황색 광선 영역에 닿으면 TimeScale 값이 증가하고, 초록색 광선 영역에서는 TimeScale 값이 감소하게 만들어 봅시다. TimeScale 값 변화에 따라 월드 전체의 시간의 흐름이 달라지는 것을 확인할 수 있습니다. TimeScale의 변화를 확인하기 위해 맵에 엔티티를 추가하고, 머티리얼을 지정해봅시다. 머티리얼 지정 방법은 [머티리얼 응용하기](/docs?postId=1323)를 참고하세요. 1. 맵에 새로운 **SpeedUpLight** 엔티티를 생성하고, **TriggerComponent**를 추가합니다 [chunk_id] | Guides:1370:3
[task] | extract_knowledge [title] | 클라이언트의 TimeScale 조정하기 [category] | Guides [rephrased] | # 게임 로직 클라이언트의 TimeScale 조정 ## 개념 설명 `UtilLogic:SetClientTimeScale()` 메서드는 클라이언트 측에서 실행되는 특정 게임 로직 및 컴포넌트의 시간 흐름 속도를 조절하는 API입니다. 이 메서드를 통해 설정된 값은 해당 클라이언트 내에서 지정된 대상들의 동작 속도(가속 또는 감속)에 곱셈 연산으로 적용됩니다. 서버 로직이나 TimeScale 조절 대상이 아닌 시스템은 이 설정의 영향을 받지 않습니다. ## API 사용법 및 영향 범위 ### 1. TimeScale에 영향을 받는 [original] | `UtilLogic:SetClientTimeScale()`에 영향을 받는 목록입니다. 이름 | 설명 | ---|---| AIComponent | `OnBehave()`의 `Delta`이 TimeScale 값을 곱한 값만큼 변합니다. AIComponent 컴포넌트의 **UpdateAuthority**가 Client일 때 영향을 받습니다. | BackgroundComponent | 타입이 Template인 경우 배경의 애니메이션이 영향을 받습니다. | CameraComponent| `ZoomTo()`가 영향을 받습니다. | [chunk_id] | Guides:1370:1
[task] | wikipedia [title] | DataStorage 사용량 제한 활용하기 2 [category] | Guides [rephrased] | # DataStorage 사용량 제한 활용하기 (2): 데이터 저장 최적화 DataStorage는 사용량 제한이 존재하며, 이 제한에 도달하면 데이터 저장 및 조회 요청이 실패하여 데이터 관리에 차질이 생길 수 있습니다. 이를 방지하기 위해 DataStorage의 사용량을 효율적으로 관리하는 기법을 적용할 필요가 있습니다. 본 가이드에서는 DataStorage의 Credit 소모를 줄이는 구체적인 방법 중 하나인 '데이터 저장 최소화' 전략을 다룹니다. ## 관련 가이드 * [DataStorage 사용량 제한 알아보기](h [original] | # 학습 과정 소개 DataStorage를 효율적으로 활용하지 않으면 사용량 제한에 도달해 데이터 저장, 조회에 실패해 데이터를 관리에 어려움을 겪을 수 있습니다. DataStorage의 사용량을 효과적으로 관리하는 방법에 대해 알아봅시다. ##### 가이드 * [DataStorage 사용량 제한 알아보기](https://maplestoryworlds-creators.nexon.com/ko/docs/?postId=1044) * [DataStorage 사용량 제한 활용하기](https://maplestoryworlds-creato [chunk_id] | Guides:1372:0