[task] | code [pass] | ⏳ 미판정 [title] | 스크립트 디버그 [question] | 제공된 문서는 '스크립트 디버그'와 '중단점(BreakPoint) 설정'에 관한 내용이며, mLua 스크립트 코딩을 위한 API(서비스, 컴포넌트, 메서드 등)가 포함되어 있지 않습니다. 따라서 요청하신 'mLua 코딩 과제'를 만들 수 없습니다. [answer] | 제시된 참고 문서는 **스크립트 디버그**와 **중단점(BreakPoint) 설정**에 관한 내용만 포함되어 있습니다. mLua 스크립트 코딩을 위한 API(서비스, 컴포넌트, 메서드 등)는 문서에 존재하지 않으므로, 요청하신 'mLua 코딩 과제'를 만들 수 없습니다. 참고로, 문서에 명시된 중단점(BreakPoint) 설정 기능은 다음과 같습니다. * **Enabled(활성화 여부)**: 체크 박스 해제 시 비활성화되며, 중단점은 유지되지만 동작하지 않습니다. * **Condition(조건식)**: 조건식이 `true [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 디버그를 시작했거나 종료한 이후 등 언제든 중단점을 편집할 수 있습니다. 디버그 실행 상태와 관계 없이 편집된 내용은 유지됩니다. 중단점은 마우스 오른쪽 버튼을 클릭해 **BreakPoint Settings** 창을 열고 편집할 수 있습니다. ![[object Object]](https://mod-file.dn.nexoncdn.co.kr/bbs/177319929868794f98eef19be40fb98fbc36f88291b3a.png "BreakingPoint Settings") | 번호 | 이름 | 설명 | | --- | ---
[task] | single_turn [pass] | ⏳ 미판정 [title] | 엔티티를 탐색하는 EntityService [question] | EntityService:GetEntityByPath로 가져온 템플릿 엔티티와 SpawnService를 통해 스폰된 인스턴스 엔티티는 메모리 상에서 어떤 관계에 있으며, 템플릿의 프로퍼티를 수정하면 이미 스폰된 인스턴스에 즉각 반영되나요? [answer] | 제공된 참고 문서에는 `EntityService:GetEntityByPath`로 가져온 엔티티와 `SpawnService`를 통해 스폰된 인스턴스 엔티티 간의 메모리 관계, 또는 템플릿 프로퍼티 수정 시 이미 스폰된 인스턴스에 즉각 반영되는지에 대한 정보가 포함되어 있지 않습니다. 따라서 주어진 문서만으로는 이 질문에 답할 수 없습니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 엔티티가 삭제될 때 발생하는 이벤트입니다. **Entity Event Handler**에서 핸들러를 추가할 수 있습니다. 이벤트 핸들러의 매개 변수로 이벤트가 전송되며, 이벤트에는 삭제 대기 중인 엔티티가 정보가 포함되어 있습니다. ```lua Method: [server only] void OnBeginPlay() { local monsterTemplate = _EntityService:GetEntityByPath("/maps/map01/monster-1") -- "spawnedMonster"라는 이름의 몬
[task] | code [pass] | ⏳ 미판정 [title] | 스크립트 디버그 [question] | _EntityService와 TransformComponent를 활용하여 "/maps/map01/obj" 경로에 있는 엔티티의 Position을 OnUpdate에서 매 프레임마다 log()로 출력하는 스크립트를 작성해줘 [answer] | `_EntityService:GetEntityByPath()`로 엔티티를 가져오고, `TransformComponent.Position`을 `OnUpdate`에서 매 프레임마다 `log()`로 출력하는 스크립트는 다음과 같습니다. ```lua Property: [None] any TargetEntity = nil Method: [server only] void OnBeginPlay() { self.TargetEntity = _EntityService:GetEntityByPath("/maps/map01/obj") } [s [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | ## 학습 과정 소개 디버그 기능을 통해 스크립트를 디버깅하는 방법에 대해 알아봅니다. ## 중단점(Breakpoints) 스크립트 디버깅의 시작은 중단점 설정에서 시작됩니다. 이상이 발생하거나, 오작동의 원인으로 의심되는 코드 라인에 중단점을 설정 또는 해제하는 방법을 알아봅니다. ### 중단점 아이콘 중단점 설정 상태에 따라 아이콘이 다르게 나타납니다. |아이콘 | 이름 | 설명| ---|---|--- | ![[object Object]](https://mod-file.dn.nexoncdn.co.kr/bbs/17691
[task] | instruction_following [pass] | ⏳ 미판정 [title] | 스크립트 디버그 [question] | 중단점 설정 항목 5가지(Enabled, Condition, Hit Count, Log Message, 코드 계속 실행)의 기능을 표로 정리해서, 각 항목의 '이름'과 '설명'만 포함해 출력하세요. [answer] | | 이름 | 설명 | | --- | --- | | Enabled(활성화 여부) | 중단점 활성화 여부를 설정할 수 있습니다. 체크 박스 해제 시 비활성화 되며, 중단점은 유지되지만 실제로 동작하지 않게 됩니다. | | Condition(조건식) | 지정한 조건식이 true일 때만 중단점에서 멈추도록 설정할 수 있습니다.<br>예를 들어, x>1로 조건식을 입력하면 변수 x가 1보다 클 때 중단점이 활성화됩니다. | | Hit Count(적중 횟수) | 중단점이 지정된 횟수만큼 적중되었을 때만 실행을 멈추도록 설정할 수 있습니다. 숫 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 디버그를 시작했거나 종료한 이후 등 언제든 중단점을 편집할 수 있습니다. 디버그 실행 상태와 관계 없이 편집된 내용은 유지됩니다. 중단점은 마우스 오른쪽 버튼을 클릭해 **BreakPoint Settings** 창을 열고 편집할 수 있습니다. ![[object Object]](https://mod-file.dn.nexoncdn.co.kr/bbs/177319929868794f98eef19be40fb98fbc36f88291b3a.png "BreakingPoint Settings") | 번호 | 이름 | 설명 | | --- | ---
[task] | single_turn [pass] | ⏳ 미판정 [title] | 스크립트 디버그 [question] | 중단점 아이콘이 기본 상태, 조건부, 비활성화 등으로 나뉘는데, 조건식과 코드 계속 실행 설정이 동시에 걸려 있으면 어떤 아이콘이 뜨나요? [answer] | 조건식과 코드 계속 실행 설정이 동시에 걸려 있으면 **코드 계속 실행 중단점** 아이콘이 나타납니다. 참고로, 이 상태의 중단점이 비활성화되면 **코드 계속 실행 중단점 비활성화** 아이콘으로 변경됩니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | ## 학습 과정 소개 디버그 기능을 통해 스크립트를 디버깅하는 방법에 대해 알아봅니다. ## 중단점(Breakpoints) 스크립트 디버깅의 시작은 중단점 설정에서 시작됩니다. 이상이 발생하거나, 오작동의 원인으로 의심되는 코드 라인에 중단점을 설정 또는 해제하는 방법을 알아봅니다. ### 중단점 아이콘 중단점 설정 상태에 따라 아이콘이 다르게 나타납니다. |아이콘 | 이름 | 설명| ---|---|--- | ![[object Object]](https://mod-file.dn.nexoncdn.co.kr/bbs/17691
[task] | single_turn [pass] | ⏳ 미판정 [title] | 엔티티를 탐색하는 EntityService [question] | SpawnService:SpawnByEntityTemplate 호출 시 마지막 네 개의 boolean 파라미터가 각각 어떤 의미를 가지며, 특정 플래그를 false로 설정하면 어떤 차이가 발생하나요? [answer] | 제공된 참고 문서에는 `_SpawnService:SpawnByEntityTemplate` 함수의 마지막 네 개의 `boolean` 파라미터에 대한 의미 설명이 포함되어 있지 않습니다. 문서에는 다음과 같이 함수가 호출되는 코드 예제만 제시되어 있으며, 각 boolean 값이 어떤 속성(예: 물리 적용 여부, 네트워크 동기화 여부, 스폰 즉시 활성화 여부 등)을 제어하는지에 대한 정의가 없습니다. ```lua local spawnedEntity = _SpawnService:SpawnByEntityTemplate(monsterTem [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 엔티티가 삭제될 때 발생하는 이벤트입니다. **Entity Event Handler**에서 핸들러를 추가할 수 있습니다. 이벤트 핸들러의 매개 변수로 이벤트가 전송되며, 이벤트에는 삭제 대기 중인 엔티티가 정보가 포함되어 있습니다. ```lua Method: [server only] void OnBeginPlay() { local monsterTemplate = _EntityService:GetEntityByPath("/maps/map01/monster-1") -- "spawnedMonster"라는 이름의 몬
[task] | code [pass] | ⏳ 미판정 [title] | 스크립트 디버그 [question] | _TouchEvent와 self를 활용하여 사용자가 화면을 터치할 때마다 log()로 "Touched"를 출력하는 스크립트를 작성해줘 [answer] | 사용자가 화면을 터치할 때마다 로그를 출력하는 스크립트는 `TouchEvent` 이벤트 핸들러를 사용합니다. 참고 문서에 제공된 예제 코드에서는 `_TouchEvent`라는 서비스나 `HandleTouchEvent`라는 특정 이벤트 핸들러의 정확한 서식이 명시되어 있지 않습니다. 문서에는 `UserService`와 `EntityService` 등 다른 서비스의 사용 예시와 `OnMonsterDestroy`와 같은 메서드 시그니처는 있지만, 터치 이벤트 처리를 위한 구체적인 API 이름(예: `HandleTouchStart`, `H [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | ## 학습 과정 소개 디버그 기능을 통해 스크립트를 디버깅하는 방법에 대해 알아봅니다. ## 중단점(Breakpoints) 스크립트 디버깅의 시작은 중단점 설정에서 시작됩니다. 이상이 발생하거나, 오작동의 원인으로 의심되는 코드 라인에 중단점을 설정 또는 해제하는 방법을 알아봅니다. ### 중단점 아이콘 중단점 설정 상태에 따라 아이콘이 다르게 나타납니다. |아이콘 | 이름 | 설명| ---|---|--- | ![[object Object]](https://mod-file.dn.nexoncdn.co.kr/bbs/17691
[task] | single_turn [pass] | ⏳ 미판정 [title] | 엔티티를 탐색하는 EntityService [question] | OnBeginPlay에서 _TimerService:SetTimerOnce로 5초 후 삭제를 예약했는데, 그 사이에 엔티티가 이미 다른 방법으로 삭제되었을 때 발생하는 오류나 비정상 동작을 방지하기 위한 권장 패턴이 있나요? [answer] | 제공된 참고 문서에는 `_TimerService:SetTimerOnce`로 예약된 콜백 실행 시점에 해당 엔티티가 이미 삭제되었을 경우를 처리하는 구체적인 API(예: `IsDestroyed` 체크 메서드 등)나 권장 패턴이 명시되어 있지 않습니다. 문서에는 `_EntityService:Destroy` 호출 시 `EntityDestroyEvent`가 발생하며, 이벤트 핸들러를 통해 삭제 정보를 확인할 수 있다는 내용과 `_TimerService:SetTimerOnce`를 사용하여 특정 시간 후 엔티티를 삭제하는 기본적인 예제만 제 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 엔티티가 삭제될 때 발생하는 이벤트입니다. **Entity Event Handler**에서 핸들러를 추가할 수 있습니다. 이벤트 핸들러의 매개 변수로 이벤트가 전송되며, 이벤트에는 삭제 대기 중인 엔티티가 정보가 포함되어 있습니다. ```lua Method: [server only] void OnBeginPlay() { local monsterTemplate = _EntityService:GetEntityByPath("/maps/map01/monster-1") -- "spawnedMonster"라는 이름의 몬
[task] | code [pass] | ⏳ 미판정 [title] | 엔티티를 탐색하는 EntityService [question] | OnBeginPlay 에서 _EntityService:GetEntityByPath 로 몬스터 템플릿을 조회하고, _SpawnService:SpawnByEntityTemplate 의 마지막 네 번째 인자를 true 로 설정하여 "spawnedMonster" 를 스폰하는 스크립트를 작성해줘 [answer] | 요청하신 동작을 수행하는 mLua 스크립트입니다. `OnBeginPlay`에서 몬스터 템플릿을 조회하고, `_SpawnService:SpawnByEntityTemplate`을 호출할 때 마지막 네 번째 인자를 `true`로 설정하여 `"spawnedMonster"`를 스폰합니다. ```lua Method: [server only] void OnBeginPlay() { local monsterTemplate = _EntityService:GetEntityByPath("/maps/map01/monster-1") -- [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 엔티티가 생성될 때 발생하는 이벤트입니다. **Entity Event Handler**에서 핸들러를 추가할 수 있습니다. 이벤트 핸들러의 매개 변수로 이벤트가 전송되며, 이벤트에는 생성된 엔티티가 정보가 포함되어 있습니다. ```lua Method: [server only] void OnBeginPlay() { local monsterTemplate = _EntityService:GetEntityByPath("/maps/map01/monster-1") -- "spawnedMonster"라는 이름의 몬스터 엔티티 스폰
[task] | single_turn [pass] | ⏳ 미판정 [title] | 엔티티를 탐색하는 EntityService [question] | EntityCreateEvent와 EntityDestroyEvent 핸들러가 동시에 등록되어 있을 때, 특정 엔티티의 생성과 삭제 순서와 타이밍은 어떻게 보장되나요? [answer] | 제공된 문서에는 `EntityCreateEvent`와 `EntityDestroyEvent` 핸들러가 동시에 등록되어 있을 때, 특정 엔티티의 생성과 삭제 이벤트가 발생하는 **정확한 순서(동시성)나 타이밍에 대한 보장 사항이 명시되어 있지 않습니다.** 문서에서 확인할 수 있는 사실은 다음과 같습니다: 1. **EntityCreateEvent**: 엔티티가 생성될 때 발생합니다. 2. **EntityDestroyEvent**: 엔티티가 **삭제될 때** 발생합니다. 이때 이벤트에 포함된 엔티티 정보는 **"삭제 대기 중"** [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 엔티티가 삭제될 때 발생하는 이벤트입니다. **Entity Event Handler**에서 핸들러를 추가할 수 있습니다. 이벤트 핸들러의 매개 변수로 이벤트가 전송되며, 이벤트에는 삭제 대기 중인 엔티티가 정보가 포함되어 있습니다. ```lua Method: [server only] void OnBeginPlay() { local monsterTemplate = _EntityService:GetEntityByPath("/maps/map01/monster-1") -- "spawnedMonster"라는 이름의 몬
[task] | two_turn [pass] | ⏳ 미판정 [title] | Entity Event System [question] | `TimeManager`의 `SendEvent` 메서드가 `[server]` 실행 공간으로 선언되어 있는데, 이 메서드가 서버에서만 실행되는 이유는 무엇이며 `self.Entity:SendEvent(event)` 호출 시 어떤 데이터가 전송되는가 [answer] | `TimeManager`의 `SendEvent` 메서드가 `[server]` 실행 공간으로 선언된 이유는, 이 메서드 내부에서 `self.Entity:SendEvent(event)`를 호출하여 특정 이벤트 객체를 다른 엔티티(클라이언트)로 전송하기 위해서입니다. 참고 문서에 제시된 코드와 설명에 따르면, `SendEvent` 메서드에서 `self.Entity:SendEvent(event)`가 호출될 때 전송되는 데이터는 다음과 같습니다. 1. **전송 대상 객체**: `SunriseEvent` 타입의 `event` 객체입니다. [followup] | `SunriseEvent` 객체에 `isSunrise` 값을 담아 전송하는 과정에서 `event.isSunrise` 프로퍼티가 어떻게 초기화되고, 이벤트 수신 측에서 이 값을 어떻게 활용하는지 코드 예시를 요청합니다. [followup_answer] | 제공된 참고 문서에는 `SunriseEvent` 객체의 `isSunrise` 프로퍼티가 어떻게 초기화되고 전송되는지에 대한 **송신 측** 코드만 포함되어 있으며, **수신 측**(이벤트를 받아들이는 컴포넌트)의 코드 예시나 `SunriseEvent` 객체의 내부 구조(프로퍼티 선언부)에 대한 설명은 없습니다. 따라서 문서에 근거할 수 있는 정보만 나열하면 다음과 같습니다. ### 1. `event.isSunrise` 초기화 및 전송 과정 (송신 측) `TimeManager` 컴포넌트의 `[server]` 실행 공간 메서드인 ` [scores] | [judge_reason] | [source_doc] | 특정 시간마다 해가 뜨고 지는 로직을 만들어봅시다. 1. 해가 뜨고 지는 시간을 관리할 스크립트 컴포넌트가 필요합니다. **Workspace - MyDesk**의 콘텍스트 메뉴에서 **Create Scrips - Create Component**를 클릭해 새 컴포넌트를 만듭니다. 이름으로 **TimeManager**를 입력합니다. 2. **TimeManager** 스크립트 컴포넌트를 엽니다. `OnUpdate` 함수를 추가하여 해가 뜨고 지는 것을 판단하도록 합니다. ```lua Property: [Sy
[task] | code [pass] | ⏳ 미판정 [title] | 스크립트 디버그 [question] | 따라서 문서에 나온 정보만으로 구체적인 mLua 코딩 과제를 만들 수 없습니다. [answer] | 제시된 참고 문서에는 mLua의 문법, API, 또는 컴포넌트 구조에 대한 정보가 포함되어 있지 않습니다. 문서의 내용은 전적으로 **스크립트 디버깅 도구 사용법**(중단점 관리, 디버그 모드 실행, 코드 상태 확인 등)에 국한되어 있습니다. 따라서 질문하신 대로, 해당 문서의 정보만으로 구체적인 mLua 코딩 과제를 만들 수 없으며, 문서에는 mLua 코드 작성에 필요한 API나 문법 정보가 존재하지 않습니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 중단점을 비활성화할 때는 마우스 왼쪽 버튼을 클릭합니다. 비활성화된 중단점은 ![[object Object]](https://mod-file.dn.nexoncdn.co.kr/bbs/1769135859948681fdb075cef4ee7ab4fed9f2f4d4ebd.png "breakpoint4"), ![[object Object]](https://mod-file.dn.nexoncdn.co.kr/bbs/1769135881421982425439c154f54a9f5db45be1c38a6.png "breakpoint5") 로 표시되며, **
[task] | single_turn [pass] | ⏳ 미판정 [title] | 스크립트 디버그 [question] | 스크립트 디버깅 중 특정 라인에서만 멈추게 하려면 F9 키 외에 BreakPoints에서 추가로 입력해야 하는 항목은 무엇인가요? [answer] | 특정 조건에서만 코드가 실행될 때 중단점을 멈추게 하려면 **조건식**을 입력해야 합니다. 이 기능을 사용하면 단순히 해당 라인에 도달하는 것이 아니라, 입력한 조건식이 참(true)이 되는 경우에만 디버거가 중단됩니다. **설정 방법:** 1. 해당 코드 라인에서 **F9** 키를 눌러 중단점을 설정합니다. 2. 중단점 아이콘을 통해 **BreakPoints** 설정 영역에 접근합니다. 3. BreakPoints 영역에 원하는 **조건식**을 입력합니다. 이렇게 설정하면 중단점 아이콘이 '조건부 중단점'으로 표시되며, 조건이 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | ## 학습 과정 소개 디버그 기능을 통해 스크립트를 디버깅하는 방법에 대해 알아봅니다. ## 중단점(Breakpoints) 스크립트 디버깅의 시작은 중단점 설정에서 시작됩니다. 이상이 발생하거나, 오작동의 원인으로 의심되는 코드 라인에 중단점을 설정 또는 해제하는 방법을 알아봅니다. ### 중단점 아이콘 중단점 설정 상태에 따라 아이콘이 다르게 나타납니다. |아이콘 | 이름 | 설명| ---|---|--- | ![[object Object]](https://mod-file.dn.nexoncdn.co.kr/bbs/17691
[task] | single_turn [pass] | ⏳ 미판정 [title] | 스크립트 디버그 [question] | 중단점 편집 기능을 통해 기존에 설정해둔 중단점의 조건식을 수정하고 싶을 때 어떤 순서로 조작해야 하나요? [answer] | 기존에 설정해둔 중단점의 조건식을 수정하려면 다음과 같은 순서로 조작해야 합니다. 1. **중단점 선택**: 수정하려는 중단점이 설정된 코드 라인을 선택합니다. 2. **BreakPoints 열기**: 중단점 편집 기능을 통해 중단점 목록 또는 편집 창인 `BreakPoints`를 엽니다. (참고 문서에는 `BreakPoints`에서 조건식을 입력한다고 명시되어 있음) 3. **조건식 입력**: `BreakPoints` 영역에서 해당 중단점에 대한 조건식을 입력하거나 수정합니다. 참고로, 조건식이 입력된 상태의 중단점은 * [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | ## 학습 과정 소개 디버그 기능을 통해 스크립트를 디버깅하는 방법에 대해 알아봅니다. ## 중단점(Breakpoints) 스크립트 디버깅의 시작은 중단점 설정에서 시작됩니다. 이상이 발생하거나, 오작동의 원인으로 의심되는 코드 라인에 중단점을 설정 또는 해제하는 방법을 알아봅니다. ### 중단점 아이콘 중단점 설정 상태에 따라 아이콘이 다르게 나타납니다. |아이콘 | 이름 | 설명| ---|---|--- | ![[object Object]](https://mod-file.dn.nexoncdn.co.kr/bbs/17691
[task] | instruction_following [pass] | ⏳ 미판정 [title] | 스크립트 디버그 [question] | Watch Expression 등록 시 일반 변수와 프로퍼티의 명명 규칙 차이를 2문장 이내로 설명하세요. [answer] | 함수 내 선언된 일반 변수의 경우 변수 이름만 그대로 입력하면 됩니다. 반면 프로퍼티를 등록할 때는 `self.프로퍼티 명` 형식으로 작성해야 합니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 중단점을 설정한 코드를 확인했을 때 문제가 없다면, 혹은 해당 코드 아래 줄의 상태도 함께 확인하고 싶다면 어떻게 해야 할까요? 확인하고자 하는 모든 코드 라인에 중단점을 설정할 수도 없고, 매번 디버그 시작/중지를 반복하며 중단점 설정 해제를 반복하는 것도 비효율적입니다. 디버깅 중 중단점에서 플레이가 멈춘 뒤, 중단점이 설정된 라인 이후로 코드를 실행하는 방법이 있습니다. **프로시저 단위 실행**, **한 단계씩 코드 실행** 등을 통해 단위별로 코드를 실행하며 코드의 상태나 흐름을 파악할 수 있습니다. 단위별 코드 실행은 디
[task] | code [pass] | ⏳ 미판정 [title] | 엔티티를 탐색하는 EntityService [question] | `_EntityService:GetEntityByTag("Boss")`를 호출하여 "Boss" 태그를 가진 엔티티를 찾은 후, 해당 엔티티가 유효한지 확인하여 유효할 경우 `Position`을 변경하는 스크립트를 작성해줘 [answer] | `_EntityService:GetEntityByTag("Boss")`는 태그가 "Boss"인 엔티티를 반환하지만, 해당 태그를 가진 엔티티가 존재하지 않으면 `nil`을 반환할 수 있습니다. 따라서 반환된 값이 `nil`인지 먼저 확인하는 것이 안전합니다. 참고 문서에는 엔티티의 유효성(삭제 여부)을 체크하는 함수가 `EntityService`에 제공된다고 언급되어 있으나, 구체적인 함수 이름과 시그니처는 문서에 명시되어 있지 않습니다. 따라서 제공된 문서 근거에 따라 **반환 값이 `nil`이 아닌지 확인**하는 방식으로 유효 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 모델 ID와 일치하는 모델로부터 생성된 모든 엔티티를 반환합니다. 다음과 같이 수많은 엔티티가 배치된 상황에서 NPC와 같이 동일 모델로부터 생성된 모든 엔티티를 받고 싶을 때 유용하게 사용됩니다. 특정 엔티티에 접근하여 모델을 받은 뒤, 해당 모델로부터 생성된 모든 엔티티를 받을 수 있습니다. ```lua void GetEntitiesSpawnedByModelIdExample() { local modelId = _EntityService:GetEntityByPath("/maps/map02/npc-5396_1").Mode
[task] | code [pass] | ⏳ 미판정 [title] | 엔티티를 탐색하는 EntityService [question] | _EntityService:GetEntityByPath("/maps/map01/monster-1") 로 가져온 템플릿으로 "spawnedMonster" 이름의 엔티티를 스폰하고, EntityCreateEvent 핸들러에서 해당 이름의 엔티티 생성 시에만 로그를 출력하는 스크립트를 작성해줘 [answer] | 요청하신 기능을 구현하기 위해 `_SpawnService:SpawnByEntityTemplate`으로 엔티티를 생성하고, `EntityCreateEvent` 핸들러에서 생성된 엔티티의 이름을 확인하여 조건부 로그를 출력하는 스크립트를 작성했습니다. ```lua Method: [server only] void OnBeginPlay() { local monsterTemplate = _EntityService:GetEntityByPath("/maps/map01/monster-1") -- "spawnedMonster"라는 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 엔티티가 생성될 때 발생하는 이벤트입니다. **Entity Event Handler**에서 핸들러를 추가할 수 있습니다. 이벤트 핸들러의 매개 변수로 이벤트가 전송되며, 이벤트에는 생성된 엔티티가 정보가 포함되어 있습니다. ```lua Method: [server only] void OnBeginPlay() { local monsterTemplate = _EntityService:GetEntityByPath("/maps/map01/monster-1") -- "spawnedMonster"라는 이름의 몬스터 엔티티 스폰
[task] | single_turn [pass] | ⏳ 미판정 [title] | 스크립트 디버그 [question] | 디버그 모드 실행 시 중단점이 걸린 지점에서 게임이 멈추는 원리와, 이를 해제하면 게임 실행에 어떤 변화가 일어나는지 설명해 주실 수 있나요? [answer] | 중단점이 설정된 상태에서 디버그 모드로 실행하면, 해당 코드 라인이 실행되는 순간 게임 진행이 일시적으로 멈춥니다. 이는 스크립트 실행 흐름이 중단점 라인에서 정지되어 개발자가 현재 상태나 변수 값을 확인할 수 있도록 하기 위함입니다. 반대로, 중단점이 설정된 코드 라인을 선택한 뒤 다시 **F9** 키를 눌러 중단점을 해제하면, 디버그 모드로 실행하더라도 해당 지점에서 게임이 멈추지 않고 계속 진행됩니다. 즉, 중단점 해제는 특정 코드 라인에서의 실행 정지 기능을 비활성화하여 스크립트가 연속적으로 실행되도록 하는 변화입니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | ## 학습 과정 소개 디버그 기능을 통해 스크립트를 디버깅하는 방법에 대해 알아봅니다. ## 중단점(Breakpoints) 스크립트 디버깅의 시작은 중단점 설정에서 시작됩니다. 이상이 발생하거나, 오작동의 원인으로 의심되는 코드 라인에 중단점을 설정 또는 해제하는 방법을 알아봅니다. ### 중단점 아이콘 중단점 설정 상태에 따라 아이콘이 다르게 나타납니다. |아이콘 | 이름 | 설명| ---|---|--- | ![[object Object]](https://mod-file.dn.nexoncdn.co.kr/bbs/17691
[task] | code [pass] | ⏳ 미판정 [title] | Entity Event System [question] | `self.Entity`를 통해 `SunriseEvent` 핸들러를 등록하고, 지정된 시간 간격으로 `isSunrise` 값을 토글하여 이벤트를 발생시키는 로직을 포함하는 스케줄러 스크립트를 작성해줘. [answer] | 메이플스토리 월드의 `mLua` 스크립트 언어와 Entity Event System 규칙을 바탕으로 요청하신 스케줄러 스크립트를 작성했습니다. **핵심 구현 포인트:** 1. **이벤트 타입:** 참고 문서에 따라 `SunriseEvent` 타입을 사용하며, `isSunrise` 프로퍼티를 포함한다고 가정합니다. (실제 프로젝트에서는 `SunriseEvent` 스크립트가 미리 생성되어 있어야 합니다.) 2. **스케줄링:** `_TimerService:SetTimerOnce`를 재귀적으로 호출하여 지정된 시간 간격(예: 5초) [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 메이플스토리 월드에서는 Entity Event System을 사용해 이벤트를 제어할 수 있습니다. 이번 시간에는 Entity Event System을 이용해 "뱀파이어 vs 헌터"의 게임 요소 중 하나를 만들어봅시다. 다음 가이드를 먼저 학습하면 이번 과정을 이해하는 데 많은 도움이 됩니다. [Event System](https://mod-developers.nexon.com/docs?postId=73) # Entity Event System 이벤트를 받고 보내려면 먼저 Entity Event System을
[task] | code [pass] | ⏳ 미판정 [title] | 엔티티를 탐색하는 EntityService [question] | _SpawnService:SpawnByEntityTemplate 을 사용하여 엔티티를 스폰한 후, EntityService 의 EntityCreateEvent 핸들러를 통해 생성된 엔티티의 이름을 확인하고 조건에 따라 반환(return)하는 로직을 구현하는 스크립트를 작성해줘 [answer] | 요청하신 로직을 구현하는 mLua 스크립트입니다. `_SpawnService:SpawnByEntityTemplate`으로 엔티티를 생성하고, `EntityService`의 `HandleEntityCreateEvent` 핸들러에서 생성된 엔티티의 이름을 확인하여 특정 조건(예: 이름이 "spawnedMonster"가 아닌 경우)에 맞으면 `return`을 사용하여 추가 처리를 중단하는 방식입니다. ```lua Method: [server only] void OnBeginPlay() { local monsterTemplate [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 엔티티가 생성될 때 발생하는 이벤트입니다. **Entity Event Handler**에서 핸들러를 추가할 수 있습니다. 이벤트 핸들러의 매개 변수로 이벤트가 전송되며, 이벤트에는 생성된 엔티티가 정보가 포함되어 있습니다. ```lua Method: [server only] void OnBeginPlay() { local monsterTemplate = _EntityService:GetEntityByPath("/maps/map01/monster-1") -- "spawnedMonster"라는 이름의 몬스터 엔티티 스폰
[task] | instruction_following [pass] | ⏳ 미판정 [title] | 스크립트 디버그 [question] | Call Stack 패널을 열어 현재 디버깅 중인 함수의 호출 순서와 실행 공간을 확인하는 방법을 단계별 번호 목록으로 작성하세요. [answer] | Call Stack 패널을 열어 현재 디버깅 중인 함수의 호출 순서와 실행 공간을 확인하는 방법은 다음과 같습니다. 1. 디버그 모드를 시작하여 중단점이 설정된 라인에서 코드가 실행을 멈추게 합니다. 2. 상단 내비게이션 메뉴에서 **Panels - Debug - Call Stack**을 클릭하여 패널을 엽니다. 3. Call Stack 패널에 표시된 목록을 통해 `OnBeginPlay`부터 시작하여 현재 디버깅 중인 함수까지의 호출 순서와 각 함수의 실행 공간을 확인할 수 있습니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 중단점을 설정한 코드를 확인했을 때 문제가 없다면, 혹은 해당 코드 아래 줄의 상태도 함께 확인하고 싶다면 어떻게 해야 할까요? 확인하고자 하는 모든 코드 라인에 중단점을 설정할 수도 없고, 매번 디버그 시작/중지를 반복하며 중단점 설정 해제를 반복하는 것도 비효율적입니다. 디버깅 중 중단점에서 플레이가 멈춘 뒤, 중단점이 설정된 라인 이후로 코드를 실행하는 방법이 있습니다. **프로시저 단위 실행**, **한 단계씩 코드 실행** 등을 통해 단위별로 코드를 실행하며 코드의 상태나 흐름을 파악할 수 있습니다. 단위별 코드 실행은 디
[task] | single_turn [pass] | ⏳ 미판정 [title] | 스크립트 디버그 [question] | Breakpoints 패널에서 특정 함수의 중단점 위치로 바로 점프하려면 어떤 조작을 해야 하나요? [answer] | Breakpoints 패널에서 특정 함수의 중단점 위치로 바로 점프하려면, 해당 중단점 목록 항목을 **더블 클릭**하거나, 항목을 우클릭하여 콘텍스트 메뉴에서 **Move**를 클릭하면 됩니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 중단점을 비활성화할 때는 마우스 왼쪽 버튼을 클릭합니다. 비활성화된 중단점은 ![[object Object]](https://mod-file.dn.nexoncdn.co.kr/bbs/1769135859948681fdb075cef4ee7ab4fed9f2f4d4ebd.png "breakpoint4"), ![[object Object]](https://mod-file.dn.nexoncdn.co.kr/bbs/1769135881421982425439c154f54a9f5db45be1c38a6.png "breakpoint5") 로 표시되며, **
[task] | code [pass] | ⏳ 미판정 [title] | 스크립트 디버그 [question] | 주어진 문서에는 디버거 UI 조작(중단점 설정/삭제/이동, 디버그 시작/중지, Watch Expression, 마우스 오버 툴팁)에 대한 설명만 포함되어 있으며, 실제 mLua 코드 작성에 필요한 API(서비스, 컴포넌트 메서드, 이벤트 핸들러 등)가 전혀 언급되어 있지 않습니다. [answer] | 제시된 문서에는 요청하신 내용과 일치하는 정보만 포함되어 있습니다. 해당 문서에는 **mLua 스크립트 작성에 필요한 API(서비스, 컴포넌트 메서드, 이벤트 핸들러 등)가 전혀 언급되어 있지 않습니다.** 문서의 내용은 오직 **디버거 UI 조작 및 디버깅 과정**에 대한 설명만 담고 있습니다. 구체적인 내용은 다음과 같습니다: 1. **중단점 관리**: 중단점 비활성화/활성화, 해제(더블 클릭), `Breakpoints` 패널을 통한 중단점 목록(Entry, Method, Line) 확인 및 삭제/이동 방법 2. **디버 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 중단점을 비활성화할 때는 마우스 왼쪽 버튼을 클릭합니다. 비활성화된 중단점은 ![[object Object]](https://mod-file.dn.nexoncdn.co.kr/bbs/1769135859948681fdb075cef4ee7ab4fed9f2f4d4ebd.png "breakpoint4"), ![[object Object]](https://mod-file.dn.nexoncdn.co.kr/bbs/1769135881421982425439c154f54a9f5db45be1c38a6.png "breakpoint5") 로 표시되며, **
[task] | two_turn [pass] | ⏳ 미판정 [title] | Entity Event System [question] | 헌터의 궁극기인 일출 스킬을 위해 Z 키 입력 시 이벤트를 호출하는 `HunterComponent`의 `HandleKeyDownEvent` 구현에서 `self.Entity.CurrentMap.TimeManager` 접근 방식은 어떤 구조를 전제하는가 [answer] | `self.Entity.CurrentMap.TimeManager` 접근 방식은 다음과 같은 구조를 전제합니다. 1. **`self.Entity`**: 현재 스크립트가 부착된 엔티티(헌터)를 가리킵니다. 2. **`.CurrentMap`**: 해당 엔티티가 현재 존재하는 맵(스페이스) 객체를 참조합니다. 3. **`.TimeManager`**: 현재 맵의 루트 엔티티나 맵 객체에 직접 **`TimeManager`**라는 이름의 컴포넌트가 존재한다고 가정합니다. 즉, 이 코드가 정상적으로 동작하려면 **`TimeManager` [followup] | `KeyboardKey.Z` 입력 감지 후 `timeManager:SendEvent(true)`를 직접 호출하는 방식이 일반적인 이벤트 시스템과 어떻게 다른지, 그리고 이 코드가 콘솔에 "일출" 로그를 남기며 해 뜨는 상태를 강제 변경하는 과정을 단계별로 설명해 주세요. [followup_answer] | 제공된 참고 문서를 근거로 `HunterComponent`에서 Z 키 입력 시 발생하는 과정과 일반적인 이벤트 시스템과의 차이를 설명합니다. ### 1. 일반적인 이벤트 시스템과의 차이점 참고 문서에 제시된 `TimeManager`와 `HunterComponent`의 구조를 보면, 두 컴포넌트 간의 통신 방식에 다음과 같은 특징이 있습니다. * **`TimeManager` (수신자/관리자):** * `SendEvent` 메서드 내부에서 `SunriseEvent` 객체를 생성하고 `self.Entity:SendEv [scores] | [judge_reason] | [source_doc] | 특정 시간마다 해가 뜨고 지는 로직을 만들어봅시다. 1. 해가 뜨고 지는 시간을 관리할 스크립트 컴포넌트가 필요합니다. **Workspace - MyDesk**의 콘텍스트 메뉴에서 **Create Scrips - Create Component**를 클릭해 새 컴포넌트를 만듭니다. 이름으로 **TimeManager**를 입력합니다. 2. **TimeManager** 스크립트 컴포넌트를 엽니다. `OnUpdate` 함수를 추가하여 해가 뜨고 지는 것을 판단하도록 합니다. ```lua Property: [Sy
[task] | instruction_following [pass] | ⏳ 미판정 [title] | 점프대 만들기 [question] | 점프대 스크립트에서 충돌한 대상이 nil인 경우를 처리하는 조건문 두 가지의 목적을 3문장 이내로 요약하세요. [answer] | `RigidbodyComponent`가 없는 대상에는 물리적 힘을 가할 수 없으므로, 컴포넌트가 nil이면 함수를 즉시 종료해 오류를 방지합니다. `PlayerControllerComponent`가 없는 대상은 방향 정보를 알 수 없으므로, 이 컴포넌트가 nil이면 점프 방향을 결정하지 못해 함수를 종료합니다. 두 조건은 각각 물리적 힘 적용과 방향 판별에 필수적인 컴포넌트의 존재를 검증하여, 비정상적인 대상에 대한 안전한 처리를 보장합니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 점프대에 닿으면 캐릭터가 높이 솟아오르는 점프대를 만들어 봅니다. 이번 예제를 통해 확장 스크립트 작성법과 스크립트를 통해 물체와의 충돌 및 충돌 시 처리, 그리고 물체에 물리적인 힘을 가하는 방법에 대해 알아봅니다. 추가로 컴포넌트에 프로퍼티를 추가하고, 오브젝트별로 다른 프로퍼티 값을 설정하는 방법을 알아봅니다. # 점프대 배치하기 1. **Preset List**에서 스프링 모양의 모델(object-4575)을 찾아 맵에 배치합니다. # TriggerComponent로 충돌 기능 활용하기 물체와
[task] | single_turn [pass] | ⏳ 미판정 [title] | 스크립트 디버그 [question] | F9 키로 중단점을 설정했는데 게임이 해당 라인에서 멈추지 않아요. 중단점의 상태가 비활성화되어 있는지 확인하는 방법은 무엇인가요? [answer] | 중단점이 설정되어도 게임이 해당 라인에서 멈추지 않는 가장 흔한 원인은 해당 중단점이 **비활성화** 상태이기 때문입니다. 중단점의 활성화 여부를 확인하는 방법은 중단점 아이콘의 모양을 살펴보는 것입니다. 아이콘에 따라 상태가 다음과 같이 구분됩니다: * **기본 중단점** (활성화): 다른 설정이 없는 기본 상태의 아이콘입니다. * **조건부 중단점** (활성화): 조건식이 입력된 상태의 아이콘입니다. * **코드 계속 실행 중단점** (활성화): '코드 계속 실행' 옵션이 설정된 상태의 아이콘입니다. * **중 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | ## 학습 과정 소개 디버그 기능을 통해 스크립트를 디버깅하는 방법에 대해 알아봅니다. ## 중단점(Breakpoints) 스크립트 디버깅의 시작은 중단점 설정에서 시작됩니다. 이상이 발생하거나, 오작동의 원인으로 의심되는 코드 라인에 중단점을 설정 또는 해제하는 방법을 알아봅니다. ### 중단점 아이콘 중단점 설정 상태에 따라 아이콘이 다르게 나타납니다. |아이콘 | 이름 | 설명| ---|---|--- | ![[object Object]](https://mod-file.dn.nexoncdn.co.kr/bbs/17691
[task] | single_turn [pass] | ⏳ 미판정 [title] | 엔티티를 탐색하는 EntityService [question] | HandleEntityDestroyEvent 핸들러에서 접근할 수 있는 event.Entity 객체가 실제 삭제 완료된 엔티티인지, 아니면 삭제 대기 상태인 엔티티인지 어떻게 구분할 수 있나요? [answer] | 참고 문서에 따르면, `HandleEntityDestroyEvent` 이벤트는 **엔티티가 삭제될 때** 발생하며, 이벤트에 포함된 `event.Entity`는 **삭제 대기 중인 엔티티**의 정보를 포함하고 있습니다. 따라서 `event.Entity`를 통해 접근하는 객체는 실제 삭제 완료(멸망)된 상태가 아니라, 아직 존재하지만 삭제 처리를 위해 대기 중인 상태의 엔티티입니다. ### 코드 예시 `OnBeginPlay`에서 엔티티를 생성하고 5초 후 삭제하면, 삭제 시점에 `HandleEntityDestroyEvent`가 트 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 엔티티가 삭제될 때 발생하는 이벤트입니다. **Entity Event Handler**에서 핸들러를 추가할 수 있습니다. 이벤트 핸들러의 매개 변수로 이벤트가 전송되며, 이벤트에는 삭제 대기 중인 엔티티가 정보가 포함되어 있습니다. ```lua Method: [server only] void OnBeginPlay() { local monsterTemplate = _EntityService:GetEntityByPath("/maps/map01/monster-1") -- "spawnedMonster"라는 이름의 몬
[task] | two_turn [pass] | ⏳ 미판정 [title] | 엔티티를 탐색하는 EntityService [question] | _EntityService와 _SpawnService를 조합하여 특정 경로에서 템플릿을 가져와 엔티티를 스폰하고 일정 시간 후 자동으로 삭제하는 과정은 어떻게 구현하나요? [answer] | `_EntityService`와 `_SpawnService`를 조합하여 엔티티를 스폰하고 일정 시간 후 자동으로 삭제하는 과정은 다음 단계로 구현합니다. 1. **템플릿 로드**: `_EntityService:GetEntityByPath()`를 사용하여 맵 내 특정 경로에 있는 엔티티 템플릿을 가져옵니다. 2. **엔티티 스폰**: `_SpawnService:SpawnByEntityTemplate()`을 호출하여 가져온 템플릿을 기반으로 실제 엔티티를 월드에 생성합니다. 3. **자동 삭제 예약**: `_TimerService:S [followup] | _TimerService:SetTimerOnce를 이용해 5초 후 스폰한 엔티티를 _EntityService:Destroy로 삭제하는 OnBeginPlay 메서드 내부 코드를 작성해 주세요. [followup_answer] | `_TimerService:SetTimerOnce`를 이용해 5초 후 스폰한 엔티티를 `_EntityService:Destroy`로 삭제하는 `OnBeginPlay` 메서드 코드는 다음과 같습니다. ```lua Method: [server only] void OnBeginPlay() { local monsterTemplate = _EntityService:GetEntityByPath("/maps/map01/monster-1") -- "spawnedMonster"라는 이름의 몬스터 엔티티 스폰 loca [scores] | [judge_reason] | [source_doc] | 엔티티가 삭제될 때 발생하는 이벤트입니다. **Entity Event Handler**에서 핸들러를 추가할 수 있습니다. 이벤트 핸들러의 매개 변수로 이벤트가 전송되며, 이벤트에는 삭제 대기 중인 엔티티가 정보가 포함되어 있습니다. ```lua Method: [server only] void OnBeginPlay() { local monsterTemplate = _EntityService:GetEntityByPath("/maps/map01/monster-1") -- "spawnedMonster"라는 이름의 몬
[task] | instruction_following [pass] | ⏳ 미판정 [title] | 스크립트 디버그 [question] | 디버그 모드에서 제공하는 4가지 코드 실행 버튼의 기능과 단축키를 표로 정리하세요. [answer] | 디버그 모드에서 사용할 수 있는 4가지 코드 실행 버튼의 기능과 단축키는 다음과 같습니다. | 버튼 | 기능 | 단축키 | 설명 | | --- | --- | --- | --- | | 다음 중단점까지 이동 | 다음 중단점까지 이동 | F5 | 현재까지 실행된 라인에서 다음 중단점이 있는 코드 라인까지 실행합니다. | | 프로시저 단위 실행 | 프로시저 단위 실행 | F10 | 코드를 한 줄씩 실행합니다. 포커싱 된 라인에 함수가 있을 때, 함수를 실행한 것으로 간주하고 다음 줄로 넘어갑니다. | | 한 단계씩 코드 실행 | 한 단계 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 중단점을 설정한 코드를 확인했을 때 문제가 없다면, 혹은 해당 코드 아래 줄의 상태도 함께 확인하고 싶다면 어떻게 해야 할까요? 확인하고자 하는 모든 코드 라인에 중단점을 설정할 수도 없고, 매번 디버그 시작/중지를 반복하며 중단점 설정 해제를 반복하는 것도 비효율적입니다. 디버깅 중 중단점에서 플레이가 멈춘 뒤, 중단점이 설정된 라인 이후로 코드를 실행하는 방법이 있습니다. **프로시저 단위 실행**, **한 단계씩 코드 실행** 등을 통해 단위별로 코드를 실행하며 코드의 상태나 흐름을 파악할 수 있습니다. 단위별 코드 실행은 디
[task] | single_turn [pass] | ⏳ 미판정 [title] | 스크립트 디버그 [question] | 디버그 중 코드가 정지된 상태에서 특정 변수에 할당된 값을 더 자세히 파헤쳐 보고 싶을 때 어떤 기능을 활용하면 좋나요? [answer] | 디버깅 중 특정 변수나 프로퍼티에 할당된 값을 더 자세히 확인하고 싶을 때는 **Watch Expression** 기능을 활용하는 것이 좋습니다. 간단한 확인을 위해 실행된 코드 라인의 변수나 프로퍼티에 마우스를 오버하면 툴팁으로 할당된 값, 실행 공간, 타입 등을 볼 수 있지만, 더 상세한 파악이 필요할 때는 Watch Expression을 통해 값을 직접 조회할 수 있습니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 중단점을 비활성화할 때는 마우스 왼쪽 버튼을 클릭합니다. 비활성화된 중단점은 ![[object Object]](https://mod-file.dn.nexoncdn.co.kr/bbs/1769135859948681fdb075cef4ee7ab4fed9f2f4d4ebd.png "breakpoint4"), ![[object Object]](https://mod-file.dn.nexoncdn.co.kr/bbs/1769135881421982425439c154f54a9f5db45be1c38a6.png "breakpoint5") 로 표시되며, **