← 목록

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

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

[task] | extract_knowledge [title] | 프로퍼티 [category] | Guides [rephrased] | # mLua 데이터 타입: Table, SyncTable, Vector2 ## 1. 개념 설명 mLua에서는 데이터를 처리하기 위해 일반 루아 테이블(Lua table), 동기화 가능한 테이블(SyncTable), 그리고 2차원 벡터(Vector2) 타입을 제공합니다. * **table**: 표준 루아 테이블을 참조합니다. 서버와 클라이언트 간 상태 동기화(Sync)가 지원되지 않습니다. * **SyncTable\<v\> / SyncTable\<k, v\>**: 루아 테이블 형태이지만 제약이 있는 타입입니다. `next [original] | #### table 루아 테이블을 참조합니다. 동기화(Sync)는 되지 않습니다. ```lua Property: [None] table TableProperty = {1,2,3,4,5} Method: [Server Only] void OnBeginPlay() { local tmpTable = self.TableProperty self.TableProperty[1] = 10 log("tmpTable : "..tmpTable[1]) --콘솔 창에 "tmpTable : 10" 출력 log("TablePr [chunk_id] | Guides:205:1

[task] | wikipedia [title] | 프로퍼티 [category] | Guides [rephrased] | # mLua 스크립트 프로퍼티 이해 메이플스토리 월드 스크립트 언어 mLua에서 프로퍼티(Property)는 컴포넌트 내 데이터를 선언하고 관리하는 기본 요소입니다. 이 섹션에서는 컴포넌트 참조를 위한 `Component` 및 `ComponentRef` 타입의 차이점, 범용 타입인 `any`의 활용법, 그리고 프로퍼티 초깃값 설정 및 접근 방식에 대해 설명합니다. ## 컴포넌트 참조 프로퍼티 `Component`와 `ComponentRef`는 모두 특정 컴포넌트를 가리키는 프로퍼티로, 기본 사용법은 동일하지만 참조 방식에 차이 [original] | 컴포넌트 가리키는 프로퍼티입니다. 프로퍼티 타입을 Component 선택 후, 버튼을 눌러 특정 컴포넌트를 타입으로 설정할 수 있습니다. Component와 ComponentRef의 기본 사용법은 동일하며, 참조 방식이 다릅니다. * Component: 컴포넌트를 직접 참조합니다. 다른 맵에 갔다 오면 참조가 끊어지고 프로퍼티를 사용할 수 없게 됩니다. * ComponentRef: 컴포넌트의 키 값을 가지고 있다가 실제 접근할 때 컴포넌트를 찾습니다. 다른 맵에 갔다 왔을 때 원래 가리키던 컴포넌트에 문제없이 접근할 수 있습니다. [chunk_id] | Guides:205:3

[task] | distill [title] | 공격과 피격 [category] | Guides [rephrased] | # 공격과 피격 구현 공격과 피격은 각각 `AttackComponent`와 `HitComponent`를 사용해 구현합니다. ## AttackComponent 기본 `Ctrl` 키 입력은 애니메이션만 재생하며, 실제 타격 적용에는 `AttackComponent`가 필요합니다. ### 공격 범위 설정 * **`Attack()`**: 캐릭터 위치 기준, `shape` 타입으로 범위 설정. * **`AttackFrom()`**: 월드 좌표 기준, 사각형 범위 설정. * **`AttackFast()`**: `Attack()` [original] | # 학습 과정 소개 메이플스토리에서 플레이어는 모험가가 되어 메이플 세계를 탐험하고 몬스터를 만나 전투를 합니다. 전투 과정에서 다른 몬스터를 공격하거나 피격당합니다. 메이플스토리뿐만 아니라 다양한 게임에서 공격과 피격은 중요한 개념입니다. 이번 과정에서는 공격과 피격을 구현하는 방법을 학습합니다. ##### 참고 가이드/레퍼런스 [AttackComponent](/apiReference/Components/AttackComponent) [HitComponent](/apiReference/Components/HitComponent [chunk_id] | Guides:206:0

[task] | wikipedia [title] | 프로퍼티 [category] | Guides [rephrased] | # mLua 스크립트 데이터 타입: 벡터 및 엔티티 참조 메이플스토리 월드(mLua) 스크립트에서는 3차원 및 4차원 공간 좌표를 표현하기 위한 `Vector3`, `Vector4` 타입과, 게임 내 객체를 가리키는 `Entity`, `EntityRef` 타입을 제공합니다. 이 섹션에서는 각 타입의 특징, 참조 방식, 그리고 사용 예시를 다룹니다. ## Vector3 `Vector3`은 3차원 벡터와 위치를 표현하는 참조 타입입니다. `Vector2`와 동일한 방식으로 프로퍼티나 변수에 할당 시 참조되며, `Vector2`에 [original] | 3차원 벡터와 위치를 표현합니다. **Vector2**와 마찬가지로 프로퍼티 또는 변수에 할당 시 참조됩니다. **Vector2**에서 멤버 변수 z가 추가됩니다. **TransformComponent**의 **Position**에 할당할 때를 제외하곤 주로 **Vector2**를 사용합니다. 값의 생성과 참조, 그리고 멤버 변수 x, y, z에 접근하는 방법은 아래를 참고합니다. ```lua Method: [Server Only] void OnBeginPlay() { local tmpVector3 = Vector3(10, [chunk_id] | Guides:205:2

[task] | distill [title] | 공격과 피격 [category] | Guides [rephrased] | **IsAttackTarget()** 공격자의 `AttackComponent`에서 호출되며, 충돌 엔티티(`defender`: **Entity**)가 타격 대상인지 판별합니다. - 기본 동작: 공격자 자신을 타격 대상에서 제외합니다. - 반환값: **true** 반환 시 공격 성공으로 `HitComponent` 처리로 전달, **false** 반환 시 공격 실패로 중단됩니다. - 공격자도 타격 대상에 포함하려면 **true**로 오버라이드합니다. ```lua override boolean IsAttackTarget(Entity d [original] | 크리에이터의 공격 제작 방식에 따라 `IsAttackTarget()` 함수를 활용해 피격 대상을 선정할 수 있습니다. `IsAttackTarget()` 함수는 공격자가 공격 박스에 포함되지 않도록 처리되어 있으므로, 공격자가 타격을 받지 않게 처리할 필요가 없습니다. **Entity** 타입의 `defender` 매개변수는 충돌한 엔티티가 공격 대상인지 판단할 수 있는 엔티티 정보를 받습니다. 함수의 리턴값이 **false**면 **AttackComponent**에서 적합한 공격 대상으로 판별하고 이후 판단을 **HitCompone [chunk_id] | Guides:206:1

[task] | extract_knowledge [title] | 프로퍼티 [category] | Guides [rephrased] | # 스크립트 프로퍼티 접근 mLua에서 스크립트 컴포넌트 내의 프로퍼티는 동일한 컴포넌트 내부에서 직접 참조하거나, 다른 엔티티의 다른 컴포넌트를 통해 간접적으로 접근할 수 있습니다. ## 1. 같은 컴포넌트 내 프로퍼티 접근 현재 스크립트가 적용된 컴포넌트 내부에서는 `self.` 접두사를 사용하여 선언된 프로퍼티에 접근합니다. **API 사용법** - 문법: `self.프로퍼티명` - 이 문법은 현재 인스턴스의 프로퍼티 값을 반환하거나 대입합니다. **예제** 아래 코드는 `OnBeginPlay` 메서드 실행 시점에 같 [original] | 함수에서 프로퍼티에 접근하는 방법을 알아봅시다. 먼저 같은 컴포넌트에서는 다음과 같이 접근할 수 있습니다. ```lua Property: [None] string StringProperty = "Hello!!" Method: [Server Only] void OnBeginPlay() { local stringProperty = self.StringProperty --"self.프로퍼티명"으로 해당 프로퍼티를 가져옴 } ``` 다른 컴포넌트의 프로퍼티는 다음과 같이 접근할 수 있습니다. 아래 상황에서 접근하는 방법 [chunk_id] | Guides:205:4

[task] | extract_knowledge [title] | 몬스터를 스폰해 보자 [category] | Guides [rephrased] | # 최대 수량 기반 몬스터 스폰 로직 구현 ## 1. 개념 설명 기존의 고정 주기(예: 5초마다 1마리) 스폰 방식은 현재 월드에 존재하는 몬스터 수량을 고려하지 않아, 몬스터가 소멸하지 않거나 과도하게 생성되는 문제를 야기할 수 있습니다. 이를 해결하기 위해, 특정 시간 간격마다 현재 생존 중인 몬스터 수(`curMonsterCnt`)를 조회하고, 설정된 최대 스폰 수(`MaxSpawnCount`)와의 차이를 계산하여 부족한 분량만큼만 동적으로 생성하는 로직을 적용합니다. ## 2. API 사용법 및 함수 수정 ### 2.1 [original] | 이번에는 5초마다 한 마리씩 스폰하는 것이 아니라, 5초마다 현재 몬스터 수량을 체크하여 최대 몬스터 수량보다 부족한 만큼 생성하도록 수정해 봅시다. 1. **MonsterSpawn**의 `GetRandomPosition()` 함수에 매개 변수를 하나 추가합니다. 2. 매개 변수 타입은 **number**로, 이름은 **spawnCount**로 설정하고, 리턴 타입을 **table**로 변경합니다. 함수는 다음과 같이 수정합니다. ```lua table GetRandomPosition(nu [chunk_id] | Guides:204:4

[task] | knowledge_list [title] | 공격과 피격 [category] | Guides [rephrased] | 제공된 문서 내용을 바탕으로 추출한 핵심 사실 목록입니다. 1. 메이플스토리 월드에서 기본적으로 `Ctrl` 키 입력 시 재생되는 공격 애니메이션은 `AttackComponent`를 사용하지 않는 한 실제 타격(대미지 적용)을 발생시키지 않습니다. 2. `AttackComponent`의 `Attack()` 메서드는 캐릭터 위치를 기준으로 하며, `shape` 타입의 매개변수를 통해 공격 범위 형태를 설정합니다. 3. `AttackComponent`의 `AttackFrom()` 메서드는 월드 좌표를 기준으로 사각형 형태의 공격 범위 [original] | # 학습 과정 소개 메이플스토리에서 플레이어는 모험가가 되어 메이플 세계를 탐험하고 몬스터를 만나 전투를 합니다. 전투 과정에서 다른 몬스터를 공격하거나 피격당합니다. 메이플스토리뿐만 아니라 다양한 게임에서 공격과 피격은 중요한 개념입니다. 이번 과정에서는 공격과 피격을 구현하는 방법을 학습합니다. ##### 참고 가이드/레퍼런스 [AttackComponent](/apiReference/Components/AttackComponent) [HitComponent](/apiReference/Components/HitComponent [chunk_id] | Guides:206:0

[task] | wikipedia [title] | 프로퍼티 [category] | Guides [rephrased] | # 스크립트 이해: 프로퍼티 메이플스토리 월드(MapleStory Worlds)의 mLua 스크립트 언어에서 **프로퍼티(Property)** 는 컴포넌트의 멤버 변수를 의미합니다. 일반 함수 내의 지역 변수와 달리, 프로퍼티는 함수 실행이 종료된 후에도 값이 보존됩니다. 이러한 특성 덕분에 특정 값을 일시적으로 저장하거나, 함수가 반복 호출될 때마다 값을 누적하여 관리하는 용도로 활용할 수 있습니다. ## 일반 프로퍼티 사용 예시 다음 코드는 3초 간격으로 콘솔 창에 "HelloMSW"라는 문자열을 출력하는 예제입니다. `A [original] | 프로퍼티는 컴포넌트 내 멤버 변수로, 함수에서 쓰고 읽어도 종료되지 않고 함수에서 설정한 값이 보존됩니다. 따라서 함수를 통해 어떤 값을 담아놓거나 함수를 반복 호출하여 값을 누적할 때 활용될 수 있습니다. 다음은 3초 간격으로 콘솔 창에 "HelloMSW"를 출력하는 예제입니다. ```lua Property: [Sync] number AccTime = 0 Method: [Server Only] void OnUpdate(delta) { self.AccTime = self.AccTime + delta --OnUpd [chunk_id] | Guides:205:5

[task] | wikipedia [title] | 공격과 피격 [category] | Guides [rephrased] | # 학습 과정 소개 메이플스토리에서 플레이어는 모험가로 분해 메이플 세계를 탐험하며 몬스터와 전투를 벌입니다. 이 과정에서 플레이어는 몬스터를 공격하거나 반대로 피격당하며, 이러한 공격과 피격의 개념은 메이플스토리뿐만 아니라 다양한 게임에서 핵심적인 요소로 작용합니다. 본 가이드에서는 공격과 피격을 구현하는 방법에 대해 학습합니다. 본 과정에서 참고할 수 있는 주요 가이드 및 레퍼런스는 `AttackComponent`, `HitComponent`의 API 문서, 충돌 그룹 만들기, 엔티티의 충돌, 엔티티의 상태 제어하기, 그리고 [original] | # 학습 과정 소개 메이플스토리에서 플레이어는 모험가가 되어 메이플 세계를 탐험하고 몬스터를 만나 전투를 합니다. 전투 과정에서 다른 몬스터를 공격하거나 피격당합니다. 메이플스토리뿐만 아니라 다양한 게임에서 공격과 피격은 중요한 개념입니다. 이번 과정에서는 공격과 피격을 구현하는 방법을 학습합니다. ##### 참고 가이드/레퍼런스 [AttackComponent](/apiReference/Components/AttackComponent) [HitComponent](/apiReference/Components/HitComponent [chunk_id] | Guides:206:0

[task] | knowledge_list [title] | 공격과 피격 [category] | Guides [rephrased] | 제시된 문서에 포함된 핵심 사실들을 바탕으로, API 이름, 매개변수, 반환 타입, 그리고 서버/클라이언트 제약 조건을 명시하여 핵심 사실을 목록으로 정리했습니다. 1. `IsAttackTarget(Entity defender)` 함수는 **AttackComponent**에서 호출되며, 매개변수 `defender`는 **Entity** 타입으로 충돌한 엔티티 정보를 받아 공격 대상 여부를 판단하고, 반환 타입은 **boolean**입니다. 2. `IsAttackTarget()` 함수는 기본적으로 공격자가 자신의 공격 박스에 포함되 [original] | 크리에이터의 공격 제작 방식에 따라 `IsAttackTarget()` 함수를 활용해 피격 대상을 선정할 수 있습니다. `IsAttackTarget()` 함수는 공격자가 공격 박스에 포함되지 않도록 처리되어 있으므로, 공격자가 타격을 받지 않게 처리할 필요가 없습니다. **Entity** 타입의 `defender` 매개변수는 충돌한 엔티티가 공격 대상인지 판단할 수 있는 엔티티 정보를 받습니다. 함수의 리턴값이 **false**면 **AttackComponent**에서 적합한 공격 대상으로 판별하고 이후 판단을 **HitCompone [chunk_id] | Guides:206:1

[task] | distill [title] | 공격과 피격 [category] | Guides [rephrased] | # 게임 로직: 공격과 피격 ## 1. 공격 컴포넌트 확장 및 구현 기존 `AttackComponent`를 확장하여 `CharacterAttack`으로 이름 변경하고, 스크립트 에디터를 엽니다. ### NormalAttack 메서드 공격 범위(`attackSize`)와 오프셋(`attackOffset`)을 정의하고 `self:Attack()`을 호출합니다. ```lua Method: void NormalAttack() { local attackSize = Vector2(1, 1) local attackOffset [original] | 1. **Workspace - BaseEnvironment - NativeScripts - Component - AttackComponent**를 선택합니다. 2. 콘텍스트 메뉴에서 **Extend**를 눌러 컴포넌트를 확장합니다. 확장한 컴포넌트의 이름을 **CharacterAttack**으로 변경합니다. 3. **CharacterAttack** 컴포넌트를 더블 클릭하여 스크립트 에디터를 엽니다. 4. **Method**에서 새로운 함수를 추가하고, 이름을 **NormalAttack** 으로 변경합니다. 5. `Att [chunk_id] | Guides:206:2

[task] | extract_knowledge [title] | 프로퍼티 [category] | Guides [rephrased] | # 1. 프로퍼티 (Property) 프로퍼티는 컴포넌트 내에서 선언되는 멤버 변수로, 함수 실행이 종료되어도 값이 보존됩니다. 이를 통해 함수 간 데이터 전달, 반복 호출 시 값 누적 등의 처리가 가능합니다. ## 1.1 일반 프로퍼티 일반 프로퍼티는 `Property:` 블록에서 선언합니다. 네트워크 동기화가 필요한 경우 `[Sync]` 속성을 부여할 수 있습니다. **API 사용법:** - `Property:` 블록 내에 `[Sync]` 또는 `[None]` 태그와 함께 변수를 선언합니다. - `self.변수명` 형식으 [original] | 프로퍼티는 컴포넌트 내 멤버 변수로, 함수에서 쓰고 읽어도 종료되지 않고 함수에서 설정한 값이 보존됩니다. 따라서 함수를 통해 어떤 값을 담아놓거나 함수를 반복 호출하여 값을 누적할 때 활용될 수 있습니다. 다음은 3초 간격으로 콘솔 창에 "HelloMSW"를 출력하는 예제입니다. ```lua Property: [Sync] number AccTime = 0 Method: [Server Only] void OnUpdate(delta) { self.AccTime = self.AccTime + delta --OnUpd [chunk_id] | Guides:205:5

[task] | wikipedia [title] | 공격과 피격 [category] | Guides [rephrased] | 게임 로직에서의 공격과 피격 처리는 `IsAttackTarget()` 함수를 활용하여 피격 대상을 선정하는 방식으로 구현됩니다. 이 함수는 기본적으로 공격자가 자신의 공격 박스(Attack Box)에 포함되지 않도록 처리되어 있어, 개발자가 별도로 공격자가 타격을 받지 않도록 막을 필요가 없습니다. `defender` 매개변수는 **Entity** 타입이며, 충돌한 엔티티가 실제 공격 대상인지 판별하기 위한 정보를 전달받습니다. 기본적으로 `IsAttackTarget()` 함수의 반환값이 **false**인 경우, **Attack [original] | 크리에이터의 공격 제작 방식에 따라 `IsAttackTarget()` 함수를 활용해 피격 대상을 선정할 수 있습니다. `IsAttackTarget()` 함수는 공격자가 공격 박스에 포함되지 않도록 처리되어 있으므로, 공격자가 타격을 받지 않게 처리할 필요가 없습니다. **Entity** 타입의 `defender` 매개변수는 충돌한 엔티티가 공격 대상인지 판단할 수 있는 엔티티 정보를 받습니다. 함수의 리턴값이 **false**면 **AttackComponent**에서 적합한 공격 대상으로 판별하고 이후 판단을 **HitCompone [chunk_id] | Guides:206:1

[task] | extract_knowledge [title] | 프로퍼티 [category] | Guides [rephrased] | # 프로퍼티(Property)와 타입 mLua 스크립트 컴포넌트는 `Property:`, `Method:`, `Event Handler:` 블록으로 구성되며, `Property:` 블록에는 컴포넌트가 가리키는 데이터를 저장하는 프로퍼티를 정의합니다. 프로퍼티는 컴포넌트 인스턴스별로 독립적으로 값을 가지며, 스크립트 내에서 `self.프로퍼티명`으로 접근합니다. ## 1. 컴포넌트 참조 타입: Component vs ComponentRef 컴포넌트 간 참조를 위해 `Component`와 `ComponentRef` 타입을 사용할 [original] | 컴포넌트 가리키는 프로퍼티입니다. 프로퍼티 타입을 Component 선택 후, 버튼을 눌러 특정 컴포넌트를 타입으로 설정할 수 있습니다. Component와 ComponentRef의 기본 사용법은 동일하며, 참조 방식이 다릅니다. * Component: 컴포넌트를 직접 참조합니다. 다른 맵에 갔다 오면 참조가 끊어지고 프로퍼티를 사용할 수 없게 됩니다. * ComponentRef: 컴포넌트의 키 값을 가지고 있다가 실제 접근할 때 컴포넌트를 찾습니다. 다른 맵에 갔다 왔을 때 원래 가리키던 컴포넌트에 문제없이 접근할 수 있습니다. [chunk_id] | Guides:205:3

[task] | knowledge_list [title] | 공격과 피격 [category] | Guides [rephrased] | 요청하신 문서의 내용을 바탕으로 추출한 핵심 사실 목록입니다. 1. 기본 제공된 `AttackComponent` 컴포넌트는 `Workspace - BaseEnvironment - NativeScripts - Component - AttackComponent` 경로에서 찾을 수 있으며, 이를 콘텍스트 메뉴의 **Extend** 기능을 통해 확장하여 `CharacterAttack`이라는 이름의 새 컴포넌트를 생성할 수 있습니다. 2. `CharacterAttack` 컴포넌트의 `Method` 블록에 `NormalAttack()` 함수 [original] | 1. **Workspace - BaseEnvironment - NativeScripts - Component - AttackComponent**를 선택합니다. 2. 콘텍스트 메뉴에서 **Extend**를 눌러 컴포넌트를 확장합니다. 확장한 컴포넌트의 이름을 **CharacterAttack**으로 변경합니다. 3. **CharacterAttack** 컴포넌트를 더블 클릭하여 스크립트 에디터를 엽니다. 4. **Method**에서 새로운 함수를 추가하고, 이름을 **NormalAttack** 으로 변경합니다. 5. `Att [chunk_id] | Guides:206:2

[task] | diverse_qa [title] | 프로퍼티 [category] | Guides [rephrased] | 질문: 프로퍼티(Property)는 컴포넌트 내에서 어떤 역할을 하는가? 답변: 프로퍼티는 컴포넌트 내 멤버 변수로, 함수에서 값을 읽고 쓰더라도 종료되지 않고 값이 보존되어, 값을 담아놓거나 누적할 때 활용됩니다. 질문: [Sync] 속성이 붙은 프로퍼티는 어떤 특징이 있는가? 답변: 문서의 예제에서 [Sync] 속성은 프로퍼티 선언 시 사용되며, 이는 프로퍼티 값이 동기화됨을 의미합니다. (참고: _T 프로퍼티와 달리 동기화가 가능하다는 점이 간접적으로 드러나지만, 문서 본문은 _T 프로퍼티가 동기화되지 않는다고 명시하여 대비 [original] | 프로퍼티는 컴포넌트 내 멤버 변수로, 함수에서 쓰고 읽어도 종료되지 않고 함수에서 설정한 값이 보존됩니다. 따라서 함수를 통해 어떤 값을 담아놓거나 함수를 반복 호출하여 값을 누적할 때 활용될 수 있습니다. 다음은 3초 간격으로 콘솔 창에 "HelloMSW"를 출력하는 예제입니다. ```lua Property: [Sync] number AccTime = 0 Method: [Server Only] void OnUpdate(delta) { self.AccTime = self.AccTime + delta --OnUpd [chunk_id] | Guides:205:5

[task] | distill [title] | 서버와 클라이언트 [category] | Guides [rephrased] | # 서버와 클라이언트 통신 모델 MapleStory World는 **서버-클라이언트 모델**을 사용합니다. ## 역할 정의 * **클라이언트**: 유저 기기의 프로그램. 유저 입력 처리, 서버로부터 받은 정보의 가시적 출력 담당. * **서버**: 단일 컴퓨터의 프로그램. 클라이언트 요청 응답, 게임 진행 주요 기능/시스템 구축, 모든 클라이언트의 상태 동기화 담당. ## 통신 구조 및 보안 원칙 * 클라이언트는 다른 클라이언트와 직접 통신하지 않으며, **오직 서버와만** 정보를 주고받습니다. * 클라이언트가 [original] | # 학습 과정 소개 멀티 플레이를 제공하는 게임의 경우 각 게임의 특성에 따라 사용되는 통신 모델들이 다양합니다. MapleStory World는 다양한 통신 모델 중에서도 서버 - 클라이언트 모델을 사용하고 있습니다. 이번 과정에서는 MapleStory World의 통신 모델인 서버와 클라이언트의 개념과 구조, 그리고 각 공간 간의 정보전달 방법에 대해 알아보도록 하겠습니다. # 서버와 클라이언트 클라이언트는 게임을 플레이하는 유저들의 모바일이나 PC, 또는 해당 기기에서 개별적으로 돌아가는 프로그램을 의미합니다.주로 유저의 [chunk_id] | Guides:207:0

[task] | diverse_qa [title] | 공격과 피격 [category] | Guides [rephrased] | 질문: 메이플스토리 월드에서 `Ctrl` 키를 눌러 공격 애니메이션이 재생될 때, 실제로 타격을 가하기 위해 어떤 컴포넌트를 사용해야 하나요? 답변: 실제로 타격을 가하려면 AttackComponent를 활용해야 합니다. 질문: AttackComponent의 `Attack()` 함수와 `AttackFrom()` 함수의 공격 범위 설정 기준점이 각각 무엇인가요? 답변: `Attack()` 함수는 캐릭터 위치를 기준으로, `AttackFrom()` 함수는 월드 좌표를 기준으로 공격 범위를 설정합니다. 질문: `AttackFrom() [original] | # 학습 과정 소개 메이플스토리에서 플레이어는 모험가가 되어 메이플 세계를 탐험하고 몬스터를 만나 전투를 합니다. 전투 과정에서 다른 몬스터를 공격하거나 피격당합니다. 메이플스토리뿐만 아니라 다양한 게임에서 공격과 피격은 중요한 개념입니다. 이번 과정에서는 공격과 피격을 구현하는 방법을 학습합니다. ##### 참고 가이드/레퍼런스 [AttackComponent](/apiReference/Components/AttackComponent) [HitComponent](/apiReference/Components/HitComponent [chunk_id] | Guides:206:0

[task] | distill [title] | 공격과 피격 [category] | Guides [rephrased] | # AttackComponent와 HitComponent 연동 및 커스텀 피격 처리 `AttackComponent`를 가진 엔티티가 `HitComponent`를 가진 엔티티를 공격하면 기본 처리로 피격이 적용되며, 추가 로직이 없으면 대미지 스킨이 기본값인 1로 재생됩니다. 피격량은 공격량 그대로 적용하거나, 방어력 등을 고려한 커스텀 공식으로 계산할 수 있습니다. ## 커스텀 HitComponent 구현 예시 기본 `HitComponent`를 확장하여 **피격 대미지를 20으로 고정**하고, **피격 시 엔티티 크기를 1.3 [original] | **AttackComponent**를 가진 엔티티가 **HitComponent**를 가진 엔티티를 공격하면, 별다른 추가 처리를 하지 않아도 엔티티는 피격 당하게 됩니다. 이 경우 추가 처리가 없기 때문에 기본값인 1로 대미지 스킨이 재생됩니다. 피격을 구현할 때는 공격량 그대로 대미지로 받을 수도 있지만, 공격과 다른 공식을 함께 사용해 피격량을 계산할 수도 있습니다. 예를 들어 100의 공격력으로 공격했지만 몬스터의 방어력이 높은 경우 절반의 공격만 유효하게 처리할 수 있습니다. 이번에는 아래 두 가지를 구현해 피격 당하는지를 [chunk_id] | Guides:206:3

[task] | diverse_qa [title] | 공격과 피격 [category] | Guides [rephrased] | 질문: `IsAttackTarget()` 함수는 어떤 목적으로 사용됩니까? 답변: 크리에이터의 공격 제작 방식에 따라 피격 대상을 선정할 때 활용합니다. 질문: `IsAttackTarget()` 함수에서 공격자가 공격 박스에 포함되지 않도록 처리되어 있는가? 답변: 네, 포함되지 않도록 처리되어 있으므로 공격자가 타격을 받지 않게 별도로 처리할 필요가 없습니다. 질문: `IsAttackTarget()` 함수의 `defender` 매개변수의 타입은 무엇이며 어떤 정보를 받습니까? 답변: **Entity** 타입이며, 충돌한 엔티티 [original] | 크리에이터의 공격 제작 방식에 따라 `IsAttackTarget()` 함수를 활용해 피격 대상을 선정할 수 있습니다. `IsAttackTarget()` 함수는 공격자가 공격 박스에 포함되지 않도록 처리되어 있으므로, 공격자가 타격을 받지 않게 처리할 필요가 없습니다. **Entity** 타입의 `defender` 매개변수는 충돌한 엔티티가 공격 대상인지 판단할 수 있는 엔티티 정보를 받습니다. 함수의 리턴값이 **false**면 **AttackComponent**에서 적합한 공격 대상으로 판별하고 이후 판단을 **HitCompone [chunk_id] | Guides:206:1

[task] | knowledge_list [title] | 서버와 클라이언트 [category] | Guides [rephrased] | - MapleStory World는 멀티플레이 환경에서 서버 - 클라이언트 통신 모델을 사용하며, 클라이언트는 유저의 모바일/PC 기기에서 실행되는 프로그램으로 유저 입력 처리 및 서버로부터 수신한 정보를 가시적으로 출력하는 역할을 수행합니다. - 서버는 다수의 클라이언트가 연결된 단일 컴퓨터 또는 해당 컴퓨터에서 실행되는 프로그램으로, 클라이언트 요청에 응답하고 게임 진행의 주요 기능과 시스템을 구축하여 모든 클라이언트가 동일한 진행 상황을 유지하도록 관리합니다. - 서버 - 클라이언트 모델에서 클라이언트는 다른 클라이언트와 직접 [original] | # 학습 과정 소개 멀티 플레이를 제공하는 게임의 경우 각 게임의 특성에 따라 사용되는 통신 모델들이 다양합니다. MapleStory World는 다양한 통신 모델 중에서도 서버 - 클라이언트 모델을 사용하고 있습니다. 이번 과정에서는 MapleStory World의 통신 모델인 서버와 클라이언트의 개념과 구조, 그리고 각 공간 간의 정보전달 방법에 대해 알아보도록 하겠습니다. # 서버와 클라이언트 클라이언트는 게임을 플레이하는 유저들의 모바일이나 PC, 또는 해당 기기에서 개별적으로 돌아가는 프로그램을 의미합니다.주로 유저의 [chunk_id] | Guides:207:0

[task] | knowledge_list [title] | 공격과 피격 [category] | Guides [rephrased] | 1. **AttackComponent**를 가진 엔티티가 **HitComponent**를 가진 엔티티를 공격하면, 추가 스크립트 처리 없이도 기본 피격 처리가 자동으로 수행되며, 이 경우 기본값인 대미지 수치 1이 대미지 스킨으로 재생됩니다. 2. 피격량 계산 시 공격량 그대로를 대미지로 적용하거나, 공격력과 방어력 등 다른 공식 변수를 조합하여 최종 피격량을 계산하는 로직을 커스텀할 수 있습니다. 3. `Workspace - BaseEnvironment - NativeScripts - HitComponent`를 선택하여 콘텍스트 [original] | **AttackComponent**를 가진 엔티티가 **HitComponent**를 가진 엔티티를 공격하면, 별다른 추가 처리를 하지 않아도 엔티티는 피격 당하게 됩니다. 이 경우 추가 처리가 없기 때문에 기본값인 1로 대미지 스킨이 재생됩니다. 피격을 구현할 때는 공격량 그대로 대미지로 받을 수도 있지만, 공격과 다른 공식을 함께 사용해 피격량을 계산할 수도 있습니다. 예를 들어 100의 공격력으로 공격했지만 몬스터의 방어력이 높은 경우 절반의 공격만 유효하게 처리할 수 있습니다. 이번에는 아래 두 가지를 구현해 피격 당하는지를 [chunk_id] | Guides:206:3

[task] | wikipedia [title] | 공격과 피격 [category] | Guides [rephrased] | # 게임 로직: 공격과 피격 이 가이드는 메이플스토리 월드(mLua) 환경에서 플레이어의 공격 동작을 구현하고, 몬스터의 피격 처리를 설정하는 방법을 설명합니다. `AttackComponent`를 확장하여 커스텀 공격 로직을 작성하고, 이벤트 핸들러를 통해 사용자 입력을 처리하는 과정을 다룹니다. ## 공격 컴포넌트 확장 및 함수 구현 기본 제공되는 `AttackComponent`를 기반으로 커스텀 공격 컴포넌트를 생성하고, 플레이어의 입력에 반응하는 로직을 추가하는 단계는 다음과 같습니다. 먼저 워크스페이스(Workspac [original] | 1. **Workspace - BaseEnvironment - NativeScripts - Component - AttackComponent**를 선택합니다. 2. 콘텍스트 메뉴에서 **Extend**를 눌러 컴포넌트를 확장합니다. 확장한 컴포넌트의 이름을 **CharacterAttack**으로 변경합니다. 3. **CharacterAttack** 컴포넌트를 더블 클릭하여 스크립트 에디터를 엽니다. 4. **Method**에서 새로운 함수를 추가하고, 이름을 **NormalAttack** 으로 변경합니다. 5. `Att [chunk_id] | Guides:206:2

[task] | extract_knowledge [title] | 공격과 피격 [category] | Guides [rephrased] | # 공격과 피격 구현 메이플스토리 월드의 전투 시스템에서는 플레이어의 공격 동작과 타격 대상의 피격 처리를 분리하여 구현합니다. 기본 조작(`Ctrl` 키)은 공격 애니메이션만 재생하며, 실제 타격 판정과 대미지 적용은 `AttackComponent`와 `HitComponent`를 통해 명시적으로 제어됩니다. ## 1. 개념 설명 ### AttackComponent (공격) `AttackComponent`는 캐릭터의 공격 범위와 대미지를 정의하는 컴포넌트입니다. * **공격 범위**: 캐릭터 위치 기반(`Attack`, ` [original] | # 학습 과정 소개 메이플스토리에서 플레이어는 모험가가 되어 메이플 세계를 탐험하고 몬스터를 만나 전투를 합니다. 전투 과정에서 다른 몬스터를 공격하거나 피격당합니다. 메이플스토리뿐만 아니라 다양한 게임에서 공격과 피격은 중요한 개념입니다. 이번 과정에서는 공격과 피격을 구현하는 방법을 학습합니다. ##### 참고 가이드/레퍼런스 [AttackComponent](/apiReference/Components/AttackComponent) [HitComponent](/apiReference/Components/HitComponent [chunk_id] | Guides:206:0

[task] | extract_knowledge [title] | 프로퍼티 [category] | Guides [rephrased] | # 3.5 벡터 타입 (Vector3, Vector4) 및 엔티티 참조 타입 ## 3.5.1 개념 설명 mLua에서는 공간 좌표와 데이터를 표현하기 위해 `Vector2`, `Vector3`, `Vector4` 타입을 제공합니다. 이들은 모두 **참조 타입(Reference Type)**으로 동작합니다. 즉, 변수에 값을 할당할 때 값 자체의 복사본이 생성되는 것이 아니라, 동일한 메모리 주소를 가리키는 참조가 생성됩니다. * **Vector3**: 3차원 벡터와 위치를 표현합니다. `Vector2`의 멤버 변수 `x`, [original] | 3차원 벡터와 위치를 표현합니다. **Vector2**와 마찬가지로 프로퍼티 또는 변수에 할당 시 참조됩니다. **Vector2**에서 멤버 변수 z가 추가됩니다. **TransformComponent**의 **Position**에 할당할 때를 제외하곤 주로 **Vector2**를 사용합니다. 값의 생성과 참조, 그리고 멤버 변수 x, y, z에 접근하는 방법은 아래를 참고합니다. ```lua Method: [Server Only] void OnBeginPlay() { local tmpVector3 = Vector3(10, [chunk_id] | Guides:205:2

[task] | wikipedia [title] | 서버와 클라이언트 [category] | Guides [rephrased] | 서버와 클라이언트 간 통신은 단순히 데이터 전달(동기화)뿐만 아니라, 공간에 정의된 '액션(Action)'을 요청하고 수행하는 과정도 포함합니다. 이를 **실행제어**라고 합니다. 실행제어는 레벨업 처리 과정을 예로 들어 설명할 수 있습니다. 클라이언트가 유저의 입력을 수신하면, 서버에 "몬스터 공격"이라는 액션을 요청합니다. 서버는 해당 요청을 받아 "몬스터 공격" 액션을 수행합니다. 이처럼 각 공간에 정의된 액션을 서로 요청하여 수행하는 메커니즘이 실행제어입니다. 스프레트에서 액션은 결국 '함수'로 구현됩니다. 함수의 실행 [original] | 서버와 클라이언트 간 통신에는 데이터의 전달, 즉 동기화 외에도 공간에 정의된 "액션"을 요청하고 수행하는 과정도 필요합니다. 위의 레벨업 처리 과정을 예시로 들면, 클라이언트가 유저의 입력을 받으면, 서버에게 "몬스터 공격"이라는 "액션"을 요청하게 되고, 서버는 클라이언트의 요청에 따라 "몬스터 공격"이라는 "액션"을 수행하게 되는데요, 이렇듯 각 공간에 정의된 액션을 서로 요청하여 수행케 하는 것을 실행제어라고 합니다. 실행제어는 제작자의 의도에 따라 설정할 수 있습니다. 위에 말한 "액션"은 결국 스크립트에서는 "함수"라 할 [chunk_id] | Guides:207:2

[task] | diverse_qa [title] | 서버와 클라이언트 [category] | Guides [rephrased] | 질문: MapleStory World가 사용하는 통신 모델은 무엇인가요? 답변: MapleStory World는 서버 - 클라이언트 모델을 사용하고 있습니다. 질문: 클라이언트란 무엇을 의미하며, 어떤 역할을 수행하나요? 답변: 클라이언트는 게임을 플레이하는 유저들의 모바일이나 PC, 또는 해당 기기에서 개별적으로 돌아가는 프로그램을 의미하며, 주로 유저의 입력을 처리하거나 서버가 보내온 정보를 내부적으로 처리하여 유저에게 가시적으로 출력하는 역할을 수행합니다. 질문: 서버는 어떤 구조를 가지며, 게임에서 어떤 역할을 담당하나요 [original] | # 학습 과정 소개 멀티 플레이를 제공하는 게임의 경우 각 게임의 특성에 따라 사용되는 통신 모델들이 다양합니다. MapleStory World는 다양한 통신 모델 중에서도 서버 - 클라이언트 모델을 사용하고 있습니다. 이번 과정에서는 MapleStory World의 통신 모델인 서버와 클라이언트의 개념과 구조, 그리고 각 공간 간의 정보전달 방법에 대해 알아보도록 하겠습니다. # 서버와 클라이언트 클라이언트는 게임을 플레이하는 유저들의 모바일이나 PC, 또는 해당 기기에서 개별적으로 돌아가는 프로그램을 의미합니다.주로 유저의 [chunk_id] | Guides:207:0

[task] | wikipedia [title] | 공격과 피격 [category] | Guides [rephrased] | # 게임 로직: 공격과 피격 **AttackComponent**를 갖춘 엔티티가 **HitComponent**를 갖춘 엔티티를 공격하는 경우, 별도의 추가 스크립트가 존재하지 않더라도 타겟 엔티티는 기본적으로 피격 상태로 전환됩니다. 이 기본 동작 시에는 추가적인 로직이 수행되지 않으므로, 대미지 스킨은 기본값인 1로 재생됩니다. 피격 처리를 구현할 때 대미지 값은 공격량 그대로 적용될 수도 있으며, 공격력과 방어력 등 다른 변수를 결합한 공식으로 계산될 수도 있습니다. 예를 들어 공격력이 100인 경우에도 대상의 방어력이 높으 [original] | **AttackComponent**를 가진 엔티티가 **HitComponent**를 가진 엔티티를 공격하면, 별다른 추가 처리를 하지 않아도 엔티티는 피격 당하게 됩니다. 이 경우 추가 처리가 없기 때문에 기본값인 1로 대미지 스킨이 재생됩니다. 피격을 구현할 때는 공격량 그대로 대미지로 받을 수도 있지만, 공격과 다른 공식을 함께 사용해 피격량을 계산할 수도 있습니다. 예를 들어 100의 공격력으로 공격했지만 몬스터의 방어력이 높은 경우 절반의 공격만 유효하게 처리할 수 있습니다. 이번에는 아래 두 가지를 구현해 피격 당하는지를 [chunk_id] | Guides:206:3

[task] | wikipedia [title] | 서버와 클라이언트 [category] | Guides [rephrased] | # 학습 과정 소개 멀티플레이 게임을 지원하는 플랫폼은 게임의 특성에 따라 다양한 통신 모델을 채택합니다. MapleStory Worlds는 이러한 통신 모델 중 서버-클라이언트 모델을 기반으로 동작합니다. 본 가이드에서는 MapleStory Worlds의 통신 구조인 서버와 클라이언트의 개념적 정의, 구조적 특징, 그리고 양 공간 간의 정보 전달 방식을 설명합니다. # 서버와 클라이언트의 개념 클라이언트는 게임을 플레이하는 사용자의 모바일 기기나 PC, 또는 해당 기기에서 개별적으로 실행되는 프로그램을 지칭합니다. 클라이언트 [original] | # 학습 과정 소개 멀티 플레이를 제공하는 게임의 경우 각 게임의 특성에 따라 사용되는 통신 모델들이 다양합니다. MapleStory World는 다양한 통신 모델 중에서도 서버 - 클라이언트 모델을 사용하고 있습니다. 이번 과정에서는 MapleStory World의 통신 모델인 서버와 클라이언트의 개념과 구조, 그리고 각 공간 간의 정보전달 방법에 대해 알아보도록 하겠습니다. # 서버와 클라이언트 클라이언트는 게임을 플레이하는 유저들의 모바일이나 PC, 또는 해당 기기에서 개별적으로 돌아가는 프로그램을 의미합니다.주로 유저의 [chunk_id] | Guides:207:0

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