[task] | extract_knowledge [title] | 루아 프로파일러를 활용하여 최적화하기 [category] | Guides [rephrased] | # 루아 프로파일러를 활용한 스크립트 최적화 ## 1. 개념 설명 게임 개발 과정에서 특정 상황에서 발생 가능한 처리 속도 저하 현상은 **병목 지점(Bottleneck)** 이라는 용어로 설명됩니다. 최적화란 이러한 성능 부하가 걸리는 병목 지점을 식별하고 수정하는 과정으로, 일부 핵심 병목만 해결해도 게임 전체의 성능 향상을 기대할 수 있습니다. **루아 프로파일러(Lua Profiler)** 는 mLua 스크립트 최적화 작업을 지원하는 도구로, 플레이 중인 게임에 접속하여 스크립트 실행 데이터를 수집하고 분석함으로써 병목 [original] | # 학습 과정 소개 제작한 게임을 플레이하다 보면 다양한 상황에서 느려지는 것을 경험할 수 있습니다. 이처럼 게임의 처리 속도에서 부하가 걸리는 병목 지점(Bottleneck)을 찾아 수정하는 것을 최적화라고 합니다. 일부 병목 지점만 해결해도 게임의 전체적인 성능 향상을 기대할 수 있기 때문에 최적화는 상당히 중요한 작업입니다. 루아 프로파일러는 이러한 스크립트 최적화 작업을 더욱 손쉽게 진행할 수 있도록 도와줍니다. 이번 시간에는 **루아 프로파일러**가 무엇인지 알아보고 활용법을 살펴보도록 합시다. **더 알아보기** > [chunk_id] | Guides:762:0
[task] | knowledge_list [title] | 루아 프로파일러를 활용하여 최적화하기 [category] | Guides [rephrased] | 제시된 문서(루아 프로파일러 활용 가이드)에 명시된 핵심 사실만 추출하여 목록으로 정리했습니다. * 프로파일러의 Context는 Core에서의 실행 흐름을 의미하며, Server, Client, Instance, Editor 중 하나를 선택할 수 있습니다. * Context를 선택하면 차트 영역(⑤)과 프로파일링 결과 영역(⑨)에서 해당 컨텍스트의 데이터를 확인할 수 있습니다. * 그래프 선택(④)에서 Elapsed Time, Network Send, Network Receive, Lua Memory 중 차트 영역에 표 [original] | * Context는 Core에서의 실행 흐름을 뜻합니다. * Server, Client, Instance, Editor 등의 Context 중에서 선택할 수 있습니다. * Context를 선택하면 ⑤ 차트 영역과 ⑨ 프로파일링 결과 영역에서 데이터를 확인할 수 있습니다. ### ④ 그래프 선택 * **Elapsed Time, Network Send, Network Receive, Lua Memory** 중에서 어떤 그래프를 ⑤의 차트 영역에 표시할 것인지 선택합니다. * **File - Option**에서 **Network**를 [chunk_id] | Guides:762:1
[task] | wikipedia [title] | 루아 프로파일러를 활용하여 최적화하기 [category] | Guides [rephrased] | 메이플스토리 월드(MapleStory Worlds)의 루아 프로파일러는 스크립트 성능을 분석하고 최적화하기 위한 도구로, 원문은 '보안 및 최적화' 가이드의 일부로 해당 도구의 인터페이스와 데이터 해석 방법을 설명합니다. ### 루아 프로파일러 인터페이스 프로파일러는 Context, 그래프 선택, 차트, 기록 제어, 프레임 데이터, 프로파일링 결과, 로그 영역으로 구성됩니다. **Context 선택** Context는 Core에서의 실행 흐름을 의미하며, Server, Client, Instance, Editor 중에서 선택할 [original] | * Context는 Core에서의 실행 흐름을 뜻합니다. * Server, Client, Instance, Editor 등의 Context 중에서 선택할 수 있습니다. * Context를 선택하면 ⑤ 차트 영역과 ⑨ 프로파일링 결과 영역에서 데이터를 확인할 수 있습니다. ### ④ 그래프 선택 * **Elapsed Time, Network Send, Network Receive, Lua Memory** 중에서 어떤 그래프를 ⑤의 차트 영역에 표시할 것인지 선택합니다. * **File - Option**에서 **Network**를 [chunk_id] | Guides:762:1
[task] | extract_knowledge [title] | 엔티티에 물리 적용하기 [category] | Guides [rephrased] | # 충돌 엔티티에 물리 적용하기 ## 1. 개념 설명 메이플스토리 월드에서 엔티티에 물리 법칙을 적용하고 엔티티 간 충돌을 처리하려면 `PhysicsRigidbodyComponent`를 사용해야 합니다. 이 컴포넌트를 추가하면 엔티티가 물리 엔진의 제어를 받게 되며, 질량, 마찰, 반발 등 물리 연산에 영향을 주는 파라미터를 설정할 수 있습니다. **충돌 발생 조건:** 엔티티가 물리 법칙을 따르는 다른 엔티티와 충돌하려면 반드시 다음 두 컴포넌트를 **동시에** 포함해야 합니다. 1. `PhysicsRigidbodyCompo [original] | # 학습 과정 소개 물리 법칙을 엔티티에 적용하고 물리 엔티티끼리 충돌할 수 있게 만들어 봅시다. 월드에 물리를 만드는 방법은 [물리 사용하기](/docs?postId=757%7B%22target%22:%22_self%22%7D)를 참고하세요. # PhysicsRigidbodyComponent Entity에 PhysicsRigidbodyComponent를 추가하면 Entity가 물리 엔진에 의해 제어됩니다. 또한 엔티티의 저항 계수, 마찰 계수, 질량 등 물리 연산에 영향을 주는 값을 설정할 수 있습니다. Entity가 Phy [chunk_id] | Guides:761:0
[task] | diverse_qa [title] | 루아 프로파일러를 활용하여 최적화하기 [category] | Guides [rephrased] | 질문: Frame의 Total Self Time이 전체의 62% 이상을 차지하는 경우, 이는 어떤 시간을 의미합니까? 답변: Frame에서의 Self Time은 스크립트 실행을 제외하고 Native에서 소요된 시간을 의미합니다. 질문: Native Scope의 세부 분석을 수행하기 위해 루아 프로파일러의 어떤 메뉴에서 어떤 설정을 해야 하는가? 답변: 루아 프로파일러의 File - Option 메뉴에서 Native Scope 항목에 체크한 후 다시 프로파일링해야 합니다. 질문: Native Scope 세부 분석 후, Trigge [original] | 샘플 데이터를 보면 Frame의 Total Self Time이 전체의 62% 이상을 차지하는 것을 알 수 있습니다. Frame에서의 Self Time은 스크립트 실행을 제외하고 Native에서 소요된 시간이므로 Native Scope의 세부 분석이 필요한 상황입니다. 루아 프로파일러의 **File - Option**에서 **Native Scope**에 체크한 후 다시 프로파일링해봅시다. 다시 수집한 데이터의 카테고리를 살펴보면 Native Scope 세부 분석이 이루어졌음을 알 수 있습니다. Frame의 Total Self T [chunk_id] | Guides:762:2
[task] | wikipedia [title] | 루아 프로파일러를 활용하여 최적화하기 [category] | Guides [rephrased] | # 루아 프로파일러를 활용한 스크립트 최적화 ## 개요 메이플스토리 월드에서 게임을 제작하고 플레이하는 과정에서 특정 상황에서 프레임 드랍이나 지연이 발생할 수 있습니다. 이러한 게임 처리 속도의 병목 지점(Bottleneck)을 식별하고 수정하는 작업을 최적화라고 합니다. 전체 성능에 대한 영향이 큰 일부 병목 지점만 해결해도 게임의 전반적인 성능 향상을 기대할 수 있으므로, 최적화는 게임 개발 과정에서 매우 중요한 단계입니다. 루아 프로파일러(Lua Profiler)는 스크립트 최적화 작업을 체계적이고 효율적으로 수행할 수 [original] | # 학습 과정 소개 제작한 게임을 플레이하다 보면 다양한 상황에서 느려지는 것을 경험할 수 있습니다. 이처럼 게임의 처리 속도에서 부하가 걸리는 병목 지점(Bottleneck)을 찾아 수정하는 것을 최적화라고 합니다. 일부 병목 지점만 해결해도 게임의 전체적인 성능 향상을 기대할 수 있기 때문에 최적화는 상당히 중요한 작업입니다. 루아 프로파일러는 이러한 스크립트 최적화 작업을 더욱 손쉽게 진행할 수 있도록 도와줍니다. 이번 시간에는 **루아 프로파일러**가 무엇인지 알아보고 활용법을 살펴보도록 합시다. **더 알아보기** > [chunk_id] | Guides:762:0
[task] | extract_knowledge [title] | 엔티티에 물리 적용하기 [category] | Guides [rephrased] | # 충돌 엔티티에 물리 적용하기 ## 개념 설명 `PhysicsRigidbodyComponent`는 물리 시뮬레이션의 핵심 요소로, 엔티티에 질량, 관성, 힘, 임펄스 등의 물리적 속성을 부여합니다. 이 컴포넌트의 동작 방식과 접근 가능한 실행 공간은 `PhysicsColliderComponent`의 `ClientOnly` 프로퍼티 값에 의해 결정됩니다. `ClientOnly` 설정에 따라 물리 연산이 수행되는 대상과 동기화 방식이 달라집니다. 1. **ClientOnly = True**: * 물리 강체는 클라이 [original] | **PhysicsRigidbodyComponent**의 대부분의 Property와 Function은 **PhysicsColliderComponent**의 ClientOnly 프로퍼티의 값에 따라 사용, 접근 가능한 실행 공간이 나뉘게 됩니다. ClientOnly에 따라 각각의 물리 World에서 연산되며, 이에 따라 서로 충돌하거나 영향을 주지 않습니다. * **ClientOnly가 True일 때**: 해당 Entity의 물리 강체는 Client에서만 생성되고 물리 연산은 각각의 Client에서 계산됩니다. 다른 Client와 결 [chunk_id] | Guides:761:2
[task] | distill [title] | 웹 브라우저 활용하기 [category] | Guides [rephrased] | # 객체 표현: 웹 브라우저 활용하기 `WebViewClickedEvent`를 사용해 웹 뷰 내 클릭 위치를 확인합니다. ## 핵심 개념 * **NormalizedPosition**: 웹 뷰를 평면 좌표계로 간주할 때, 왼쪽 상단을 `(0,0)`, 오른쪽 하단을 `(1,1)`로 정의한 상대 좌표입니다. * 화면 정중앙: `(0.5, 0.5)` ## 구현 코드 `WebViewTest` 스크립트에 `WebViewClickedEvent` 핸들러를 추가합니다. ```lua Event Handler: [self] Han [original] | 웹 브라우저에서 클릭한 지점의 좌표를 로그로 남겨봅시다. **WebViewClickedEvent**를 활용하면 클릭한 지점의 **normalizedPosition**을 확인할 수 있습니다. **normalizedPosition**이란 웹 뷰를 하나의 평면 좌표계라고 했을 때 왼쪽 상단을 (0,0), 오른쪽 하단을 (1,1)로 표현한 위치를 말합니다. 화면의 정중앙 좌표는 (0.5,0.5) 입니다. 1. **WebViewTest** 스크립트에 **WebViewClickedEvent**를 추가하고 다음과 같이 작성합니다. ` [chunk_id] | Guides:763:2
[task] | knowledge_list [title] | 웹 브라우저 활용하기 [category] | Guides [rephrased] | 제시된 문서 내용만을 기반으로 추출한 핵심 사실 목록입니다. 1. `WebViewComponent`는 엔티티에 추가하여 월드 내에 웹 브라우저를 배치하고 탐색할 수 있게 하는 컴포넌트입니다. 2. `ClickingEnabled` 프로퍼티는 웹 뷰에서 클릭 입력을 허용할지 여부를 제어하는 boolean 타입 값입니다. 3. `HoveringEnabled` 프로퍼티는 마우스 커서를 웹 뷰 위에 올렸을 때 웹 요소와의 상호작용(호버)이 가능한지 여부를 설정하는 boolean 타입 값입니다. 4. `ScrollingEnabled` 프로퍼 [original] | # 학습 과정 소개 **WebViewComponent**를 활용하면 웹 브라우저를 월드에 배치하고 탐색할 수 있습니다. 간단한 예제를 통해 월드에서 웹 브라우저를 활용하는 방법을 알아봅시다. ##### 참고 API Reference [WebViewComponent](/apiReference/Components/WebViewComponent) # WebViewComponent 소개 엔티티에 **WebViewComponent**를 추가하면 월드에 웹 브라우저를 배치할 수 있습니다. 먼저 **WebViewComponent**의 프 [chunk_id] | Guides:763:0
[task] | diverse_qa [title] | 루아 프로파일러를 활용하여 최적화하기 [category] | Guides [rephrased] | 질문: 루아 프로파일러에서 'Context'란 무엇을 의미합니까? 답변: Context는 Core에서의 실행 흐름을 뜻합니다. 질문: 루아 프로파일러에서 선택할 수 있는 Context 종류는 무엇입니까? 답변: Server, Client, Instance, Editor 중에서 선택할 수 있습니다. 질문: Context를 선택하면 어떤 영역에서 데이터를 확인할 수 있습니까? 답변: ⑤ 차트 영역과 ⑨ 프로파일링 결과 영역에서 데이터를 확인할 수 있습니다. 질문: ④ 그래프 선택에서 차트 영역에 표시할 수 있는 그래프 종류는 어떤 [original] | * Context는 Core에서의 실행 흐름을 뜻합니다. * Server, Client, Instance, Editor 등의 Context 중에서 선택할 수 있습니다. * Context를 선택하면 ⑤ 차트 영역과 ⑨ 프로파일링 결과 영역에서 데이터를 확인할 수 있습니다. ### ④ 그래프 선택 * **Elapsed Time, Network Send, Network Receive, Lua Memory** 중에서 어떤 그래프를 ⑤의 차트 영역에 표시할 것인지 선택합니다. * **File - Option**에서 **Network**를 [chunk_id] | Guides:762:1
[task] | distill [title] | 웹 브라우저 활용하기 [category] | Guides [rephrased] | # 객체 표현: 웹 브라우저 활용하기 `WebViewComponent`를 사용해 엔티티에 웹 브라우저를 배치하고, 스크립트로 제어할 수 있습니다. ## 1. 기본 배치 1. **Hierarchy**에서 `UIEmpty` 엔티티를 생성합니다. 2. 해당 엔티티에 **`WebViewComponent`**를 추가하고 `Url` 속성에 표시할 주소를 입력합니다. 3. 엔티티의 크기를 조절하여 테스트합니다. ## 2. 스크립트 제어 예시 ### 키 입력으로 웹 브라우저 제어 `InputService`의 `KeyDownEvent`를 통 [original] | UI로 웹 브라우저를 배치하면 화면의 특정 위치에 항상 웹 브라우저가 보이도록 할 수 있습니다. 1. **Hierarchy - ui** 아래에서 원하는 UI 그룹의 콘텍스트 메뉴를 엽니다. **Create Entity - Create UIEmpty**를 선택해 **UIEmpty**를 생성합니다. 2. 프로퍼티 에디터에서 **UIEmpty**에 **WebViewComponent**를 추가하고 원하는 Url을 입력합니다. 3. 엔티티의 크기를 적절하게 조절한 후 **[시작]** 버튼을 눌러 테스트해 봅시다. 화면의 특정 위치에 [chunk_id] | Guides:763:1
[task] | wikipedia [title] | 루아 프로파일러를 활용하여 최적화하기 [category] | Guides [rephrased] | # 루아 프로파일러를 활용한 최적화 메이플스토리 월드 스크립트 개발에서 성능 최적화를 수행하기 위해서는 루아 프로파일러(Lua Profiler)를 활용하여 스크립트 및 네이티브(Native) 코드의 실행 시간을 분석하는 과정이 필요합니다. 본 가이드에서는 프로파일러 데이터를 해석하는 방법과 특정 함수의 세부 분석을 위한 표본 추출 기법을 설명합니다. ## 네이티브 스코프(Native Scope) 분석 프로파일러의 기본 샘플 데이터를 분석할 때 `Frame` 항목의 `Total Self Time`이 전체 실행 시간의 62% 이상 [original] | 샘플 데이터를 보면 Frame의 Total Self Time이 전체의 62% 이상을 차지하는 것을 알 수 있습니다. Frame에서의 Self Time은 스크립트 실행을 제외하고 Native에서 소요된 시간이므로 Native Scope의 세부 분석이 필요한 상황입니다. 루아 프로파일러의 **File - Option**에서 **Native Scope**에 체크한 후 다시 프로파일링해봅시다. 다시 수집한 데이터의 카테고리를 살펴보면 Native Scope 세부 분석이 이루어졌음을 알 수 있습니다. Frame의 Total Self T [chunk_id] | Guides:762:2
[task] | knowledge_list [title] | 웹 브라우저 활용하기 [category] | Guides [rephrased] | - `WebViewClickedEvent`는 웹 뷰(WebView)에서 클릭이 발생했을 때 발생하는 이벤트이며, 이벤트 객체의 `NormalizedPosition` 프로퍼티를 통해 클릭한 지점의 정규화된 좌표를 확인할 수 있습니다. - `NormalizedPosition`은 웹 뷰를 하나의 평면 좌표계로 봤을 때 왼쪽 상단을 (0,0), 오른쪽 하단을 (1,1)로 정의한 좌표값을 의미하며, 화면 정중앙의 좌표는 (0.5, 0.5)입니다. - `WebViewClickedEvent` 핸들러는 `[self]` 실행 공간에 배치되며, 함수 [original] | 웹 브라우저에서 클릭한 지점의 좌표를 로그로 남겨봅시다. **WebViewClickedEvent**를 활용하면 클릭한 지점의 **normalizedPosition**을 확인할 수 있습니다. **normalizedPosition**이란 웹 뷰를 하나의 평면 좌표계라고 했을 때 왼쪽 상단을 (0,0), 오른쪽 하단을 (1,1)로 표현한 위치를 말합니다. 화면의 정중앙 좌표는 (0.5,0.5) 입니다. 1. **WebViewTest** 스크립트에 **WebViewClickedEvent**를 추가하고 다음과 같이 작성합니다. ` [chunk_id] | Guides:763:2
[task] | diverse_qa [title] | 웹 브라우저 활용하기 [category] | Guides [rephrased] | 질문: WebViewComponent를 활용하면 무엇을 할 수 있나요? 답변: WebViewComponent를 활용하면 웹 브라우저를 월드에 배치하고 탐색할 수 있습니다. 질문: WebViewComponent의 ClickingEnabled 프로퍼티는 어떤 역할을 하나요? 답변: ClickingEnabled 프로퍼티는 웹 뷰에서 클릭을 가능하게 할지 여부를 설정하는 것입니다. 질문: 마우스를 웹 뷰 위에 올려놓았을 때 웹 요소와 상호작용 가능 여부를 설정하는 프로퍼티는 무엇인가요? 답변: HoveringEnabled 프로퍼티입니다 [original] | # 학습 과정 소개 **WebViewComponent**를 활용하면 웹 브라우저를 월드에 배치하고 탐색할 수 있습니다. 간단한 예제를 통해 월드에서 웹 브라우저를 활용하는 방법을 알아봅시다. ##### 참고 API Reference [WebViewComponent](/apiReference/Components/WebViewComponent) # WebViewComponent 소개 엔티티에 **WebViewComponent**를 추가하면 월드에 웹 브라우저를 배치할 수 있습니다. 먼저 **WebViewComponent**의 프 [chunk_id] | Guides:763:0
[task] | wikipedia [title] | 웹 브라우저 활용하기 [category] | Guides [rephrased] | **웹 브라우저 활용: 클릭 좌표 처리** 메이플스토리 월드(MapleStory Worlds)에서 웹 브라우저(WebView)를 활용할 때, 사용자가 화면의 특정 지점을 클릭한 위치를 감지하고 처리하는 기능이 제공됩니다. 이 기능을 통해 개발자는 웹 뷰 내에서 발생한 클릭 이벤트의 좌표 정보를 스크립트 로직에 반영할 수 있습니다. 클릭 위치 정보는 `WebViewClickedEvent`를 통해 전달되며, 해당 이벤트 객체의 `normalizedPosition` 속성을 참조함으로써 클릭된 지점의 좌표를 확인할 수 있습니다. `no [original] | 웹 브라우저에서 클릭한 지점의 좌표를 로그로 남겨봅시다. **WebViewClickedEvent**를 활용하면 클릭한 지점의 **normalizedPosition**을 확인할 수 있습니다. **normalizedPosition**이란 웹 뷰를 하나의 평면 좌표계라고 했을 때 왼쪽 상단을 (0,0), 오른쪽 하단을 (1,1)로 표현한 위치를 말합니다. 화면의 정중앙 좌표는 (0.5,0.5) 입니다. 1. **WebViewTest** 스크립트에 **WebViewClickedEvent**를 추가하고 다음과 같이 작성합니다. ` [chunk_id] | Guides:763:2
[task] | knowledge_list [title] | 웹 브라우저 활용하기 [category] | Guides [rephrased] | 제시된 원문 문서에 포함된 정보만 바탕으로 핵심 사실을 추출하여 정리한 목록입니다. **1. UI 기반 웹 브라우저 배치 방법** * `Hierarchy - ui` 하위 UI 그룹의 컨텍스트 메뉴에서 **Create Entity - Create UIEmpty**를 선택하여 `UIEmpty` 엔티티를 생성해야 합니다. * 생성된 `UIEmpty`의 프로퍼티 에디터에 `WebViewComponent`를 추가하고 원하는 `Url`을 입력하면 화면의 특정 위치에 웹 브라우저가 표시되도록 설정할 수 있습니다. * 엔티티의 크기를 [original] | UI로 웹 브라우저를 배치하면 화면의 특정 위치에 항상 웹 브라우저가 보이도록 할 수 있습니다. 1. **Hierarchy - ui** 아래에서 원하는 UI 그룹의 콘텍스트 메뉴를 엽니다. **Create Entity - Create UIEmpty**를 선택해 **UIEmpty**를 생성합니다. 2. 프로퍼티 에디터에서 **UIEmpty**에 **WebViewComponent**를 추가하고 원하는 Url을 입력합니다. 3. 엔티티의 크기를 적절하게 조절한 후 **[시작]** 버튼을 눌러 테스트해 봅시다. 화면의 특정 위치에 [chunk_id] | Guides:763:1
[task] | wikipedia [title] | 웹 브라우저 활용하기 [category] | Guides [rephrased] | # 객체 표현 웹 브라우저 활용하기 메이플스토리 월드에서 UI를 활용해 웹 브라우저를 배치하면, 화면의 특정 위치에 웹 브라우저가 항상 표시되도록 구성할 수 있습니다. 이를 통해 외부 웹 페이지를 게임 환경 내에서 직접 열람하거나 상호작용할 수 있습니다. ## 기본 설정 절차 웹 브라우저를 화면에 배치하기 위한 기본 설정은 다음과 같은 단계로 이루어집니다. 먼저, **Hierarchy** 뷰의 **ui** 노드 아래에서 원하는 UI 그룹의 컨텍스트 메뉴를 엽니다. 여기서 **Create Entity** > **Create U [original] | UI로 웹 브라우저를 배치하면 화면의 특정 위치에 항상 웹 브라우저가 보이도록 할 수 있습니다. 1. **Hierarchy - ui** 아래에서 원하는 UI 그룹의 콘텍스트 메뉴를 엽니다. **Create Entity - Create UIEmpty**를 선택해 **UIEmpty**를 생성합니다. 2. 프로퍼티 에디터에서 **UIEmpty**에 **WebViewComponent**를 추가하고 원하는 Url을 입력합니다. 3. 엔티티의 크기를 적절하게 조절한 후 **[시작]** 버튼을 눌러 테스트해 봅시다. 화면의 특정 위치에 [chunk_id] | Guides:763:1
[task] | wikipedia [title] | 웹 브라우저 활용하기 [category] | Guides [rephrased] | # 객체 표현: 웹 브라우저 활용하기 본 가이드는 메이플스토리 월드에서 **WebViewComponent**를 사용하여 웹 브라우저를 월드 내에 배치하고 상호작용하는 방법을 설명합니다. **WebViewComponent**를 엔티티에 추가하면 해당 위치에 웹 브라우저를 렌더링할 수 있으며, 이 컴포넌트의 프로퍼티를 통해 클릭, 호버, 스크롤, 드래그 동작 및 표시 크기 등을 제어할 수 있습니다. ## WebViewComponent 프로퍼티 **WebViewComponent**는 웹 브라우저의 동작과 표시 방식을 제어하기 위한 [original] | # 학습 과정 소개 **WebViewComponent**를 활용하면 웹 브라우저를 월드에 배치하고 탐색할 수 있습니다. 간단한 예제를 통해 월드에서 웹 브라우저를 활용하는 방법을 알아봅시다. ##### 참고 API Reference [WebViewComponent](/apiReference/Components/WebViewComponent) # WebViewComponent 소개 엔티티에 **WebViewComponent**를 추가하면 월드에 웹 브라우저를 배치할 수 있습니다. 먼저 **WebViewComponent**의 프 [chunk_id] | Guides:763:0
[task] | knowledge_list [title] | 파티클 활용하기 [category] | Guides [rephrased] | 제시된 문서 내용만을 기반으로 추출한 핵심 사실 목록입니다. 1. `ParticlePlaySpeed` 스크립트 컴포넌트의 `OnUpdate(number delta)` 메서드는 `[client only]` 실행 공간에서 동작하며, 매 프레임마다 파티클 엔티티와 로컬 플레이어의 `TransformComponent.Position`을 `Vector2`로 변환하여 `Vector2.Distance(positionA, positionB)`로 거리를 계산합니다. 2. 계산된 거리 값은 `self.Entity.BasicParticleCompon [original] | # 학습 과정 소개 [파티클 사용하기](/docs/?postId=1036) 가이드에서 파티클 컴포넌트의 개념 및 종류에 대해 알아보았습니다. 이번 시간에는 스크립트를 사용해 파티클을 활용하는 예제를 살펴보겠습니다. # 파티클 스크립트 ## 파티클 프로퍼티 제어 캐릭터와의 거리에 따라 파티클의 재생 속도가 바뀌는 예제를 통해 파티클 프로퍼티를 제어하는 방법을 살펴봅시다. 1. 파티클이 잘 보이도록 어두운 배경을 설정하고 지형을 배치한 뒤 원하는 파티클을 배치합니다. 본 예제에서는 Background로 **back-16**을 설 [chunk_id] | Guides:764:0
[task] | distill [title] | 파티클 활용하기 [category] | Guides [rephrased] | # 파티클 스크립트 활용 ## 1. 프로퍼티 제어: `BasicParticleComponent` 캐릭터와의 거리에 따라 파티클 재생 속도를 변경하는 예제입니다. **설정:** - 파티클 엔티티에 `ParticlePlaySpeed` 스크립트 컴포넌트 추가. - `OnUpdate`에서 `_UserService.LocalPlayer` 위치와 파티클 위치 거리를 계산하여 `PlaySpeed`에 적용. **코드 예제:** ```lua [client only] void OnUpdate(number delta) { local pos [original] | # 학습 과정 소개 [파티클 사용하기](/docs/?postId=1036) 가이드에서 파티클 컴포넌트의 개념 및 종류에 대해 알아보았습니다. 이번 시간에는 스크립트를 사용해 파티클을 활용하는 예제를 살펴보겠습니다. # 파티클 스크립트 ## 파티클 프로퍼티 제어 캐릭터와의 거리에 따라 파티클의 재생 속도가 바뀌는 예제를 통해 파티클 프로퍼티를 제어하는 방법을 살펴봅시다. 1. 파티클이 잘 보이도록 어두운 배경을 설정하고 지형을 배치한 뒤 원하는 파티클을 배치합니다. 본 예제에서는 Background로 **back-16**을 설 [chunk_id] | Guides:764:0
[task] | knowledge_list [title] | 파티클 활용하기 [category] | Guides [rephrased] | 제공된 문서 내용을 바탕으로 추출한 핵심 사실 목록입니다. 1. `ParticleService`의 `PlayBasicParticle()` 메서드는 `BasicParticleType`, `Entity`, `Vector3`(위치), `number`(회전 각도), `Vector3`(스케일), `boolean`(Loop 여부), `table`(옵션) 인자를 받아 파티클을 재생하며, `Loop` 인자를 `false`로 설정하면 파티클이 한 번만 재생됩니다. 2. `PlayBasicParticle()` 메서드의 옵션(`option`) 테 [original] | 1. 파티클이 잘 보이도록 어두운 배경을 설정하고 지형을 배치한 뒤 원하는 엔티티를 배치합니다. 본 예제에서는 Preset List에서 Background - **back-51**을 설정하고 Object - **object-174**를 배치했습니다. 2. Workspace - MyDesk에 새 스크립트 컴포넌트 ParticleServiceTest를 생성합니다. 3. 배치한 엔티티(object-174)의 Property에 ParticleServiceTest를 추가합니다. 4. 여기에 TweenCircula [chunk_id] | Guides:764:1
[task] | diverse_qa [title] | 웹 브라우저 활용하기 [category] | Guides [rephrased] | 질문: UI로 웹 브라우저를 배치하면 어떤 효과가 있나요? 답변: 화면의 특정 위치에 항상 웹 브라우저가 보이도록 할 수 있습니다. 질문: UIEmpty 엔티티를 생성하기 위해 Hierarchy - ui 아래에서 어떤 메뉴를 선택해야 하나요? 답변: 원하는 UI 그룹의 콘텍스트 메뉴를 열고 Create Entity - Create UIEmpty를 선택해야 합니다. 질문: WebViewComponent를 추가한 후 반드시 입력해야 하는 정보는 무엇인가요? 답변: 원하는 Url을 입력해야 합니다. 질문: 키 입력으로 웹 브라우저를 [original] | UI로 웹 브라우저를 배치하면 화면의 특정 위치에 항상 웹 브라우저가 보이도록 할 수 있습니다. 1. **Hierarchy - ui** 아래에서 원하는 UI 그룹의 콘텍스트 메뉴를 엽니다. **Create Entity - Create UIEmpty**를 선택해 **UIEmpty**를 생성합니다. 2. 프로퍼티 에디터에서 **UIEmpty**에 **WebViewComponent**를 추가하고 원하는 Url을 입력합니다. 3. 엔티티의 크기를 적절하게 조절한 후 **[시작]** 버튼을 눌러 테스트해 봅시다. 화면의 특정 위치에 [chunk_id] | Guides:763:1
[task] | distill [title] | 파티클 활용하기 [category] | Guides [rephrased] | **파티클 재생 및 반복 생성** **1. 설정** * 배경/지형: `Background - back-51`, 대상 엔티티: `Object - object-174` * 스크립트 컴포넌트 `ParticleServiceTest` 생성 후 대상 엔티티에 추가. * `TweenCircularComponent` 추가 및 설정. **2. 구현** `ParticleServiceTest` 스크립트에 다음 메서드를 구현합니다. ```lua void AddParticle() { local option = {["Color"] = [original] | 1. 파티클이 잘 보이도록 어두운 배경을 설정하고 지형을 배치한 뒤 원하는 엔티티를 배치합니다. 본 예제에서는 Preset List에서 Background - **back-51**을 설정하고 Object - **object-174**를 배치했습니다. 2. Workspace - MyDesk에 새 스크립트 컴포넌트 ParticleServiceTest를 생성합니다. 3. 배치한 엔티티(object-174)의 Property에 ParticleServiceTest를 추가합니다. 4. 여기에 TweenCircula [chunk_id] | Guides:764:1
[task] | diverse_qa [title] | 웹 브라우저 활용하기 [category] | Guides [rephrased] | 질문: WebViewClickedEvent 를 활용하여 확인할 수 있는 클릭 위치 정보의 변수 이름은 무엇인가요? 답변: 클릭한 지점의 좌표는 normalizedPosition 을 통해 확인할 수 있습니다. 질문: normalizedPosition 좌표계에서 웹 뷰의 왼쪽 상단 좌표는 어떻게 표현되나요? 답변: 웹 뷰의 왼쪽 상단 좌표는 (0,0) 으로 표현됩니다. 질문: normalizedPosition 좌표계에서 웹 뷰의 오른쪽 하단 좌표는 어떻게 표현되나요? 답변: 웹 뷰의 오른쪽 하단 좌표는 (1,1) 으로 표현됩니다. [original] | 웹 브라우저에서 클릭한 지점의 좌표를 로그로 남겨봅시다. **WebViewClickedEvent**를 활용하면 클릭한 지점의 **normalizedPosition**을 확인할 수 있습니다. **normalizedPosition**이란 웹 뷰를 하나의 평면 좌표계라고 했을 때 왼쪽 상단을 (0,0), 오른쪽 하단을 (1,1)로 표현한 위치를 말합니다. 화면의 정중앙 좌표는 (0.5,0.5) 입니다. 1. **WebViewTest** 스크립트에 **WebViewClickedEvent**를 추가하고 다음과 같이 작성합니다. ` [chunk_id] | Guides:763:2
[task] | extract_knowledge [title] | 루아 프로파일러를 활용하여 최적화하기 [category] | Guides [rephrased] | # mLua 루아 프로파일러를 활용한 최적화 mLua 루아 프로파일러는 스크립트 실행 흐름(Context)을 분석하여 성능 병목을 식별하고 최적화하는 도구입니다. 이 절에서는 프로파일러의 주요 UI 요소, 데이터 수집 방법, 그리고 결과 분석 항목을 설명합니다. ## 1. 개념 설명 프로파일러는 **Context**를 기반으로 데이터를 수집합니다. Context는 Core에서의 실행 흐름을 의미하며, `Server`, `Client`, `Instance`, `Editor` 중 하나를 선택할 수 있습니다. 선택된 Context에 [original] | * Context는 Core에서의 실행 흐름을 뜻합니다. * Server, Client, Instance, Editor 등의 Context 중에서 선택할 수 있습니다. * Context를 선택하면 ⑤ 차트 영역과 ⑨ 프로파일링 결과 영역에서 데이터를 확인할 수 있습니다. ### ④ 그래프 선택 * **Elapsed Time, Network Send, Network Receive, Lua Memory** 중에서 어떤 그래프를 ⑤의 차트 영역에 표시할 것인지 선택합니다. * **File - Option**에서 **Network**를 [chunk_id] | Guides:762:1
[task] | extract_knowledge [title] | 웹 브라우저 활용하기 [category] | Guides [rephrased] | # 웹 뷰 클릭 좌표 처리 (WebViewClickedEvent) ## 1. 개념 설명 **WebViewClickedEvent**는 웹 브라우저(WebView) 컴포넌트 내에서 사용자가 클릭했을 때 발생하는 이벤트입니다. 이 이벤트를 통해 클릭한 위치의 **normalizedPosition** 값을 조회할 수 있습니다. **normalizedPosition**은 웹 뷰 영역을 정규화된 평면 좌표계로 해석한 값으로, 다음과 같이 정의됩니다: * **왼쪽 상단**: $(0, 0)$ * **오른쪽 하단**: $(1, 1)$ * [original] | 웹 브라우저에서 클릭한 지점의 좌표를 로그로 남겨봅시다. **WebViewClickedEvent**를 활용하면 클릭한 지점의 **normalizedPosition**을 확인할 수 있습니다. **normalizedPosition**이란 웹 뷰를 하나의 평면 좌표계라고 했을 때 왼쪽 상단을 (0,0), 오른쪽 하단을 (1,1)로 표현한 위치를 말합니다. 화면의 정중앙 좌표는 (0.5,0.5) 입니다. 1. **WebViewTest** 스크립트에 **WebViewClickedEvent**를 추가하고 다음과 같이 작성합니다. ` [chunk_id] | Guides:763:2
[task] | extract_knowledge [title] | 루아 프로파일러를 활용하여 최적화하기 [category] | Guides [rephrased] | # 루아 프로파일러를 활용한 스크립트 최적화 메이플스토리 월드(mLua) 환경에서 스크립트 성능을 분석하고 병목 현상을 식별하기 위해 루아 프로파일러(Lua Profiler)를 사용합니다. 프로파일러는 함수별 실행 시간, 호출 횟수, 그리고 네이티브(Native) 코드 영역의 성능 데이터를 수집하여 최적화 대상 함수를 파악하는 데 필수적입니다. ## 1. Native Scope 분석 스크립트 실행 자체(`Self Time`)가 적지만 프레임 전체의 `Total Self Time`이 높은 경우, 이는 스크립트 로직이 아닌 네이티 [original] | 샘플 데이터를 보면 Frame의 Total Self Time이 전체의 62% 이상을 차지하는 것을 알 수 있습니다. Frame에서의 Self Time은 스크립트 실행을 제외하고 Native에서 소요된 시간이므로 Native Scope의 세부 분석이 필요한 상황입니다. 루아 프로파일러의 **File - Option**에서 **Native Scope**에 체크한 후 다시 프로파일링해봅시다. 다시 수집한 데이터의 카테고리를 살펴보면 Native Scope 세부 분석이 이루어졌음을 알 수 있습니다. Frame의 Total Self T [chunk_id] | Guides:762:2
[task] | distill [title] | 파티클 활용하기 [category] | Guides [rephrased] | # 파티클 활용하기 `ParticleEmitStartEvent`와 `ParticleLoopEvent`를 처리하여 파티클 생성 시점마다 대미지 적용 또는 연출을 실행합니다. ## 1. 3D 파티클 (월드 내) 1. `LightningStrikeSharp` 프리셋을 배치합니다. 2. `AttackComponent`를 확장한 `ExtendAttackComponent`를 생성하고, 아래 메서드를 추가합니다. ```lua void OnLightning() { self:Attack(Vector2(2, 2), V [original] | 파티클 이벤트를 활용하여 파티클을 반복 생성할 때마다 대미지를 주거나 연출을 보여줄 수 있습니다. 번개가 칠 때마다 공격 기능이 작동하여 캐릭터에게 대미지를 주는 예제를 통해 파티클 이벤트의 활용 방법을 살펴봅시다. 1. Preset List - **LightningStrikeSharp** 파티클을 배치합니다. 2. AttackComponent를 Extend하여 새 스크립트 컴포넌트 ExtendAttackComponent를 생성합니다. 3. ExtendAttackComponent를 열고 `OnLightni [chunk_id] | Guides:764:3
[task] | extract_knowledge [title] | 웹 브라우저 활용하기 [category] | Guides [rephrased] | # WebViewComponent 활용 가이드 ## 1. 개념 설명 **WebViewComponent**는 엔티티(Entity)에 웹 브라우저 뷰를 배치하고 제어하기 위한 컴포넌트입니다. 이 컴포넌트를 추가하면 월드 내 특정 위치에 웹 페이지를 렌더링할 수 있으며, 사용자의 입력(클릭, 스크롤, 드래그)에 따라 웹 요소와 상호작용하게 할 수 있습니다. ### 주요 프로퍼티 WebViewComponent는 웹 뷰의 동작과 외형을 제어하기 위해 다음과 같은 프로퍼티를 제공합니다. * **입력 제어:** * `Clic [original] | # 학습 과정 소개 **WebViewComponent**를 활용하면 웹 브라우저를 월드에 배치하고 탐색할 수 있습니다. 간단한 예제를 통해 월드에서 웹 브라우저를 활용하는 방법을 알아봅시다. ##### 참고 API Reference [WebViewComponent](/apiReference/Components/WebViewComponent) # WebViewComponent 소개 엔티티에 **WebViewComponent**를 추가하면 월드에 웹 브라우저를 배치할 수 있습니다. 먼저 **WebViewComponent**의 프 [chunk_id] | Guides:763:0
[task] | distill [title] | 파티클 활용하기 [category] | Guides [rephrased] | # 파티클 생성 및 삭제 `_ParticleService` API를 사용하여 특정 트리거 조건에 따라 파티클을 생성하거나 삭제하는 방법입니다. ## 1. 설정 1. 파티클 발생 엔티티(예: 호리병)와 목표 엔티티(예: 소화기)를 배치하고, 모든 엔티티에 `TriggerComponent`를 추가합니다. 2. `DefaultPlayer`에 새 스크립트 컴포넌트를 추가하고, 프로퍼티를 정의합니다. ```lua Property: [None] Entity ResetEntity = "nil" [None] SyncTable<numb [original] | 반복 재생되는 파티클을 생성하거나 삭제하는 방법을 알아봅시다. 특정 엔티티에 캐릭터가 닿으면 파티클이 생성되다가 캐릭터가 목표 지점에 도착하면 파티클 생성이 멈추는 예제를 만들어보겠습니다. 1. 파티클을 뿜어낼 엔티티와 목표 엔티티를 배치합니다. 본 예제에서는 파티클을 뿜어낼 엔티티로 **object-24**(호리병)을, 목표 엔티티로는 **object-928**(소화기)를 사용했습니다. 2. 배치한 모든 엔티티에 TriggerComponent를 추가합니다. 3. Workspace - MyDesk에 새 [chunk_id] | Guides:764:2