[task] | wikipedia [title] | 액션을 예약하고 실행하는 TimerService [category] | Guides [rephrased] | # TimerService **TimerService**는 특정 시점에 실행될 액션(행위)을 예약하는 기능을 제공하는 서비스입니다. 몬스터가 등장한 후 몇 초 뒤 공격을 시작하거나, 몬스터가 사망한 후 1초 뒤 아이템을 드롭하는 등 시간 기반의 이벤트 처리가 필요한 상황에서 사용자의 프레임 단위 시간 체크 로직을 대체하여 코드 작성의 간결성과 효율성을 높이는 데 목적을 둡니다. ## 동작 방식 TimerService를 사용하지 않고 시간 지연이 필요한 로직을 구현하려면, 매 프레임마다 현재 시간을 확인하여 예약된 시간이 도래했 [original] | # 학습 과정 소개 몬스터가 등장하고 몇 초 뒤 공격을 시작하거나, 몬스터가 죽고 1초 뒤 아이템을 떨어뜨리는 것과 같은 어떤 일(액션)이 일어나는 타이밍을 제어해야 할 때가 있습니다. TimerService를 활용해 쉽고 효율적으로 액션이 일어나는 타이밍을 제어할 수 있습니다. TimerService가 제공하는 기능과 활용법을 알아보겠습니다. # TimerService 소개 **TimerService**는 원하는 순간에 어떤 액션을 실행하도록 예약하는 편의 기능을 제공합니다. Timer Service를 사용하지 않고 몬스터가 [chunk_id] | Guides:47:0
[task] | knowledge_list [title] | 액션을 예약하고 실행하는 TimerService [category] | Guides [rephrased] | * `_TimerService:SetTimer()` 메서드는 매개변수 `isRepeat`를 `true`로 설정하면 타이머가 반복적으로 실행되도록 설정합니다. * `isRepeat`가 `true`인 경우, `_TimerService:SetTimer()`가 호출되는 시점과 최초 `CallBack` 함수의 실행 시점이 동일하며, 이후 매개변수 `intervalSeconds`의 값만큼의 간격으로 `CallBack` 함수가 재실행됩니다. * `isRepeat`가 `false`(1회 실행)인 경우, 매개변수 `intervalSeco [original] | isRepeat을 true로 변경해 반복 실행하게 만듭니다. `SetTimer()`가 호출될 때 "SetTimer!"라는 문자열과 함께 해당 코드가 실행된 시간을 출력합니다. 예시 코드는 다음과 같습니다. 3초마다 `SetTimer()`로 넘긴 CallBack 함수가 호출될 때 "CallBack!"이라는 문자열과 함께 코드가 실행된 시간을 출력합니다. ```lua Method: [server only] void OnBeginPlay() { local callBack = function() log("Ca [chunk_id] | Guides:47:2
[task] | knowledge_list [title] | 액션을 예약하고 실행하는 TimerService [category] | Guides [rephrased] | ```lua -- 핵심 사실 목록 ``` 1. `_TimerService:SetTimer()`는 특정 시점에 액션을 예약하거나 반복 수행을 설정하는 예약 함수입니다. 2. `_TimerService:SetTimer()`는 예약 성공 시 integer 타입의 타이머 id를 반환하고, 예약 실패 시 0을 반환합니다. 3. `_TimerService:SetTimer()`의 첫 번째 매개변수 `scriptable`은 IScriptable 타입으로, 예약할 액션의 소유자(로직 또는 컴포넌트)를 넘기며 일반적으로 `self`를 전달합니다. 4 [original] | # SetTimer 활용 `SetTimer()`는 예약 함수입니다. 특정 시점에 수행할 액션을 예약할 수 있고, 액션 반복 수행 여부와 반복 주기를 설정할 수 있습니다. 예약한 액션 반복 여부에 따라 매개 변수의 의미와 쓰임새가 달라집니다. `SetTimer()`는 예약 성공 시 integer 타입의 타이머의 id를 반환하고, 예약 실패 시 0을 반환합니다. 매개 변수는 다음과 같습니다. | 타입 | 매개 변수 | 설명 | | --- | ------ | --- | | IScriptable | scriptable | 예약할 액션의 [chunk_id] | Guides:47:1
[task] | diverse_qa [title] | 액션을 예약하고 실행하는 TimerService [category] | Guides [rephrased] | 질문: `SetTimer()` 함수가 예약에 성공했을 때 반환하는 값의 타입과 내용은 무엇인가요? 답변: `SetTimer()`는 예약 성공 시 integer 타입의 타이머 id를 반환합니다. 질문: `SetTimer()` 함수가 예약에 실패했을 때 반환하는 값은 무엇인가요? 답변: `SetTimer()`는 예약 실패 시 0을 반환합니다. 질문: `SetTimer()`의 매개 변수 중 `scriptable`에 일반적으로 무엇을 넘겨주나요? 답변: `SetTimer()`를 호출한 컴포넌트 자신을 넘겨줍니다. 질문: `isRepe [original] | # SetTimer 활용 `SetTimer()`는 예약 함수입니다. 특정 시점에 수행할 액션을 예약할 수 있고, 액션 반복 수행 여부와 반복 주기를 설정할 수 있습니다. 예약한 액션 반복 여부에 따라 매개 변수의 의미와 쓰임새가 달라집니다. `SetTimer()`는 예약 성공 시 integer 타입의 타이머의 id를 반환하고, 예약 실패 시 0을 반환합니다. 매개 변수는 다음과 같습니다. | 타입 | 매개 변수 | 설명 | | --- | ------ | --- | | IScriptable | scriptable | 예약할 액션의 [chunk_id] | Guides:47:1
[task] | knowledge_list [title] | 액션을 예약하고 실행하는 TimerService [category] | Guides [rephrased] | * `_TimerService:SetTimer()`는 특정 액션을 수행하도록 예약을 만들며, 이 예약은 `_TimerService:ClearTimer()`를 통해 취소할 수 있다. * `_TimerService:SetTimer()`의 매개변수는 순서대로 `owner`(self), `callback`(함수), `delay`(초), `repeat`(boolean), `interval`(초)이며, `timerId`를 반환한다. * `_TimerService:SetTimer()`에서 `timerId`가 0을 반환하면 예약이 실패 [original] | `SetTimer()`를 통해 특정 액션을 수행하도록 예약을 만들었지만, 특정 조건에 의해 해당 예약을 취소해야 하는 경우가 빈번히 발생합니다. 게임 내에서 스위치를 On 했을 때 3초 후 문이 열리는 장치를 만들었다고 가정해 봅시다. 유저가 스위치를 On 상태로 만들었을 때 3초 뒤에 문이 열리게 됩니다. 문이 열리는 액션을 `SetTimer()`를 이용해 예약했기 때문입니다. 그러나 유저가 문이 열리기 전에 스위치를 Off 상태로 만든다면 `SetTimer()`의 예약을 취소해 Off일 때 문이 열리지 않게 만들어야 합니다. [chunk_id] | Guides:47:3
[task] | extract_knowledge [title] | MaplePreferencesLogic [category] | Logics [rephrased] | # MaplePreferencesLogic `MaplePreferencesLogic`은 플레이어의 게임 설정 및 사운드 옵션을 제어하기 위한 로직 컴포넌트입니다. 이 컴포넌트는 `Logic`에서 상속받은 이벤트 처리 메서드와 함께, 특정 클라이언트 환경에서 플레이어의 점프 사운드, 사망 사운드, 그리고 무기별 공격 효과음을 직접 설정할 수 있습니다. ## 개념 설명 `MaplePreferencesLogic`은 주로 클라이언트 사이드에서 동작하며, 플레이어의 개인 설정(Preferences)에 영향을 주는 값들을 수정합니다. 제 [original] | ##### inherited from Logic: - **EventHandlerBase ConnectEvent(string key, IScriptFunction eventHandler)** 이벤트를 연결합니다. 이 서비스에서 타입의 이름이 key인 이벤트가 발생하면, 핸들러로 통지받습니다. 핸들러는 event 매개 변수를 전달받습니다. - **EventHandlerBase ConnectEvent(Type eventType, IScriptFunction eventHandler)** 이벤트를 연결합니다. 이 서비스에서 타입이 [chunk_id] | Logics:964:1
[task] | extract_knowledge [title] | MaterialService [category] | Services [rephrased] | # MaterialService `MaterialService`는 클라이언트에서 머티리얼(Material)의 프로퍼티를 제어하는 기능을 제공합니다. 주로 화면 좌표계와 월드 좌표계를 변환하여 특정 머티리얼 셰이더의 파라미터를 동적으로 변경하는 데 사용됩니다. ## 개념 설명 `MaterialService`는 `[ClientOnly]` 실행 공간에서 동작하며, 서버에서는 접근할 수 없습니다. 이 서비스는 `entryId`를 통해 특정 머티리얼을 식별하고, `Dictionary<string, any>` 형태의 데이터로 프로퍼티 값 [original] | 머티리얼 프로퍼티를 제어하는 기능을 제공합니다. # Methods - **void ChangeMaterialProperty(string entryId, Dictionary<string, any> changeProperty) [ClientOnly]** entryId에 해당하는 머티리얼의 프로퍼티를 변경합니다. changeProperty의 key는 프로퍼티 이름, value는 프로퍼티 값입니다. ##### inherited from Service: - **EventHandlerBase ConnectEvent(string ke [chunk_id] | Services:967:0
[task] | distill [title] | 액션을 예약하고 실행하는 TimerService [category] | Guides [rephrased] | # TimerService: 흐름 제어 액션 예약 및 실행 `_TimerService`는 특정 시간 이후나 주기적으로 함수를 실행하도록 예약하는 서비스입니다. ### SetTimer **시그니처:** ```lua _TimerService:SetTimer(self, callBack, intervalSeconds, isRepeat, startDelaySeconds) ``` **매개변수:** * `self`: 현재 컴포넌트 참조 * `callBack`: 실행할 함수 * `intervalSeconds`: 실행 간격(초) [original] | isRepeat을 true로 변경해 반복 실행하게 만듭니다. `SetTimer()`가 호출될 때 "SetTimer!"라는 문자열과 함께 해당 코드가 실행된 시간을 출력합니다. 예시 코드는 다음과 같습니다. 3초마다 `SetTimer()`로 넘긴 CallBack 함수가 호출될 때 "CallBack!"이라는 문자열과 함께 코드가 실행된 시간을 출력합니다. ```lua Method: [server only] void OnBeginPlay() { local callBack = function() log("Ca [chunk_id] | Guides:47:2
[task] | distill [title] | 액션을 예약하고 실행하는 TimerService [category] | Guides [rephrased] | # TimerService: 예약 및 취소 `SetTimer()`로 예약된 액션은 특정 조건(예: 스위치 Off)에서 `ClearTimer()`를 호출하여 취소할 수 있습니다. ## API 시그니처 및 동작 규칙 * **`_TimerService:SetTimer(owner, callback, delay, repeat, count)`** * 예약된 타이머의 ID를 반환합니다. (0이면 실패) * `repeat`: 반복 여부, `count`: 반복 횟수 (1회만 실행할 경우 `false`, 0 또는 생략 [original] | `SetTimer()`를 통해 특정 액션을 수행하도록 예약을 만들었지만, 특정 조건에 의해 해당 예약을 취소해야 하는 경우가 빈번히 발생합니다. 게임 내에서 스위치를 On 했을 때 3초 후 문이 열리는 장치를 만들었다고 가정해 봅시다. 유저가 스위치를 On 상태로 만들었을 때 3초 뒤에 문이 열리게 됩니다. 문이 열리는 액션을 `SetTimer()`를 이용해 예약했기 때문입니다. 그러나 유저가 문이 열리기 전에 스위치를 Off 상태로 만든다면 `SetTimer()`의 예약을 취소해 Off일 때 문이 열리지 않게 만들어야 합니다. [chunk_id] | Guides:47:3
[task] | knowledge_list [title] | MaplePreferencesLogic [category] | Logics [rephrased] | # [Logics] MaplePreferencesLogic 핵심 사실 목록 1. `MaplePreferencesLogic`은 `Logic` 클래스를 상속받으며, 이벤트 연결 및 실행 환경 확인 관련 메서드를 제공합니다. 2. `ConnectEvent(string key, IScriptFunction eventHandler)` 메서드는 문자열 `key`로 지정한 이름의 이벤트가 발생 시 `eventHandler`에 `event` 매개변수를 전달하여 통지하며, 반환 타입은 `EventHandlerBase`입니다. 3. `Connect [original] | ##### inherited from Logic: - **EventHandlerBase ConnectEvent(string key, IScriptFunction eventHandler)** 이벤트를 연결합니다. 이 서비스에서 타입의 이름이 key인 이벤트가 발생하면, 핸들러로 통지받습니다. 핸들러는 event 매개 변수를 전달받습니다. - **EventHandlerBase ConnectEvent(Type eventType, IScriptFunction eventHandler)** 이벤트를 연결합니다. 이 서비스에서 타입이 [chunk_id] | Logics:964:1
[task] | extract_knowledge [title] | 액션을 예약하고 실행하는 TimerService [category] | Guides [rephrased] | # TimerService: SetTimer 활용 ## 개념 설명 `SetTimer()`는 특정 시점에 액션을 예약하는 함수입니다. 예약된 액션은 1회만 실행되거나, 주어진 주기로 반복 실행될 수 있습니다. 예약 성공 시에는 `integer` 타입의 타이머 ID를 반환하며, 실패 시에는 `0`을 반환합니다. `isRepeat` 매개 변수의 값에 따라 `intervalSeconds`와 `startDelaySeconds`의 의미가 달라집니다. | 매개 변수 | 타입 | 설명 | | :--- | :--- | :--- | | `sc [original] | # SetTimer 활용 `SetTimer()`는 예약 함수입니다. 특정 시점에 수행할 액션을 예약할 수 있고, 액션 반복 수행 여부와 반복 주기를 설정할 수 있습니다. 예약한 액션 반복 여부에 따라 매개 변수의 의미와 쓰임새가 달라집니다. `SetTimer()`는 예약 성공 시 integer 타입의 타이머의 id를 반환하고, 예약 실패 시 0을 반환합니다. 매개 변수는 다음과 같습니다. | 타입 | 매개 변수 | 설명 | | --- | ------ | --- | | IScriptable | scriptable | 예약할 액션의 [chunk_id] | Guides:47:1
[task] | distill [title] | 액션을 예약하고 실행하는 TimerService [category] | Guides [rephrased] | # TimerService `_TimerService`는 특정 시간 이후나 주기적으로 액션을 예약하는 서비스입니다. 예약 성공 시 `integer` 타입의 타이머 `id`를 반환하고, 실패 시 `0`을 반환합니다. ## SetTimerOnce 단일 실행 타이머 예약. * **매개변수**: * `callback` (`func`): 실행할 콜백 함수. * `delaySeconds` (`float`): 실행까지 대기할 초. ```lua [server only] void OnBeginPlay() { [original] | `SetTimerOnce()`는 `SetTimer()`의 isRepeat를 false로 설정한 것과 동일하게 작동합니다. 예약 성공 시 integer 타입의 타이머의 id를 반환하고, 예약 실패 시 0을 반환합니다. 매개 변수는 다음과 같습니다. | 타입 | 매개 변수 | 설명 | | --- | ------ | --- | | func | callback | 몇 초 뒤 수행할 액션을 CallBack 형태로 넘겨줍니다. | | float | delaySeconds | 액션을 예약한 뒤 몇 초 후에 액션을 실행할 것인지를 설정합니다. [chunk_id] | Guides:47:4
[task] | wikipedia [title] | 액션을 예약하고 실행하는 TimerService [category] | Guides [rephrased] | `isRepeat` 인수를 `true`로 설정하면 타이머는 1회 실행이 아닌 반복 실행 모드로 동작합니다. 이 모드에서는 `SetTimer()`가 호출되는 시점에 "SetTimer!" 문자열과 함께 현재 시간이 출력되며, 이후 지정된 간격마다 콜백 함수가 실행될 때마다 "CallBack!" 문자열과 함께 실행 시간이 콘솔에 기록됩니다. 아래 예시 코드는 3초 간격으로 반복 실행되는 타이머를 설정합니다. `OnBeginPlay` 이벤트 발생 시 `SetTimer!` 로그를 출력한 뒤, `_TimerService:SetTimer`를 [original] | isRepeat을 true로 변경해 반복 실행하게 만듭니다. `SetTimer()`가 호출될 때 "SetTimer!"라는 문자열과 함께 해당 코드가 실행된 시간을 출력합니다. 예시 코드는 다음과 같습니다. 3초마다 `SetTimer()`로 넘긴 CallBack 함수가 호출될 때 "CallBack!"이라는 문자열과 함께 코드가 실행된 시간을 출력합니다. ```lua Method: [server only] void OnBeginPlay() { local callBack = function() log("Ca [chunk_id] | Guides:47:2
[task] | wikipedia [title] | 액션을 예약하고 실행하는 TimerService [category] | Guides [rephrased] | # SetTimer 활용 `SetTimer()`는 특정 시점에 수행할 액션을 예약하기 위한 함수입니다. 이 함수를 통해 예약할 액션을 한 번만 실행할지 반복적으로 실행할지 결정하고, 반복 실행 시 주기를 설정할 수 있습니다. 예약 방식에 따라 매개 변수의 의미와 적용 방법이 달라집니다. `SetTimer()`는 예약에 성공하면 해당 타이머를 식별하는 정수(integer) 타입의 ID를 반환하며, 예약에 실패하면 0을 반환합니다. `SetTimer()` 함수는 다음과 같은 매개 변수를 가집니다. 첫 번째 매개 변수 `scripta [original] | # SetTimer 활용 `SetTimer()`는 예약 함수입니다. 특정 시점에 수행할 액션을 예약할 수 있고, 액션 반복 수행 여부와 반복 주기를 설정할 수 있습니다. 예약한 액션 반복 여부에 따라 매개 변수의 의미와 쓰임새가 달라집니다. `SetTimer()`는 예약 성공 시 integer 타입의 타이머의 id를 반환하고, 예약 실패 시 0을 반환합니다. 매개 변수는 다음과 같습니다. | 타입 | 매개 변수 | 설명 | | --- | ------ | --- | | IScriptable | scriptable | 예약할 액션의 [chunk_id] | Guides:47:1
[task] | wikipedia [title] | 액션을 예약하고 실행하는 TimerService [category] | Guides [rephrased] | # TimerService: 타이머 예약 및 취소 `TimerService`는 특정 시간 이후에 실행될 액션을 예약하는 기능을 제공하며, 이 중 `SetTimer()` 메서드는 반복 여부, 지연 시간 등을 설정하여 타이머를 생성합니다. 게임 로직에서는 상태 변경(예: 스위치 ON/OFF)에 따라 미리 예약된 액션을 취소해야 하는 상황이 빈번하게 발생합니다. 예를 들어, 유저가 스위치를 켜면 3초 후 문이 열리도록 `SetTimer()`로 예약해 두었다가, 문이 열리기 전에 스위치를 끄면 해당 예약을 취소하여 문이 열리지 않도록 처 [original] | `SetTimer()`를 통해 특정 액션을 수행하도록 예약을 만들었지만, 특정 조건에 의해 해당 예약을 취소해야 하는 경우가 빈번히 발생합니다. 게임 내에서 스위치를 On 했을 때 3초 후 문이 열리는 장치를 만들었다고 가정해 봅시다. 유저가 스위치를 On 상태로 만들었을 때 3초 뒤에 문이 열리게 됩니다. 문이 열리는 액션을 `SetTimer()`를 이용해 예약했기 때문입니다. 그러나 유저가 문이 열리기 전에 스위치를 Off 상태로 만든다면 `SetTimer()`의 예약을 취소해 Off일 때 문이 열리지 않게 만들어야 합니다. [chunk_id] | Guides:47:3
[task] | distill [title] | 캐릭터 초기 속성 편집 [category] | Guides [rephrased] | # 메이커 사용 캐릭터 초기 속성 편집 **Player** 모델의 프로퍼티를 통해 플레이어의 기본 속성을 설정합니다. 이는 모든 플레이어가 동일한 환경에서 시작하도록 보장합니다. ### 조작 절차 1. **Workspace > BaseEnvironment > NativeModel > Player** 선택 2. **Player** 프로퍼티 값 수정 3. **[시작]** 버튼으로 변경 사항 확인 > **참고**: 모델 프로퍼티 명칭은 참조 시 정확한 구분을 위해 변경될 수 있습니다. [original] | # 학습 과정 소개 동시에 출발해 목표 지점까지 오르는 게임을 시작할 때 누군가는 한 번에 4칸을 오르고, 다른 누구는 2칸을 오른다면 함께 게임을 즐길 수 없을 것입니다. 게임을 처음 시작할 때 만큼은 동일한 환경에서 시작하는 게 중요합니다. 모델 프로퍼티를 이용해 속성을 편집하는 방법을 알아봅니다. # 플레이어 기본 속성 변경 **Player** 모델에서 기본 속성을 변경할 수 있습니다. 1. **Workspace - BaseEnvironment - NativeModel - Player**를 선택합니다. 2. **Play [chunk_id] | Guides:48:0
[task] | diverse_qa [title] | 액션을 예약하고 실행하는 TimerService [category] | Guides [rephrased] | 질문: TimerService의 주요 목적은 무엇인가요? 답변: 원하는 순간에 특정 액션이 실행되도록 예약하는 편의 기능을 제공하여, 액션이 일어나는 타이밍을 쉽고 효율적으로 제어하는 것입니다. 질문: TimerService를 사용하지 않고 3초 뒤 아이템이 등장하도록 구현할 때, `OnUpdate` 함수에서 주로 어떤 작업을 수행해야 하나요? 답변: 몬스터가 죽을 때마다 프레임별로 시간을 확인하고, 설정된 시간(3초)이 지났는지 여부를 체크하여 조건이 충족되면 아이템을 등장시키는 작업을 수행해야 합니다. 질문: 아래 코드는 무 [original] | # 학습 과정 소개 몬스터가 등장하고 몇 초 뒤 공격을 시작하거나, 몬스터가 죽고 1초 뒤 아이템을 떨어뜨리는 것과 같은 어떤 일(액션)이 일어나는 타이밍을 제어해야 할 때가 있습니다. TimerService를 활용해 쉽고 효율적으로 액션이 일어나는 타이밍을 제어할 수 있습니다. TimerService가 제공하는 기능과 활용법을 알아보겠습니다. # TimerService 소개 **TimerService**는 원하는 순간에 어떤 액션을 실행하도록 예약하는 편의 기능을 제공합니다. Timer Service를 사용하지 않고 몬스터가 [chunk_id] | Guides:47:0
[task] | knowledge_list [title] | 캐릭터 초기 속성 편집 [category] | Guides [rephrased] | - 메이플스토리 월드에서 게임 시작 시 모든 플레이어가 동일한 환경에서 출발하도록 보장하기 위해 Player 모델의 기본 속성을 편집하는 것이 중요합니다. - Player 모델의 기본 속성 변경은 Workspace > BaseEnvironment > NativeModel > Player 경로의 Player 모델을 선택하여 수행합니다. - Player 모델의 프로퍼티 값을 직접 수정한 후 [시작] 버튼을 눌러 변경 사항을 확인합니다. - Player 모델 프로퍼티 중 여러 프로퍼티를 참조할 때 정확한 구분을 위해 모델 프로퍼티 명칭이 [original] | # 학습 과정 소개 동시에 출발해 목표 지점까지 오르는 게임을 시작할 때 누군가는 한 번에 4칸을 오르고, 다른 누구는 2칸을 오른다면 함께 게임을 즐길 수 없을 것입니다. 게임을 처음 시작할 때 만큼은 동일한 환경에서 시작하는 게 중요합니다. 모델 프로퍼티를 이용해 속성을 편집하는 방법을 알아봅니다. # 플레이어 기본 속성 변경 **Player** 모델에서 기본 속성을 변경할 수 있습니다. 1. **Workspace - BaseEnvironment - NativeModel - Player**를 선택합니다. 2. **Play [chunk_id] | Guides:48:0
[task] | knowledge_list [title] | 액션을 예약하고 실행하는 TimerService [category] | Guides [rephrased] | `_TimerService:SetTimerOnce()`는 `SetTimer()`의 `isRepeat`를 `false`로 설정한 것과 동일하게 작동하며, 예약 성공 시 `integer` 타입의 타이머 id를 반환하고 실패 시 `0`을 반환합니다. `_TimerService:SetTimerOnce()`의 `callback` 매개변수는 `func` 타입이며, 특정 시간 이후에 수행할 액션을 콜백 형태로 전달합니다. `_TimerService:SetTimerOnce()`의 `delaySeconds` 매개변수는 `float` 타입이며, 액션 [original] | `SetTimerOnce()`는 `SetTimer()`의 isRepeat를 false로 설정한 것과 동일하게 작동합니다. 예약 성공 시 integer 타입의 타이머의 id를 반환하고, 예약 실패 시 0을 반환합니다. 매개 변수는 다음과 같습니다. | 타입 | 매개 변수 | 설명 | | --- | ------ | --- | | func | callback | 몇 초 뒤 수행할 액션을 CallBack 형태로 넘겨줍니다. | | float | delaySeconds | 액션을 예약한 뒤 몇 초 후에 액션을 실행할 것인지를 설정합니다. [chunk_id] | Guides:47:4
[task] | diverse_qa [title] | 액션을 예약하고 실행하는 TimerService [category] | Guides [rephrased] | 질문: `isRepeat` 값을 `true`로 설정하면 TimerService의 동작이 어떻게 변경되나요? 답변: `isRepeat`을 `true`로 변경하면 타이머가 1회 실행이 아닌 반복 실행이 됩니다. 질문: 다음 코드에서 `log("SetTimer! :"..tostring(os.date()))`는 어떤 시점에 실행되며, 어떤 정보를 출력하나요? ```lua [server only] void OnBeginPlay() { local callBack = function() log("CallBack! : ". [original] | isRepeat을 true로 변경해 반복 실행하게 만듭니다. `SetTimer()`가 호출될 때 "SetTimer!"라는 문자열과 함께 해당 코드가 실행된 시간을 출력합니다. 예시 코드는 다음과 같습니다. 3초마다 `SetTimer()`로 넘긴 CallBack 함수가 호출될 때 "CallBack!"이라는 문자열과 함께 코드가 실행된 시간을 출력합니다. ```lua Method: [server only] void OnBeginPlay() { local callBack = function() log("Ca [chunk_id] | Guides:47:2
[task] | distill [title] | 액션을 예약하고 실행하는 TimerService [category] | Guides [rephrased] | # TimerService 예약 취소 `SetTimerOnce()`와 `SetTimerRepeat()`로 예약한 액션은 `ClearTimer(timerId)`로 취소할 수 있습니다. `SetTimer*` 함수는 취소 가능한 `timerId`를 반환하며, 예약 실패 시 `0`을 반환합니다. ```lua Method: [server only] void OnBeginPlay() { local callBack = function() log("CallBack! :"..tostring(os.date())) e [original] | `SetTimerOnce()`와 `SetTimerRepeat()`는 예약한 액션을 취소할 수 있습니다. 예약한 액션을 취소할 때는 `ClearTimer()` 함수를 활용합니다. 아래의 예제처럼 10초 뒤 액션 실행을 취소할 수 있습니다. ```lua Method: [server only] void OnBeginPlay() { local callBack = function() log("CallBack! :"..tostring(os.date())) end log("SetTimer! :" [chunk_id] | Guides:47:5
[task] | wikipedia [title] | 캐릭터 초기 속성 편집 [category] | Guides [rephrased] | # 메이커 사용 캐릭터 초기 속성 편집 메이플스토리 월드의 게임 제작 환경에서 플레이어가 동일한 조건으로 게임을 시작하는 것은 공정한 경쟁과 원활한 게임 플레이를 위해 필수적입니다. 만약 동일한 출발점에서 시작하는 게임에서 일부 플레이어는 한 번에 4칸을 이동하고, 다른 플레이어는 2칸만 이동한다면 게임의 균형이 깨지게 됩니다. 따라서 게임 시작 시 모든 플레이어가 동일한 환경과 속성에서 출발하도록 설정하는 것이 중요합니다. 본 가이드에서는 모델 프로퍼티(Model Property)를 활용하여 플레이어의 초기 속성을 편집하는 방법 [original] | # 학습 과정 소개 동시에 출발해 목표 지점까지 오르는 게임을 시작할 때 누군가는 한 번에 4칸을 오르고, 다른 누구는 2칸을 오른다면 함께 게임을 즐길 수 없을 것입니다. 게임을 처음 시작할 때 만큼은 동일한 환경에서 시작하는 게 중요합니다. 모델 프로퍼티를 이용해 속성을 편집하는 방법을 알아봅니다. # 플레이어 기본 속성 변경 **Player** 모델에서 기본 속성을 변경할 수 있습니다. 1. **Workspace - BaseEnvironment - NativeModel - Player**를 선택합니다. 2. **Play [chunk_id] | Guides:48:0
[task] | wikipedia [title] | 액션을 예약하고 실행하는 TimerService [category] | Guides [rephrased] | `TimerService`는 게임 로직 및 시스템 개발에서 특정 시점에 액션을 예약하고 실행하기 위해 사용됩니다. 이 서비스는 일회성 예약을 위한 `SetTimerOnce()`와 반복 예약을 위한 `SetTimerRepeat()` 메서드를 제공합니다. `SetTimerOnce()` 메서드는 `SetTimer()` 메서드의 `isRepeat` 인자를 false로 설정한 경우와 동일한 동작을 수행합니다. 이 메서드는 예약이 성공적으로 완료되면 `integer` 타입의 타이머 ID를 반환하고, 예약이 실패할 경우 0을 반환합니다. 매개 [original] | `SetTimerOnce()`는 `SetTimer()`의 isRepeat를 false로 설정한 것과 동일하게 작동합니다. 예약 성공 시 integer 타입의 타이머의 id를 반환하고, 예약 실패 시 0을 반환합니다. 매개 변수는 다음과 같습니다. | 타입 | 매개 변수 | 설명 | | --- | ------ | --- | | func | callback | 몇 초 뒤 수행할 액션을 CallBack 형태로 넘겨줍니다. | | float | delaySeconds | 액션을 예약한 뒤 몇 초 후에 액션을 실행할 것인지를 설정합니다. [chunk_id] | Guides:47:4
[task] | diverse_qa [title] | 캐릭터 초기 속성 편집 [category] | Guides [rephrased] | 질문: 문서에서 '동시에 출발해 목표 지점까지 오르는 게임'의 예시를 통해 설명하고자 하는 핵심 개념은 무엇인가요? 답변: 게임을 처음 시작할 때 모든 플레이어가 동일한 환경에서 시작하는 것이 중요함을 강조하고 있습니다. 질문: 플레이어의 기본 속성을 변경하기 위해 선택해야 하는 경로가 Workspace - BaseEnvironment - NativeModel - Player 인가요? 답변: 예, 그렇습니다. 질문: 모델 프로퍼티를 이용해 속성을 편집하는 방법을 배울 수 있는 학습 과정의 주제는 무엇인가요? 답변: 메이커 사용 [original] | # 학습 과정 소개 동시에 출발해 목표 지점까지 오르는 게임을 시작할 때 누군가는 한 번에 4칸을 오르고, 다른 누구는 2칸을 오른다면 함께 게임을 즐길 수 없을 것입니다. 게임을 처음 시작할 때 만큼은 동일한 환경에서 시작하는 게 중요합니다. 모델 프로퍼티를 이용해 속성을 편집하는 방법을 알아봅니다. # 플레이어 기본 속성 변경 **Player** 모델에서 기본 속성을 변경할 수 있습니다. 1. **Workspace - BaseEnvironment - NativeModel - Player**를 선택합니다. 2. **Play [chunk_id] | Guides:48:0
[task] | extract_knowledge [title] | 액션을 예약하고 실행하는 TimerService [category] | Guides [rephrased] | # TimerService 예약 취소 및 파생 기능 ## 개념 설명 `SetTimer()`를 사용하여 특정 시간 이후에 실행될 액션을 예약할 수 있습니다. 게임 로직에서는 상태 변화(예: 스위치 On/Off)에 따라 이미 예약된 액션을 취소해야 하는 경우가 빈번합니다. 예를 들어, 스위치를 켰을 때 3초 후 문이 열리도록 예약했으나, 문이 열리기 전에 스위치를 끄면 해당 예약을 취소하여 문이 열리지 않도록 처리해야 합니다. 이러한 예약 취소 기능을 제공하기 위해 `ClearTimer()` 메서드가 존재합니다. 또한, 사용 목적 [original] | `SetTimer()`를 통해 특정 액션을 수행하도록 예약을 만들었지만, 특정 조건에 의해 해당 예약을 취소해야 하는 경우가 빈번히 발생합니다. 게임 내에서 스위치를 On 했을 때 3초 후 문이 열리는 장치를 만들었다고 가정해 봅시다. 유저가 스위치를 On 상태로 만들었을 때 3초 뒤에 문이 열리게 됩니다. 문이 열리는 액션을 `SetTimer()`를 이용해 예약했기 때문입니다. 그러나 유저가 문이 열리기 전에 스위치를 Off 상태로 만든다면 `SetTimer()`의 예약을 취소해 Off일 때 문이 열리지 않게 만들어야 합니다. [chunk_id] | Guides:47:3
[task] | diverse_qa [title] | 액션을 예약하고 실행하는 TimerService [category] | Guides [rephrased] | 질문: `_TimerService:SetTimerOnce()` 함수의 역할은 무엇인가요? 답변: `SetTimerOnce()`는 `SetTimer()`의 isRepeat를 false로 설정한 것과 동일하게 작동하며, 지정된 시간 이후에 액션을 단 한 번만 실행하도록 예약하는 함수입니다. 질문: `SetTimerOnce()` 예약이 성공할 때와 실패할 때 각각 어떤 값을 반환하나요? 답변: 예약 성공 시에는 integer 타입의 타이머 id를 반환하고, 예약 실패 시에는 0을 반환합니다. 질문: `SetTimerOnce()`의 매 [original] | `SetTimerOnce()`는 `SetTimer()`의 isRepeat를 false로 설정한 것과 동일하게 작동합니다. 예약 성공 시 integer 타입의 타이머의 id를 반환하고, 예약 실패 시 0을 반환합니다. 매개 변수는 다음과 같습니다. | 타입 | 매개 변수 | 설명 | | --- | ------ | --- | | func | callback | 몇 초 뒤 수행할 액션을 CallBack 형태로 넘겨줍니다. | | float | delaySeconds | 액션을 예약한 뒤 몇 초 후에 액션을 실행할 것인지를 설정합니다. [chunk_id] | Guides:47:4
[task] | extract_knowledge [title] | 캐릭터 초기 속성 편집 [category] | Guides [rephrased] | # 플레이어 기본 속성 편집 ## 1. 개념 설명 멀티플레이어 환경에서 모든 참가자가 동일한 초기 조건(속도, 이동 능력 등)에서 게임을 시작할 수 있도록 보장하기 위해 사용됩니다. `Player` 모델의 프로퍼티를 수정하여 캐릭터의 기본 동작 특성을 정의합니다. ## 2. API 사용법 mLua 스크립트 코드 작성 없이, 에디터의 **Workspace** 뷰에서 `Player` 모델의 프로퍼티를 직접 수정하는 방식을 사용합니다. * **대상 경로**: `Workspace - BaseEnvironment - NativeMo [original] | # 학습 과정 소개 동시에 출발해 목표 지점까지 오르는 게임을 시작할 때 누군가는 한 번에 4칸을 오르고, 다른 누구는 2칸을 오른다면 함께 게임을 즐길 수 없을 것입니다. 게임을 처음 시작할 때 만큼은 동일한 환경에서 시작하는 게 중요합니다. 모델 프로퍼티를 이용해 속성을 편집하는 방법을 알아봅니다. # 플레이어 기본 속성 변경 **Player** 모델에서 기본 속성을 변경할 수 있습니다. 1. **Workspace - BaseEnvironment - NativeModel - Player**를 선택합니다. 2. **Play [chunk_id] | Guides:48:0
[task] | extract_knowledge [title] | 액션을 예약하고 실행하는 TimerService [category] | Guides [rephrased] | # TimerService: 흐름 제어 액션 예약 ## 1. 개념 설명 `TimerService`는 특정 시간 간격이 지난 후 실행할 액션(콜백 함수)을 예약하는 데 사용되는 서비스입니다. 일반적으로 시간 지연이 필요한 로직(예: 몬스터 사망 후 3초 뒤 아이템 드롭)을 구현할 때, `OnUpdate`에서 매 프레임마다 현재 시간(`os.clock()`)과 목표 시간을 비교하는 방식은 코드가 복잡해지고 성능 저하를 유발할 수 있습니다. `TimerService`를 사용하면 이러한 수동적인 시간 관리 대신, 실행할 함수와 지연 시 [original] | # 학습 과정 소개 몬스터가 등장하고 몇 초 뒤 공격을 시작하거나, 몬스터가 죽고 1초 뒤 아이템을 떨어뜨리는 것과 같은 어떤 일(액션)이 일어나는 타이밍을 제어해야 할 때가 있습니다. TimerService를 활용해 쉽고 효율적으로 액션이 일어나는 타이밍을 제어할 수 있습니다. TimerService가 제공하는 기능과 활용법을 알아보겠습니다. # TimerService 소개 **TimerService**는 원하는 순간에 어떤 액션을 실행하도록 예약하는 편의 기능을 제공합니다. Timer Service를 사용하지 않고 몬스터가 [chunk_id] | Guides:47:0
[task] | diverse_qa [title] | 액션을 예약하고 실행하는 TimerService [category] | Guides [rephrased] | 질문: `SetTimer()`를 통해 예약된 액션을 취소해야 하는 대표적인 게임 상황은 무엇인가요? 답변: 유저가 스위치를 On 상태로 만들었을 때 3초 후 문이 열리도록 예약해 두었지만, 문이 열리기 전에 유저가 스위치를 Off 상태로 만들 경우 `SetTimer()`의 예약을 취소해야 하는 상황이 해당됩니다. 질문: 다음 코드의 `local timerId = _TimerService:SetTimer(self, callBack, 3, true, 2)` 부분에서 `true`와 `2`는 각각 무엇을 의미합니까? 답변: 문서의 Tip [original] | `SetTimer()`를 통해 특정 액션을 수행하도록 예약을 만들었지만, 특정 조건에 의해 해당 예약을 취소해야 하는 경우가 빈번히 발생합니다. 게임 내에서 스위치를 On 했을 때 3초 후 문이 열리는 장치를 만들었다고 가정해 봅시다. 유저가 스위치를 On 상태로 만들었을 때 3초 뒤에 문이 열리게 됩니다. 문이 열리는 액션을 `SetTimer()`를 이용해 예약했기 때문입니다. 그러나 유저가 문이 열리기 전에 스위치를 Off 상태로 만든다면 `SetTimer()`의 예약을 취소해 Off일 때 문이 열리지 않게 만들어야 합니다. [chunk_id] | Guides:47:3
[task] | extract_knowledge [title] | 액션을 예약하고 실행하는 TimerService [category] | Guides [rephrased] | # TimerService: 반복 타이머 예약 ## 개념 설명 `_TimerService`는 특정 시간 간격으로 함수를 실행하도록 예약하는 서비스입니다. `SetTimer()` 메서드를 통해 `isRepeat` 매개변수를 `true`로 설정하면, 지정된 시간 간격(`intervalSeconds`)으로 콜백 함수가 반복적으로 실행됩니다. 반복 실행 모드(`isRepeat = true`)에서 `intervalSeconds`의 의미는 1회 실행 모드와 다릅니다. 1. **1회 실행 시**: `SetTimer()` 호출 시점부터 `i [original] | isRepeat을 true로 변경해 반복 실행하게 만듭니다. `SetTimer()`가 호출될 때 "SetTimer!"라는 문자열과 함께 해당 코드가 실행된 시간을 출력합니다. 예시 코드는 다음과 같습니다. 3초마다 `SetTimer()`로 넘긴 CallBack 함수가 호출될 때 "CallBack!"이라는 문자열과 함께 코드가 실행된 시간을 출력합니다. ```lua Method: [server only] void OnBeginPlay() { local callBack = function() log("Ca [chunk_id] | Guides:47:2