[task] | knowledge_list [title] | 플레이 화면 녹화 및 공유하기 [category] | Guides [rephrased] | 1. UI 에디터에서 **DefaultGroup**에 **UIText** 컴포넌트를 추가할 때, 프로퍼티 `RectSize`는 `X = 700, Y = 100`으로, `Text`는 `"ScreenRecordService TEST"`로, `FontSize`는 `50`으로, `ImageRUID`는 `"b9ab8455d5737bf4cb21433f00fdc19d"`로, `Color`는 `A = 100%, #FFFFFF`로 설정해야 한다. 2. 스크립트 컴포넌트의 `Property:` 블록에는 `[None]` 동기화 속성을 가진 `Entit [original] | # UI 가리고 영상 녹화하기 UI를 가리고 영상을 녹화하는 방법을 살펴봅시다. 1. UI 에디터로 들어가서 **DefaultGroup**에 **UIText**를 하나 추가하고 프로퍼티를 아래와 같이 설정합니다. | 프로퍼티 | 값 | | --- | --- | | RectSize | X = 700, Y = 100 | | Text | ScreenRecordService TEST | | FontSize | 50 | | ImageRUID | b9ab8455d5737bf4cb21433 [chunk_id] | Guides:997:4
[task] | diverse_qa [title] | 테스트 서버 [category] | Guides [rephrased] | 질문: 크리에이터가 출시한 월드에 콘텐츠 업데이트를 안정적으로 하기 위해 필요한 절차는 무엇인가요? 답변: 크리에이터는 테스트 서버를 열고 제한된 인원에게만 서버 키를 배포하여 다양한 상황을 테스트해야 합니다. 질문: 테스트 서버를 생성하기 위해 크리에이터는 어디로 들어가야 하는가요? 답변: 크리에이터가 출시한 월드의 상세 정보 페이지로 들어가야 합니다. 질문: 월드 상세 정보 페이지에서 테스트 서버를 열기 위해 클릭해야 하는 버튼과 메뉴 순서는 무엇인가요? 답변: [⋯] 버튼을 눌러 콘텍스트 메뉴를 열고 **[테스트 서버 열기 [original] | # 학습 과정 소개 출시한 월드에 안정적으로 콘텐츠 업데이트를 하려면 테스트 진행은 필수입니다. 예상치 못한 버그를 미리 발견하고 수정하기 위해 크리에이터는 테스트 서버를 열고 제한된 인원에게만 서버 키를 배포해 다양한 상황을 테스트할 수 있습니다. 이번 시간에는 테스트 서버 생성, 접속 및 폐쇄 방법을 알아보겠습니다. # 테스트 서버 생성 크리에이터가 출시한 월드의 상세 정보 페이지로 들어갑니다. [⋯] 버튼을 눌러 콘텍스트 메뉴를 열고 **[테스트 서버 열기]** 메뉴를 클릭합니다. 이후 열린 팝업창에서 테스트 서버로 [chunk_id] | Guides:998:0
[task] | extract_knowledge [title] | 플레이 화면 녹화 및 공유하기 [category] | Guides [rephrased] | # 스크린 녹화 및 저장 경로 관리 메이플스토리 월드(mLua)에서는 `_ScreenRecordService` 서비스를 통해 클라이언트 화면을 녹화하고 파일 시스템이나 사진 앨범에 저장하는 기능을 제공합니다. 녹화 시작 시점에 사용된 함수 유형과 플랫폼에 따라 최종 파일이 저장되는 경로가 달라지며, 녹화 종료 시 `FinishRecordAndWait()` 함수를 호출하여 저장된 파일의 경로를 반환받습니다. ## 1. 저장 경로 규정 녹화 파일의 저장 위치는 운영 체제(플랫폼)와 녹화 시작 시 호출한 API에 따라 다음과 같이 [original] | | 플랫폼 | StartRecordToFileAndWait() 함수 사용 시 저장 경로 | StartRecordToPhotoLibraryAndWait() 함수 사용 시 저장 경로 | | :---: | :---: | :---: | | Windows | @cols=2:@rows=1:내 PC > 동영상 > MapleStory Worlds > 월드 ID > MapleStory Worlds_*.mp4 | | macOS | @cols=2:@rows=1: 홈 > 비디오 > MapleStory Worlds > 월드 ID [chunk_id] | Guides:997:2
[task] | extract_knowledge [title] | 플레이 화면 녹화 및 공유하기 [category] | Guides [rephrased] | # 모바일 영상 공유: MobileShareService ## 개념 설명 `MobileShareService`는 게임에서 녹화한 영상 파일을 모바일 기기의 공유 시트로 전달하기 위한 서비스입니다. 이 서비스를 사용하려면 영상은 반드시 `StartRecordToFileAndWait()` 함수를 통해 녹화되어야 하며, 녹화 시간은 최대 2분으로 제한됩니다. ## API 사용법 * **`_MobileShareService:ShareFileAndWait(filePath)`**: 지정된 경로(`filePath`)의 파일을 공유 시트에 [original] | `MobileShareService`를 사용하면 녹화한 영상을 모바일에서 공유할 수 있습니다. 공유할 영상은 `StartRecordToFileAndWait()` 함수를 사용해 녹화해야 합니다. 단, 녹화 시간은 최대 2분으로 제한됩니다. 예제를 통해 모바일에서 녹화 영상을 공유하는 방법을 살펴봅시다. 1. **Btn_Record** 버튼의 콘텍스트 메뉴에서 **Duplicate** 버튼을 눌러 버튼을 복제합니다. 2. 복제한 버튼의 이름을 **Btn_Share**으로 변경하고, **Text**에는 **Share**을 [chunk_id] | Guides:997:5
[task] | wikipedia [title] | 플레이 화면 녹화 및 공유하기 [category] | Guides [rephrased] | # UI 가리고 영상 녹화하기 UI를 가린 상태에서 영상을 녹화하는 과정은 UI 에디터 설정과 스크립트 로직 수정으로 나뉩니다. 먼저 UI 에디터에서 `DefaultGroup` 안에 `UIText` 컴포넌트를 추가하고 특정 프로퍼티 값을 지정해야 합니다. 이 텍스트 컴포넌트의 `RectSize`는 X축 700, Y축 100으로 설정하며, 표시할 텍스트(`Text`)는 "ScreenRecordService TEST", 글자 크기(`FontSize`)는 50으로 정합니다. 또한 `ImageRUID` 값은 `b9ab8455d5737b [original] | # UI 가리고 영상 녹화하기 UI를 가리고 영상을 녹화하는 방법을 살펴봅시다. 1. UI 에디터로 들어가서 **DefaultGroup**에 **UIText**를 하나 추가하고 프로퍼티를 아래와 같이 설정합니다. | 프로퍼티 | 값 | | --- | --- | | RectSize | X = 700, Y = 100 | | Text | ScreenRecordService TEST | | FontSize | 50 | | ImageRUID | b9ab8455d5737bf4cb21433 [chunk_id] | Guides:997:4
[task] | distill [title] | 월드 인스턴스 통신 [category] | Guides [rephrased] | # 월드 인스턴스 통신 `WorldInstanceService`와 `WorldInstanceSharedMemory`를 사용하여 월드 인스턴스 간 데이터 공유 및 이벤트 전달을 구현합니다. (룸 통신은 `RoomService`/`RoomSharedMemory` 사용) ## WorldInstanceSharedMemory 월드 인스턴스는 직접 통신이 불가능하여 공유 변수 모음인 `WorldInstanceSharedMemory`를 통해 데이터를 주고받습니다. * **휘발성(Volatile)**: 해당 메모리를 참조하는 월드 인스턴 [original] | # 학습 과정 소개 `WorldInstanceService`와 `WorldInstanceSharedMemory`를 활용해 월드 인스턴스끼리 데이터를 공유하고 이벤트를 보내는 방법에 대해 알아봅시다. 월드 인스턴스와 룸 개념은 [월드 인스턴스](/docs?postId=984), [인스턴스 맵 만들기](/docs/?postId=540) 가이드를 참고하세요. >**Tip.** > 룸끼리의 통신을 구현하고 싶다면 `RoomService`의 동일한 함수명을 사용해보세요. # WorldInstanceSharedMemory 월드 인스턴스 [chunk_id] | Guides:999:0
[task] | distill [title] | 월드 인스턴스 통신 [category] | Guides [rephrased] | ### 월드 인스턴스 통신: WorldInstanceSharedMemory **공유 변수 참조 규칙** 월드 인스턴스는 공유 변수를 생성, 조회, 수정하는 순간 해당 변수를 **참조 상태**로 유지합니다. 이 참조는 변수가 삭제될 때까지 지속됩니다. * **주의**: 여러 인스턴스가 참조 중인 변수를 특정 인스턴스가 직접 삭제하면, 다른 인스턴스에서도 해당 변수를 사용할 수 없게 됩니다. * **권장 사항**: 삭제 대신 **참조 해제(Release)** 방식을 사용하세요. 모든 인스턴스에서 참조를 해제하면 변수가 자동으로 [original] | 월드 인스턴스가 공유 변수를 생성, 조회, 수정을 하면 해당 공유 변수를 참조한 상태가 됩니다. 한 번 특정 공유 변수를 참조한 월드 인스턴스는 공유 변수가 삭제될 때까지 계속 참조 상태를 유지합니다. 만약 어떤 공유 변수를 여러 월드 인스턴스에서 참조하고 있을 때 특정 월드 인스턴스에서 해당 공유 변수를 삭제해버리면 다른 월드 인스턴스에서 공유 변수를 사용할 수 없게 됩니다. 이처럼 한 곳에서 데이터를 삭제했지만 전체 월드 인스턴스에게 영향을 주는 사고를 방지하기 위해 메이플스토리 월드는 WorldInstanceSharedMemo [chunk_id] | Guides:999:1
[task] | diverse_qa [title] | 플레이 화면 녹화 및 공유하기 [category] | Guides [rephrased] | 질문: `MobileShareService`의 주요 용도는 무엇인가요? 답변: 녹화한 영상을 모바일에서 공유할 수 있도록 하는 서비스입니다. 질문: 모바일에서 공유할 수 있는 영상은 어떤 함수를 사용해 녹화해야 하나요? 답변: `StartRecordToFileAndWait()` 함수를 사용해 녹화해야 합니다. 질문: 모바일 공유용 영상 녹화의 최대 제한 시간은 얼마인가요? 답변: 녹화 시간은 최대 2분으로 제한됩니다. 질문: 다음 코드가 수행하는 주된 동작은 무엇인가요? ```lua local shared = _MobileSh [original] | `MobileShareService`를 사용하면 녹화한 영상을 모바일에서 공유할 수 있습니다. 공유할 영상은 `StartRecordToFileAndWait()` 함수를 사용해 녹화해야 합니다. 단, 녹화 시간은 최대 2분으로 제한됩니다. 예제를 통해 모바일에서 녹화 영상을 공유하는 방법을 살펴봅시다. 1. **Btn_Record** 버튼의 콘텍스트 메뉴에서 **Duplicate** 버튼을 눌러 버튼을 복제합니다. 2. 복제한 버튼의 이름을 **Btn_Share**으로 변경하고, **Text**에는 **Share**을 [chunk_id] | Guides:997:5
[task] | wikipedia [title] | 월드 인스턴스 통신 [category] | Guides [rephrased] | `WorldInstanceService`와 `WorldInstanceSharedMemory`는 메이플스토리 월드(MapleStory Worlds)에서 서로 다른 월드 인스턴스(World Instance) 간 데이터 공유 및 이벤트 전송을 가능하게 하는 핵심 API입니다. 월드 인스턴스와 룸(Room)의 개념적 정의는 각각 '월드 인스턴스' 및 '인스턴스 맵 만들기' 가이드 문서를 참고할 수 있으며, 룸 단위의 통신을 구현하고자 할 경우 `RoomService`에서 제공하는 동일한 함수명을 사용하는 것이 권장됩니다. 월드 인스턴스는 [original] | # 학습 과정 소개 `WorldInstanceService`와 `WorldInstanceSharedMemory`를 활용해 월드 인스턴스끼리 데이터를 공유하고 이벤트를 보내는 방법에 대해 알아봅시다. 월드 인스턴스와 룸 개념은 [월드 인스턴스](/docs?postId=984), [인스턴스 맵 만들기](/docs/?postId=540) 가이드를 참고하세요. >**Tip.** > 룸끼리의 통신을 구현하고 싶다면 `RoomService`의 동일한 함수명을 사용해보세요. # WorldInstanceSharedMemory 월드 인스턴스 [chunk_id] | Guides:999:0
[task] | knowledge_list [title] | 월드 인스턴스 통신 [category] | Guides [rephrased] | - `WorldInstanceService`와 `WorldInstanceSharedMemory`는 월드 인스턴스끼리 데이터를 공유하고 이벤트를 보내는 데 사용됩니다. - 룸끼리의 통신을 구현하고자 할 경우 `RoomService`의 동일한 함수명을 사용하거나 `RoomService`와 `RoomSharedMemory`를 활용할 수 있습니다. - 월드 인스턴스끼리는 직접적으로 통신할 수 없으므로, 데이터를 공유하기 위해서는 `WorldInstanceSharedMemory`를 사용해야 합니다. - `WorldInstanceSharedM [original] | # 학습 과정 소개 `WorldInstanceService`와 `WorldInstanceSharedMemory`를 활용해 월드 인스턴스끼리 데이터를 공유하고 이벤트를 보내는 방법에 대해 알아봅시다. 월드 인스턴스와 룸 개념은 [월드 인스턴스](/docs?postId=984), [인스턴스 맵 만들기](/docs/?postId=540) 가이드를 참고하세요. >**Tip.** > 룸끼리의 통신을 구현하고 싶다면 `RoomService`의 동일한 함수명을 사용해보세요. # WorldInstanceSharedMemory 월드 인스턴스 [chunk_id] | Guides:999:0
[task] | wikipedia [title] | 월드 인스턴스 통신 [category] | Guides [rephrased] | # 월드 인스턴스 통신 메이플스토리 월드에서 월드 인스턴스는 공유 변수에 대한 생성, 조회, 수정 작업을 수행할 때 해당 공유 변수를 참조하는 상태로 전환됩니다. 특정 월드 인스턴스가 한 번 공유 변수를 참조한 이후에는, 해당 공유 변수가 삭제될 때까지 참조 상태를 지속적으로 유지합니다. 이러한 참조 메커니즘으로 인해, 여러 월드 인스턴스가 동일한 공유 변수를 참조하고 있는 상황에서 특정 월드 인스턴스가 해당 변수를 강제로 삭제할 경우, 나머지 월드 인스턴스들이 더 이상 해당 공유 변수를 사용할 수 없게 되는 문제가 발생할 수 있 [original] | 월드 인스턴스가 공유 변수를 생성, 조회, 수정을 하면 해당 공유 변수를 참조한 상태가 됩니다. 한 번 특정 공유 변수를 참조한 월드 인스턴스는 공유 변수가 삭제될 때까지 계속 참조 상태를 유지합니다. 만약 어떤 공유 변수를 여러 월드 인스턴스에서 참조하고 있을 때 특정 월드 인스턴스에서 해당 공유 변수를 삭제해버리면 다른 월드 인스턴스에서 공유 변수를 사용할 수 없게 됩니다. 이처럼 한 곳에서 데이터를 삭제했지만 전체 월드 인스턴스에게 영향을 주는 사고를 방지하기 위해 메이플스토리 월드는 WorldInstanceSharedMemo [chunk_id] | Guides:999:1
[task] | wikipedia [title] | 플레이 화면 녹화 및 공유하기 [category] | Guides [rephrased] | # 모바일에서 게임 로직/시스템 플레이 화면 녹화 및 공유하기 `MobileShareService`는 녹화한 영상을 모바일 기기에서 다른 앱이나 서비스로 공유하기 위한 기능을 제공합니다. 이 서비스를 통해 공유하고자 하는 영상은 반드시 `StartRecordToFileAndWait()` 함수를 사용하여 녹화해야 합니다. 이 방식의 녹화 시간은 최대 2분으로 제한됩니다. 본 문서에서는 예제를 통해 모바일에서 녹화 영상을 공유하는 전체 흐름을 단계별로 설명합니다. ## 구현 단계 1. **UI 요소 복제 및 설정** ` [original] | `MobileShareService`를 사용하면 녹화한 영상을 모바일에서 공유할 수 있습니다. 공유할 영상은 `StartRecordToFileAndWait()` 함수를 사용해 녹화해야 합니다. 단, 녹화 시간은 최대 2분으로 제한됩니다. 예제를 통해 모바일에서 녹화 영상을 공유하는 방법을 살펴봅시다. 1. **Btn_Record** 버튼의 콘텍스트 메뉴에서 **Duplicate** 버튼을 눌러 버튼을 복제합니다. 2. 복제한 버튼의 이름을 **Btn_Share**으로 변경하고, **Text**에는 **Share**을 [chunk_id] | Guides:997:5
[task] | extract_knowledge [title] | 테스트 서버 [category] | Guides [rephrased] | # 테스트 서버 관리 테스트 서버는 출시된 월드에서 콘텐츠 업데이트 전 버그를 사전에 발견하고 수정하기 위해 사용되는 기능입니다. 크리에이터는 테스트 서버를 생성하고, 제한된 인원에게 서버 키를 배포하여 특정 환경에서의 안정성을 검증한 후 서버를 폐쇄할 수 있습니다. ## 개념 및 동작 원리 테스트 서버는 일반 월드와 분리된 독립적인 인스턴스로 동작합니다. * **접근 제어**: 테스트 서버에 접속하기 위해서는 반드시 **서버 키**가 필요합니다. * **폐쇄 시 효과**: 테스트 서버가 폐쇄되면 해당 서버에 연결된 서 [original] | # 학습 과정 소개 출시한 월드에 안정적으로 콘텐츠 업데이트를 하려면 테스트 진행은 필수입니다. 예상치 못한 버그를 미리 발견하고 수정하기 위해 크리에이터는 테스트 서버를 열고 제한된 인원에게만 서버 키를 배포해 다양한 상황을 테스트할 수 있습니다. 이번 시간에는 테스트 서버 생성, 접속 및 폐쇄 방법을 알아보겠습니다. # 테스트 서버 생성 크리에이터가 출시한 월드의 상세 정보 페이지로 들어갑니다. [⋯] 버튼을 눌러 콘텍스트 메뉴를 열고 **[테스트 서버 열기]** 메뉴를 클릭합니다. 이후 열린 팝업창에서 테스트 서버로 [chunk_id] | Guides:998:0
[task] | diverse_qa [title] | 플레이 화면 녹화 및 공유하기 [category] | Guides [rephrased] | 질문: UI를 가리고 영상을 녹화하기 위해 UI 에디터의 DefaultGroup에 추가해야 하는 컴포넌트는 무엇인가요? 답변: UIText 컴포넌트를 하나 추가해야 합니다. 질문: 테스트용 UIText의 FontSize 값은 얼마로 설정해야 하나요? 답변: 50으로 설정해야 합니다. 질문: ScreenRecordServiceTest 스크립트의 Property 블록에서 DefaultGroup의 타입은 무엇이며, 어떤 값을 가리키나요? 답변: 타입은 EntityRef이며, 값은 "/ui/DefaultGroup"입니다. 질문: Re [original] | # UI 가리고 영상 녹화하기 UI를 가리고 영상을 녹화하는 방법을 살펴봅시다. 1. UI 에디터로 들어가서 **DefaultGroup**에 **UIText**를 하나 추가하고 프로퍼티를 아래와 같이 설정합니다. | 프로퍼티 | 값 | | --- | --- | | RectSize | X = 700, Y = 100 | | Text | ScreenRecordService TEST | | FontSize | 50 | | ImageRUID | b9ab8455d5737bf4cb21433 [chunk_id] | Guides:997:4
[task] | knowledge_list [title] | 월드 인스턴스 통신 [category] | Guides [rephrased] | 제시된 문서에 기반하여 핵심 사실을 추출한 목록입니다. * 월드 인스턴스가 공유 변수에 대해 생성, 조회, 수정 작업을 수행하면 해당 월드 인스턴스는 해당 공유 변수를 참조하는 상태가 됩니다. * 한 번 특정 공유 변수를 참조한 월드 인스턴스는 해당 공유 변수가 삭제될 때까지 지속적으로 참조 상태를 유지합니다. * 여러 월드 인스턴스가 동일한 공유 변수를 참조하고 있을 때, 특정 월드 인스턴스에서 해당 공유 변수를 직접 삭제하면 다른 월드 인스턴스에서도 해당 공유 변수를 사용할 수 없게 됩니다. * 한 곳에서 데이터 [original] | 월드 인스턴스가 공유 변수를 생성, 조회, 수정을 하면 해당 공유 변수를 참조한 상태가 됩니다. 한 번 특정 공유 변수를 참조한 월드 인스턴스는 공유 변수가 삭제될 때까지 계속 참조 상태를 유지합니다. 만약 어떤 공유 변수를 여러 월드 인스턴스에서 참조하고 있을 때 특정 월드 인스턴스에서 해당 공유 변수를 삭제해버리면 다른 월드 인스턴스에서 공유 변수를 사용할 수 없게 됩니다. 이처럼 한 곳에서 데이터를 삭제했지만 전체 월드 인스턴스에게 영향을 주는 사고를 방지하기 위해 메이플스토리 월드는 WorldInstanceSharedMemo [chunk_id] | Guides:999:1
[task] | diverse_qa [title] | 월드 인스턴스 통신 [category] | Guides [rephrased] | 질문: 월드 인스턴스가 공유 변수를 생성, 조회, 수정하면 어떤 상태가 되나요? 답변: 해당 공유 변수를 참조한 상태가 됩니다. 질문: 한 번 특정 공유 변수를 참조한 월드 인스턴스는 언제까지 참조 상태를 유지하나요? 답변: 공유 변수가 삭제될 때까지 계속 참조 상태를 유지합니다. 질문: 여러 월드 인스턴스에서 참조 중인 공유 변수를 특정 월드 인스턴스에서 삭제하면 어떤 문제가 발생하나요? 답변: 다른 월드 인스턴스에서 공유 변수를 사용할 수 없게 됩니다. 질문: 메이플스토리 월드는 WorldInstanceSharedMemor [original] | 월드 인스턴스가 공유 변수를 생성, 조회, 수정을 하면 해당 공유 변수를 참조한 상태가 됩니다. 한 번 특정 공유 변수를 참조한 월드 인스턴스는 공유 변수가 삭제될 때까지 계속 참조 상태를 유지합니다. 만약 어떤 공유 변수를 여러 월드 인스턴스에서 참조하고 있을 때 특정 월드 인스턴스에서 해당 공유 변수를 삭제해버리면 다른 월드 인스턴스에서 공유 변수를 사용할 수 없게 됩니다. 이처럼 한 곳에서 데이터를 삭제했지만 전체 월드 인스턴스에게 영향을 주는 사고를 방지하기 위해 메이플스토리 월드는 WorldInstanceSharedMemo [chunk_id] | Guides:999:1
[task] | distill [title] | 월드 인스턴스 통신 [category] | Guides [rephrased] | # 월드 인스턴스 통신 `WorldInstanceService`를 통해 월드 인스턴스 간 데이터 공유 및 이벤트 전달을 수행합니다. ## 공유 변수 (Shared Variable) 공유 변수는 `WorldInstanceService`에서 `WorldInstanceSharedMemory` 객체를 얻어 조작합니다. ### ETag (동시성 제어) 공유 변수 수정 시 최신 상태 확인 및 덮어쓰기 방지를 위해 `ETag`를 사용합니다. * **동작 규칙**: * 조회/수정 시마다 새로운 `ETag`가 발급됩니다. [original] | **ETag**는 공유 변수의 데이터가 최신 상태인지 확인하기 위해 필요합니다. ETag는 식별자입니다. 데이터를 생성 또는 수정하거나, 기록을 조회할 때마다 새로운 ETag를 발급합니다. 발급한 ETag는 데이터의 버전을 기록하고, 비교하는데 사용합니다. ETag를 사용하는 이유는 여러 월드 인스턴스에서 하나의 공유 변수를 사용하면 어떤 데이터가 최신 데이터인지, 수정되었는지 알기 어렵기 때문입니다. 또한 여러 월드 인스턴스에서 공유 변수에 접근하므로 예기치 못하게 데이터를 덮어 쓸 수 있기 때문입니다. 공유 변수와 ETag는 [chunk_id] | Guides:999:2
[task] | distill [title] | 월드 인스턴스 통신 [category] | Guides [rephrased] | # WorldInstanceService `WorldInstanceService`를 통해 월드 인스턴스 간 통신을 수행합니다. 크리에이터가 이벤트 핸들러를 연결해야 이벤트를 수신하며, 이벤트 발생 공간은 **서버**입니다. ```lua Event Handler: [service: WorldInstanceService] HandleMyWorldInstanceEvent(MyWorldInstanceEvent event) { log("Receive MyWorldInstanceEvent.") } ``` ## 제한 사항 ### [original] | 크리에이터가 `WorldInstanceService`에 이벤트 핸들러를 연결해야 이벤트를 수신할 수 있습니다. 이벤트 발생 공간은 서버입니다. ```lua Event Handler: [service: WorldInstanceService] HandleMyWorldInstanceEvent(MyWorldInstanceEvent event ) { log ("Receive MyWorldInstanceEvent.") } ``` # WorldInstanceService 제한 사항 **WorldInstanceService**를 사 [chunk_id] | Guides:999:3
[task] | wikipedia [title] | 월드 인스턴스 통신 [category] | Guides [rephrased] | # WorldInstanceService `WorldInstanceService`는 메이플스토리 월드에서 월드 인스턴스 간 통신을 처리하는 서비스입니다. 크리에이터가 이 서비스의 이벤트 핸들러를 등록해야만 관련 이벤트를 수신할 수 있으며, 해당 이벤트는 서버 공간에서 발생합니다. 이벤트 핸들러는 다음과 같이 정의됩니다. ```lua Event Handler: [service: WorldInstanceService] HandleMyWorldInstanceEvent(MyWorldInstanceEvent event ) { l [original] | 크리에이터가 `WorldInstanceService`에 이벤트 핸들러를 연결해야 이벤트를 수신할 수 있습니다. 이벤트 발생 공간은 서버입니다. ```lua Event Handler: [service: WorldInstanceService] HandleMyWorldInstanceEvent(MyWorldInstanceEvent event ) { log ("Receive MyWorldInstanceEvent.") } ``` # WorldInstanceService 제한 사항 **WorldInstanceService**를 사 [chunk_id] | Guides:999:3
[task] | knowledge_list [title] | RoomService를 활용해 룸끼리 통신하기 [category] | Guides [rephrased] | 제공된 문서에는 구체적인 API의 매개변수 목록, 반환 타입, 그리고 서버/클라이언트 실행 공간 제약 사항이 명시되어 있지 않으므로, 원문에 포함된 정보에만 근거하여 핵심 사실을 추출합니다. 1. RoomService는 하나의 월드 인스턴스 내부에 존재하는 정적 룸과 인스턴스 룸 간의 통신을 가능하게 하는 서비스이다. 2. 정적 룸과 인스턴스 룸은 직접적으로 통신할 수 없으므로, 이벤트나 데이터를 공유하기 위해서는 반드시 RoomService의 함수를 사용해야 한다. 3. RoomService는 인스턴스 룸을 생성하고 유저를 해당 [original] | # 학습 과정 소개 RoomService를 활용해 하나의 월드 인스턴스 안에 있는 정적 룸과 인스턴스 룸끼리 통신을 할 수 있습니다. 이 가이드는 예제 위주로 진행되며, 기본 개념은 [WorldInstanceService](/apiReference?postId=1034)와 동일합니다. [월드 인스턴스](/docs/?postId=984), [월드 인스턴스 통신](/docs/?postId=999), [인스턴스 맵 만들기](/docs/?postId=540) 가이드를 먼저 학습하기를 권장합니다. # RoomService로 통신 정적 [chunk_id] | Guides:1035:0
[task] | extract_knowledge [title] | 플레이 화면 녹화 및 공유하기 [category] | Guides [rephrased] | # UI 가리고 영상 녹화하기 ## 개념 설명 `ScreenRecordService`를 사용하여 화면을 녹화할 때, 특정 UI 요소를 녹화 영상에서 제외하거나 숨기는 방법을 다룹니다. 이 과정에서는 녹화 시작 전 대상 `UIGroup`의 가시성을 `false`로 설정하고, 시스템 기본 UI를 제외하기 위해 `excludeSystemUI` 옵션을 `true`로 지정합니다. 녹화가 종료되면 UI 가시성을 복원합니다. ## API 사용법 1. **UI 설정**: UI 에디터에서 `DefaultGroup` 내에 `UIText` 컴포넌 [original] | # UI 가리고 영상 녹화하기 UI를 가리고 영상을 녹화하는 방법을 살펴봅시다. 1. UI 에디터로 들어가서 **DefaultGroup**에 **UIText**를 하나 추가하고 프로퍼티를 아래와 같이 설정합니다. | 프로퍼티 | 값 | | --- | --- | | RectSize | X = 700, Y = 100 | | Text | ScreenRecordService TEST | | FontSize | 50 | | ImageRUID | b9ab8455d5737bf4cb21433 [chunk_id] | Guides:997:4
[task] | knowledge_list [title] | 월드 인스턴스 통신 [category] | Guides [rephrased] | - 크리에이터는 `WorldInstanceService`에 이벤트 핸들러를 연결해야만 해당 이벤트를 수신할 수 있습니다. - `WorldInstanceService`의 이벤트는 서버 공간에서 발생합니다. - `WorldInstanceService`의 이벤트 핸들러는 `[service: WorldInstanceService]` 속성을 가지며, 매개변수로 이벤트 객체(예: `MyWorldInstanceEvent`)를 받습니다. - `WorldInstanceSharedMemory`의 공유 변수 이름은 알파벳 대소문자, 숫자, 공백, 밑줄 [original] | 크리에이터가 `WorldInstanceService`에 이벤트 핸들러를 연결해야 이벤트를 수신할 수 있습니다. 이벤트 발생 공간은 서버입니다. ```lua Event Handler: [service: WorldInstanceService] HandleMyWorldInstanceEvent(MyWorldInstanceEvent event ) { log ("Receive MyWorldInstanceEvent.") } ``` # WorldInstanceService 제한 사항 **WorldInstanceService**를 사 [chunk_id] | Guides:999:3
[task] | extract_knowledge [title] | 월드 인스턴스 통신 [category] | Guides [rephrased] | # 월드 인스턴스 통신: WorldInstanceService와 WorldInstanceSharedMemory ## 1. 개념 설명 메이플스토리 월드에서 서로 다른 월드 인스턴스는 직접적으로 통신할 수 없습니다. 인스턴스 간의 데이터 공유와 이벤트 전달을 위해서는 `WorldInstanceService`와 `WorldInstanceSharedMemory`를 사용해야 합니다. * **WorldInstanceSharedMemory**: 여러 월드 인스턴스가 동시에 접근하여 읽고 쓸 수 있는 공유 변수들의 집합입니다. * * [original] | # 학습 과정 소개 `WorldInstanceService`와 `WorldInstanceSharedMemory`를 활용해 월드 인스턴스끼리 데이터를 공유하고 이벤트를 보내는 방법에 대해 알아봅시다. 월드 인스턴스와 룸 개념은 [월드 인스턴스](/docs?postId=984), [인스턴스 맵 만들기](/docs/?postId=540) 가이드를 참고하세요. >**Tip.** > 룸끼리의 통신을 구현하고 싶다면 `RoomService`의 동일한 함수명을 사용해보세요. # WorldInstanceSharedMemory 월드 인스턴스 [chunk_id] | Guides:999:0
[task] | knowledge_list [title] | 월드 인스턴스 통신 [category] | Guides [rephrased] | * `MyUserEnterEvent` 이벤트 타입은 `string` 타입의 `WorldInstanceId` 프로퍼티와 `string` 타입의 `Nickname` 프로퍼티를 포함하도록 정의됩니다. * `HandleUserEnterEvnet` 핸들러는 `[Service: UserService]`를 지정하고 서버(Space: Server)에서 실행되며, `UserEnterEvent` 객체를 매개변수로 받아 `event.UserId`를 추출합니다. * 현재 월드 인스턴스 ID는 `_WorldInstanceService.World [original] | 월드 인스턴스끼리 서로의 이벤트를 감지하는 예제입니다. 1. Workspace - MyDesk - Create Scripts - Create EventType - 새로운 **MyUserEnterEvent**를 생성합니다. 2. **MyUserEnterEvent**에 프로퍼티를 추가합니다. ```lua Property: string WorldInstanceId = "" string Nickname = "" ``` 3. Workspace - MyDesk - Create Scripts - Cre [chunk_id] | Guides:999:4
[task] | wikipedia [title] | 월드 인스턴스 통신 [category] | Guides [rephrased] | **월드 인스턴스 통신** 월드 인스턴스 간 데이터 공유 및 이벤트 전달은 `WorldInstanceService`를 통해 이루어집니다. 이 서비스는 월드 인스턴스 간의 동기화 문제를 해결하기 위한 공유 메모리 관리와 이벤트 전송 메커니즘을 제공합니다. **공유 변수와 ETag** 여러 월드 인스턴스가 동일한 공유 변수에 접근할 경우, 데이터의 최신 상태 확인 및 동시 수정에 의한 데이터 덮어쓰기 방지 조치가 필요합니다. 이를 위해 **ETag**라는 식별자가 사용됩니다. ETag는 데이터의 생성, 수정, 조회 시마다 새롭게 [original] | **ETag**는 공유 변수의 데이터가 최신 상태인지 확인하기 위해 필요합니다. ETag는 식별자입니다. 데이터를 생성 또는 수정하거나, 기록을 조회할 때마다 새로운 ETag를 발급합니다. 발급한 ETag는 데이터의 버전을 기록하고, 비교하는데 사용합니다. ETag를 사용하는 이유는 여러 월드 인스턴스에서 하나의 공유 변수를 사용하면 어떤 데이터가 최신 데이터인지, 수정되었는지 알기 어렵기 때문입니다. 또한 여러 월드 인스턴스에서 공유 변수에 접근하므로 예기치 못하게 데이터를 덮어 쓸 수 있기 때문입니다. 공유 변수와 ETag는 [chunk_id] | Guides:999:2
[task] | distill [title] | 월드 인스턴스 통신 [category] | Guides [rephrased] | # 게임 로직: 월드 인스턴스 통신 서로 다른 월드 인스턴스 간 유저 입장 이벤트를 감지하고 전달하는 방법입니다. ## 1. 커스텀 이벤트 타입 정의 `MyUserEnterEvent` 스크립트를 생성하고 아래 프로퍼티를 정의합니다. ```lua Property: string WorldInstanceId = "" string Nickname = "" ``` ## 2. 이벤트 송신 로직 (발신 측) `MyUserEnterLogic` 스크립트의 `UserEnterEvent` 핸들러에서, 입장 시 다른 인스턴스로 이벤트를广播(전파) [original] | 월드 인스턴스끼리 서로의 이벤트를 감지하는 예제입니다. 1. Workspace - MyDesk - Create Scripts - Create EventType - 새로운 **MyUserEnterEvent**를 생성합니다. 2. **MyUserEnterEvent**에 프로퍼티를 추가합니다. ```lua Property: string WorldInstanceId = "" string Nickname = "" ``` 3. Workspace - MyDesk - Create Scripts - Cre [chunk_id] | Guides:999:4
[task] | diverse_qa [title] | 월드 인스턴스 통신 [category] | Guides [rephrased] | 질문: 월드 인스턴스끼리 데이터를 공유하고 이벤트를 보내기 위해 주로 어떤 서비스와 컴포넌트를 활용하나요? 답변: `WorldInstanceService`와 `WorldInstanceSharedMemory`를 활용합니다. 질문: 월드 인스턴스끼리 직접적인 통신이 불가능한 이유는 무엇이며, 이를 해결하기 위해 어떤 기법을 사용해야 하나요? 답변: 월드 인스턴스끼리 직접적으로 통신을 할 수 없기에, 서로의 데이터를 공유하기 위해서는 `WorldInstanceSharedMemory`를 사용해야 합니다. 질문: `WorldInstanc [original] | # 학습 과정 소개 `WorldInstanceService`와 `WorldInstanceSharedMemory`를 활용해 월드 인스턴스끼리 데이터를 공유하고 이벤트를 보내는 방법에 대해 알아봅시다. 월드 인스턴스와 룸 개념은 [월드 인스턴스](/docs?postId=984), [인스턴스 맵 만들기](/docs/?postId=540) 가이드를 참고하세요. >**Tip.** > 룸끼리의 통신을 구현하고 싶다면 `RoomService`의 동일한 함수명을 사용해보세요. # WorldInstanceSharedMemory 월드 인스턴스 [chunk_id] | Guides:999:0
[task] | knowledge_list [title] | 월드 인스턴스 통신 [category] | Guides [rephrased] | 1. `ETag`는 공유 변수의 데이터가 최신 상태인지 확인하기 위해 필요한 식별자이며, 데이터를 생성하거나 수정하거나 조회할 때마다 새로운 ETag가 발급되어 데이터의 버전 기록과 비교에 사용된다. 2. 여러 월드 인스턴스에서 하나의 공유 변수를 사용할 때 어떤 데이터가 최신인지 알기 어렵고 예기치 못한 데이터 덮어쓰기가 발생할 수 있으므로 `ETag`를 사용하여 이를 방지한다. 3. 공유 변수의 값을 수정할 때는 공유 변수 이름과 값과 더불어 `ETag`를 함께 요청에 담아 보내야 하며, 요청에 포함된 `ETag`와 최신 `ET [original] | **ETag**는 공유 변수의 데이터가 최신 상태인지 확인하기 위해 필요합니다. ETag는 식별자입니다. 데이터를 생성 또는 수정하거나, 기록을 조회할 때마다 새로운 ETag를 발급합니다. 발급한 ETag는 데이터의 버전을 기록하고, 비교하는데 사용합니다. ETag를 사용하는 이유는 여러 월드 인스턴스에서 하나의 공유 변수를 사용하면 어떤 데이터가 최신 데이터인지, 수정되었는지 알기 어렵기 때문입니다. 또한 여러 월드 인스턴스에서 공유 변수에 접근하므로 예기치 못하게 데이터를 덮어 쓸 수 있기 때문입니다. 공유 변수와 ETag는 [chunk_id] | Guides:999:2
[task] | diverse_qa [title] | 월드 인스턴스 통신 [category] | Guides [rephrased] | 질문: ETag의 주요 목적은 무엇인가요? 답변: ETag는 공유 변수의 데이터가 최신 상태인지 확인하기 위해 필요한 식별자입니다. 질문: 데이터가 생성, 수정, 또는 조회될 때마다 ETag는 어떻게 처리되나요? 답변: 데이터가 생성 또는 수정되거나, 기록을 조회할 때마다 새로운 ETag가 발급됩니다. 질문: 발급된 ETag는 주로 어떤 용도로 사용되나요? 답변: 발급한 ETag는 데이터의 버전을 기록하고, 비교하는 데 사용됩니다. 질문: 여러 월드 인스턴스 환경에서 ETag를 사용하지 않으면 어떤 문제가 발생할 수 있나요? [original] | **ETag**는 공유 변수의 데이터가 최신 상태인지 확인하기 위해 필요합니다. ETag는 식별자입니다. 데이터를 생성 또는 수정하거나, 기록을 조회할 때마다 새로운 ETag를 발급합니다. 발급한 ETag는 데이터의 버전을 기록하고, 비교하는데 사용합니다. ETag를 사용하는 이유는 여러 월드 인스턴스에서 하나의 공유 변수를 사용하면 어떤 데이터가 최신 데이터인지, 수정되었는지 알기 어렵기 때문입니다. 또한 여러 월드 인스턴스에서 공유 변수에 접근하므로 예기치 못하게 데이터를 덮어 쓸 수 있기 때문입니다. 공유 변수와 ETag는 [chunk_id] | Guides:999:2
[task] | extract_knowledge [title] | 월드 인스턴스 통신 [category] | Guides [rephrased] | # 월드 인스턴스 통신: WorldInstanceSharedMemory 관리 ## 1. 개념 설명 `WorldInstanceSharedMemory`는 여러 월드 인스턴스(World Instance) 간에 데이터를 공유하기 위한 메커니즘입니다. 월드 인스턴스가 공유 변수를 생성, 조회, 또는 수정하는 동작을 수행하면, 해당 인스턴스는 그 공유 변수를 **참조(Reference)** 상태가 됩니다. 참조 상태의 핵심 특징은 다음과 같습니다. * **참조 유지:** 한 번 특정 공유 변수를 참조한 월드 인스턴스는 해당 변수가 삭 [original] | 월드 인스턴스가 공유 변수를 생성, 조회, 수정을 하면 해당 공유 변수를 참조한 상태가 됩니다. 한 번 특정 공유 변수를 참조한 월드 인스턴스는 공유 변수가 삭제될 때까지 계속 참조 상태를 유지합니다. 만약 어떤 공유 변수를 여러 월드 인스턴스에서 참조하고 있을 때 특정 월드 인스턴스에서 해당 공유 변수를 삭제해버리면 다른 월드 인스턴스에서 공유 변수를 사용할 수 없게 됩니다. 이처럼 한 곳에서 데이터를 삭제했지만 전체 월드 인스턴스에게 영향을 주는 사고를 방지하기 위해 메이플스토리 월드는 WorldInstanceSharedMemo [chunk_id] | Guides:999:1