← 목록

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

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

[task] | wikipedia [title] | StateSet 제어하기 [category] | Guides [rephrased] | # 게임 로직 StateSet 제어하기 게임 로직에서 상태 관리 시스템(StateSet)을 구성하고 제어하는 방법은 상태 노드 생성, 시작 노드 지정, 노드 이름 규칙, 노드 종류 구분, 그리고 상태 전이(Transition) 설정으로 나뉩니다. ## 상태 노드 생성 상태 노드는 두 가지 방법으로 캔버스에 추가할 수 있습니다. 첫 번째 방법은 캔버스 영역에서 마우스 우클릭 메뉴를 통해 `Create State Node`를 선택하는 것이며, 두 번째 방법은 화면 좌측 상단의 **[+ Node]** 버튼을 클릭하는 것입니다. 노드 [original] | ### 상태 노드 생성 상태 노드는 두 가지 방법으로 생성할 수 있습니다. 추가한 노드의 상태를 설정창에서 변경할 수 있습니다. * 캔버스에서 마우스 우클릭 - Create State Node 선택 * 좌측 상단의 **[+ Node]** 버튼 클릭 ### 시작 노드 지정 State가 어떤 노드부터 시작할지를 결정하는 **시작 노드**를 반드시 지정해야 합니다. 시작 노드로 정할 노드를 선택하고, 컨텍스트 메뉴에서 Set Start Node를 선택합니다. 시작 노드는 색상이 파란색으로 변경됩니다. ![[object Objec [chunk_id] | Guides:1398:1

[task] | extract_knowledge [title] | StateSet 제어하기 [category] | Guides [rephrased] | # StateSet을 이용한 엔티티 상태 제어 ## 1. 개념 설명 **StateSet**은 엔티티의 상태를 제어하기 위한 상태 머신(State Machine) 구조를 정의하는 객체입니다. 크리에이터는 StateSet을 통해 개별 상태를 추가하고, 상태 간의 전이(Transition) 조건을 정의할 수 있습니다. StateSet은 `StateComponent`의 `StateSetId` 프로퍼티에 연결되어 플레이 시점에 로드됩니다. MapleStory Worlds는 사용 편의성을 위해以下几种의 프리셋과 기본 StateSet을 제 [original] | StateSet은 엔티티의 상태를 제어할 때 사용합니다. StateSet Editor를 활용하면 보다 간편하게 상태 머신의 흐름을 시각적으로 구성할 수 있습니다. ##### 참고 가이드 * [타입의 이해](/docs?postId=1038) * [엔티티의 상태 제어하기](/docs?postId=686) ##### 참고 API Reference * [StateComponent](/apiReference/Components/StateComponent) * [StateChangeEvent](/apiReference/Events/State [chunk_id] | Guides:1398:0

[task] | wikipedia [title] | 월드 유저 제재 관리 [category] | Guides [rephrased] | # 게임 서비스 월드 유저 제재 관리 **게임 서비스 월드 유저 제재 관리**는 메이플스토리 월드 크리에이터가 월드 내 특정 유저의 입장을 제한하기 위한 기능입니다. 크리에이터는 월드 인사이트(World Insights)를 통해 제재를 등록하거나 해제할 수 있으며, 등록된 제재 정보는 스크립트 내 `_UserService` API를 통해 조회하여 실제 입장 차단 로직을 구현해야 합니다. ## 제재 등록 및 해제 데이터 구조 유저 제재는 `Action`, `PlayerIdentifyType`, `PlayerIdentifier`, [original] | | Action | PlayerIdentifyType | PlayerIdentifier | ReasonKey | StartTime | EndTime | | --- | --- | --- | --- | --- | --- | | REGISTER | ProfileCode | AAAAA | Default | 2026-04-30T07:00:00Z | 2026-05-30T07:00:00Z | | REGISTER | UserId | BBBBB | Scam | 2026-04-30T07:00:00Z | | * **Action**: 현재 제재 상태를 [chunk_id] | Guides:1376:1

[task] | distill [title] | StateSet 제어하기 [category] | Guides [rephrased] | ### Gacha StateSet 만들기 **준비(READY), 실행(TRY), 결과 1(SPAWN_SCROLL), 결과 2(SPAWN_POTION)** 총 4개 노드로 구성합니다. 1. **Gacha** StateSet 생성 및 시작 노드 이름을 `READY`로 변경. 2. `TRY`, `SPAWN_SCROLL`, `SPAWN_POTION` 노드 추가. 3. `NetworkLogic` 스크립트 생성 및 아래 메서드 구현. ```lua Method boolean HasAuthority(Entity entity) { local [original] | 일정 확률로 두 가지 아이템 중 하나가 나타나는 상태 머신을 만들어봅시다. **Panels - Package Storage - MSW 패키지 - Example-StateSet**을 설치하면 완성된 결과를 확인할 수 있습니다. ![[object Object]](https://mod-file.dn.nexoncdn.co.kr/bbs/1780994162378d83217584dc845af9c7aff095ab9b8fa.gif "sample") ### Gacha StateSet 만들기 2가지 확률이 나오기 위해서는 **준비, 실행, 결과 1 [chunk_id] | Guides:1398:4

[task] | wikipedia [title] | 월드 유저 제재 관리 [category] | Guides [rephrased] | # 게임 서비스 월드 유저 제재 관리 본 가이드는 메이플스토리 월드(MapleStory Worlds)에서 유저가 월드에 입장할 때 제재(Ban) 여부를 확인하고, 제재 대상인 경우 사유 메시지를 팝업으로 표시한 뒤 지정된 시간(기본값 10초) 후 월드에서 추방(Kick)시키는 로직을 구현하는 방법을 다룹니다. ## 구현 구조 해당 기능은 두 개의 로직(Logic) 컴포넌트로 구성됩니다. 1. **BanGateLogic**: 유저 입장 이벤트를 수신하여 제재 여부를 확인하고, 제재 시 클라이언트에 팝업을 표시하며 타이머를 설정 [original] | 유저가 월드에 입장할 때 제재 여부를 확인하고, 제재 대상이라면 사유 메시지를 팝업으로 표시한 뒤 10초 후 월드에서 추방하는 예제입니다. 1. 새로운 Logic을 생성합니다. 2. 이름을 `BanGateLogic`으로 변경하고, 아래와 같이 작성합니다. ```lua Property: number kickDelaySeconds = 10 Method: [client] void ShowBanPopup(string message) { -- 제재 사유 메시지를 팝업 [chunk_id] | Guides:1376:2

[task] | wikipedia [title] | StateSet 제어하기 [category] | Guides [rephrased] | # 게임 로직 StateSet 제어하기 `StateSet` 컴포넌트는 게임의 상태 머신(State Machine)을 정의하는 데 사용됩니다. 본 가이드에서는 일정 확률에 따라 두 가지 아이템 중 하나가 생성되는 간단한 가챠(Gacha) 시스템을 `StateSet`으로 구현하는 과정을 설명합니다. 완성된 결과물을 확인하려면 **Panels** 창에서 **Package Storage** 탭을 열고 **MSW 패키지** 카테고리 내의 **Example-StateSet** 패키지를 설치하면 됩니다. ### Gacha StateSet 구 [original] | 일정 확률로 두 가지 아이템 중 하나가 나타나는 상태 머신을 만들어봅시다. **Panels - Package Storage - MSW 패키지 - Example-StateSet**을 설치하면 완성된 결과를 확인할 수 있습니다. ![[object Object]](https://mod-file.dn.nexoncdn.co.kr/bbs/1780994162378d83217584dc845af9c7aff095ab9b8fa.gif "sample") ### Gacha StateSet 만들기 2가지 확률이 나오기 위해서는 **준비, 실행, 결과 1 [chunk_id] | Guides:1398:4

[task] | extract_knowledge [title] | StateSet 제어하기 [category] | Guides [rephrased] | # StateSet 제어하기 ## 1. 개념 설명 **StateSet**은 엔티티의 상태 관리와 상태 전이를 제어하는 시스템입니다. 상태 노드(State Node)는 특정 동작이나 모드를 나타내며, 전이(Transition)는 조건 충족 시 상태를 변경하는 연결고리 역할을 합니다. 상태 노드는 크게 두 종류로 구분됩니다. 1. **NativeStateType**: `IsNative`가 `true`일 때 사용되며, 시스템에서 미리 정의된 고정된 상태(`Idle`, `Move`, `Jump` 등)를 사용합니다. 크리에이터가 동 [original] | ### 상태 노드 생성 상태 노드는 두 가지 방법으로 생성할 수 있습니다. 추가한 노드의 상태를 설정창에서 변경할 수 있습니다. * 캔버스에서 마우스 우클릭 - Create State Node 선택 * 좌측 상단의 **[+ Node]** 버튼 클릭 ### 시작 노드 지정 State가 어떤 노드부터 시작할지를 결정하는 **시작 노드**를 반드시 지정해야 합니다. 시작 노드로 정할 노드를 선택하고, 컨텍스트 메뉴에서 Set Start Node를 선택합니다. 시작 노드는 색상이 파란색으로 변경됩니다. ![[object Objec [chunk_id] | Guides:1398:1

[task] | knowledge_list [title] | StateSet 제어하기 [category] | Guides [rephrased] | 제시된 문서의 내용을 바탕으로 mLua 스크립트 언어 및 API 문맥에 맞게 핵심 사실을 정리한 목록입니다. 1. `StateType`의 `OnEnter()`, `OnUpdate()`, `OnExit()` 이벤트 호출 여부는 상태 머신을 실행하는 엔티티의 구성(특히 `PlayerControllerComponent` 유무)과 `StateComponent` 인스턴스의 `IsLegacy` 프로퍼티 값(true/false)에 의해 결정됩니다. 2. `StateType` 스크립트 컴포넌트 내부에서는 `ParentComponent` 프로퍼티 [original] | 각 실행 공간에서 **StateType**의 `OnEnter(), OnUpdate(), OnExit()` 이벤트의 실행 여부는 상태 머신을 실행하는 엔티티의 속성과 `StateComponent.IsLegacy` 프로퍼티에 의해 결정됩니다. **StateType**은 `ParentComponent` 프로퍼티를 통해 상태 머신을 구동 중인 StateComponent 인스턴스에 접근하여 로직에 필요한 다양한 정보를 참조할 수 있습니다. `StateComponent.IsLegacy`가 `true`일 때 | 구분 | OnEnter 호 [chunk_id] | Guides:1398:3

[task] | knowledge_list [title] | StateSet 제어하기 [category] | Guides [rephrased] | 제시된 문서 내용만을 기반으로 추출한 핵심 사실 목록입니다. * `Panels - Package Storage - MSW 패키지 - Example-StateSet`을 설치하면 일정 확률로 두 가지 아이템 중 하나가 나타나는 상태 머신 완성 결과를 확인할 수 있습니다. * 2가지 확률 결과를 생성하기 위해 `준비`, `실행`, `결과 1`, `결과 2` 총 4가지 노드가 필요합니다. * 새로운 `Gacha` StateSet을 생성하고 시작 노드의 이름을 `READY`로 변경해야 합니다. * `Gacha` StateSe [original] | 일정 확률로 두 가지 아이템 중 하나가 나타나는 상태 머신을 만들어봅시다. **Panels - Package Storage - MSW 패키지 - Example-StateSet**을 설치하면 완성된 결과를 확인할 수 있습니다. ![[object Object]](https://mod-file.dn.nexoncdn.co.kr/bbs/1780994162378d83217584dc845af9c7aff095ab9b8fa.gif "sample") ### Gacha StateSet 만들기 2가지 확률이 나오기 위해서는 **준비, 실행, 결과 1 [chunk_id] | Guides:1398:4

[task] | knowledge_list [title] | StateSet 제어하기 [category] | Guides [rephrased] | ```lua -- 문서에서 추출한 핵심 사실 목록 local facts = { "StateSet Editor에서는 노드와 노드를 연결하여 전이를 생성할 수 있으며, 조건이 설정된 전이는 선이 흰색으로, 조건이 없는 전이는 노란색으로 표시됩니다.", "전이를 생성하려면 시작 State를 선택한 후 컨텍스트 메뉴의 'Make Transition'을 선택합니다.", "전이를 생성한 후 생성된 선을 도착 노드로 드래그하여 연결하고, 도착 노드를 선택해야 합니다.", "연결된 전이 선을 선택하면 프로퍼티 창에서 [original] | StateSet Editor에서 노드와 노드를 연결해 전이를 생성할 수 있습니다. 조건이 설정되면 전이를 나타내는 선이 흰색으로 표시되고, 조건이 없는 경우 노란색으로 표시됩니다. 1. 전이를 생성할 **State를 선택 - 컨텍스트 메뉴 - Make Transition**을 선택합니다. ![[object Object]](https://mod-file.dn.nexoncdn.co.kr/bbs/178097323776218d2468d24f54f5e9d81e75ee6e01073.png "make transition") 2. 생성된 선을 [chunk_id] | Guides:1398:2

[task] | diverse_qa [title] | StateSet 제어하기 [category] | Guides [rephrased] | 질문: StateType의 OnEnter(), OnUpdate(), OnExit() 이벤트의 실행 여부는 어떤 두 가지 요소에 의해 결정됩니까? 답변: 상태 머신을 실행하는 엔티티의 속성과 StateComponent.IsLegacy 프로퍼티에 의해 결정됩니다. 질문: StateType은 상태 머신을 구동 중인 StateComponent 인스턴스에 어떻게 접근하여 정보를 참조할 수 있습니까? 답변: ParentComponent 프로퍼티를 통해 접근하여 참조할 수 있습니다. 질문: StateComponent.IsLegacy가 tru [original] | 각 실행 공간에서 **StateType**의 `OnEnter(), OnUpdate(), OnExit()` 이벤트의 실행 여부는 상태 머신을 실행하는 엔티티의 속성과 `StateComponent.IsLegacy` 프로퍼티에 의해 결정됩니다. **StateType**은 `ParentComponent` 프로퍼티를 통해 상태 머신을 구동 중인 StateComponent 인스턴스에 접근하여 로직에 필요한 다양한 정보를 참조할 수 있습니다. `StateComponent.IsLegacy`가 `true`일 때 | 구분 | OnEnter 호 [chunk_id] | Guides:1398:3

[task] | distill [title] | StateSet 제어하기 [category] | Guides [rephrased] | # 게임 로직 StateSet 제어하기 `StateType`과 `ConditionType`의 이벤트 실행 여부는 상태 머신을 실행하는 엔티티의 속성과 `StateComponent.IsLegacy` 프로퍼티에 의해 결정됩니다. 두 타입 모두 `ParentComponent` 프로퍼티를 통해 해당 StateComponent 인스턴스에 접근하여 정보를 참조할 수 있습니다. ### 1. StateType 이벤트 (`OnEnter`, `OnUpdate`, `OnExit`) `StateComponent.IsLegacy` 값에 따른 이벤트 [original] | 각 실행 공간에서 **StateType**의 `OnEnter(), OnUpdate(), OnExit()` 이벤트의 실행 여부는 상태 머신을 실행하는 엔티티의 속성과 `StateComponent.IsLegacy` 프로퍼티에 의해 결정됩니다. **StateType**은 `ParentComponent` 프로퍼티를 통해 상태 머신을 구동 중인 StateComponent 인스턴스에 접근하여 로직에 필요한 다양한 정보를 참조할 수 있습니다. `StateComponent.IsLegacy`가 `true`일 때 | 구분 | OnEnter 호 [chunk_id] | Guides:1398:3

[task] | extract_knowledge [title] | 월드 유저 제재 관리 [category] | Guides [rephrased] | # 유저 제재 관리 및 추방 처리 월드 입장 시 유저의 제재 여부를 확인하고, 제재 대상인 경우 사유를 클라이언트에 표시한 뒤 지정된 시간 이후에 월드에서 추방하는 로직을 구현하는 방법을 설명합니다. ## 1. 개념 설명 유저가 월드에 입장하면 서버는 해당 유저의 제재 상태(`IsUserBanned`)를 확인합니다. 제재 상태인 경우, 제재 사유 키(`BanReason`)를 조회하여 클라이언트에만 해당 사유 메시지를 팝업으로 표시합니다. 이후 설정된 지연 시간(`kickDelaySeconds`)이 경과하면 해당 유저를 월드에서 [original] | 유저가 월드에 입장할 때 제재 여부를 확인하고, 제재 대상이라면 사유 메시지를 팝업으로 표시한 뒤 10초 후 월드에서 추방하는 예제입니다. 1. 새로운 Logic을 생성합니다. 2. 이름을 `BanGateLogic`으로 변경하고, 아래와 같이 작성합니다. ```lua Property: number kickDelaySeconds = 10 Method: [client] void ShowBanPopup(string message) { -- 제재 사유 메시지를 팝업 [chunk_id] | Guides:1376:2

[task] | wikipedia [title] | StateSet 제어하기 [category] | Guides [rephrased] | # 게임 로직 StateSet 제어하기 StateSet Editor에서는 노드(상태) 간의 연결을 통해 상태 전이(Transition)를 생성하고 관리할 수 있습니다. 이 전이는 상태 머신(State Machine)의 핵심 요소로, 특정 조건이 충족될 때 현재 상태에서 다음 상태로 이동하는 논리를 담당합니다. 시각적으로 전이를 나타내는 선은 설정된 조건에 따라 색상이 달라집니다. 조건이 하나 이상 설정된 경우 선은 흰색으로 표시되고, 조건이 없는 경우 노란색으로 표시됩니다. ## 전이 생성 방법 새로운 전이를 생성하려면 다음 [original] | StateSet Editor에서 노드와 노드를 연결해 전이를 생성할 수 있습니다. 조건이 설정되면 전이를 나타내는 선이 흰색으로 표시되고, 조건이 없는 경우 노란색으로 표시됩니다. 1. 전이를 생성할 **State를 선택 - 컨텍스트 메뉴 - Make Transition**을 선택합니다. ![[object Object]](https://mod-file.dn.nexoncdn.co.kr/bbs/178097323776218d2468d24f54f5e9d81e75ee6e01073.png "make transition") 2. 생성된 선을 [chunk_id] | Guides:1398:2

[task] | distill [title] | StateSet 제어하기 [category] | Guides [rephrased] | ### Gacha 모델 생성 `StateComponent`가 있는 엔티티를 생성하여 Gacha StateSet을 적용합니다. 1. **Workspace - MyDesk - Create Model**로 모델을 생성합니다. 2. `TransformComponent`, `RigidbodyComponent`, `SpriteRendererComponent`, `StateComponent`를 추가합니다. - `SpriteRUID`: `939597de7475400ab64231404c764e4c` 3. `StateComponent`의 `S [original] | ### Gacha 모델 생성 생성한 **Gacha** StateSet을 사용하기 위해서 **StateComponent**가 있는 엔티티를 생성합니다. 1. **Workspace - MyDesk - Create Model**을 눌러 새로운 **Gacha** 모델을 생성합니다. 2. 모델에 **TransformComponent, RigidbodyComponent, SpriteRendererComponent, StateComponent**를 추가합니다. * SpriteRUID: 939597de7475400ab64231404c [chunk_id] | Guides:1398:6

[task] | wikipedia [title] | StateSet 제어하기 [category] | Guides [rephrased] | 제시된 원문은 `StateSet` 제어와 관련된 스크립트 컴포넌트의 예제 코드를 포함하고 있으나, 해당 코드에 대한 명시적인 설명 문장, API 정의, 또는 동작 원리에 대한 텍스트가 포함되어 있지 않습니다. 따라서 원문에 존재하는 정보(코드 블록)만 보존하여 위키백과 형식의 산문으로 재구성할 수 있는 사실적 내용이 부족합니다. 다만, 원문에 포함된 코드 블록 자체는 mLua 문법에 기반한 스크립트 컴포넌트 정의이며, 이는 `Property`, `Method` 블록으로 구성되어 있습니다. 아래는 원문에 포함된 코드 예제를 그대로 [original] | ```lua Property: string ModelId = "" string Name = "" Vector3 SpawnPosition = Vector3(0,0,0) Entity Parent = nil Entity Spawned = nil Method: void OnEnter() { local parent = self.Parent if parent == nil then parent = self:GetParent [chunk_id] | Guides:1398:5

[task] | diverse_qa [title] | StateSet 제어하기 [category] | Guides [rephrased] | 질문: StateSet Editor에서 조건이 설정된 전이와 조건이 없는 전이는 각각 어떤 색으로 표시되나요? 답변: 조건이 설정된 전이는 흰색으로, 조건이 없는 전이는 노란색으로 표시됩니다. 질문: StateSet Editor에서 새로운 전이를 생성하기 위한 첫 번째 단계는 무엇인가요? 답변: 전이를 생성할 State를 선택한 후, 컨텍스트 메뉴에서 'Make Transition'을 선택합니다. 질문: StateSet Editor에서 생성된 전이 선을 연결할 때의 두 번째 단계는 무엇인가요? 답변: 생성된 선을 연결할 도착 노 [original] | StateSet Editor에서 노드와 노드를 연결해 전이를 생성할 수 있습니다. 조건이 설정되면 전이를 나타내는 선이 흰색으로 표시되고, 조건이 없는 경우 노란색으로 표시됩니다. 1. 전이를 생성할 **State를 선택 - 컨텍스트 메뉴 - Make Transition**을 선택합니다. ![[object Object]](https://mod-file.dn.nexoncdn.co.kr/bbs/178097323776218d2468d24f54f5e9d81e75ee6e01073.png "make transition") 2. 생성된 선을 [chunk_id] | Guides:1398:2

[task] | knowledge_list [title] | StateSet 제어하기 [category] | Guides [rephrased] | 제시된 문서의 코드 블록에 포함된 정보만을 기반으로 핵심 사실을 추출한 목록입니다. 1. `Property` 블록에는 `string` 타입의 `ModelId`와 `Name`, `Vector3` 타입의 `SpawnPosition`, `Entity` 타입의 `Parent`와 `Spawned` 프로퍼티가 정의되어 있습니다. 2. `Method` 블록의 `OnEnter()` 메서드는 실행 공간 제약이 명시되지 않으며, 내부 로직을 통해 서버 또는 클라이언트 중 한쪽에서만 실행되도록 분기 처리합니다. 3. `OnEnter()` 메서드 [original] | ```lua Property: string ModelId = "" string Name = "" Vector3 SpawnPosition = Vector3(0,0,0) Entity Parent = nil Entity Spawned = nil Method: void OnEnter() { local parent = self.Parent if parent == nil then parent = self:GetParent [chunk_id] | Guides:1398:5

[task] | diverse_qa [title] | StateSet 제어하기 [category] | Guides [rephrased] | 질문: 확률 기반 아이템 스폰 상태 머신을 만들기 위해 필요한 총 노드 수는 몇 개인가요? 답변: 준비, 실행, 결과 1, 결과 2 총 4가지 노드가 필요합니다. 질문: Gacha StateSet의 시작 노드 이름을 무엇으로 변경해야 하나요? 답변: 시작 노드의 이름을 **READY**로 변경해야 합니다. 질문: Gacha StateSet에서 시작 노드 외에 추가로 생성해야 하는 노드 3개의 이름은 각각 무엇인가요? 답변: 추가로 생성해야 하는 노드 3개의 이름은 **TRY**, **SPAWN_SCROLL**, **SPAWN_P [original] | 일정 확률로 두 가지 아이템 중 하나가 나타나는 상태 머신을 만들어봅시다. **Panels - Package Storage - MSW 패키지 - Example-StateSet**을 설치하면 완성된 결과를 확인할 수 있습니다. ![[object Object]](https://mod-file.dn.nexoncdn.co.kr/bbs/1780994162378d83217584dc845af9c7aff095ab9b8fa.gif "sample") ### Gacha StateSet 만들기 2가지 확률이 나오기 위해서는 **준비, 실행, 결과 1 [chunk_id] | Guides:1398:4

[task] | distill [title] | StateSet 제어하기 [category] | Guides [rephrased] | # 게임 로직: StateSet 제어하기 (스폰 로직 예시) `StateSet` 전환 시 특정 상태에 진입하면 엔티티를 스폰하는 로직을 구현하는 예제입니다. 네트워크 환경(서버/클라이언트)과 로컬라이즈 여부(`parent.Localize`)에 따라 실행 주체를 결정하여 중복 스폰을 방지합니다. ## 주요 로직 흐름 1. **부모 엔티티 결정**: `self.Parent` 속성이 없으면 `GetParentEntity()` 메서드를 통해 `ParentComponent`에서 엔티티를 조회합니다. 2. **실행 주체 판별**: [original] | ```lua Property: string ModelId = "" string Name = "" Vector3 SpawnPosition = Vector3(0,0,0) Entity Parent = nil Entity Spawned = nil Method: void OnEnter() { local parent = self.Parent if parent == nil then parent = self:GetParent [chunk_id] | Guides:1398:5

[task] | extract_knowledge [title] | StateSet 제어하기 [category] | Guides [rephrased] | # StateSet을 이용한 확률 기반 스폰 시스템 구현 ## 1. 개념 설명 `StateSet`은 게임 로직의 상태 전이를 관리하는 시스템입니다. 특정 확률로 두 가지 결과 중 하나가 나타나도록 하려면, 상태 머신은 최소 4개의 노드로 구성되어야 합니다. * **READY**: 초기 대기 상태 * **TRY**: 실행 준비 상태 * **SPAWN_SCROLL**: 결과 1 (아이템 A 스폰) * **SPAWN_POTION**: 결과 2 (아이템 B 스폰) 이 구조를 통해 클라이언트/서버 권한에 따라 상태 전이 [original] | 일정 확률로 두 가지 아이템 중 하나가 나타나는 상태 머신을 만들어봅시다. **Panels - Package Storage - MSW 패키지 - Example-StateSet**을 설치하면 완성된 결과를 확인할 수 있습니다. ![[object Object]](https://mod-file.dn.nexoncdn.co.kr/bbs/1780994162378d83217584dc845af9c7aff095ab9b8fa.gif "sample") ### Gacha StateSet 만들기 2가지 확률이 나오기 위해서는 **준비, 실행, 결과 1 [chunk_id] | Guides:1398:4

[task] | extract_knowledge [title] | StateSet 제어하기 [category] | Guides [rephrased] | # StateSet 제어 ## 개념 설명 StateSet은 게임 로직의 상태를 관리하기 위해 노드(State)와 전이(Transition)를 연결하는 구조입니다. 전이는 특정 상태(노드)에서 다른 상태로 넘어가는 규칙을 정의하며, 조건이 설정된 전이는 흰색 선으로, 조건이 없는 전이는 노란색 선으로 표시됩니다. StateSet은 `StateComponent`와 연동하여 동작합니다. 크리에이터가 생성한 StateSet은 반드시 `StateComponent.StateSetId`에 지정되어야 합니다. 또한 `StateComponen [original] | StateSet Editor에서 노드와 노드를 연결해 전이를 생성할 수 있습니다. 조건이 설정되면 전이를 나타내는 선이 흰색으로 표시되고, 조건이 없는 경우 노란색으로 표시됩니다. 1. 전이를 생성할 **State를 선택 - 컨텍스트 메뉴 - Make Transition**을 선택합니다. ![[object Object]](https://mod-file.dn.nexoncdn.co.kr/bbs/178097323776218d2468d24f54f5e9d81e75ee6e01073.png "make transition") 2. 생성된 선을 [chunk_id] | Guides:1398:2

[task] | knowledge_list [title] | StateSet 제어하기 [category] | Guides [rephrased] | 제시된 문서 내용에 기반하여 핵심 사실을 추출한 목록입니다. 1. Gacha StateSet을 적용하기 위해서는 `StateComponent`가 포함된 엔티티 모델이 필요하며, `Workspace - MyDesk - Create Model` 메뉴를 통해 생성합니다. 2. Gacha 모델에는 `TransformComponent`, `RigidbodyComponent`, `SpriteRendererComponent`(SpriteRUID: 939597de7475400ab64231404c764e4c), `StateComponent`를 추 [original] | ### Gacha 모델 생성 생성한 **Gacha** StateSet을 사용하기 위해서 **StateComponent**가 있는 엔티티를 생성합니다. 1. **Workspace - MyDesk - Create Model**을 눌러 새로운 **Gacha** 모델을 생성합니다. 2. 모델에 **TransformComponent, RigidbodyComponent, SpriteRendererComponent, StateComponent**를 추가합니다. * SpriteRUID: 939597de7475400ab64231404c [chunk_id] | Guides:1398:6

[task] | diverse_qa [title] | StateSet 제어하기 [category] | Guides [rephrased] | 질문: Gacha 모델을 생성하기 위해 어떤 컴포넌트들을 엔티티에 추가해야 하나요? 답변: TransformComponent, RigidbodyComponent, SpriteRendererComponent, StateComponent 를 추가해야 합니다. 질문: Gacha 모델의 SpriteRendererComponent 에 지정된 SpriteRUID 값은 무엇인가요? 답변: 939597de7475400ab64231404c764e4c 입니다. 질문: StateComponent 의 StateSetId 에 어떤 값을 지정해야 Gac [original] | ### Gacha 모델 생성 생성한 **Gacha** StateSet을 사용하기 위해서 **StateComponent**가 있는 엔티티를 생성합니다. 1. **Workspace - MyDesk - Create Model**을 눌러 새로운 **Gacha** 모델을 생성합니다. 2. 모델에 **TransformComponent, RigidbodyComponent, SpriteRendererComponent, StateComponent**를 추가합니다. * SpriteRUID: 939597de7475400ab64231404c [chunk_id] | Guides:1398:6

[task] | distill [title] | StateSet 제어하기 [category] | Guides [rephrased] | **StateSet 제어 및 Force 적용** 1. `Reward` StateSet 생성 후 시작 노드 이름을 `POPOUT`으로 변경합니다. 2. `AddForce` StateType을 생성하여 아래 코드를 작성합니다. * `Force`(Vector2): 가할 힘의 방향과 크기. * `OnEnter`: 부모 Entity의 `RigidbodyComponent`에 `Force`를 적용합니다. * **주의**: `_NetworkLogic:HasAuthority`가 `false`인 경우(권한 없음) [original] | 1. 새로운 **Reward** StateSet을 생성하고, 시작 노드의 이름을 **POPOUT**으로 변경합니다. 2. **Workspace - MyDesk - Create Scripts - Create StateType**을 눌러 새로운 **AddForce**를 생성합니다. 3. 아이템이 나타나는 방향과 속도를 설정할 수 있도록 아래와 같이 작성합니다. ```lua Property: Vector2 Force = Vector2.zero Method: void OnEnter() { [chunk_id] | Guides:1398:7

[task] | wikipedia [title] | StateSet 제어하기 [category] | Guides [rephrased] | # 게임 로직 StateSet 제어하기 메이플스토리 월드의 게임 로직 시스템에서 **StateType**의 `OnEnter()`, `OnUpdate()`, `OnExit()` 이벤트가 실행되는 여부는 두 가지 요인에 의해 결정됩니다. 첫째, 해당 상태 머신을 실행 중인 엔티티의 속성(특히 `PlayerControllerComponent`의 존재 여부 및 로컬화 상태)이고, 둘째, `StateComponent`의 `IsLegacy` 프로퍼티 값입니다. **StateType**은 `ParentComponent` 프로퍼티를 통해 상태 [original] | 각 실행 공간에서 **StateType**의 `OnEnter(), OnUpdate(), OnExit()` 이벤트의 실행 여부는 상태 머신을 실행하는 엔티티의 속성과 `StateComponent.IsLegacy` 프로퍼티에 의해 결정됩니다. **StateType**은 `ParentComponent` 프로퍼티를 통해 상태 머신을 구동 중인 StateComponent 인스턴스에 접근하여 로직에 필요한 다양한 정보를 참조할 수 있습니다. `StateComponent.IsLegacy`가 `true`일 때 | 구분 | OnEnter 호 [chunk_id] | Guides:1398:3

[task] | diverse_qa [title] | StateSet 제어하기 [category] | Guides [rephrased] | 질문: 위 코드에서 `OnEnter()` 메서드가 실행될 때 가장 먼저 확인하는 변수는 무엇인가요? 답변: `OnEnter()` 메서드가 실행될 때 가장 먼저 확인하는 변수는 `self.Parent`입니다. 질문: `self.Parent`가 `nil`이 아닐 때, `OnEnter()` 함수는 어떻게 처리하나요? 답변: `self.Parent`가 `nil`이 아니면(즉, 값이 있으면), 해당 값을 `local parent` 변수에 대입하여 이후 로직을 수행합니다. 질문: `self.Parent`가 `nil`인 경우, `OnEnte [original] | ```lua Property: string ModelId = "" string Name = "" Vector3 SpawnPosition = Vector3(0,0,0) Entity Parent = nil Entity Spawned = nil Method: void OnEnter() { local parent = self.Parent if parent == nil then parent = self:GetParent [chunk_id] | Guides:1398:5

[task] | wikipedia [title] | StateSet 제어하기 [category] | Guides [rephrased] | # 게임 로직 StateSet 제어하기: Gacha 모델 생성 및 전이 조건 설정 본 가이드는 메이플스토리 월드(MapleStory Worlds)에서 **Gacha** StateSet을 적용한 엔티티를 생성하고, 상태 전이(Transition)를 제어하기 위한 조건 타입(ConditionType)을 작성하는 방법을 설명합니다. ## Gacha 모델 생성 생성한 **Gacha** StateSet을 활용하기 위해서는 해당 StateSet을 참조할 수 있는 **StateComponent**가 포함된 엔티티를 생성해야 합니다. 모델 [original] | ### Gacha 모델 생성 생성한 **Gacha** StateSet을 사용하기 위해서 **StateComponent**가 있는 엔티티를 생성합니다. 1. **Workspace - MyDesk - Create Model**을 눌러 새로운 **Gacha** 모델을 생성합니다. 2. 모델에 **TransformComponent, RigidbodyComponent, SpriteRendererComponent, StateComponent**를 추가합니다. * SpriteRUID: 939597de7475400ab64231404c [chunk_id] | Guides:1398:6

[task] | knowledge_list [title] | StateSet 제어하기 [category] | Guides [rephrased] | 제시된 문서의 내용을 바탕으로 추출한 핵심 사실 목록입니다. 1. `Reward` StateSet을 생성할 때 시작 노드의 이름을 `POPOUT`으로 변경해야 합니다. 2. `Workspace - MyDesk - Create Scripts - Create StateType` 경로를 통해 새로운 `AddForce` 스크립트를 생성합니다. 3. `AddForce` 스크립트에는 `Vector2` 타입의 `Force` 프로퍼티가 정의되며, 기본값은 `Vector2.zero`입니다. 4. `AddForce` 스크립트의 `OnEnter()` [original] | 1. 새로운 **Reward** StateSet을 생성하고, 시작 노드의 이름을 **POPOUT**으로 변경합니다. 2. **Workspace - MyDesk - Create Scripts - Create StateType**을 눌러 새로운 **AddForce**를 생성합니다. 3. 아이템이 나타나는 방향과 속도를 설정할 수 있도록 아래와 같이 작성합니다. ```lua Property: Vector2 Force = Vector2.zero Method: void OnEnter() { [chunk_id] | Guides:1398:7

[task] | distill [title] | BehaviourTree Editor로 행동 트리 만들기 [category] | Guides [rephrased] | # BehaviourTree Editor 사용 가이드 **BehaviourTree**는 AI의 의사결정 및 행동을 표현하는 데이터로, 노드 정보와 계층 구조를 저장합니다. `AIComponent`의 `BehaviourTreeId` 프로퍼티에 설정하면 플레이 시점에 로드됩니다. ## Editor 개요 * **접근 경로**: `Workspace > MyDesk > Create BehaviourTree` 또는 `Panels > BehaviourTree Editor` * **핵심 패널**: * **Blackboard* [original] | 행동 트리 구조를 손쉽게 구성할 수 있는 **BehaviourTree Editor**의 사용 방법을 알아봅시다. 에디터를 활용하면 스크립트로 노드를 결합하지 않아도 노드를 배치하고 선으로 연결해 시각적으로 행동 트리를 제작할 수 있습니다. ##### 참고 가이드 * [행동 트리를 활용한 AI 만들기](/docs?postId=562) * [행동 트리 노드 만들기](/docs?postId=1155) ##### 참고 API Reference * [AIComponent](/apiReference/Components/AIComponent [chunk_id] | Guides:1399:0

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