← 목록

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

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

[task] | knowledge_list [title] | 물체의 이동 Ⅱ [category] | Guides [rephrased] | 1. `RigidbodyComponent`는 물체에 힘을 가해 물리적으로 밀어내는 동작을 구현할 때 사용되며, 본 예제에서는 택시가 원숭이를 밀어내는 시나리오에 적용됩니다. 2. 새 스크립트 컴포넌트는 에디터의 **Workspace - MyDesk - Create Scripts - Create Component** 메뉴를 통해 생성되며, 컴포넌트 이름은 `Monkey`로 설정해야 합니다. 3. `Monkey` 컴포넌트는 `Monkey` 엔티티에 추가되어, 해당 엔티티의 동작을 제어하는 역할을 수행합니다. 4. `Monkey` 컴포넌 [original] | RigidbodyComponent를 활용해 질주하는 택시가 원숭이를 밀어낼 수 있도록 만들어 봅시다. 원숭이를 밀어내기 위해서는 원숭이가 택시 위치를 확인하고, 택시가 원숭이게 근접하면 원숭이의 RigidbodyComponent에 힘을 주도록 만들어봅시다. 1. **Workspace - MyDesk - Create Scripts - Create Component**을 선택해 새 스크립트 컴포넌트를 추가하고 이름을 **Monkey**로 변경합니다. 2. **Monkey** 엔티티에 **Monkey 컴포넌트**를 추가합니 [chunk_id] | Guides:125:1

[task] | extract_knowledge [title] | 물체의 이동 Ⅱ [category] | Guides [rephrased] | # 물체의 이동 Ⅱ: TransformComponent와 RigidbodyComponent를 이용한 이동 및 물리 상호작용 ## 1. 개념 설명 메이플스토리 월드(mLua)에서 물체의 위치를 변경하거나 물리적으로 다른 물체를 밀어내는 행위는 두 가지 컴포넌트를 통해 처리합니다. 1. **`TransformComponent`**: 물체의 좌표, 회전, 스케일 등 변환 정보를 관리합니다. `Translate` 메서드를 사용하여 물체의 위치를 직접적으로 이동시킵니다. 이는 물리 엔진의 영향을 받지 않고 순수하게 좌표만 변경하는 방식 [original] | # 학습 과정 소개 이번 가이드는 [물체의 이동 Ⅰ](/docs?postId=123)을 따라 만든 월드에서 이어서 제작해야 정상적으로 동작합니다. 택시가 아잘린을 태우러 가야하는데 원숭이가 길을 가로 막고 있습니다. `TransformComponent`의 `Translate`를 이용하여 택시를 이동시키고 `RigidbodyComponent`의 `Translate` 함수를 사용하여 원숭이를 밀어내봅시다. ![[object Object]](https://mod-file.dn.nexoncdn.co.kr/bbs/174790801778 [chunk_id] | Guides:125:0

[task] | distill [title] | Maple GYM 만들기 Ⅰ [category] | Guides [rephrased] | **[Guides] 응용 제작 가이드 Maple GYM 만들기 Ⅰ** `Attack` 상태 진입 시 힘(Pow)이 증가하도록 설정하는 절차입니다. ### 1. PlayerController 설정 `PlayerStats` 컴포넌트 참조용 프로퍼티 추가 및 초기화. ```lua Property: [Sync] Component Stats = nil Method: void OnBeginPlay() { self.Stats = self.Entity.PlayerStats } ``` ### 2. WorkOut() 메소드 (Play [original] | `Ctrl`키를 눌러 Attack 상태가 되면 운동을 하고, 힘이 증가하도록 만듭니다. 1. **PlayerController**에 **Component** 타입의 **Stats** 프로퍼티를 추가합니다. 이 프로퍼티는 **PlayerStats** 컴포넌트를 참고하게 됩니다. ```lua Property: [Sync] Component Stats = nil ``` 2. `OnBeginPlay()` 메소드에 **PlayerStats** 컴포넌트를 받아오도록 아래와 같이 작성합니다.**Playe [chunk_id] | Guides:126:2

[task] | distill [title] | Maple GYM 만들기 Ⅰ [category] | Guides [rephrased] | # 커지는 몸 구현 `PlayerController`에 `SizeSet()` 메서드를 추가하여 힘(`CurrentPow`) 증가에 비례해 캐릭터 스케일을 조절합니다. ```lua void SizeSet() { local size = 1 + (0.1 * self.Stats.CurrentPow) self.Transform.Scale = Vector3(size, size, 1) } ``` `WorkOut()` 메서드 하단에 `self:SizeSet()`을 호출하도록 연결합니다. # UI 버튼 제작 1. `Defau [original] | # 커지는 몸 구현 증가하는 힘의 크기만큼 캐릭터의 크기가 증가하는 기능을 구현하겠습니다. 1. **PlayerController** 컴포넌트에 새로운 `SizeSet()` 메소드를 생성합니다. 2. `SizeSet()` 메소드에 캐릭터의 크기가 **0.1**씩 커질 수 있도록 아래와 같이 작성합니다. ```lua void SizeSet() { local size = 1 + (0.1 * self.Stats.CurrentPow) self.Transform.Scale = Vecto [chunk_id] | Guides:126:4

[task] | wikipedia [title] | Maple GYM 만들기 Ⅰ [category] | Guides [rephrased] | **메이플 GYM 만들기 Ⅰ** 본 가이드는 메이플스토리 월드(MapleStory Worlds)의 mLua 스크립트 언어를 이용하여 '메이플 GYM' 응용 프로그램을 제작하는 과정을 설명합니다. 해당 단계에서는 캐릭터의 능력치 중 하나인 파워(Power) 값을 설정하고 이를 서버와 클라이언트 모두에게 동기화(Sync)하는 로직을 구현하는 내용이 포함되어 있습니다. 구현 단계는 다음과 같이 진행됩니다. 첫째, `SetPow` 메서드를 정의합니다. 이 메서드는 `[multicast]` 실행 공간으로 선언되어 서버에서 호출될 경우 [original] | ```lua [multicast] void SetPow (number currentPow) { self.CurrentPow = currentPow log(self.CurrentPow) } ``` 8. `WorkOut()` 메소드에 `SetPow()` 메소드를 호출할 수 있도록 가장 하단에 아래 내용을 추가 작성합니다. ```lua self.Stats:SetPow(calePow) ``` 9. `Ctrl`키를 누를 때마다 숫자가 증가하는 [chunk_id] | Guides:126:3

[task] | wikipedia [title] | 물체의 이동 Ⅱ [category] | Guides [rephrased] | **물체의 이동 Ⅱ: RigidbodyComponent를 이용한 물체 상호작용** 메이플스토리 월드(MapleStory Worlds)의 `RigidbodyComponent` API를 활용하여 질주하는 택시가 원숭이를 밀어내는 물리 상호작용을 구현하는 방법입니다. 이 시나리오에서는 원숭이 엔티티가 택시의 위치를 실시간으로 감지하고, 택시가 특정 거리 이내로 근접하면 원숭이에 힘을 가하여 밀어내는 로직을 적용합니다. ### 1. 스크립트 컴포넌트 생성 및 할당 먼저, 원숭이 엔티티에 적용할 스크립트 컴포넌트를 생성합니다. 워크스페 [original] | RigidbodyComponent를 활용해 질주하는 택시가 원숭이를 밀어낼 수 있도록 만들어 봅시다. 원숭이를 밀어내기 위해서는 원숭이가 택시 위치를 확인하고, 택시가 원숭이게 근접하면 원숭이의 RigidbodyComponent에 힘을 주도록 만들어봅시다. 1. **Workspace - MyDesk - Create Scripts - Create Component**을 선택해 새 스크립트 컴포넌트를 추가하고 이름을 **Monkey**로 변경합니다. 2. **Monkey** 엔티티에 **Monkey 컴포넌트**를 추가합니 [chunk_id] | Guides:125:1

[task] | wikipedia [title] | Maple GYM 만들기 Ⅰ [category] | Guides [rephrased] | # Maple GYM 만들기 Ⅰ **Maple GYM**은 캐릭터가 운동할수록 성장하고, 이를 통해 획득한 힘을 화폐로 전환할 수 있는 월드입니다. 본 가이드에서는 해당 월드의 초기 설정 과정 중 이동 방식 변경 및 이동 영역 제한에 초점을 맞춰 설명합니다. ## 이동 방식 변경 캐릭터의 기본 이동 방식을 변경하기 위해 `RigidBodyComponent`의 `KinematicMove` 기능을 활용합니다. `DefaultPlayer` 엔티티에 부착된 `RigidBodyComponent`를 선택하여 이동 방식을 `Kinemati [original] | # 학습 과정 소개 운동할수록 캐릭터가 커지고, 그 힘을 돈으로 바꿀 수 있는 월드, 'Maple GYM'을 만들어봅시다. # 이동 방식 변경 RigidBodyComponent의 **KinematicMove**를 활용해 캐릭터의 이동 방식을 변경해봅시다. **DefaultPlayer - RigidBodyComponent**에서 **KinematicMove**를 선택합니다. #### 이동 영역 제한 캐릭터의 이동 방식을 **KinematicMove**로 변경하면 캐릭터가 자유롭게 상하좌우로 이동하게 됩니다. 캐릭터가 지면 영 [chunk_id] | Guides:126:0

[task] | extract_knowledge [title] | 엔티티 구간 이동시키기 [category] | Guides [rephrased] | # 선형 이동 (TweenLineComponent) `TweenLineComponent`는 엔티티가 원점(시작 위치)을 기준으로 지정된 목적지까지 선형 운동을 수행하도록 제어하는 컴포넌트입니다. 이 컴포넌트는 이동 경로(편도/왕복), 가·감속 방식, 도달 시 동작(튕김 등)을 설정할 수 있습니다. ## 1. 개념 설명 선형 이동은 두 점(시작점과 끝점) 사이의 이동을 의미합니다. `TweenLineComponent`는 단순한 직선 이동뿐 아니라, 중간 경유지를 추가하거나 보간 방식을 변경하여 부드러운 곡선 이동을 생성할 수 있 [original] | 원점을 기준으로 목적지까지 선형 운동을 하게 만들 때 사용합니다. 목적지까지 편도, 왕복 운동 여부와 더불어 가·감속, 도달 시 튕김 등 운동 방식을 설정할 수 있습니다. **TweenLineComponent**의 프로퍼티를 살펴봅시다. | 프로퍼티 명 | 설명 | | ------ | --- | | TweenType | 기본값은 Linear입니다. 다른 모양의 운동 방식을 선택할 수 있습니다. 선형운동 종류별 설명은 하단의 참고자료를 참고하세요. | | Duration | 목적지까지 도달하는 데 걸리는 시간을 의미합니다. | | [chunk_id] | Guides:122:1

[task] | knowledge_list [title] | Maple GYM 만들기 Ⅰ [category] | Guides [rephrased] | * **PlayerController** 컴포넌트에는 **[Sync]** 동기화 속성을 가진 **Component** 타입의 **Stats** 프로퍼티를 선언하며, 초기값은 **nil** 이고 이 프로퍼티는 **PlayerStats** 컴포넌트를 참조하도록 설정됩니다. * **PlayerController** 컴포넌트의 **OnBeginPlay()** 메소드 내부에서 **self.Stats** 에 **self.Entity.PlayerStats** 를 할당하여, **PlayerController** 가 **Stats** 프로퍼 [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] | 질문: PlayerController 컴포넌트에 PlayerStats 컴포넌트를 참조하기 위해 추가하는 프로퍼티의 이름과 타입은 무엇인가요? 답변: 프로퍼티의 이름은 Stats이며, 타입은 Component입니다. 질문: PlayerStats 컴포넌트를 PlayerController의 Stats 프로퍼티에 할당하는 코드가 OnBeginPlay() 메소드 내에서 어떻게 작성되나요? 답변: self.Stats = self.Entity.PlayerStats 로 작성됩니다. 질문: WorkOut() 메소드의 실행 공간은 어디로 설정해야 [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] | 질문: `SetPow` 메서드에 지정된 실행 공간(execution space)은 무엇인가요? 답변: `SetPow` 메서드는 `[multicast]` 실행 공간에서 동작하도록 정의되어 있습니다. 질문: `SetPow` 메서드의 매개변수 이름과 데이터 타입은 무엇인가요? 답변: 매개변수의 이름은 `currentPow`이며, 데이터 타입은 `number`입니다. 질문: `SetPow` 메서드 내부에서 `self.CurrentPow` 값이 변경된 후 어떤 처리가 수행되나요? 답변: `self.CurrentPow`에 전달된 `curr [original] | ```lua [multicast] void SetPow (number currentPow) { self.CurrentPow = currentPow log(self.CurrentPow) } ``` 8. `WorkOut()` 메소드에 `SetPow()` 메소드를 호출할 수 있도록 가장 하단에 아래 내용을 추가 작성합니다. ```lua self.Stats:SetPow(calePow) ``` 9. `Ctrl`키를 누를 때마다 숫자가 증가하는 [chunk_id] | Guides:126:3

[task] | wikipedia [title] | Maple GYM 만들기 Ⅰ [category] | Guides [rephrased] | # 커지는 몸 구현 이 섹션에서는 캐릭터가 가지는 힘의 크기만큼 캐릭터의 외형 크기가 비례하여 증가하도록 만드는 기능을 구현하는 과정을 설명합니다. 먼저, `PlayerController` 컴포넌트 내에 새로운 `SizeSet()` 메소드를 생성합니다. 이 메소드에서는 캐릭터의 크기가 현재의 힘(`Stats.CurrentPow`) 값에 따라 0.1씩 증가하도록 로직을 작성합니다. 구체적으로, 현재 힘 값에 0.1을 곱한 값을 1에 더하여 최종 스케일 값(`size`)을 산출한 뒤, 이를 `Vector3(size, size, 1) [original] | # 커지는 몸 구현 증가하는 힘의 크기만큼 캐릭터의 크기가 증가하는 기능을 구현하겠습니다. 1. **PlayerController** 컴포넌트에 새로운 `SizeSet()` 메소드를 생성합니다. 2. `SizeSet()` 메소드에 캐릭터의 크기가 **0.1**씩 커질 수 있도록 아래와 같이 작성합니다. ```lua void SizeSet() { local size = 1 + (0.1 * self.Stats.CurrentPow) self.Transform.Scale = Vecto [chunk_id] | Guides:126:4

[task] | knowledge_list [title] | Maple GYM 만들기 Ⅰ [category] | Guides [rephrased] | 1. `PlayerController` 컴포넌트에 `void SizeSet()` 메서드를 생성하여 캐릭터의 크기를 현재 힘(`Stats.CurrentPow`)에 비례하도록 조정하는 로직을 구현합니다. 2. `SizeSet()` 메서드 내부에서 `local size = 1 + (0.1 * self.Stats.CurrentPow)` 식을 계산하여 스케일 값을 결정하고, `self.Transform.Scale = Vector3(size, size, 1)` 구문을 통해 엔티티의 X, Y 축 스케일을 해당 값으로, Z 축 스케일은 1로 설정 [original] | # 커지는 몸 구현 증가하는 힘의 크기만큼 캐릭터의 크기가 증가하는 기능을 구현하겠습니다. 1. **PlayerController** 컴포넌트에 새로운 `SizeSet()` 메소드를 생성합니다. 2. `SizeSet()` 메소드에 캐릭터의 크기가 **0.1**씩 커질 수 있도록 아래와 같이 작성합니다. ```lua void SizeSet() { local size = 1 + (0.1 * self.Stats.CurrentPow) self.Transform.Scale = Vecto [chunk_id] | Guides:126:4

[task] | extract_knowledge [title] | Maple GYM 만들기 Ⅰ [category] | Guides [rephrased] | # Maple GYM: 이동 방식 변경 및 영역 제한 ## 1. 개념 설명 Maple GYM 월드에서 캐릭터의 기본 이동 방식을 변경하고, 특정 지면 영역 내에서만 이동하도록 제한하는 로직을 구현합니다. 이 과정은 `RigidBodyComponent`의 물리 모드를 변경하고, 커스텀 `PlayerController` 컴포넌트를 통해 매 프레임마다 캐릭터의 위치를 검증 및 보정하는 방식으로 구성됩니다. ## 2. API 사용법 ### 2.1 RigidBodyComponent 모드 변경 * **타겟**: `DefaultPlay [original] | # 학습 과정 소개 운동할수록 캐릭터가 커지고, 그 힘을 돈으로 바꿀 수 있는 월드, 'Maple GYM'을 만들어봅시다. # 이동 방식 변경 RigidBodyComponent의 **KinematicMove**를 활용해 캐릭터의 이동 방식을 변경해봅시다. **DefaultPlayer - RigidBodyComponent**에서 **KinematicMove**를 선택합니다. #### 이동 영역 제한 캐릭터의 이동 방식을 **KinematicMove**로 변경하면 캐릭터가 자유롭게 상하좌우로 이동하게 됩니다. 캐릭터가 지면 영 [chunk_id] | Guides:126:0

[task] | extract_knowledge [title] | Maple GYM 만들기 Ⅰ [category] | Guides [rephrased] | # `WorkOut()` 메소드에서 `SetPow()` 호출하기 ## 개념 설명 `WorkOut()` 메소드 내부에서 `Stats` 컴포넌트의 `SetPow()` 메소드를 호출하여 현재 파워 값을 갱신하는 과정입니다. 이는 `Ctrl` 키 입력 시 `WorkOut()`이 트리거되어 계산된 파워 값(`calePow`)을 `Stats`에 전달하도록 하는 로직입니다. ## API 사용법 `self.Stats`를 통해 `Stats` 컴포넌트에 접근하며, 해당 컴포넌트의 `SetPow()` 메소드를 호출합니다. * **타겟 메소드* [original] | ```lua [multicast] void SetPow (number currentPow) { self.CurrentPow = currentPow log(self.CurrentPow) } ``` 8. `WorkOut()` 메소드에 `SetPow()` 메소드를 호출할 수 있도록 가장 하단에 아래 내용을 추가 작성합니다. ```lua self.Stats:SetPow(calePow) ``` 9. `Ctrl`키를 누를 때마다 숫자가 증가하는 [chunk_id] | Guides:126:3

[task] | distill [title] | Maple GYM 만들기 Ⅰ [category] | Guides [rephrased] | **PlayerStats 컴포넌트 UI 갱신 로직** `OnBeginPlay`에서 클라이언트 환경일 때에만 UI 매니저를 초기화합니다. ```lua void OnBeginPlay() { if self:IsClient() then self.UiManager = _EntityService:GetEntityByPath("/ui/DefaultGroup").UIManager end } ``` **메소드 정의** `[client only]` 실행 공간에서 아래 메소드를 정의하여 UI 갱신을 수행합니다. [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] | knowledge_list [title] | Maple GYM 만들기 Ⅰ [category] | Guides [rephrased] | 제시된 문서 내용만 기반으로 추출한 핵심 사실 목록입니다. 1. `OnBeginPlay` 이벤트 핸들러 내부에서 `self:IsClient()` 조건이 참인 경우, `_EntityService:GetEntityByPath("/ui/DefaultGroup").UIManager` 값을 `self.UiManager` 속성에 할당합니다. 2. `PlayerStats` 컴포넌트에 `[client only]` 실행 공간 제약이 적용된 `RenewPow` 메서드가 정의되며, 이 메서드는 `self.UiManager:UISetPower()` 메 [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] | wikipedia [title] | Maple GYM 만들기 Ⅱ [category] | Guides [rephrased] | ## 버튼 UI 제작 상점 및 판매 기능을 위한 사용자 인터페이스(UI) 버튼은 `DefaultGroup`을 기반으로 제작됩니다. 먼저 `DefaultGroup`에 UI 버튼을 추가하고 디자인을 자유롭게 수정한 뒤, 해당 버튼의 이름을 `ShopButton`으로 변경하고 `TextComponent`를 추가하여 상점 버튼을 완성합니다. 판매 버튼은 앞서 제작한 상점 버튼을 활용하여 생성합니다. `ShopButton`을 선택한 후 콘텍스트 메뉴에서 **Duplicate** 명령을 실행하여 동일한 형태의 UI 버튼을 복제하고, 복제된 [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] | knowledge_list [title] | Maple GYM 만들기 Ⅱ [category] | Guides [rephrased] | 제시된 문서 내용에만 기반하여 추출할 수 있는 사실은 다음과 같습니다. 1. 상점 버튼(UI 버튼)은 `DefaultGroup` 내에 추가해야 합니다. 2. 상점 버튼의 이름은 `ShopButton`으로 지정해야 합니다. 3. 상점 버튼(`ShopButton`)에는 `TextComponent`가 추가되어야 합니다. 4. 판매 버튼은 상점 버튼(`ShopButton`)을 선택한 후 콘텍스트 메뉴의 `Duplicate` 기능을 통해 복제하여 생성합니다. 5. 복제된 판매 버튼의 이름은 `SellButton`으로 지정해야 합니다. [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] | diverse_qa [title] | Maple GYM 만들기 Ⅰ [category] | Guides [rephrased] | 질문: `SizeSet()` 메소드에서 캐릭터의 크기를 계산하는 공식은 무엇이며, `Transform.Scale`에 어떤 값이 할당됩니까? 답변: 캐릭터의 크기는 `1 + (0.1 * self.Stats.CurrentPow)` 공식을 사용하여 계산되며, 이 값이 `size` 변수에 저장된 후 `Vector3(size, size, 1)` 형태로 `self.Transform.Scale`에 할당됩니다. 질문: `WorkOut()` 메소드 내에서 `SizeSet()` 메소드를 호출하기 위해 추가해야 하는 코드는 무엇입니까? 답변: `se [original] | # 커지는 몸 구현 증가하는 힘의 크기만큼 캐릭터의 크기가 증가하는 기능을 구현하겠습니다. 1. **PlayerController** 컴포넌트에 새로운 `SizeSet()` 메소드를 생성합니다. 2. `SizeSet()` 메소드에 캐릭터의 크기가 **0.1**씩 커질 수 있도록 아래와 같이 작성합니다. ```lua void SizeSet() { local size = 1 + (0.1 * self.Stats.CurrentPow) self.Transform.Scale = Vecto [chunk_id] | Guides:126:4

[task] | distill [title] | Maple GYM 만들기 Ⅰ [category] | Guides [rephrased] | # [Guides] 응용 제작 가이드 Maple GYM 만들기 Ⅰ `PlayerStats`의 힘 증가 시 `UIManager`를 통해 UI를 갱신하는 구조를 구현합니다. ## 1. UIManager 컴포넌트 구성 **Hierarchy - ui - DefaultGroup**에 `UIManager` 컴포넌트를 추가하고, UI 참조를 위한 프로퍼티를 정의합니다. ```lua Property: [None] Component UiPowerText = nil -- UIPower 엔티티의 Text 컴포넌트 [None] Component [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 제작 및 NPC 이동 ## 1. 버튼 UI 설정 * **ShopButton**: `DefaultGroup`에 UI 버튼 추가 후 이름을 `ShopButton`으로 변경하고 `TextComponent`를 추가합니다. * **SellButton**: `ShopButton`을 복제(Duplicate)한 뒤 이름을 `SellButton`으로 변경합니다. ## 2. 버튼 클릭 시 NPC 위치로 이동 버튼 클릭 이벤트 핸들러를 통해 NPC 엔티티의 위치를 조회하여 플레이어의 위치를 변경합니다. ```lua [clie [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] | 물체의 이동 Ⅱ [category] | Guides [rephrased] | # RigidbodyComponent를 이용한 물체 상호작용 본 절에서는 `RigidbodyComponent`를 활용하여 한 물체(택시)가 다른 물체(원숭이)에 근접할 때 힘을 가하여 밀어내는 방식을 다룹니다. 이는 두 물체의 위치를 주기적으로 확인하고, 특정 거리 조건이 충족되면 `RigidbodyComponent`에 힘을 적용하는 논리입니다. ## 1. 개념 설명 물체 간의 물리적 상호작용을 구현하기 위해 다음 절차가 필요합니다. 1. **위치 추적**: 상호작용 대상인 두 물체(예: 택시와 원숭이)의 `Transform [original] | RigidbodyComponent를 활용해 질주하는 택시가 원숭이를 밀어낼 수 있도록 만들어 봅시다. 원숭이를 밀어내기 위해서는 원숭이가 택시 위치를 확인하고, 택시가 원숭이게 근접하면 원숭이의 RigidbodyComponent에 힘을 주도록 만들어봅시다. 1. **Workspace - MyDesk - Create Scripts - Create Component**을 선택해 새 스크립트 컴포넌트를 추가하고 이름을 **Monkey**로 변경합니다. 2. **Monkey** 엔티티에 **Monkey 컴포넌트**를 추가합니 [chunk_id] | Guides:125:1

[task] | knowledge_list [title] | Maple GYM 만들기 Ⅰ [category] | Guides [rephrased] | 1. 판매용 NPC를 배치하고 이름을 `SellNPC`로 변경하며, 다른 오브젝트 뒤에 가려지는 경우 `SpriteRendererComponent`의 `SortingLayer` 값을 조정해야 합니다. 2. NPC의 `RigidBodComponent` 컴포넌트에서 `Gravity` 프로퍼티 값을 0으로 설정하여 중력 영향을 제거합니다. 3. `Workspace - BaseEnvironment - NativeScripts - Components - TriggerComponent`를 확장하여 `NPCSellPow` 컴포넌트를 생성합니다. [original] | # 힘 판매하기 환전을 담당하고 있는 NPC에게 다가가면 모든 힘 값을 0으로 변경하고, 감소한 힘만큼 돈이 증가하도록 만들어봅시다. 1. 판매를 담당할 NPC를 배치하고, 이름을 **SellNPC**로 변경합니다. > **Tip** > 만약 배치한 NPC가 다른 오브젝트들의 뒤에 배치될 경우 NPC의 SpriteRendererComponent의 SortingLayer 값을 변경합니다. 2. NPC의 **RigidBodComponent**의 **Gravity** 프로퍼티의 값을 0으로 변경합니다. NPC [chunk_id] | Guides:126:7

[task] | distill [title] | Maple GYM 만들기 Ⅰ [category] | Guides [rephrased] | # 힘 판매하기 (NPC 인터랙션) `TriggerComponent` 기반 NPC가 유저 접근 시 `PlayerStats`의 힘을 0으로 초기화하고, 해당 값만큼 화폐를 증가시킵니다. ### 1. NPC 설정 * **SellNPC** 배치 및 이름 변경. * `RigidBodComponent.Gravity` = `0` (중력 비활성화). * 겹침 시 `SpriteRendererComponent.SortingLayer` 조정 권장. ### 2. NPCSellPow 컴포넌트 (Trigger 처리) `TriggerComp [original] | # 힘 판매하기 환전을 담당하고 있는 NPC에게 다가가면 모든 힘 값을 0으로 변경하고, 감소한 힘만큼 돈이 증가하도록 만들어봅시다. 1. 판매를 담당할 NPC를 배치하고, 이름을 **SellNPC**로 변경합니다. > **Tip** > 만약 배치한 NPC가 다른 오브젝트들의 뒤에 배치될 경우 NPC의 SpriteRendererComponent의 SortingLayer 값을 변경합니다. 2. NPC의 **RigidBodComponent**의 **Gravity** 프로퍼티의 값을 0으로 변경합니다. NPC [chunk_id] | Guides:126:7

[task] | diverse_qa [title] | Maple GYM 만들기 Ⅰ [category] | Guides [rephrased] | 질문: `OnBeginPlay()` 이벤트 핸들러 내에서 `self.UiManager` 변수에 할당된 값은 무엇인가요? 답변: `OnBeginPlay()` 이벤트 핸들러 내에서 클라이언트 환경일 경우, `_EntityService:GetEntityByPath("/ui/DefaultGroup").UIManager`로 반환된 UIManager 객체가 `self.UiManager`에 할당됩니다. 질문: `RenewPow()` 메소드의 실행 공간은 어디로 설정해야 하나요? 답변: `RenewPow()` 메소드의 실행 공간은 **clien [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] | wikipedia [title] | Maple GYM 만들기 Ⅰ [category] | Guides [rephrased] | # Maple GYM 만들기 Ⅰ: 공격 동작을 통한 힘 증가 구현 본 가이드는 메이플스토리 월드(MapleStory Worlds)에서 `Ctrl` 키를 눌러 `Attack` 상태로 진입할 때 운동 동작이 수행되고 캐릭터의 힘(`Pow`)이 증가하도록 구현하는 방법을 설명합니다. 이 과정은 `PlayerController` 컴포넌트에 상태 관리 로직을 추가하고, `PlayerStats` 컴포넌트와 연동하여 서버 측에서 힘 값을 갱신하는 방식으로 이루어집니다. ## 1. PlayerController에 Stats 프로퍼티 추가 ` [original] | `Ctrl`키를 눌러 Attack 상태가 되면 운동을 하고, 힘이 증가하도록 만듭니다. 1. **PlayerController**에 **Component** 타입의 **Stats** 프로퍼티를 추가합니다. 이 프로퍼티는 **PlayerStats** 컴포넌트를 참고하게 됩니다. ```lua Property: [Sync] Component Stats = nil ``` 2. `OnBeginPlay()` 메소드에 **PlayerStats** 컴포넌트를 받아오도록 아래와 같이 작성합니다.**Playe [chunk_id] | Guides:126:2

[task] | wikipedia [title] | Maple GYM 만들기 Ⅰ [category] | Guides [rephrased] | **Maple GYM 만들기 Ⅰ: PlayerStats 및 UI 연동** 본 가이드는 메이플스토리 월드(MapleStory Worlds)에서 'Maple GYM'을 제작하기 위한 절차 중, 플레이어의 능력치(힘)와 재화(머니) 변화 시 사용자 인터페이스(UI)를 갱신하도록 설정하는 단계를 다룬다. 해당 과정은 `PlayerStats` 컴포넌트에 메서드를 추가하고, UI 관리자를 참조하는 방식으로 이루어진다. **1. UI 관리자 초기화** 클라이언트 환경에서 실행되는 `OnBeginPlay` 이벤트 핸들러를 통해 UI 관리자를 [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] | extract_knowledge [title] | Maple GYM 만들기 Ⅰ [category] | Guides [rephrased] | # 커지는 몸 구현 및 UI 버튼 제작 ## 1. 개념 설명 본 절에서는 캐릭터의 상태(힘)가 변할 때 캐릭터의 시각적 크기(Scale)가 동적으로 변화하도록 구현하는 방법과, 이를 시각화하기 위한 텍스트 UI를 생성하는 과정을 다룹니다. 1. **동적 스케일링**: `Transform.Scale` 속성을 수정하여 캐릭터의 크기를 조절합니다. 크기는 현재 힘(`CurrentPow`) 값에 비례하여 증가하도록 설계됩니다. 2. **UI 배치**: `DefaultGroup` 하위에 텍스트 UI 컴포넌트를 추가하여 게임 내 정보를 [original] | # 커지는 몸 구현 증가하는 힘의 크기만큼 캐릭터의 크기가 증가하는 기능을 구현하겠습니다. 1. **PlayerController** 컴포넌트에 새로운 `SizeSet()` 메소드를 생성합니다. 2. `SizeSet()` 메소드에 캐릭터의 크기가 **0.1**씩 커질 수 있도록 아래와 같이 작성합니다. ```lua void SizeSet() { local size = 1 + (0.1 * self.Stats.CurrentPow) self.Transform.Scale = Vecto [chunk_id] | Guides:126:4

[task] | knowledge_list [title] | Maple GYM 만들기 Ⅰ [category] | Guides [rephrased] | 제시된 원문 문서에 포함된 핵심 사실과 API 정보를 바탕으로 정리한 목록입니다. 1. **UIManager** 스크립트 컴포넌트는 **Hierarchy - ui - DefaultGroup** 엔티티에 추가되어 전반적인 UI 관리를 담당하며, **PlayerStats** 컴포넌트에서 힘 값이 증가할 때마다 UI를 갱신하는 구조로 구현됩니다. 2. **UIManager** 컴포넌트에는 `[None]` 동기화 속성을 가진 `Component` 타입의 프로퍼티 3개(`UiPowerText`, `UiMoneyText`, `Stats`)가 [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

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