← 목록

mLua · Nemotron-CC 리프레이즈 (CPT)

총 8,200개 · 페이지 142/274
🔀 랜덤
불러오는 중…

[task] | diverse_qa [title] | Maple GYM 만들기 Ⅱ [category] | Guides [rephrased] | 질문: 상점 버튼을 제작할 때, 버튼을 추가해야 하는 기본 그룹은 무엇인가요? 답변: 상점 버튼을 제작할 때는 **DefaultGroup**에 UI 버튼을 추가해야 합니다. 질문: 상점 버튼에 텍스트를 표시하기 위해 추가해야 하는 컴포넌트는 무엇인가요? 답변: 상점 버튼에 텍스트를 표시하기 위해 **TextComponent**를 추가해야 합니다. 질문: 상점 버튼의 이름을 무엇으로 변경해야 하나요? 답변: 상점 버튼의 이름을 **ShopButton**으로 변경해야 합니다. 질문: 판매 버튼을 제작하기 위해 기존 SHOP 버튼을 [original] | # 버튼 UI 제작 #### 상점 버튼 제작 1. **DefaultGroup**에 UI 버튼을 추가하고, 자유롭게 버튼 형태를 수정합니다. ![[object Object]](https://mod-file.dn.nexoncdn.co.kr/bbs/17695121955247cf8228045bc45d49b963f35fcf1855b.png "shop") 2. 버튼의 이름을 **ShopButton**으로 변경하고,**TextComponent**를 추가합니다. ![[object Object]](https://mod-file.dn.nexonc [chunk_id] | Guides:143:0

[task] | extract_knowledge [title] | Maple GYM 만들기 Ⅱ [category] | Guides [rephrased] | # 버튼 UI 제작 및 NPC 위치로 이동 ## 1. 개념 설명 메이플스토리 월드에서 NPC 상호작용을 위한 버튼 UI는 `DefaultGroup` 하위에 배치되는 UI 컴포넌트입니다. 상점(`Shop`)과 판매(`Sell`) 기능을 구분하기 위해 각각 별도의 버튼 엔티티를 생성하고, 텍스트 표시를 위해 `TextComponent`를 사용합니다. 버튼 클릭 시 이벤트 핸들러를 통해 특정 NPC 위치로 이동하는 로직을 구현할 수 있습니다. ## 2. API 및 에디터 사용법 ### 2.1 상점 버튼 (ShopButton) 제작 [original] | # 버튼 UI 제작 #### 상점 버튼 제작 1. **DefaultGroup**에 UI 버튼을 추가하고, 자유롭게 버튼 형태를 수정합니다. ![[object Object]](https://mod-file.dn.nexoncdn.co.kr/bbs/17695121955247cf8228045bc45d49b963f35fcf1855b.png "shop") 2. 버튼의 이름을 **ShopButton**으로 변경하고,**TextComponent**를 추가합니다. ![[object Object]](https://mod-file.dn.nexonc [chunk_id] | Guides:143:0

[task] | wikipedia [title] | Maple GYM 만들기 Ⅰ [category] | Guides [rephrased] | # 힘 판매하기 이 섹션은 Maple GYM 제작 가이드의 일부로, 유저가 보유한 '힘(Pow)'을 NPC에게 판매하여 게임 내 화폐로 환전하는 기능을 구현하는 방법을 설명합니다. 이 기능은 NPC에게 접근한 유저의 힘 값을 0으로 초기화하고, 감소된 힘의 양만큼 화폐 값을 증가시키는 논리 기반으로 동작합니다. 구현을 위해 먼저 판매를 담당할 NPC를 배치하고, 해당 엔티티의 이름을 `SellNPC`로 변경합니다. 만약 배치한 NPC가 다른 오브젝트 뒤에 가려지는 문제가 발생한다면, 해당 NPC의 `SpriteRendererCo [original] | # 힘 판매하기 환전을 담당하고 있는 NPC에게 다가가면 모든 힘 값을 0으로 변경하고, 감소한 힘만큼 돈이 증가하도록 만들어봅시다. 1. 판매를 담당할 NPC를 배치하고, 이름을 **SellNPC**로 변경합니다. > **Tip** > 만약 배치한 NPC가 다른 오브젝트들의 뒤에 배치될 경우 NPC의 SpriteRendererComponent의 SortingLayer 값을 변경합니다. 2. NPC의 **RigidBodComponent**의 **Gravity** 프로퍼티의 값을 0으로 변경합니다. NPC [chunk_id] | Guides:126:7

[task] | extract_knowledge [title] | Maple GYM 만들기 Ⅰ [category] | Guides [rephrased] | # PlayerStats 컴포넌트를 통한 UI 갱신 처리 ## 개념 설명 `PlayerStats` 컴포넌트는 플레이어의 능력치(힘, 돈 등)가 변경될 때 해당 값을 UI에 반영하기 위한 로직을 담당합니다. 클라이언트 측에서 UI 엔티티를 참조하고, 상태 변경 메서드(`SetPow`, `SetMoney`)가 호출되면 이를 감지하여 UI 갱신 메서드(`RenewPow`, `RenewMoney`)를 트리거하는 구조로 설계됩니다. ## API 사용법 - **`_EntityService:GetEntityByPath(path)`**: 지정 [original] | ```lua void OnBeginPlay() { if self:IsClient() then self.UiManager = _EntityService:GetEntityByPath("/ui/DefaultGroup").UIManager end } ``` 9. **PlayerStats** 컴포넌트에 `RenewPow()` 메소드를 생성하고 아래 내용을 추가합니다. ```lua [client only] void [chunk_id] | Guides:126:6

[task] | diverse_qa [title] | Maple GYM 만들기 Ⅰ [category] | Guides [rephrased] | 질문: 이 가이드에서 설명하는 **UIManager** 스크립트 컴포넌트의 주요 목적은 무엇인가요? 답변: 전반적인 UI 관리를 담당하며, **PlayerStats** 컴포넌트에서 힘이나 돈 등의 상태가 변할 때 UI를 갱신하는 역할을 합니다. 질문: **UIManager** 컴포넌트를 Hierarchy의 어느 위치에 추가해야 하나요? 답변: **Hierarchy - ui - DefaultGroup**에 생성한 **UIManager** 컴포넌트를 추가해야 합니다. 질문: **UIManager** 컴포넌트의 `UiPowerText [original] | 전반적인 UI 관리를 위한 UIManager 스크립트 컴포넌트를 만들어 봅시다. **PlayerStats** 컴포넌트에서 힘을 증가시킬 때마다 **UIManager**에서 UI를 갱신하는 방식으로 구현하겠습니다. 1. 새로운 **UIManager** 컴포넌트를 생성합니다. 2. **Hierarchy - ui - DefaultGroup**에 생성한 **UIManager** 컴포넌트를 추가합니다. ![[object Object]](https://mod-file.dn.nexoncdn.co.kr/bbs/176951343509088f9e [chunk_id] | Guides:126:5

[task] | diverse_qa [title] | Maple GYM 만들기 Ⅰ [category] | Guides [rephrased] | 질문: 힘 판매 기능을 구현하기 위해 배치할 NPC의 이름을 무엇으로 변경해야 하나요? 답변: 배치한 NPC의 이름을 **SellNPC**로 변경해야 합니다. 질문: 배치한 NPC가 다른 오브젝트 뒤로 가려지는 문제를 해결하기 위해 어떤 컴포넌트의 어떤 값을 변경해야 하나요? 답변: NPC의 **SpriteRendererComponent**의 **SortingLayer** 값을 변경해야 합니다. 질문: NPC가 중력의 영향을 받지 않도록 하려면 어떤 컴포넌트의 프로퍼티를 어떻게 설정해야 하나요? 답변: NPC의 **RigidBo [original] | # 힘 판매하기 환전을 담당하고 있는 NPC에게 다가가면 모든 힘 값을 0으로 변경하고, 감소한 힘만큼 돈이 증가하도록 만들어봅시다. 1. 판매를 담당할 NPC를 배치하고, 이름을 **SellNPC**로 변경합니다. > **Tip** > 만약 배치한 NPC가 다른 오브젝트들의 뒤에 배치될 경우 NPC의 SpriteRendererComponent의 SortingLayer 값을 변경합니다. 2. NPC의 **RigidBodComponent**의 **Gravity** 프로퍼티의 값을 0으로 변경합니다. NPC [chunk_id] | Guides:126:7

[task] | knowledge_list [title] | Maple GYM 만들기 Ⅱ [category] | Guides [rephrased] | 1. `UIManager` 컴포넌트에는 `[None]` 동기화 속성으로 `component Controller = nil` 프로퍼티를 선언하여 `PlayerController` 컴포넌트를 참조합니다. 2. `UIManager` 컴포넌트에 `void SetButtonHandler(string buttonPath)` 메서드를 추가하여, 매개변수 `buttonPath`로 전달된 경로 문자열을 `_EntityService:GetEntityByPath(buttonPath)`로 엔티티로 변환한 뒤, 해당 엔티티의 `ButtonClickEven [original] | SELL 버튼을 클릭하면 캐릭터가 NPC가 배치된 위치로 이동할 수 있도록 만들어봅시다. 1. **UIManager**에서 `PlayerController`를 참조할 수 있도록 새로운 **Controller** 프로퍼티를 추가합니다. ```lua Property: [None] component Controller = nil ``` 2. **UIManager** 컴포넌트에 새로운 `SetButtonHandler()` 메소드를 추가하고, **string** 타입의 **buttonPath** 매개 [chunk_id] | Guides:143:1

[task] | distill [title] | Maple GYM 만들기 Ⅱ [category] | Guides [rephrased] | **Maple GYM 만들기 Ⅱ: SELL 버튼 이동 로직 구현** SELL 버튼을 클릭 시 캐릭터가 NPC 위치로 이동하도록 `UIManager`와 `PlayerController`를 연결하는 과정입니다. ### 1. UIManager 컴포넌트 수정 **Property:** `PlayerController` 참조용 프로퍼티 추가. ```lua Property: [None] component Controller = nil ``` **Method: SetButtonHandler** `string` 타입의 `buttonPath` [original] | SELL 버튼을 클릭하면 캐릭터가 NPC가 배치된 위치로 이동할 수 있도록 만들어봅시다. 1. **UIManager**에서 `PlayerController`를 참조할 수 있도록 새로운 **Controller** 프로퍼티를 추가합니다. ```lua Property: [None] component Controller = nil ``` 2. **UIManager** 컴포넌트에 새로운 `SetButtonHandler()` 메소드를 추가하고, **string** 타입의 **buttonPath** 매개 [chunk_id] | Guides:143:1

[task] | wikipedia [title] | Maple GYM 만들기 Ⅰ [category] | Guides [rephrased] | **UIManager 스크립트 컴포넌트 구현** 메이플스토리 월드에서 전반적인 사용자 인터페이스(UI) 관리를 수행하기 위해 `UIManager` 스크립트 컴포넌트를 생성할 수 있다. 이 컴포넌트는 `PlayerStats` 컴포넌트에서 힘(Power) 값이 증가할 때마다 해당 값을 읽어 UI를 실시간으로 갱신하는 방식으로 동작한다. 구현 과정은 다음과 같다. 먼저 새로운 `UIManager` 컴포넌트를 생성하고, 이를 씬(Hierarchy) 구조의 `ui` 그룹 내 `DefaultGroup`에 추가한다. 이 위치는 UI 요소들이 [original] | 전반적인 UI 관리를 위한 UIManager 스크립트 컴포넌트를 만들어 봅시다. **PlayerStats** 컴포넌트에서 힘을 증가시킬 때마다 **UIManager**에서 UI를 갱신하는 방식으로 구현하겠습니다. 1. 새로운 **UIManager** 컴포넌트를 생성합니다. 2. **Hierarchy - ui - DefaultGroup**에 생성한 **UIManager** 컴포넌트를 추가합니다. ![[object Object]](https://mod-file.dn.nexoncdn.co.kr/bbs/176951343509088f9e [chunk_id] | Guides:126:5

[task] | distill [title] | Maple GYM 만들기 Ⅱ [category] | Guides [rephrased] | # 상점 UI 제작 및 버튼 연결 ## 1. UI 구조 설정 * **UI Group** 추가 후 `DefaultShow`를 `true`로 설정합니다. * UI 엔티티를 배치할 때 이름은 이미지/설계도와 일치해야 합니다. * UI 겹침 발생 시 하이어라키 순서로 해결합니다. ## 2. 스크립트 구현 (UIManager 컴포넌트) ### Property 상점 UI 그룹을 참조하는 프로퍼티를 추가합니다. ```lua Property: [None] Entity ShopGroup = nil ``` ### Method: On [original] | # 상점 UI 제작 1. 새로운 **UI Group**을 추가하고, **DefaultShow** 값을 **true**로 설정합니다. 2. 아래와 같이 UI엔티티를 추가하고 배치합니다. UI엔티티의 이름은 이미지와 동일해야 합니다. ![[object Object]](https://mod-file.dn.nexoncdn.co.kr/bbs/1769512144899182516b8ee4d4248a16af41cc5d72f56.png "1") > **Tip.** > 이미지나 텍스트가 다른 UI엔티티에 가릴 경우 하이어라키 순서를 변경합니다. [chunk_id] | Guides:143:2

[task] | extract_knowledge [title] | Maple GYM 만들기 Ⅰ [category] | Guides [rephrased] | # 힘 판매 시스템 구현 ## 1. 개념 설명 이 절에서는 플레이어의 '힘(Pow)' 값을 화폐로 환전하는 로직을 구현하는 방법을 다룹니다. 이 시스템은 트리거(Trigger)를 통해 NPC와 플레이어의 상호작용을 감지하고, 플레이어 상태 관리 컴포넌트(`PlayerStats`)의 메서드를 호출하여 힘 값을 감소시키고 화폐 값을 증가시키는 방식을 취합니다. ## 2. API 및 컴포넌트 사용법 * **TriggerComponent**: 엔티티가 다른 오브젝트나 유저와 겹칠 때 이벤트를 발생시키는 컴포넌트입니다. `OnEnte [original] | # 힘 판매하기 환전을 담당하고 있는 NPC에게 다가가면 모든 힘 값을 0으로 변경하고, 감소한 힘만큼 돈이 증가하도록 만들어봅시다. 1. 판매를 담당할 NPC를 배치하고, 이름을 **SellNPC**로 변경합니다. > **Tip** > 만약 배치한 NPC가 다른 오브젝트들의 뒤에 배치될 경우 NPC의 SpriteRendererComponent의 SortingLayer 값을 변경합니다. 2. NPC의 **RigidBodComponent**의 **Gravity** 프로퍼티의 값을 0으로 변경합니다. NPC [chunk_id] | Guides:126:7

[task] | knowledge_list [title] | Maple GYM 만들기 Ⅱ [category] | Guides [rephrased] | 제시된 문서 내용에만 근거하여 핵심 사실을 추출하고, mLua 스크립트 규칙에 맞춰 정리한 목록입니다. 1. **PlayerStats** 컴포넌트의 `Property:` 블록에 동기화 속성이 없는 `[None]` 타입의 `table` 프로퍼티 `SkillGradeTable`을 선언하고, 초기값으로 빈 테이블 `{}`를 설정하여 운동 스킬 관련 등급 정보를 저장합니다. 2. **PlayerStats** 컴포넌트의 `Property:` 블록에 동기화 속성이 없는 `[None]` 타입의 `table` 프로퍼티 `DnaGradeTable [original] | 운동 기술과 DNA는 돈을 사용해 업그레이드 할 수 있습니다. 그러므로 각각의 등급에서 증가하는 힘과 누적 가능한 힘, 필요한 금액 정보를 구성해 봅시다. > **Tip.** > 관리할 데이터가 많아질 경우 스크립트에 직접 입력하는 대신 공식을 사용하거나, 데이터셋을 사용해 효율적으로 관리할 수 있습니다. 1. **PlayerStats** 컴포넌트에 새로운 프로퍼티 2개를 추가합니다. ```lua Property: [None] table SkillGradeTable = {} -- 운동 스킬 관련 테 [chunk_id] | Guides:143:3

[task] | wikipedia [title] | Maple GYM 만들기 Ⅱ [category] | Guides [rephrased] | # 상점 UI 제작 상점 UI를 제작하려면 먼저 새로운 **UI Group**을 추가하고, 해당 UI Group의 **DefaultShow** 프로퍼티 값을 **true**로 설정해야 합니다. 이후 UI 엔티티를 추가하고 배치합니다. 이때 UI 엔티티의 이름은 참고 이미지와 동일하게 지정되어야 합니다. ![[object Object]](https://mod-file.dn.nexoncdn.co.kr/bbs/1769512144899182516b8ee4d4248a16af41cc5d72f56.png "1") > **Tip.** > 이 [original] | # 상점 UI 제작 1. 새로운 **UI Group**을 추가하고, **DefaultShow** 값을 **true**로 설정합니다. 2. 아래와 같이 UI엔티티를 추가하고 배치합니다. UI엔티티의 이름은 이미지와 동일해야 합니다. ![[object Object]](https://mod-file.dn.nexoncdn.co.kr/bbs/1769512144899182516b8ee4d4248a16af41cc5d72f56.png "1") > **Tip.** > 이미지나 텍스트가 다른 UI엔티티에 가릴 경우 하이어라키 순서를 변경합니다. [chunk_id] | Guides:143:2

[task] | distill [title] | Maple GYM 만들기 Ⅱ [category] | Guides [rephrased] | **UIManager** 컴포넌트에 `TextComponent` 타입의 프로퍼티 4개를 추가하고, 초기화 및 정보 갱신 메서드를 구현합니다. **1. Property 추가** ```lua Property: [None] Component SkillLevelText = nil [None] Component DnaLevelText = nil [None] Component SkillUpButtonText = nil [None] Component DnaUpButtonText = nil ``` **2. `OnBeginPlay()` 초기화* [original] | 상점에 알맞는 정보가 표시될 수 있도록 만들어봅시다. 1. **UIManager** 컴포넌트에 새로운 프로퍼티를 4개를 추가합니다. 이 프로퍼티들은 **TextComponent** 정보를 가집니다. ```lua Property: [None] Component SkillLevelText = nil [None] Component DnaLevelText = nil [None] Component SkillUpButtonText = nil [None] Componen [chunk_id] | Guides:143:4

[task] | knowledge_list [title] | Maple GYM 만들기 Ⅱ [category] | Guides [rephrased] | 제시된 문서 [Guides] 응용 제작 가이드 Maple GYM 만들기 Ⅱ의 '상점 UI 제작' 섹션에서 추출한 핵심 사실 목록입니다. * 상점 UI를 위해 새로운 **UI Group**을 추가하고, 해당 UI Group의 **DefaultShow** 프로퍼티 값을 `true`로 설정해야 합니다. * 상점 UI 구성을 위해 UI엔티티를 추가 및 배치할 때, 엔티티의 이름은 제공된 이미지와 동일하게 설정해야 하며, 이미지나 텍스트가 다른 UI엔티티에 가려질 경우 하이어라키 순서를 변경하여 해결할 수 있습니다. * 상점 U [original] | # 상점 UI 제작 1. 새로운 **UI Group**을 추가하고, **DefaultShow** 값을 **true**로 설정합니다. 2. 아래와 같이 UI엔티티를 추가하고 배치합니다. UI엔티티의 이름은 이미지와 동일해야 합니다. ![[object Object]](https://mod-file.dn.nexoncdn.co.kr/bbs/1769512144899182516b8ee4d4248a16af41cc5d72f56.png "1") > **Tip.** > 이미지나 텍스트가 다른 UI엔티티에 가릴 경우 하이어라키 순서를 변경합니다. [chunk_id] | Guides:143:2

[task] | diverse_qa [title] | Maple GYM 만들기 Ⅱ [category] | Guides [rephrased] | 질문: 상점 UI를 제작할 때 새로운 UI Group의 DefaultShow 값을 어떻게 설정해야 하는가? 답변: DefaultShow 값을 true로 설정해야 합니다. 질문: UI 엔티티의 이름은 무엇과 동일해야 하는가? 답변: UI 엔티티의 이름은 이미지와 동일해야 합니다. 질문: 이미지나 텍스트가 다른 UI 엔티티에 가려지는 경우 어떻게 해결해야 하는가? 답변: 하이어라키 순서를 변경하여 해결해야 합니다. 질문: 버튼이 동작하기 위해 반드시 연결해야 하는 것은 무엇인가? 답변: 버튼이 동작하기 위해서는 Event Hand [original] | # 상점 UI 제작 1. 새로운 **UI Group**을 추가하고, **DefaultShow** 값을 **true**로 설정합니다. 2. 아래와 같이 UI엔티티를 추가하고 배치합니다. UI엔티티의 이름은 이미지와 동일해야 합니다. ![[object Object]](https://mod-file.dn.nexoncdn.co.kr/bbs/1769512144899182516b8ee4d4248a16af41cc5d72f56.png "1") > **Tip.** > 이미지나 텍스트가 다른 UI엔티티에 가릴 경우 하이어라키 순서를 변경합니다. [chunk_id] | Guides:143:2

[task] | extract_knowledge [title] | Maple GYM 만들기 Ⅰ [category] | Guides [rephrased] | # Maple GYM: 운동 상태 처리 및 힘(Strength) 증가 구현 본 절에서는 `PlayerController` 컴포넌트를 통해 캐릭터의 `Attack` 상태 진입을 감지하고, 서버 공간에서 힘(Pow) 값을 계산하여 `PlayerStats` 컴포넌트에 반영하는 로직을 구현하는 방법을 다룬다. ## 1. 개념 설명 * **상태 기반 행동 처리**: `PlayerActionEvent`는 캐릭터의 상태 변화(예: Attack, Move 등)가 발생할 때 트리거되는 이벤트이다. 이 이벤트를 통해 특정 상태(Attack) [original] | `Ctrl`키를 눌러 Attack 상태가 되면 운동을 하고, 힘이 증가하도록 만듭니다. 1. **PlayerController**에 **Component** 타입의 **Stats** 프로퍼티를 추가합니다. 이 프로퍼티는 **PlayerStats** 컴포넌트를 참고하게 됩니다. ```lua Property: [Sync] Component Stats = nil ``` 2. `OnBeginPlay()` 메소드에 **PlayerStats** 컴포넌트를 받아오도록 아래와 같이 작성합니다.**Playe [chunk_id] | Guides:126:2

[task] | diverse_qa [title] | Maple GYM 만들기 Ⅱ [category] | Guides [rephrased] | 질문: SELL 버튼을 클릭했을 때 캐릭터가 이동하도록 설정하기 위해 UIManager에 추가해야 하는 새로운 프로퍼티의 이름과 타입은 무엇인가요? 답변: 새로운 프로퍼티의 이름은 Controller이며, 타입은 component입니다. 질문: SetButtonHandler() 메소드에서 버튼 엔티티를 찾기 위해 사용하는 서비스와 메소드는 무엇인가요? 답변: _EntityService의 GetEntityByPath() 메소드를 사용합니다. 질문: SetButtonHandler() 메소드 내에서 버튼의 클릭 이벤트를 연결할 때 사 [original] | SELL 버튼을 클릭하면 캐릭터가 NPC가 배치된 위치로 이동할 수 있도록 만들어봅시다. 1. **UIManager**에서 `PlayerController`를 참조할 수 있도록 새로운 **Controller** 프로퍼티를 추가합니다. ```lua Property: [None] component Controller = nil ``` 2. **UIManager** 컴포넌트에 새로운 `SetButtonHandler()` 메소드를 추가하고, **string** 타입의 **buttonPath** 매개 [chunk_id] | Guides:143:1

[task] | wikipedia [title] | Maple GYM 만들기 Ⅱ [category] | Guides [rephrased] | 다음은 'Maple GYM 만들기 Ⅱ' 가이드 중 상점 정보 표시 로직을 구현하는 절차에 대한 기술 문서입니다. 상점에 적절하게 정보가 표시되도록 설정하기 위해 `UIManager` 컴포넌트를 수정하고 초기화 및 정보 갱신 메서드를 추가하는 과정으로 구성됩니다. 먼저 `UIManager` 컴포넌트에 `TextComponent` 정보를 참조하기 위한 프로퍼티 4개를 추가합니다. 추가되는 프로퍼티는 모두 `[None]` 동기화 속성을 가지며, 초기값은 `nil`입니다. 구체적으로 `SkillLevelText`, `DnaLevelTe [original] | 상점에 알맞는 정보가 표시될 수 있도록 만들어봅시다. 1. **UIManager** 컴포넌트에 새로운 프로퍼티를 4개를 추가합니다. 이 프로퍼티들은 **TextComponent** 정보를 가집니다. ```lua Property: [None] Component SkillLevelText = nil [None] Component DnaLevelText = nil [None] Component SkillUpButtonText = nil [None] Componen [chunk_id] | Guides:143:4

[task] | wikipedia [title] | Maple GYM 만들기 Ⅱ [category] | Guides [rephrased] | # Maple GYM 만들기 Ⅱ: SELL 버튼 클릭 시 NPC 위치 이동 구현 본 가이드는 메이플스토리 월드(MapleStory Worlds)에서 SELL 버튼을 클릭했을 때 캐릭터가 NPC가 배치된 위치로 이동하도록 스크립트를 작성하는 과정을 설명합니다. 이 기능을 구현하기 위해 `UIManager`와 `PlayerController` 컴포넌트를 수정해야 합니다. ## 1. UIManager 컴포넌트에 Controller 프로퍼티 추가 먼저 `UIManager` 컴포넌트에서 `PlayerController`를 참조할 수 있 [original] | SELL 버튼을 클릭하면 캐릭터가 NPC가 배치된 위치로 이동할 수 있도록 만들어봅시다. 1. **UIManager**에서 `PlayerController`를 참조할 수 있도록 새로운 **Controller** 프로퍼티를 추가합니다. ```lua Property: [None] component Controller = nil ``` 2. **UIManager** 컴포넌트에 새로운 `SetButtonHandler()` 메소드를 추가하고, **string** 타입의 **buttonPath** 매개 [chunk_id] | Guides:143:1

[task] | knowledge_list [title] | Maple GYM 만들기 Ⅱ [category] | Guides [rephrased] | 제시된 원문에 포함된 정보만 바탕으로 핵심 사실을 추출하여 정리한 목록입니다. 1. `UIManager` 컴포넌트에는 `SkillLevelText`, `DnaLevelText`, `SkillUpButtonText`, `DnaUpButtonText`라는 네 개의 `[None]` 동기화 속성이 `Component` 타입으로 정의되며, 초기값은 모두 `nil`입니다. 2. `UIManager` 컴포넌트의 `OnBeginPlay()` 메소드 내에서 `_EntityService:GetEntityByPath("/ui/UIGroup/Skill [original] | 상점에 알맞는 정보가 표시될 수 있도록 만들어봅시다. 1. **UIManager** 컴포넌트에 새로운 프로퍼티를 4개를 추가합니다. 이 프로퍼티들은 **TextComponent** 정보를 가집니다. ```lua Property: [None] Component SkillLevelText = nil [None] Component DnaLevelText = nil [None] Component SkillUpButtonText = nil [None] Componen [chunk_id] | Guides:143:4

[task] | wikipedia [title] | Maple GYM 만들기 Ⅱ [category] | Guides [rephrased] | 제시된 원문은 '메이플 GYM 만들기 Ⅱ' 가이드의 일부로, 버튼 이름(`buttonName`)에 따라 실행되는 로직을 처리하는 조건문 코드만 포함되어 있습니다. 원문에는 해당 코드의 기능 설명, API 정의, 또는 컨텍스트에 대한 텍스트가 없으므로, 제공된 코드 블록만 그대로 보존하여 제시합니다. ```lua if buttonName == "ShopButton" then self:SetShopInfo() -- 추가 self.ShopGroup:SetVisible(true, false) elseif buttonName [original] | if buttonName == "ShopButton" then self:SetShopInfo() -- 추가 self.ShopGroup:SetVisible(true, false) elseif buttonName == "SellButton" then self.Controller:MoveSellPosition() self:SetShopInfo() -- 추가 elseif buttonName == "ShopCloseButton" then self.ShopGroup:SetVisible(false, false) [chunk_id] | Guides:143:6

[task] | distill [title] | Maple GYM 만들기 Ⅱ [category] | Guides [rephrased] | `buttonName` 값에 따라 다음 로직을 수행합니다. * **"ShopButton"**: `self:SetShopInfo()` 호출 후 `self.ShopGroup:SetVisible(true, false)` 실행 * **"SellButton"**: `self.Controller:MoveSellPosition()` 및 `self:SetShopInfo()` 호출 * **"ShopCloseButton"**: `self.ShopGroup:SetVisible(false, false)` 실행 * **"SkillUpBut [original] | if buttonName == "ShopButton" then self:SetShopInfo() -- 추가 self.ShopGroup:SetVisible(true, false) elseif buttonName == "SellButton" then self.Controller:MoveSellPosition() self:SetShopInfo() -- 추가 elseif buttonName == "ShopCloseButton" then self.ShopGroup:SetVisible(false, false) [chunk_id] | Guides:143:6

[task] | distill [title] | Maple GYM 만들기 Ⅱ [category] | Guides [rephrased] | # [Guides] 응용 제작 가이드 Maple GYM 만들기 Ⅱ 운동 기술과 DNA는 비용(돈)을 사용해 업그레이드됩니다. 등급별 증가 힘, 누적 가능 힘, 필요 금액 데이터를 구성합니다. > **Tip.** 데이터가 많으면 스크립트 직접 입력 대신 공식 또는 데이터셋 사용 권장. ## 1. PlayerStats 컴포넌트 프로퍼티 추가 ```lua Property: [None] table SkillGradeTable = {} -- 운동 스킬 관련 테이블 정보 [None] table DnaGradeTable = {} -- D [original] | 운동 기술과 DNA는 돈을 사용해 업그레이드 할 수 있습니다. 그러므로 각각의 등급에서 증가하는 힘과 누적 가능한 힘, 필요한 금액 정보를 구성해 봅시다. > **Tip.** > 관리할 데이터가 많아질 경우 스크립트에 직접 입력하는 대신 공식을 사용하거나, 데이터셋을 사용해 효율적으로 관리할 수 있습니다. 1. **PlayerStats** 컴포넌트에 새로운 프로퍼티 2개를 추가합니다. ```lua Property: [None] table SkillGradeTable = {} -- 운동 스킬 관련 테 [chunk_id] | Guides:143:3

[task] | extract_knowledge [title] | Maple GYM 만들기 Ⅰ [category] | Guides [rephrased] | # UI 상태 동기화: UIManager 패턴 ## 개념 설명 메이플스토리 월드 스크립트 환경에서 사용자 인터페이스(UI)는 게임 로직과 분리되어 관리되는 경우가 많습니다. 특히 캐릭터의 능력치(힘, 돈 등)가 변경될 때 이를 시각적으로 반영하기 위해, 로직을 담당하는 컴포넌트(예: `PlayerStats`)와 화면을 담당하는 컴포넌트(예: `UIManager`) 사이의 통신이 필요합니다. 이 절에서는 `PlayerStats` 컴포넌트가 데이터를 보유하는 구조와, `UIManager` 컴포넌트가 해당 데이터를 참조하여 UI 텍스 [original] | 전반적인 UI 관리를 위한 UIManager 스크립트 컴포넌트를 만들어 봅시다. **PlayerStats** 컴포넌트에서 힘을 증가시킬 때마다 **UIManager**에서 UI를 갱신하는 방식으로 구현하겠습니다. 1. 새로운 **UIManager** 컴포넌트를 생성합니다. 2. **Hierarchy - ui - DefaultGroup**에 생성한 **UIManager** 컴포넌트를 추가합니다. ![[object Object]](https://mod-file.dn.nexoncdn.co.kr/bbs/176951343509088f9e [chunk_id] | Guides:126:5

[task] | diverse_qa [title] | Maple GYM 만들기 Ⅱ [category] | Guides [rephrased] | 질문: 운동 기술과 DNA를 업그레이드할 때 어떤 자원을 사용하나요? 답변: 운동 기술과 DNA는 돈을 사용해 업그레이드 할 수 있습니다. 질문: `PlayerStats` 컴포넌트에 추가된 `SkillGradeTable` 프로퍼티의 타입과 속성(Sync 여부)은 무엇인가요? 답변: `SkillGradeTable` 프로퍼티의 타입은 `table`이며, 속성은 `[None]`입니다. 질문: `SetTable()` 메소드에서 10단계 운동 스킬의 비용(`Cost`)과 힘 보너스(`WeightBonus`)는 각각 얼마인가요? 답변: 1 [original] | 운동 기술과 DNA는 돈을 사용해 업그레이드 할 수 있습니다. 그러므로 각각의 등급에서 증가하는 힘과 누적 가능한 힘, 필요한 금액 정보를 구성해 봅시다. > **Tip.** > 관리할 데이터가 많아질 경우 스크립트에 직접 입력하는 대신 공식을 사용하거나, 데이터셋을 사용해 효율적으로 관리할 수 있습니다. 1. **PlayerStats** 컴포넌트에 새로운 프로퍼티 2개를 추가합니다. ```lua Property: [None] table SkillGradeTable = {} -- 운동 스킬 관련 테 [chunk_id] | Guides:143:3

[task] | diverse_qa [title] | Maple GYM 만들기 Ⅱ [category] | Guides [rephrased] | 질문: `buttonName` 변수가 "ShopButton"으로 확인될 때 스크립트는 어떤 동작을 수행합니까? 답변: `self:SetShopInfo()` 메서드를 호출한 뒤, `self.ShopGroup`의 가시성을 `true`로 설정합니다. 질문: "SellButton"이 클릭되었을 때 실행되는 첫 번째 메서드 호출은 무엇입니까? 답변: `self.Controller:MoveSellPosition()`입니다. 질문: `buttonName`이 "ShopCloseButton"일 때 `self.ShopGroup:SetVisible [original] | if buttonName == "ShopButton" then self:SetShopInfo() -- 추가 self.ShopGroup:SetVisible(true, false) elseif buttonName == "SellButton" then self.Controller:MoveSellPosition() self:SetShopInfo() -- 추가 elseif buttonName == "ShopCloseButton" then self.ShopGroup:SetVisible(false, false) [chunk_id] | Guides:143:6

[task] | knowledge_list [title] | Maple GYM 만들기 Ⅱ [category] | Guides [rephrased] | 제시된 원문은 코드 조각(Snippet)이며, 해당 함수의 정의부(함수명, 매개변수, 반환 타입)나 `self`가 가리키는 컴포넌트의 전체 구조가 포함되어 있지 않습니다. 따라서 원문에 명시된 정보만 엄격히 준수하여 관찰 가능한 동작들을 정리합니다. 1. `buttonName` 변수의 값이 `"ShopButton"`과 같을 경우, `self:SetShopInfo()` 메서드가 호출된 후 `self.ShopGroup` 객체의 `SetVisible` 메서드가 `(true, false)` 인자로 실행됩니다. 2. `buttonName` [original] | if buttonName == "ShopButton" then self:SetShopInfo() -- 추가 self.ShopGroup:SetVisible(true, false) elseif buttonName == "SellButton" then self.Controller:MoveSellPosition() self:SetShopInfo() -- 추가 elseif buttonName == "ShopCloseButton" then self.ShopGroup:SetVisible(false, false) [chunk_id] | Guides:143:6

[task] | extract_knowledge [title] | Maple GYM 만들기 Ⅱ [category] | Guides [rephrased] | # UI 버튼 이벤트 연결 및 캐릭터 이동 처리 ## 개념 설명 mLua 스크립트 환경에서 UI 버튼 클릭 시 특정 로직을 실행하려면, UI 관리 컴포넌트(`UIManager`)가 버튼 엔티티의 클릭 이벤트를 수신하도록 연결해야 합니다. 이 과정은 버튼의 경로를 통해 엔티티를 조회하고, 해당 엔티티의 `ButtonClickEvent`를 이벤트 핸들러 메서드에 연결하는 것으로 이루어집니다. 버튼 클릭이 감지되면, 이벤트 객체를 통해 클릭된 버튼의 이름을 확인하여 특정 동작(예: 캐릭터 이동)을 수행하는 타깃 컴포넌트(예: `Pl [original] | SELL 버튼을 클릭하면 캐릭터가 NPC가 배치된 위치로 이동할 수 있도록 만들어봅시다. 1. **UIManager**에서 `PlayerController`를 참조할 수 있도록 새로운 **Controller** 프로퍼티를 추가합니다. ```lua Property: [None] component Controller = nil ``` 2. **UIManager** 컴포넌트에 새로운 `SetButtonHandler()` 메소드를 추가하고, **string** 타입의 **buttonPath** 매개 [chunk_id] | Guides:143:1

[task] | distill [title] | Maple GYM 만들기 Ⅱ [category] | Guides [rephrased] | ```lua void SetShopInfo() { local skillGrade = math.floor(self.Stats.CurrentSkillGrade) local dnaGrade = math.floor(self.Stats.CurrentDnaGrade) self.SkillLevelText.Text = ("기술 레벨: "..skillGrade.."레벨") self.DnaLevelText.Text = ("DNA: "..self.Stats.DnaGradeTable[dnaGrade]["GradeNa [original] | ```lua void SetShopInfo() { local skillGrade = math.floor(self.Stats.CurrentSkillGrade) local dnaGrade = math.floor(self.Stats.CurrentDnaGrade) self.SkillLevelText.Text = ("기술 레벨: "..skillGrade.."레벨") self.DnaLevelText.Text = ("DNA: "..self.Stats.DnaG [chunk_id] | Guides:143:5

← → 방향키로 페이지 이동 · 숫자 입력 후 Enter로 점프