← 목록

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

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

[task] | extract_knowledge [title] | 몬스터 드롭 아이템과 인벤토리 UI 만들기 [category] | Guides [rephrased] | # 몬스터 드롭 아이템 정의 및 인벤토리 UI 구성 ## 1. 개념 설명 메이플스토리 월드에서 몬스터 처치 시 획득하는 아이템은 **DataSet**을 통해 정의됩니다. 개별 아이템의 식별자(ID), 이름(Name), 아이콘 경로(IconRUID)를 데이터 테이블로 관리하여 스크립트와 UI가 공유하는 데이터 원본을 생성합니다. UI 측면에서는 **인벤토리(Inventory)**와 **버튼모음(Button Group)** 프리셋을 활용하여 아이템을 표시하는 창과 이를 제어하는 버튼을 배치합니다. 인벤토리 엔티티는 `UIInven [original] | # 학습 과정 소개 > 본 가이드는 아래의 순서로 이어지는 과정입니다. > 1편. [몬스터를 스폰해보자](/docs?postId=204) > **▶ 2편.** [**몬스터 드롭 아이템과 인벤토리 UI 만들기**](/docs?postId=943) > 3편. [인벤토리 스크립트 작성하기](/docs?postId=942) > 4편. [인벤토리 UI 스크립트 작성하기](/docs?postId=946) > 5편. [아이템 스크립트 작성하기](/docs?postId=947) 지난 시간에 이어 이번 과정에서는 몬스터를 처치했을 때 드롭될 아 [chunk_id] | Guides:943:0

[task] | wikipedia [title] | 인벤토리 스크립트 작성하기 [category] | Guides [rephrased] | # 몬스터 사냥과 아이템 획득: 인벤토리 스크립트 작성하기 본 가이드는 메이플스토리 월드에서 몬스터 사냥을 통해 아이템을 획득하고, 해당 아이템의 개수를 서버와 클라이언트 간에 동기화하며, 데이터베이스에 저장하는 과정을 처리하는 인벤토리 스크립트의 구조와 동작 원리를 설명합니다. ## 스크립트 구성 요소 인벤토리 스크립트는 초기화 로직, 아이템 수량 변경 로직, 그리고 서버-클라이언트 간 이벤트 전송 로직으로 구성됩니다. ### 속성 (Property) 스크립트는 `[Sync]` 속성을 가진 `boolean` 타입의 `Is [original] | ```lua Property: [Sync] boolean IsInitialized = false Function: [server only] void OnBeginPlay() { -- inventoryData에 UserItemDataSet를 불러옴 self._T.inventoryData = {} for i = 1, _DataService:GetRowCount("UserItemDataSet") do self._T.inventoryData[i] = 0 end local userDataSto [chunk_id] | Guides:942:6

[task] | extract_knowledge [title] | 인벤토리 스크립트 작성하기 [category] | Guides [rephrased] | # 인벤토리 아이템 삭제 및 데이터 영속화 ## 개념 설명 이 절에서는 서버 측에서 인벤토리의 특정 슬롯에 있는 아이템을 삭제하는 로직과, 사용자가 세션을 종료할 때 현재 인벤토리 상태를 외부 저장소에 영구적으로 저장하는 방법을 다룹니다. 아이템 삭제 시에는 배열 인덱스 범위 검사를 수행하여 무효한 접근을 방지하고, 변경 사항을 클라이언트 또는 다른 시스템에 알리기 위한 커스텀 이벤트를 발생시킵니다. 사용자 퇴장 시에는 메모리에 유지되던 인벤토리 데이터를 문자열로 직렬화하여 데이터 스토리지에 기록합니다. ## API 사용법 # [original] | [server only] void RemoveItem(number itemIndex) { if itemIndex < 1 or itemIndex > #self._T.inventoryData then log_error("itemIndex error") return end self._T.inventoryData[itemIndex] = 0 local modifiedEvent = OnInventoryModified() modifiedEvent.ItemIndex = ite [chunk_id] | Guides:942:7

[task] | extract_knowledge [title] | 메이플스토리 월드 루아 구문 [category] | Guides [rephrased] | # 일반 for 문과 반복 제어 ## 개념 설명 일반 `for` 문은 일련의 숫자가 아닌 테이블(Table)의 항목을 반복 처리하는 구문입니다. 이 구문을 사용하면 테이블 내 각 항목에 대해 코드를 실행하고, 해당 항목을 코드 내에서 직접 참조할 수 있습니다. 일반 `for` 문을 사용하려면 반복자(Iterator) 함수가 필요합니다. - `ipairs()`: 배열(Array) 형태의 테이블을 반복할 때 사용합니다. 인덱스와 값을 순서대로 반환합니다. - `pairs()`: 사전(Dictionary, Key-Value 구조) 형 [original] | **일반 for 문**은 일련의 숫자가 아닌 테이블의 항목을 반복합니다. 일반 for 문을 사용하면 각 테이블에 대한 코드를 실행할 수 있고, 코드에서 각 항목을 쉽게 사용할 수 있습니다. 일반 for 문은 함수나 반복자가 필요합니다. `ipairs()`는 배열(Array)의 반복을 반환하고 `pairs()`는 사전(Dictionary)의 반복을 반환합니다. #### 배열(Array) `ipairs()`는 배열의 인덱스와 값을 반복해서 반환합니다. 예제를 살펴봅시다. ```lua local testArray = {"A", "B [chunk_id] | Guides:944:1

[task] | diverse_qa [title] | 인벤토리 UI 스크립트 작성하기 [category] | Guides [rephrased] | 질문: 이 가이드가 속한 학습 과정의 4편 주제는 무엇인가요? 답변: 인벤토리 UI 스크립트 작성하기입니다. 질문: `UIInventory` 스크립트를 수정하여 아이템 슬롯을 관리하기 위해 사용하는 변수 이름은 무엇인가요? 답변: `self._T.slotList` 입니다. 질문: `OnBeginPlay()` 함수에서 슬롯을 생성할 때 참조하는 데이터셋 이름은 무엇인가요? 답변: `UserItemDataSet` 입니다. 질문: `AddSlot()` 함수의 리턴 타입은 무엇으로 설정해야 하나요? 답변: **Entity** 로 설정 [original] | # 학습 과정 소개 > 본 가이드는 아래의 순서로 이어지는 과정입니다. > 1편. [몬스터를 스폰해보자](/docs?postId=204) > 2편. [몬스터 드롭 아이템과 인벤토리 UI 만들기](/docs?postId=943) > 3편. [인벤토리 스크립트 작성하기](/docs?postId=942) > **▶ 4편.** [**인벤토리 UI 스크립트 작성하기**](/docs?postId=946) > 5편. [아이템 스크립트 작성하기](/docs?postId=947) 지난 시간에 이어 이번 과정에서는 인벤토리 UI 스크립트를 작성해 [chunk_id] | Guides:946:0

[task] | wikipedia [title] | 인벤토리 UI 스크립트 작성하기 [category] | Guides [rephrased] | ## 몬스터 사냥과 아이템 획득 인벤토리 UI 스크립트 작성하기 **UIInventory** 스크립트에서 인벤토리 초기 정보와 변경 사항을 처리하기 위해 두 가지 이벤트 핸들러를 구현해야 합니다. 먼저 인벤토리가 초기화된 시점의 정보를 수신하기 위해 `OnInventoryInitialized` 이벤트 핸들러를 추가하며, 해당 핸들러 상단의 이벤트 중계자는 **localplayer**로 설정합니다. 이 핸들러는 인벤토리 초기화 시점에 전달된 전체 아이템 목록을 반복문으로 순회하며, 각 아이템의 인덱스와 개수를 `UIItemSlot` [original] | **UIInventory** 스크립트에서는 이 정보를 전달받기 위해 이벤트 핸들러에 `OnInventoryInitialized` 이벤트를 추가하겠습니다. 그리고 핸들러 상단의 이벤트 중계자는 **localplayer**로 설정합니다. 보유 중인 아이템을 UI에 보여주기 위해 아래와 같이 작성합니다. ```lua [localplayer] HandleOnInventoryInitialized(OnInventoryInitialized event) { -- Parameters loc [chunk_id] | Guides:946:1

[task] | knowledge_list [title] | 인벤토리 UI 스크립트 작성하기 [category] | Guides [rephrased] | 제시된 문서 내용을 바탕으로 추출한 핵심 사실 목록입니다. 1. `UIInventory` 스크립트에서 초기 인벤토리 정보를 수신하기 위해 이벤트 핸들러에 `OnInventoryInitialized` 이벤트를 추가하며, 해당 핸들러의 이벤트 중계자는 `localplayer`로 설정해야 합니다. 2. `HandleOnInventoryInitialized` 핸들러는 `[localplayer]` 실행 공간에서 동작하며, `OnInventoryInitialized` 타입의 `event` 매개변수를 받아 `event.AllItemCounts [original] | **UIInventory** 스크립트에서는 이 정보를 전달받기 위해 이벤트 핸들러에 `OnInventoryInitialized` 이벤트를 추가하겠습니다. 그리고 핸들러 상단의 이벤트 중계자는 **localplayer**로 설정합니다. 보유 중인 아이템을 UI에 보여주기 위해 아래와 같이 작성합니다. ```lua [localplayer] HandleOnInventoryInitialized(OnInventoryInitialized event) { -- Parameters loc [chunk_id] | Guides:946:1

[task] | distill [title] | 인벤토리 UI 스크립트 작성하기 [category] | Guides [rephrased] | # UIItemSlot 스크립트 수정 가이드 캐릭터의 아이템 보유 정보를 개별 슬롯에 표시하기 위해 `UIItemSlot` 스크립트를 수정합니다. 기존 프로퍼티는 모두 제거하고 아래 내용을 적용합니다. ## 1. 프로퍼티 추가 `number` 타입의 `ItemIndex`, `ItemCount` 프로퍼티를 추가합니다. ```lua Property: [None] number ItemIndex = 0 [None] number ItemCount = 0 ``` ## 2. SetData() 함수 수정 기존 매개변수와 내용은 삭제하고, [original] | # UIItemSlot 수정 캐릭터의 아이템 보유 정보를 토대로 개별 슬롯에 아이템을 보여주기 위해 **UIItemSlot** 스크립트를 수정하겠습니다. 1. **UIItemSlot** 스크립트를 열고 기존의 프로퍼티는 모두 제거합니다. 그리고 아래와 같이 **number** 타입의 **ItemIndex**, **ItemCount** 프로퍼티를 추가합니다. ```lua Property: [None] number ItemIndex = 0 [None] number ItemCount = 0 [chunk_id] | Guides:946:2

[task] | diverse_qa [title] | 다시 게임하기 [category] | Guides [rephrased] | 질문: 카드 짝 맞추기 게임을 언제든 다시 시작할 수 있도록 하기 위해 수정해야 하는 주요 컴포넌트는 무엇인가요? 답변: `CardPairGameLogic`과 `CardBoard` 컴포넌트를 수정하면 됩니다. 질문: `CardBoard` 컴포넌트에서 월드에 입장할 때 게임 UI가 기본으로 비활성화되도록 설정하는 함수는 무엇이며, 이 함수는 어떤 실행 공간에서 작성해야 하나요? 답변: `OnBeginPlay()` 함수를 `[client only]` 실행 공간에서 작성해야 합니다. 질문: 다음 코드의 역할은 무엇인가요? ```lua [original] | 게임을 단 한 번만 할 수 있다면 너무나 아쉽겠죠. 게임의 묘미는 다시 하는 것이지요. 언제든지 **게임 다시하기** 버튼을 누르면 카드 짝 맞추기를 할 수 있게 지금까지 만든 월드를 아주 약간만 수정해봅시다. 정말 아주 약간이요! # 게임 시작 부분 다듬기 짝 맞추기 게임을 완성한 여러분 축하합니다! 지금까지 만든 게임을 실행하면 월드에 입장할 때마다 무조건 짝 맞추기 게임을 한번 한 뒤에야 크리에이터가 만든 월드를 둘러볼 수 있습니다. 유저가 게임을 하고 싶을 때만 게임을 할 수 있게 만들려면 어디를 고쳐야할까요? 약간의 힌 [chunk_id] | Guides:945:0

[task] | wikipedia [title] | 인벤토리 UI 스크립트 작성하기 [category] | Guides [rephrased] | # 인벤토리 UI 스크립트 작성하기 본 문서는 메이플스토리 월드(MapleStory Worlds) 응용 제작 가이드의 '몬스터 사냥과 아이템 획득' 시리즈 중 4편으로, 인벤토리 UI 스크립트 작성 방법을 다룹니다. 이 시리즈는 몬스터 스폰(1편), 몬스터 드롭 아이템과 인벤토리 UI 생성(2편), 인벤토리 로직 스크립트 작성(3편), 인벤토리 UI 스크립트 작성(4편, 본 문서), 그리고 아이템 스크립트 작성(5편)의 순서로 이어집니다. ## UIInventory 스크립트 수정 이전 단계인 '몬스터 드롭 아이템과 인벤토리 U [original] | # 학습 과정 소개 > 본 가이드는 아래의 순서로 이어지는 과정입니다. > 1편. [몬스터를 스폰해보자](/docs?postId=204) > 2편. [몬스터 드롭 아이템과 인벤토리 UI 만들기](/docs?postId=943) > 3편. [인벤토리 스크립트 작성하기](/docs?postId=942) > **▶ 4편.** [**인벤토리 UI 스크립트 작성하기**](/docs?postId=946) > 5편. [아이템 스크립트 작성하기](/docs?postId=947) 지난 시간에 이어 이번 과정에서는 인벤토리 UI 스크립트를 작성해 [chunk_id] | Guides:946:0

[task] | extract_knowledge [title] | 다시 게임하기 [category] | Guides [rephrased] | # 게임 재시작 및 조건부 시작 제어 본 절에서는 카드 짝 맞추기 게임에서 '게임 다시하기' 기능을 구현하는 방법을 다룹니다. 기존 로직은 월드 진입 시 게임이 강제로 시작되도록 구성되어 있어, 이를 유저의 조작(버튼 클릭)에 따라 선택적으로 시작하도록 수정하는 절차를 설명합니다. ## 1. 개념 설명 기본적으로 **CardPairGameUI**의 `Enable` 프로퍼티 상태에 따라 게임의 가시성과 동작 여부를 제어할 수 있습니다. - **CardBoard**: 게임 보드의 초기 상태를 설정하는 컴포넌트입니다. - **Car [original] | 게임을 단 한 번만 할 수 있다면 너무나 아쉽겠죠. 게임의 묘미는 다시 하는 것이지요. 언제든지 **게임 다시하기** 버튼을 누르면 카드 짝 맞추기를 할 수 있게 지금까지 만든 월드를 아주 약간만 수정해봅시다. 정말 아주 약간이요! # 게임 시작 부분 다듬기 짝 맞추기 게임을 완성한 여러분 축하합니다! 지금까지 만든 게임을 실행하면 월드에 입장할 때마다 무조건 짝 맞추기 게임을 한번 한 뒤에야 크리에이터가 만든 월드를 둘러볼 수 있습니다. 유저가 게임을 하고 싶을 때만 게임을 할 수 있게 만들려면 어디를 고쳐야할까요? 약간의 힌 [chunk_id] | Guides:945:0

[task] | knowledge_list [title] | 인벤토리 UI 스크립트 작성하기 [category] | Guides [rephrased] | 제시된 문서 스니펫에 포함된 정보만 기반으로 핵심 사실을 정리한 목록은 다음과 같습니다. 1. `HandleOnInventoryModified` 이벤트 핸들러는 `[localplayer]` 실행 공간에서 동작하며, 매개변수로 `OnInventoryModified` 타입의 `event` 객체를 전달받습니다. 2. 이벤트 객체 `event`는 `ItemIndex`와 `ItemCount`라는 프로퍼티를 가지며, 이 값들은 인벤토리 변경 시점의 슬롯 인덱스와 아이템 수량을 나타냅니다. 3. 핸들러 내부에서 `self._T.slotList [original] | [localplayer] HandleOnInventoryModified(OnInventoryModified event) { -- Parameters local ItemIndex = event.ItemIndex local ItemCount = event.ItemCount --------------------------------------------------------- -- 슬롯 리스트가 정상인지 확인 if self._T.slotList == nil then return [chunk_id] | Guides:946:4

[task] | distill [title] | 인벤토리 UI 스크립트 작성하기 [category] | Guides [rephrased] | **이벤트 핸들러: `HandleOnInventoryModified`** * **ExecutionContext**: `[localplayer]` * **Signature**: `HandleOnInventoryModified(OnInventoryModified event)` * **Parameters**: * `event.ItemIndex` (`number`): 변경된 인벤토리 슬롯 인덱스 * `event.ItemCount` (`number`): 해당 슬롯의 아이템 개수 **동작 규칙 및 주의사항** [original] | [localplayer] HandleOnInventoryModified(OnInventoryModified event) { -- Parameters local ItemIndex = event.ItemIndex local ItemCount = event.ItemCount --------------------------------------------------------- -- 슬롯 리스트가 정상인지 확인 if self._T.slotList == nil then return [chunk_id] | Guides:946:4

[task] | extract_knowledge [title] | 메이플스토리 월드 루아 구문 [category] | Guides [rephrased] | # mLua 조건문 및 반복문 구문 ## 개념 설명 메이플스토리 월드(mLua) 스크립트 로직은 조건문과 반복문의 조합으로 구성됩니다. ### 조건문 조건문은 `true` 여부에 따라 실행 흐름을 제어하는 구문입니다. * **if**: 기본 조건문입니다. 조건이 `true` 면 `then`과 `end` 사이의 내용을 실행합니다. * **elseif**: `if`에 추가적으로 붙는 조건문입니다. `if`의 조건이 `false` 면 `elseif`의 조건을 확인합니다. 필수 요소는 아닙니다. * **else**: `if, else [original] | # 학습 과정 소개 메이플스토리 월드에서 루아로 스크립트를 작성할 때 자주 사용하는 구문의 사용법을 알아봅시다. 본 가이드를 보기 전 [메이플스토리 월드 루아 기초](/docs?postId=822)를 학습하는 것을 권장합니다. # 조건문 보통 프로그램의 로직을 살펴보면 반복문과 조건문의 조합으로 이뤄지는 경우가 많습니다. 그만큼 조건문과 반복문은 프로그래밍의 기본이 되는 구문입니다. 먼저 조건문을 살펴봅시다. * **if** * 기본 조건문입니다. 조건이 **true** 면 **then**과 **end** 사이의 내용 [chunk_id] | Guides:944:0

[task] | wikipedia [title] | 인벤토리 UI 스크립트 작성하기 [category] | Guides [rephrased] | # 인벤토리 UI 업데이트: HandleOnInventoryModified `HandleOnInventoryModified` 이벤트 핸들러는 플레이어의 인벤토리 내용이 변경되었을 때 호출되며, UI에 반영된 아이템 정보를 갱신하는 역할을 수행합니다. 이 핸들러는 로컬 플레이어(`localplayer`) 컨텍스트에서 동작합니다. ## 이벤트 파라미터 이벤트 객체(`event`)를 통해 다음과 같은 파라미터를 접근할 수 있습니다. * `event.ItemIndex`: 변경된 아이템이 위치한 인벤토리 슬롯의 인덱스입니다. * [original] | [localplayer] HandleOnInventoryModified(OnInventoryModified event) { -- Parameters local ItemIndex = event.ItemIndex local ItemCount = event.ItemCount --------------------------------------------------------- -- 슬롯 리스트가 정상인지 확인 if self._T.slotList == nil then return [chunk_id] | Guides:946:4

[task] | extract_knowledge [title] | 인벤토리 스크립트 작성하기 [category] | Guides [rephrased] | # 인벤토리 데이터 동기화 및 수정 로직 ## 1. 개념 설명 mLua에서 서버 측 인벤토리 상태를 관리하려면 플레이어의 영구 데이터(Storage)를 로드하고, 로컬 메모리에 캐시한 후, 클라이언트로 변경 사항을 브로드캐스트하는 구조가 필요합니다. 본 절에서는 `UserItemDataSet` 기반의 인벤토리 초기화, 주기적 자동 저장, 그리고 아이템 수량 수정 및 동기화 과정을 다룹니다. 주요 구성 요소는 다음과 같습니다. * **`self._T.inventoryData`**: 서버 메모리에 유지되는 아이템 수량 배열. * [original] | ```lua Property: [Sync] boolean IsInitialized = false Function: [server only] void OnBeginPlay() { -- inventoryData에 UserItemDataSet를 불러옴 self._T.inventoryData = {} for i = 1, _DataService:GetRowCount("UserItemDataSet") do self._T.inventoryData[i] = 0 end local userDataSto [chunk_id] | Guides:942:6

[task] | diverse_qa [title] | 인벤토리 UI 스크립트 작성하기 [category] | Guides [rephrased] | 질문: UIInventory 스크립트에서 인벤토리 초기화 정보를 전달받기 위해 추가해야 하는 이벤트 핸들러의 이름은 무엇인가요? 답변: OnInventoryInitialized 질문: OnInventoryInitialized 이벤트 핸들러의 이벤트 중계자(event relayer)는 무엇으로 설정해야 하나요? 답변: localplayer 질문: 다음 코드에서 AllItemCounts 변수는 어떤 값에서 가져오나요? ```lua local AllItemCounts = event.AllItemCounts ``` 답변: OnInven [original] | **UIInventory** 스크립트에서는 이 정보를 전달받기 위해 이벤트 핸들러에 `OnInventoryInitialized` 이벤트를 추가하겠습니다. 그리고 핸들러 상단의 이벤트 중계자는 **localplayer**로 설정합니다. 보유 중인 아이템을 UI에 보여주기 위해 아래와 같이 작성합니다. ```lua [localplayer] HandleOnInventoryInitialized(OnInventoryInitialized event) { -- Parameters loc [chunk_id] | Guides:946:1

[task] | diverse_qa [title] | 인벤토리 UI 스크립트 작성하기 [category] | Guides [rephrased] | 질문: UIItemSlot 스크립트에서 아이템 보유 정보를 개별 슬롯에 표시하기 위해 추가해야 하는 프로퍼티의 이름과 타입은 무엇인가요? 답변: number 타입의 ItemIndex와 ItemCount 프로퍼티를 추가해야 합니다. 질문: SetData() 함수의 매개 변수는 무엇이며, 기존 매개 변수는 어떻게 처리해야 하나요? 답변: 기존 매개 변수는 삭제하고, 새로 number 타입의 itemIndex와 itemCount 매개 변수를 추가해야 합니다. 질문: SetData() 함수 내에서 아이템 아이콘을 설정하기 위해 어떤 데 [original] | # UIItemSlot 수정 캐릭터의 아이템 보유 정보를 토대로 개별 슬롯에 아이템을 보여주기 위해 **UIItemSlot** 스크립트를 수정하겠습니다. 1. **UIItemSlot** 스크립트를 열고 기존의 프로퍼티는 모두 제거합니다. 그리고 아래와 같이 **number** 타입의 **ItemIndex**, **ItemCount** 프로퍼티를 추가합니다. ```lua Property: [None] number ItemIndex = 0 [None] number ItemCount = 0 [chunk_id] | Guides:946:2

[task] | knowledge_list [title] | 인벤토리 UI 스크립트 작성하기 [category] | Guides [rephrased] | 제시된 문서에 명시된 내용만 바탕으로 핵심 사실을 추출하여 정리한 목록입니다. 1. **UIItemSlot** 스크립트는 캐릭터의 아이템 보유 정보를 토대로 개별 슬롯에 아이템을 표시하기 위해 수정되며, 기존의 프로퍼티는 모두 제거되어야 합니다. 2. **UIItemSlot** 스크립트에는 `[None]` 동기화 속성을 가진 `number` 타입의 `ItemIndex` 프로퍼티(기본값 0)와 `ItemCount` 프로퍼티(기본값 0)가 추가됩니다. 3. `SetData` 메서드는 `number` 타입의 매개변수 `itemIndex [original] | # UIItemSlot 수정 캐릭터의 아이템 보유 정보를 토대로 개별 슬롯에 아이템을 보여주기 위해 **UIItemSlot** 스크립트를 수정하겠습니다. 1. **UIItemSlot** 스크립트를 열고 기존의 프로퍼티는 모두 제거합니다. 그리고 아래와 같이 **number** 타입의 **ItemIndex**, **ItemCount** 프로퍼티를 추가합니다. ```lua Property: [None] number ItemIndex = 0 [None] number ItemCount = 0 [chunk_id] | Guides:946:2

[task] | extract_knowledge [title] | 인벤토리 UI 스크립트 작성하기 [category] | Guides [rephrased] | # 인벤토리 UI 스크립트 작성 ## 개념 설명 **UIInventory** 스크립트는 로컬 플레이어가 소유한 아이템 정보를 수신하여 UI에 반영하는 역할을 합니다. 이 과정은 두 가지 핵심 이벤트 기반으로 동작합니다. 1. **초기화**: 게임 시작 또는 인벤토리 초기화 시 전체 아이템 보유 수량을 한 번에 전달받아 UI에 배치합니다. 2. **변경**: 몬스터 처치 등으로 아이템이 획득되거나 소모될 때 변경된 특정 슬롯의 아이템 개수를 실시간으로 전달받아 UI를 갱신합니다. 두 이벤트 핸들러 모두 이벤트 중계자(Rela [original] | **UIInventory** 스크립트에서는 이 정보를 전달받기 위해 이벤트 핸들러에 `OnInventoryInitialized` 이벤트를 추가하겠습니다. 그리고 핸들러 상단의 이벤트 중계자는 **localplayer**로 설정합니다. 보유 중인 아이템을 UI에 보여주기 위해 아래와 같이 작성합니다. ```lua [localplayer] HandleOnInventoryInitialized(OnInventoryInitialized event) { -- Parameters loc [chunk_id] | Guides:946:1

[task] | diverse_qa [title] | 인벤토리 UI 스크립트 작성하기 [category] | Guides [rephrased] | 질문: `HandleOnInventoryModified` 이벤트 핸들러는 어떤 이벤트에 반응하나요? 답변: `OnInventoryModified` 이벤트에 반응합니다. 질문: `HandleOnInventoryModified` 함수 내에서 `event.ItemIndex`와 `event.ItemCount`는 무엇을 의미하나요? 답변: `event.ItemIndex`는 수정된 아이템의 인덱스(슬롯 위치)를, `event.ItemCount`는 해당 슬롯의 아이템 개수를 나타냅니다. 질문: 아래 코드가 수행하는 주요 로직은 무엇인가요? [original] | [localplayer] HandleOnInventoryModified(OnInventoryModified event) { -- Parameters local ItemIndex = event.ItemIndex local ItemCount = event.ItemCount --------------------------------------------------------- -- 슬롯 리스트가 정상인지 확인 if self._T.slotList == nil then return [chunk_id] | Guides:946:4

[task] | extract_knowledge [title] | 인벤토리 UI 스크립트 작성하기 [category] | Guides [rephrased] | # 인벤토리 UI 스크립트 작성: 슬롯 초기화 및 생성 본 절에서는 `UIInventory` 스크립트를 수정하여 게임 시작 시 아이템 슬롯을 미리 생성하고, 개별 슬롯 엔티티를 스폰하여 데이터를 초기화하는 방법을 다룹니다. ## 개념 설명 인벤토리 UI는 아이템을 표시하기 위한 컨테이너 역할을 수행합니다. `UIInventory` 스크립트는 `scrollView`을 부모로 하여 아이템 슬롯(`UIItemSlot`) 엔티티들을 동적으로 생성하고 관리합니다. 1. **슬롯 리스트 관리**: `self._T.slotList` 테 [original] | # 학습 과정 소개 > 본 가이드는 아래의 순서로 이어지는 과정입니다. > 1편. [몬스터를 스폰해보자](/docs?postId=204) > 2편. [몬스터 드롭 아이템과 인벤토리 UI 만들기](/docs?postId=943) > 3편. [인벤토리 스크립트 작성하기](/docs?postId=942) > **▶ 4편.** [**인벤토리 UI 스크립트 작성하기**](/docs?postId=946) > 5편. [아이템 스크립트 작성하기](/docs?postId=947) 지난 시간에 이어 이번 과정에서는 인벤토리 UI 스크립트를 작성해 [chunk_id] | Guides:946:0

[task] | wikipedia [title] | 인벤토리 UI 스크립트 작성하기 [category] | Guides [rephrased] | **UIItemSlot 스크립트 수정** 캐릭터의 아이템 보유 정보를 바탕으로 개별 슬롯에 아이템을 표시하기 위해 `UIItemSlot` 스크립트를 수정해야 합니다. 먼저 `UIItemSlot` 스크립트 파일을 열고 기존에 정의되어 있던 모든 프로퍼티를 제거한 뒤, `number` 타입의 `ItemIndex`와 `ItemCount` 프로퍼티를 추가합니다. 두 프로퍼티 모두 동기화(Sync) 설정 없이 `[None]`으로 정의되며, 기본값은 0입니다. ```lua Property: [None] number ItemIndex = 0 [original] | # UIItemSlot 수정 캐릭터의 아이템 보유 정보를 토대로 개별 슬롯에 아이템을 보여주기 위해 **UIItemSlot** 스크립트를 수정하겠습니다. 1. **UIItemSlot** 스크립트를 열고 기존의 프로퍼티는 모두 제거합니다. 그리고 아래와 같이 **number** 타입의 **ItemIndex**, **ItemCount** 프로퍼티를 추가합니다. ```lua Property: [None] number ItemIndex = 0 [None] number ItemCount = 0 [chunk_id] | Guides:946:2

[task] | diverse_qa [title] | 인벤토리 UI 스크립트 작성하기 [category] | Guides [rephrased] | 질문: `OnBeginPlay` 메서드에서 `self.itemUI` 변수에 저장되는 엔티티의 경로는 어떻게 구성되나요? 답변: `self.Entity.Path`에 "/InventoryPanel/Inventory_ScrollView/item_slot"을 연결하여 생성된 경로입니다. 질문: `OnBeginPlay` 메서드 실행 시 `itemUI` 엔티티의 활성화 상태(`Enable`)는 어떻게 설정되나요? 답변: `self.itemUI:SetEnable(false)`를 호출하여 비활성화 상태로 설정됩니다. 질문: 인벤토리 열기 버튼 [original] | ```lua Property: [None] Entity itemUI = nil [None] Entity scrollView = nil [None] SyncTable<string, Entity> SlotItems [None] string inventoryBtnPath = "/ui/DefaultGroup/RPGButtons/btn_inventory" Method: [client only] void OnBeginPlay { self.itemUI =_EntityService:GetEntityByPath(self.Entity [chunk_id] | Guides:946:3

[task] | distill [title] | 아이템 스크립트 작성하기 [category] | Guides [rephrased] | **몬스터 사냥과 아이템 획득: 아이템 스크립트 작성** 아이템 엔티티와 플레이어의 충돌을 감지하여 인벤토리에 아이템을 추가하고 아이템을 소모하는 로직입니다. **핵심 동작 규칙** * `HandleTriggerEnterEvent` 이벤트 핸들러를 사용하여 충돌 감지. * `event.TriggerBodyEntity`로 충돌한 엔티티를 가져옴. * `LiteInventory` 컴포넌트를 통해 인벤토리 접근 (없으면 함수 종료). * `ModifyItem(ItemIndex, Count)` 메서드로 아이템 수량 변경. [original] | ```lua [server only] [self] HandleTriggerEnterEvent(TriggerEnterEvent event) { -- Parameters local TriggerBodyEntity = event.TriggerBodyEntity -------------------------------------------------------- --아이템 엔티티와 충돌한 엔티티의 인벤토리를 받고, 인벤토리가 없으면 리턴 local [chunk_id] | Guides:947:1

[task] | extract_knowledge [title] | 인벤토리 UI 스크립트 작성하기 [category] | Guides [rephrased] | # 인벤토리 변경 이벤트 처리 및 UI 동기화 ## 개념 설명 `OnInventoryModified` 이벤트 핸들러는 로컬 플레이어의 인벤토리 내용이 변경될 때 트리거되는 함수입니다. 이 이벤트를 통해 변경된 아이템의 슬롯 인덱스(`ItemIndex`)와 현재 보유 수량(`ItemCount`)을 획득하여, 해당 인벤토리 슬롯에 대응하는 UI 요소를 생성하거나 갱신할 수 있습니다. 이 프로세스는 서버 또는 클라이언트에서 아이템 획득/소모가 발생했을 때 UI가 실시간으로 반영되도록 보장합니다. ## API 사용법 이벤트 핸들러 `H [original] | [localplayer] HandleOnInventoryModified(OnInventoryModified event) { -- Parameters local ItemIndex = event.ItemIndex local ItemCount = event.ItemCount --------------------------------------------------------- -- 슬롯 리스트가 정상인지 확인 if self._T.slotList == nil then return [chunk_id] | Guides:946:4

[task] | distill [title] | 인벤토리 UI 스크립트 작성하기 [category] | Guides [rephrased] | ## UIItemSlot 스크립트 **Property:** - `ItemIndex` (number, [None]): 아이템 인덱스. 0이면 비활성화. - `ItemCount` (number, [None]): 아이템 수량. **Method:** 1. `void SetData(number itemIndex, number itemCount)` - 슬롯의 아이템 인덱스와 수량을 설정합니다. - `img_slot` 자식 엔티티의 `SpriteGUIRendererComponent.ImageRUID`를 `_DataService: [original] | ## UIItemSlot 스크립트 ```lua Property: [None] number ItemIndex = 0 [None] number ItemCount = 0 Method: void SetData(number itemIndex, number itemCount) { -- 슬롯에 아이템 정보를 설정함 self.ItemIndex = itemIndex self.ItemCount = itemCount local imageEntity = self.Entity:GetChildByName("img_sl [chunk_id] | Guides:946:5

[task] | knowledge_list [title] | 아이템 스크립트 작성하기 [category] | Guides [rephrased] | 제시된 문서 내용만을 바탕으로 추출한 핵심 사실 목록입니다. 1. `HandleTriggerEnterEvent`는 `[server only]` 및 `[self]` 속성을 가진 이벤트 핸들러로, 매개변수로 `TriggerEnterEvent` 타입의 `event`를 받습니다. 2. 이벤트 객체 `event`의 `TriggerBodyEntity` 프로퍼티를 통해 트리거와 충돌한 엔티티에 접근할 수 있습니다. 3. 충돌한 엔티티의 `LiteInventory` 프로퍼티를 통해 인벤토리 객체를 가져올 수 있으며, 해당 값이 `nil`인 경우 [original] | ```lua [server only] [self] HandleTriggerEnterEvent(TriggerEnterEvent event) { -- Parameters local TriggerBodyEntity = event.TriggerBodyEntity -------------------------------------------------------- --아이템 엔티티와 충돌한 엔티티의 인벤토리를 받고, 인벤토리가 없으면 리턴 local [chunk_id] | Guides:947:1

[task] | distill [title] | 아이템 스크립트 작성하기 [category] | Guides [rephrased] | # 아이템 스크립트 작성 (5편) 몬스터 드롭 아이템의 정보 설정, 캐릭터 접촉 시 인벤토리 등록, 드롭 연출을 처리합니다. ## 1. 준비 및 컴포넌트 구성 1. **Preset List**에서 아이템을 선택하여 워크스페이스에 추가하고 이름을 `Model_Item`으로 변경합니다. 2. `Item` 스크립트 컴포넌트를 생성하여 `Model_Item` 엔티티에 추가합니다. 3. `Model_Item`에 `TriggerComponent`를 추가합니다. ## 2. Item 스크립트 구현 ### Property 동기화되는 아이템 [original] | # 학습 과정 소개 > 본 가이드는 아래의 순서로 이어지는 과정입니다. > 1편. [몬스터를 스폰해보자](/docs?postId=204) > 2편. [몬스터 드롭 아이템과 인벤토리 UI 만들기](/docs?postId=943) > 3편. [인벤토리 스크립트 작성하기](/docs?postId=942) > 4편. [인벤토리 UI 스크립트 작성하기](/docs?postId=946) > **▶ 5편.** [**아이템 스크립트 작성하기**](/docs?postId=947) 지난 시간에 이어 이번 과정에서는 몬스터가 드롭할 아이템 관련 스 [chunk_id] | Guides:947:0

[task] | knowledge_list [title] | 인벤토리 UI 스크립트 작성하기 [category] | Guides [rephrased] | 주어진 문서에 포함된 핵심 사실은 다음과 같습니다. 1. `itemUI` 프로퍼티는 `[None]` 동기화 속성을 가진 `Entity` 타입이며, 초기값은 `nil`입니다. 2. `scrollView` 프로퍼티는 `[None]` 동기화 속성을 가진 `Entity` 타입이며, 초기값은 `nil`입니다. 3. `SlotItems` 프로퍼티는 `[None]` 동기화 속성을 가진 `SyncTable<string, Entity>` 타입입니다. 4. `inventoryBtnPath` 프로퍼티는 `[None]` 동기화 속성을 가진 `strin [original] | ```lua Property: [None] Entity itemUI = nil [None] Entity scrollView = nil [None] SyncTable<string, Entity> SlotItems [None] string inventoryBtnPath = "/ui/DefaultGroup/RPGButtons/btn_inventory" Method: [client only] void OnBeginPlay { self.itemUI =_EntityService:GetEntityByPath(self.Entity [chunk_id] | Guides:946:3

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