← 목록

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

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

[task] | extract_knowledge [title] | 메이플스토리 월드 루아 기초 [category] | Guides [rephrased] | # mLua 연산자 및 기본 문법 본 절에서는 mLua(Lua 5.3 기반)에서 사용되는 산술, 관계, 논리, 기타 연산자 및 함수, 주석의 사용법을 다룹니다. ## 1. 개념 설명 mLua는 스크립트 컴포넌트 내에서 로직을 구현하기 위해 표준 Lua 연산자를 지원합니다. * **산술 연산자**: 숫자 간의 사칙연산, 나눗셈의 몫/나머지, 지수 연산을 수행합니다. * **관계 연산자**: 두 값의 크고 작음 또는 동등성을 비교하여 `boolean` 타입의 결과를 반환합니다. * **논리 연산자**: 참(true) [original] | 산술 연산을 할 때 사용하는 연산자입니다. | 연산자 | 설명 | | --- | --- | | `+` | 더하기 | | `-` | 빼기 | | `*` | 곱하기 | | `/` | 나누기 | | `//` | 나눈 후 몫만 취함 | | `%` | 나눈 후 나머지만 취함 | | `^` | 지수 | 예를 들어 아래와 같이 입력하고 **log**를 출력하면 주석의 값이 출력됩니다. ```lua log(1 + 1) -- 2 log(1 - 1) -- 0 log(5 * 5) -- 25 log(13 / 5) -- 2.6 log(13 // 5) [chunk_id] | Guides:822:3

[task] | extract_knowledge [title] | 점수 만들기 [category] | Guides [rephrased] | # 카드 짝 맞추기 점수 시스템 구현 본 절에서는 카드 짝 맞추기 게임에서 매칭 성공 시 점수를 증가시키고, 해당 값을 UI에 실시간으로 반영하는 로직을 mLua를 통해 구현하는 방법을 설명합니다. ## 1. 개념 설명 점수 시스템은 두 개의 핵심 컴포넌트 간의 통신을 기반으로 동작합니다. 1. **PlayerStats 컴포넌트**: 플레이어의 상태, 구체적으로는 점수(`Score`)를 저장하고 관리하는 역할을 합니다. 점수 증가 로직(`AddScore`)을 포함하며, `DefaultPlayer` 엔티티에 부착됩니다. 2. [original] | # 점수 만들기 카드 짝 맞출 때마다 일정한 점수가 증가하게 만들어봅시다. 1. **PlayerStats** 컴포넌트를 **DefalutPlayer**에 추가합니다. **PlayerStats** 컴포넌트는 점수 증가를 담당합니다. 2. **PlayerStats** 컴포넌트에 number 타입 프로퍼티를 아래와 같이 추가합니다. ```lua Property: [None] number Score = 0 ``` 3. 초깃값이 0인 **Score** 프로퍼티에 점수가 더해질 수 있도록 `A [chunk_id] | Guides:823:0

[task] | diverse_qa [title] | 점수 만들기 [category] | Guides [rephrased] | 질문: `Card Spawn Root` 속성의 경로는 무엇이며, 이 속성은 어떤 타입의 값을 가지나요? 답변: `/ui/CardPairGameUI/UI_Board/UI_Blocks/UI_Block_Group` 경로이며, `Entity` 타입의 값을 가집니다. 질문: `OnUpdate` 메서드는 어떤 실행 공간에서 동작하며, 매 프레임마다 어떤 메서드를 호출하나요? 답변: `[client only]` 실행 공간에서 동작하며, `self:UpdateText()` 메서드를 호출합니다. 질문: `UpdateText` 메서드에서 남은 시 [original] | ```lua Property: [None] Entity CardSpawnRoot = /ui/CardPairGameUI/UI_Board/UI_Blocks/UI_Block_Group [None] Card SelectedCard = nil [None] Entity TimeText = /ui/CardPairGameUI/UI_Board/Background/Title/Timer_Background/UI_Time/UI_Time_Text [None] Entity ScoreText = /ui/CardPairGameUI/UI_Board/Backgro [chunk_id] | Guides:823:1

[task] | knowledge_list [title] | 점수 만들기 [category] | Guides [rephrased] | 제시된 문서의 내용을 바탕으로 핵심 사실을 추출한 목록입니다. 1. `CardSpawnRoot` 프로퍼티는 `[None]` 동기화 속성을 가지며, `/ui/CardPairGameUI/UI_Board/UI_Blocks/UI_Block_Group` 경로를 가지는 `Entity` 타입의 값으로 초기화됩니다. 2. `SelectedCard` 프로퍼티는 `[None]` 동기화 속성을 가지며, `Card` 타입으로 `nil` 값으로 초기화됩니다. 3. `TimeText` 프로퍼티는 `[None]` 동기화 속성을 가지며, `/ui/CardPa [original] | ```lua Property: [None] Entity CardSpawnRoot = /ui/CardPairGameUI/UI_Board/UI_Blocks/UI_Block_Group [None] Card SelectedCard = nil [None] Entity TimeText = /ui/CardPairGameUI/UI_Board/Background/Title/Timer_Background/UI_Time/UI_Time_Text [None] Entity ScoreText = /ui/CardPairGameUI/UI_Board/Backgro [chunk_id] | Guides:823:1

[task] | distill [title] | 어노테이션 활용하기 [category] | Guides [rephrased] | # Function Type Annotation `---@type` 주석을 사용해 함수의 매개변수 및 반환값 타입을 명시적으로 지정합니다. ```lua ---@type function(param_name: PARAM_TYPE):RETURN_TYPE ``` ## 사용 규칙 1. **매개변수**: `param_name: PARAM_TYPE` 형식으로 나열. 2. **반환값**: `:RETURN_TYPE` 형식으로 지정. 3. **여러 값 반환**: 쉼표(,)로 구분. 4. **복합 할당**: 함수와 다른 값을 동시에 할당할 때는 [original] | Function은 아래와 같은 문법으로 타입을 지정합니다. ```lua ---@type function(param_name: PARAM_TYPE):RETURN_TYPE ``` ##### 사용 예시 ```lua ---@type function() local testFunction = function() end ``` ```lua ---@type function(testParamA:string, testParamB:Entity) local testFunction = function(testParamA, testParamB) end [chunk_id] | Guides:824:1

[task] | distill [title] | 어노테이션 활용하기 [category] | Guides [rephrased] | # 스크립트 어노테이션 활용 스크립트 어시스트의 타입 추론을 활성화하기 위해 함수 정의부에 **Param Annotation**과 **Return Annotation**을 사용합니다. ## Param Annotation 함수 매개변수의 타입을 지정합니다. **문법** ```lua ---@param param_name PARAM_TYPE ``` **예시** ```lua ---@param testParamA Entity ---@param testParamB integer local function TestFunction(test [original] | **Param Annotation**을 사용해 대상이 되는 함수의 매개 변수 타입을 지정하여 스크립트 어시스트의 도움을 받을 수 있습니다. **Param Annotation**은 함수 정의문에 사용합니다. 아래와 같은 문법으로 **Param Annotation**을 사용합니다. ```lua ---@param param_name PARAM_TYPE ``` ##### 사용 예시 ```lua ---@param testParamA Entity local function TestFunction(testParamA) end ``` ``` [chunk_id] | Guides:824:2

[task] | knowledge_list [title] | 어노테이션 활용하기 [category] | Guides [rephrased] | 제공된 문서에는 요청하신 `Property:`, `Method:`, `Event Handler:` 블록 문법이나 `self.Entity`, `_UserService`와 같은 mLua 컴포넌트/서비스 API의 실제 실행 로직이 포함되어 있지 않습니다. 해당 문서는 **mLua 편집기 환경에서 사용할 수 있는 LSP(Lua Language Server)용 Type Annotation(타입 주석) 문법**에 관한 가이드입니다. 따라서 문서에 명시된 사실만 바탕으로, 타입 주석 문법의 규칙과 효과를 다음과 같이 정리합니다. 1. mLu [original] | Function은 아래와 같은 문법으로 타입을 지정합니다. ```lua ---@type function(param_name: PARAM_TYPE):RETURN_TYPE ``` ##### 사용 예시 ```lua ---@type function() local testFunction = function() end ``` ```lua ---@type function(testParamA:string, testParamB:Entity) local testFunction = function(testParamA, testParamB) end [chunk_id] | Guides:824:1

[task] | extract_knowledge [title] | 점수 만들기 [category] | Guides [rephrased] | # 카드 엔티티 관리 및 상태 제어 이 절에서는 카드 짝 맞추기 게임에서 카드 엔티티의 생성, 선택/해제, 소멸, 그리고 게임 종료 조건 판별을 위한 mLua 메서드들을 다룹니다. 모든 메서드는 클라이언트 측에서만 실행됩니다. ## 1. 카드 엔티티 초기화 및 소멸 ### 개념 게임 리셋 또는 라운드가 시작될 때, 이전에 생성된 카드 엔티티들을 모두 제거하여 초기 상태로 복귀해야 합니다. 이는 `CardSpawnRoot`라는 부모 엔티티 아래에 생성된 자식 엔티티들을 순회하며 파괴하는 방식으로 처리됩니다. ### API 사용 [original] | [client Only] void ClearCardEntities () { local cardEntities = self.CardSpawnRoot.Children for i = 1, #cardEntities do cardEntities[i]:Destroy() end } [client only] void SelectCardCard (Card card) { self.SelectedCard = card card:CardOn() } [client only] void [chunk_id] | Guides:823:2

[task] | distill [title] | 점수 만들기 [category] | Guides [rephrased] | # CardPairGameLogic `CardPairGameLogic` 컴포넌트는 카드 짝 맞추기 게임의 클라이언트 측 로직(시간 제한, 카드 선택/매칭, 점수 처리)을 담당합니다. ## Property * `CardPairGameUI`: `Entity` (`/ui/CardPairGameUI`) - UI 엔티티 참조 * `PlayTime`: `number` (기본값 60) - 게임 전체 시간 * `RemainingTime`: `number` (기본값 0) - 남은 시간 ## Method ### `OnBeginPla [original] | #### CardPairGameLogic 로직 ```lua Property: [None] Entity CardPairGameUI = /ui/CardPairGameUI [None] number PlayTime = 60 [None] number RemainingTime = 0 Method: [client only] void OnBeginPlay() { self:StartGame() } [client only] void StartGame() { self.CardPairGameUI.Enable = true [chunk_id] | Guides:823:3

[task] | knowledge_list [title] | 점수 만들기 [category] | Guides [rephrased] | 제시된 `CardPairGameLogic` 스크립트 코드를 기반으로 추출한 핵심 사실 목록은 다음과 같습니다. 1. `CardPairGameLogic` 컴포넌트의 `CardPairGameUI` 프로퍼티는 `[None]` 동기화 속성을 가지며 `/ui/CardPairGameUI` 경로의 `Entity` 타입 값을 참조합니다. 2. `CardPairGameLogic` 컴포넌트의 `PlayTime` 프로퍼티는 `[None]` 동기화 속성을 가지며 초기값이 60인 `number` 타입 변수입니다. 3. `CardPairGameLogic` [original] | #### CardPairGameLogic 로직 ```lua Property: [None] Entity CardPairGameUI = /ui/CardPairGameUI [None] number PlayTime = 60 [None] number RemainingTime = 0 Method: [client only] void OnBeginPlay() { self:StartGame() } [client only] void StartGame() { self.CardPairGameUI.Enable = true [chunk_id] | Guides:823:3

[task] | knowledge_list [title] | 어노테이션 활용하기 [category] | Guides [rephrased] | 제시된 문서에 포함된 핵심 사실은 다음과 같습니다. 1. `Param Annotation`은 대상 함수의 매개 변수 타입을 지정하여 스크립트 어시스트의 도움을 받기 위해 사용되며, 함수 정의문에 적용합니다. 2. `Param Annotation`의 문법은 `---@param param_name PARAM_TYPE` 형태로 작성됩니다. 3. `Param Annotation`은 단일 매개 변수(예: `---@param testParamA Entity`)와 복수 매개 변수(예: `---@param testParamA Entity`, ` [original] | **Param Annotation**을 사용해 대상이 되는 함수의 매개 변수 타입을 지정하여 스크립트 어시스트의 도움을 받을 수 있습니다. **Param Annotation**은 함수 정의문에 사용합니다. 아래와 같은 문법으로 **Param Annotation**을 사용합니다. ```lua ---@param param_name PARAM_TYPE ``` ##### 사용 예시 ```lua ---@param testParamA Entity local function TestFunction(testParamA) end ``` ``` [chunk_id] | Guides:824:2

[task] | diverse_qa [title] | 어노테이션 활용하기 [category] | Guides [rephrased] | 질문: mLua에서 Function의 타입을 지정하기 위해 사용하는 문법은 무엇인가요? 답변: Function은 `---@type function(param_name: PARAM_TYPE):RETURN_TYPE` 문법으로 타입을 지정합니다. 질문: 매개 변수가 없고 반환 타입도 없는 함수에 대한 타입 어노테이션 예시를 코드로 작성하세요. 답변: ```lua ---@type function() local testFunction = function() end ``` 질문: 매개 변수로 `string` 타입의 `testParamA`와 [original] | Function은 아래와 같은 문법으로 타입을 지정합니다. ```lua ---@type function(param_name: PARAM_TYPE):RETURN_TYPE ``` ##### 사용 예시 ```lua ---@type function() local testFunction = function() end ``` ```lua ---@type function(testParamA:string, testParamB:Entity) local testFunction = function(testParamA, testParamB) end [chunk_id] | Guides:824:1

[task] | diverse_qa [title] | 점수 만들기 [category] | Guides [rephrased] | 질문: `CardPairGameLogic` 스크립트 컴포넌트의 `PlayTime` 속성 초기값은 얼마인가요? 답변: `CardPairGameLogic` 스크립트 컴포넌트의 `PlayTime` 속성 초기값은 60입니다. 질문: `OnBeginPlay` 메서드가 실행될 때 어떤 함수가 호출되나요? 답변: `OnBeginPlay` 메서드가 실행될 때 `self:StartGame()` 함수가 호출됩니다. 질문: `StartGame` 메서드에서 `CardPairGameUI`의 `Enable` 속성은 어떤 값으로 설정되나요? 답변: `St [original] | #### CardPairGameLogic 로직 ```lua Property: [None] Entity CardPairGameUI = /ui/CardPairGameUI [None] number PlayTime = 60 [None] number RemainingTime = 0 Method: [client only] void OnBeginPlay() { self:StartGame() } [client only] void StartGame() { self.CardPairGameUI.Enable = true [chunk_id] | Guides:823:3

[task] | wikipedia [title] | 점수 만들기 [category] | Guides [rephrased] | # 카드 짝 맞추기 점수 만들기 본 가이드는 메이플스토리 월드의 카드 짝 맞추기 게임에서 점수 및 시간 표시를 처리하고, 카드 덱을 생성 및 배치하는 스크립트 컴포넌트의 구현 방식을 다룹니다. 해당 컴포넌트는 UI 요소와의 연동, 로컬 플레이어의 점수 조회, 그리고 데이터 기반의 카드 무작위 정렬 로직을 포함합니다. ## 프로퍼티 구성 컴포넌트는 게임 UI 및 상태 관리를 위한 네 가지 `[None]` 동기화 속성을 정의합니다. `CardSpawnRoot`는 카드가 생성될 부모 엔티티로, 경로는 `/ui/CardPairGame [original] | ```lua Property: [None] Entity CardSpawnRoot = /ui/CardPairGameUI/UI_Board/UI_Blocks/UI_Block_Group [None] Card SelectedCard = nil [None] Entity TimeText = /ui/CardPairGameUI/UI_Board/Background/Title/Timer_Background/UI_Time/UI_Time_Text [None] Entity ScoreText = /ui/CardPairGameUI/UI_Board/Backgro [chunk_id] | Guides:823:1

[task] | extract_knowledge [title] | 어노테이션 활용하기 [category] | Guides [rephrased] | # 어노테이션(Type Annotation) 활용 ## 1. 개념 설명 **어노테이션**(Annotation)은 코드에 추가하는 메타데이터로, 스크립트 에디터의 **퀵 인포**, **시그니처 헬퍼**, **코드 컴플리션** 등 스크립트 어시스트 기능을 활성화하는 데 사용됩니다. 일반적인 `--` 주석은 참고 역할만 하는 반면, `---@` 형태로 작성된 어노테이션은 에디터가 코드 구조를 분석하여 도움을 줄 수 있도록 합니다. 이 중 **Type Annotation**은 변수에 타입을 명시적으로 지정하여 에디터가 값의 종류를 파 [original] | # 학습 과정 소개 **어노테이션**(Annotation)은 코드에 추가하여 사용하는 일종의 메타데이터입니다. 스크립트에 `--` 기호를 사용한 주석(Comment)은 스크립트 작성에 참고 역할만 하는 반면, `---@` 형태로 **어노테이션**을 작성하면 **퀵 인포**나 **시그니처 헬퍼**, **코드 컴플리션** 등 스크립트 어시스트의 도움을 받을 수 있습니다. 본 과정을 통해 메이플스토리 월드에서 제공하는 **어노테이션**의 종류와 활용 방법을 알아봅시다. > **더 알아보기** > 퀵 인포, 시그니처 헬퍼, 코드 컴플리 [chunk_id] | Guides:824:0

[task] | diverse_qa [title] | 어노테이션 활용하기 [category] | Guides [rephrased] | 질문: Param Annotation은 주로 어떤 목적으로 사용됩니까? 답변: 대상이 되는 함수의 매개 변수 타입을 지정하여 스크립트 어시스트의 도움을 받기 위해 사용합니다. 질문: Param Annotation은 함수의 어디에 사용됩니까? 답변: 함수 정의문에 사용합니다. 질문: Param Annotation의 기본 문법은 어떻게 되는가요? 답변: `---@param param_name PARAM_TYPE` 형식으로 작성합니다. 질문: 다음 코드의 `testParamA` 매개변수의 타입은 무엇인가요? ```lua ---@pa [original] | **Param Annotation**을 사용해 대상이 되는 함수의 매개 변수 타입을 지정하여 스크립트 어시스트의 도움을 받을 수 있습니다. **Param Annotation**은 함수 정의문에 사용합니다. 아래와 같은 문법으로 **Param Annotation**을 사용합니다. ```lua ---@param param_name PARAM_TYPE ``` ##### 사용 예시 ```lua ---@param testParamA Entity local function TestFunction(testParamA) end ``` ``` [chunk_id] | Guides:824:2

[task] | wikipedia [title] | 점수 만들기 [category] | Guides [rephrased] | # 카드 짝 맞추기 게임 로직 구현 본 문서는 메이플스토리 월드(MapleStory Worlds)의 mLua 스크립트 언어를 사용하여 카드 짝 맞추기 게임의 핵심 로직을 구현하는 방법을 다룹니다. 해당 로직은 `CardPairGameLogic`이라는 스크립트 컴포넌트를 통해 제공되며, 게임의 시작, 시간 관리, 카드 선택 및 매칭 처리, 그리고 게임 종료 기능을 포함합니다. ## 컴포넌트 구성 및 속성 `CardPairGameLogic` 컴포넌트는 게임 흐름을 제어하기 위해 다음 속성(Property)을 정의합니다. * [original] | #### CardPairGameLogic 로직 ```lua Property: [None] Entity CardPairGameUI = /ui/CardPairGameUI [None] number PlayTime = 60 [None] number RemainingTime = 0 Method: [client only] void OnBeginPlay() { self:StartGame() } [client only] void StartGame() { self.CardPairGameUI.Enable = true [chunk_id] | Guides:823:3

[task] | wikipedia [title] | 어노테이션 활용하기 [category] | Guides [rephrased] | # 어노테이션 활용하기 **어노테이션**(Annotation)은 코드에 추가하여 사용하는 일종의 메타데이터입니다. 스크립트 작성 시 `--` 기호를 사용하는 주석(Comment)은 코드 작성에 대한 참고 역할만 수행하는 반면, `---@` 형태로 작성되는 **어노테이션**은 퀵 인포(Quick Info), 시그니처 헬퍼(Signature Helper), 코드 컴플리션(Code Completion) 등 스크립트 어시스트 기능을 활성화하여 개발 편의성을 높여줍니다. 본 가이드에서는 메이플스토리 월드에서 제공하는 어노테이션의 종류와 활 [original] | # 학습 과정 소개 **어노테이션**(Annotation)은 코드에 추가하여 사용하는 일종의 메타데이터입니다. 스크립트에 `--` 기호를 사용한 주석(Comment)은 스크립트 작성에 참고 역할만 하는 반면, `---@` 형태로 **어노테이션**을 작성하면 **퀵 인포**나 **시그니처 헬퍼**, **코드 컴플리션** 등 스크립트 어시스트의 도움을 받을 수 있습니다. 본 과정을 통해 메이플스토리 월드에서 제공하는 **어노테이션**의 종류와 활용 방법을 알아봅시다. > **더 알아보기** > 퀵 인포, 시그니처 헬퍼, 코드 컴플리 [chunk_id] | Guides:824:0

[task] | diverse_qa [title] | 어노테이션 활용하기 [category] | Guides [rephrased] | 질문: 어노테이션(Annotation)은 무엇이며, 일반 주석(Comment)과 어떤 차이가 있나요? 답변: 어노테이션은 코드에 추가하는 일종의 메타데이터로, `---@` 형태로 작성됩니다. `--` 기호를 사용하는 일반 주석이 스크립트 작성에 참고 역할만 하는 반면, 어노테이션은 퀵 인포, 시그니처 헬퍼, 코드 컴플리션 등 스크립트 어시스트의 도움을 받을 수 있게 합니다. 질문: Type Annotation은 주로 어디에 사용하나요? 답변: Type Annotation은 변수의 타입을 명시적으로 지정하기 위해 할당문에 사용됩니다 [original] | # 학습 과정 소개 **어노테이션**(Annotation)은 코드에 추가하여 사용하는 일종의 메타데이터입니다. 스크립트에 `--` 기호를 사용한 주석(Comment)은 스크립트 작성에 참고 역할만 하는 반면, `---@` 형태로 **어노테이션**을 작성하면 **퀵 인포**나 **시그니처 헬퍼**, **코드 컴플리션** 등 스크립트 어시스트의 도움을 받을 수 있습니다. 본 과정을 통해 메이플스토리 월드에서 제공하는 **어노테이션**의 종류와 활용 방법을 알아봅시다. > **더 알아보기** > 퀵 인포, 시그니처 헬퍼, 코드 컴플리 [chunk_id] | Guides:824:0

[task] | wikipedia [title] | 어노테이션 활용하기 [category] | Guides [rephrased] | # 스크립트 어노테이션 활용하기 메이플스토리 월드의 스크립트 언어 mLua(Lua)에서는 **Param Annotation**과 **Return Annotation**이라는 주석 기반 어노테이션을 사용하여 함수의 매개 변수와 반환 값의 타입을 명시적으로 지정할 수 있습니다. 이 어노테이션들은 코드 실행 시점에 영향을 주지 않으며, 개발 환경의 스크립트 어시스트(IDE 또는 에디터 플러그인)가 정적 타입 추론을 수행하고 개발자에게 더 정확한 자동 완성 및 오류 감지 기능을 제공하도록 돕는 역할을 합니다. ## Param Annot [original] | **Param Annotation**을 사용해 대상이 되는 함수의 매개 변수 타입을 지정하여 스크립트 어시스트의 도움을 받을 수 있습니다. **Param Annotation**은 함수 정의문에 사용합니다. 아래와 같은 문법으로 **Param Annotation**을 사용합니다. ```lua ---@param param_name PARAM_TYPE ``` ##### 사용 예시 ```lua ---@param testParamA Entity local function TestFunction(testParamA) end ``` ``` [chunk_id] | Guides:824:2

[task] | distill [title] | 배경음악, 효과음 만들기 [category] | Guides [rephrased] | **카드 짝 맞추기 (BGM/효과음 포함)** **Property** ```lua [None] Entity CardPairGameUI = /ui/CardPairGameUI [None] number PlayTime = 60 [None] number RemainingTime = 0 ``` **Method** 1. **초기화 (`OnBeginPlay`)** * `StartGame()` 호출. * UI 활성화, `RemainingTime` 초기화, `CardBoard:SetCards()` 실행. 2. **타 [original] | ```lua Property: [None] Entity CardPairGameUI = /ui/CardPairGameUI [None] number PlayTime = 60 [None] number RemainingTime = 0 Method: [client only] void OnBeginPlay() { self:StartGame() } [client only] void StartGame() { self.CardPairGameUI.Enable = true self.RemainingTime = self [chunk_id] | Guides:825:1

[task] | distill [title] | 배경음악, 효과음 만들기 [category] | Guides [rephrased] | # 카드 짝 맞추기: 배경음악 및 효과음 설정 ## 배경음악 설정 1. **Preset List - Background Music**에서 원하는 BGM을 선택합니다. 2. **Hierarchy - maps - map01**을 선택하여 프로퍼티 창에서 `SoundComponent`가 추가되었는지 확인합니다. 3. `Audio Play`를 눌러 재생을 테스트합니다. 4. **BGM** 및 **PlayOnEnable** 프로퍼티가 활성화되어 있는지 확인합니다. 두 프로퍼티가 활성화된 상태면 월드 입장 시 BGM이 자동 재생됩니다. [original] | 게임을 다 만들었지만 어쩐지 심심한 느낌이 들지 않나요? 마지막으로 배경음악과 효과음을 추가해서 게임을 완성해봅시다. # 배경음악 설정하기 1. **Preset List - Background Music**을 선택합니다. 2. 원하는 BGM을 선택한 뒤, **Hierarchy - maps - map01**을 선택합니다. 프로퍼티 창에서 **SoundComponent**가 추가된 걸 확인할 수 있습니다. **Audio Play**를 눌러 음악을 확인합니다. **BGM, PlayOnEnable** 프로퍼티가 활성화 되어있는지 [chunk_id] | Guides:825:0

[task] | extract_knowledge [title] | 점수 만들기 [category] | Guides [rephrased] | # 카드 짝 맞추기 점수 및 UI 업데이트 ## 개념 설명 이 절에서는 카드 짝 맞추기 게임에서 남은 시간(`RemainingTime`)과 플레이어의 점수(`Score`)를 UI에 실시간으로 반영하는 방법과, 데이터 기반의 카드 덱을 생성하여 게임 보드에 배치하는 로직을 다룹니다. 클라이언트 사이드(`[client only]`)의 `OnUpdate` 루프를 통해 매 프레임 텍스트 컴포넌트를 갱신하고, 서버/공통 로직에서는 데이터 서비스(`_DataService`)와 유틸리티(`_UtilLogic`)를 활용해 무작위 순서로 정렬된 [original] | ```lua Property: [None] Entity CardSpawnRoot = /ui/CardPairGameUI/UI_Board/UI_Blocks/UI_Block_Group [None] Card SelectedCard = nil [None] Entity TimeText = /ui/CardPairGameUI/UI_Board/Background/Title/Timer_Background/UI_Time/UI_Time_Text [None] Entity ScoreText = /ui/CardPairGameUI/UI_Board/Backgro [chunk_id] | Guides:823:1

[task] | extract_knowledge [title] | 어노테이션 활용하기 [category] | Guides [rephrased] | # 스크립트 어노테이션 활용하기 ## 개념 설명 mLua 스크립트에서 **Param Annotation**과 **Return Annotation**은 스크립트 편집기(스크립트 어시스트)의 인텔리전스 기능을 활성화하기 위해 사용됩니다. - **Param Annotation**: 함수의 매개 변수(param)가 어떤 타입으로 전달되는지 명시합니다. 기본적으로 루아 함수의 매개 변수는 타입 추론이 불가능하지만, 이 어노테이션을 적용하면 타입 정보가 제공되어 오타 방지 및 자동완성 기능이 향상됩니다. - **Return Annotati [original] | **Param Annotation**을 사용해 대상이 되는 함수의 매개 변수 타입을 지정하여 스크립트 어시스트의 도움을 받을 수 있습니다. **Param Annotation**은 함수 정의문에 사용합니다. 아래와 같은 문법으로 **Param Annotation**을 사용합니다. ```lua ---@param param_name PARAM_TYPE ``` ##### 사용 예시 ```lua ---@param testParamA Entity local function TestFunction(testParamA) end ``` ``` [chunk_id] | Guides:824:2

[task] | wikipedia [title] | 어노테이션 활용하기 [category] | Guides [rephrased] | # 스크립트 이해: 어노테이션 활용하기 메이플스토리 월드 스크립트 언어 mLua에서는 LSP(Language Server Protocol) 기반의 정적 분석 기능을 활용하기 위해 `---@type` 어노테이션을 사용합니다. 이 어노테이션은 함수의 시그니처(매개 변수와 반환 값의 타입)를 명시적으로 선언하여, 에디터가 코드 완성, 오류 검사, 퀵 인포(Quick Info) 제공 등 개발자 경험을 개선하도록 돕습니다. ## 함수 타입 지정 문법 함수에 대한 타입 어노테이션은 다음과 같은 문법 구조를 따릅니다. ```lua --- [original] | Function은 아래와 같은 문법으로 타입을 지정합니다. ```lua ---@type function(param_name: PARAM_TYPE):RETURN_TYPE ``` ##### 사용 예시 ```lua ---@type function() local testFunction = function() end ``` ```lua ---@type function(testParamA:string, testParamB:Entity) local testFunction = function(testParamA, testParamB) end [chunk_id] | Guides:824:1

[task] | extract_knowledge [title] | 어노테이션 활용하기 [category] | Guides [rephrased] | # mLua에서 함수 타입 어노테이션 활용하기 mLua는 `---@type` 주석을 사용하여 함수의 시그니처(매개변수 및 반환값 타입)를 명시적으로 지정할 수 있습니다. 이 어노테이션을 지정하면 IDE의 시그니처 헬퍼와 퀵 인포(Quick Info) 기능을 통해 타입 오류를 방지하고, 함수 호출 시 필요한 인자 정보를 실시간으로 확인하는 것이 가능합니다. ## 개념: 함수 타입 지정 문법 함수 타입은 다음 형식의 주석을 함수 선언부 직전 라인에 배치하여 지정합니다. ```lua ---@type function(param_na [original] | Function은 아래와 같은 문법으로 타입을 지정합니다. ```lua ---@type function(param_name: PARAM_TYPE):RETURN_TYPE ``` ##### 사용 예시 ```lua ---@type function() local testFunction = function() end ``` ```lua ---@type function(testParamA:string, testParamB:Entity) local testFunction = function(testParamA, testParamB) end [chunk_id] | Guides:824:1

[task] | extract_knowledge [title] | 점수 만들기 [category] | Guides [rephrased] | # 카드 짝 맞추기 점수 로직 구현 본 절에서는 `CardPairGameLogic` 컴포넌트를 통해 카드 게임의 시작, 시간 관리, 카드 선택 및 매칭 판정, 그리고 점수 기록과 게임 종료 과정을 처리하는 로직을 다룹니다. ## 1. 개념 설명 `CardPairGameLogic`은 클라이언트 사이드에서만 실행되는 게임 로직 컴포넌트입니다. 이 컴포넌트는 다음 주요 기능을 수행합니다. * **게임 초기화 및 종료**: 게임 시작 시 UI를 활성화하고 카드를 배치하며, 시간 초과 시 UI를 비활성화하여 게임을 종료합니다. * [original] | #### CardPairGameLogic 로직 ```lua Property: [None] Entity CardPairGameUI = /ui/CardPairGameUI [None] number PlayTime = 60 [None] number RemainingTime = 0 Method: [client only] void OnBeginPlay() { self:StartGame() } [client only] void StartGame() { self.CardPairGameUI.Enable = true [chunk_id] | Guides:823:3

[task] | knowledge_list [title] | 배경음악, 효과음 만들기 [category] | Guides [rephrased] | 주어진 문서에 포함된 정보만을 바탕으로 핵심 사실을 정리한 목록입니다. 1. 배경음악(BGM)을 설정하려면 에디터의 **Preset List**에서 **Background Music** 항목을 선택하여 원하는 음악을 지정해야 합니다. 2. 배경음악을 적용하기 위해 **Hierarchy**의 `maps/map01` 엔티티에 **SoundComponent**가 추가되어야 하며, 이 컴포넌트의 프로퍼티인 **BGM**과 **PlayOnEnable**이 모두 활성화되어 있어야 월드 입장 시 배경음악이 자동 재생됩니다. 3. 효과음 [original] | 게임을 다 만들었지만 어쩐지 심심한 느낌이 들지 않나요? 마지막으로 배경음악과 효과음을 추가해서 게임을 완성해봅시다. # 배경음악 설정하기 1. **Preset List - Background Music**을 선택합니다. 2. 원하는 BGM을 선택한 뒤, **Hierarchy - maps - map01**을 선택합니다. 프로퍼티 창에서 **SoundComponent**가 추가된 걸 확인할 수 있습니다. **Audio Play**를 눌러 음악을 확인합니다. **BGM, PlayOnEnable** 프로퍼티가 활성화 되어있는지 [chunk_id] | Guides:825:0

[task] | distill [title] | 머티리얼 활용하기 [category] | Guides [rephrased] | # 스프라이트/애니메이션 머티리얼 활용하기 스프라이트 좌표 왜곡, 흐림, 알파 마스크, 블렌딩 색상을 제어하는 셰이더 효과입니다. ## Distortion (좌표 왜곡) | 셰이더 | 설명 | | :--- | :--- | | `Noise` | 엔티티가 지속적으로 흔들림 | | `RoundWave` | 중심 기준 동심원 파동 | | `UVScroll` | UV 좌표 이동 | | `Wave` | 특정 지점 원형 파동 | | `Glitch` | 무작위 구역 샘플링 | | `GrassMovement` | 풀 흔들림 효과 | | `Di [original] | 스프라이트 좌표를 왜곡하는 효과입니다. | @cols=2:@rows=1:셰이더 | 설명 | | :---: | --- | --- | | Noise | | 지속적으로 엔티티가 흔들립니다.| | RoundWave| | 중심 기준으로 동심원 파동을 그립니다. | | UVScroll| | 스프라이트 렌더링할 때 UV 좌표를 이동시킵니다. | | Wave| | 특정 지점에서 원형 파동을 그립니다. | | Glitch| | 무작위로 스프라이트의 다른 구역을 샘플링합니다. | | GrassMovement| | 풀이 흔들리는 [chunk_id] | Guides:828:1

[task] | knowledge_list [title] | 배경음악, 효과음 만들기 [category] | Guides [rephrased] | 제시된 문서의 코드와 정보를 바탕으로 추출한 핵심 사실 목록입니다. * `Property` 블록에는 `[None]` 동기화 속성을 가진 `Entity` 타입의 `CardPairGameUI`(경로 `/ui/CardPairGameUI`), `number` 타입의 `PlayTime`(초기값 60), `number` 타입의 `RemainingTime`(초기값 0)이 정의되어 있습니다. * `OnBeginPlay` 메서드는 `[client only]` 제약이 있으며, 게임 시작 시 `StartGame` 메서드를 호출합니다. * [original] | ```lua Property: [None] Entity CardPairGameUI = /ui/CardPairGameUI [None] number PlayTime = 60 [None] number RemainingTime = 0 Method: [client only] void OnBeginPlay() { self:StartGame() } [client only] void StartGame() { self.CardPairGameUI.Enable = true self.RemainingTime = self [chunk_id] | Guides:825:1

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