← 목록

mLua · Nemotron SDG 질문-응답 (SFT)

총 21,567개 · 페이지 386/719
🔀 랜덤
불러오는 중…

[task] | code [pass] | ⏳ 미판정 [title] | 엔티티를 탐색하는 EntityService [question] | _EntityService:GetEntitiesByPath()를 사용하여 "/maps/map01/Bullet" 경로에 있는 모든 엔티티를 배열로 받아온 후, for 루프와 pairs() 함수를 활용해 각 엔티티의 Name을 순서대로 log()로 출력하는 스크립트를 작성해줘 [answer] | ```lua Method: [server only] void GetEntitiesByPathExample() { local entityArray = _EntityService:GetEntitiesByPath("/maps/map01/Bullet") for i, entity in pairs(entityArray) do log(entity.Name) end } ``` [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 월드를 제작하다 보면 특정 엔티티를 탐색하여 받아오거나, 혹은 관련 있는 여러 엔티티를 한 번에 받아야 하는 상황이 자주 발생합니다. 이럴 때 [**EntityService**](/apiReference/Services/EntityService)를 활용할 수 있습니다. **EntityService**는 엔티티 탐색, 삭제, 유효성 체크 등의 기능을 제공하고 있습니다. 이번 과정에서는 **EntityService**에서 제공하는 기능의 사용법을 하나씩 알아보도록 하겠습니다. **테스트 환경** **common

[task] | instruction_following [pass] | ⏳ 미판정 [title] | 스크립트 디버그 [question] | 중단점을 비활성화하는 방법과 해제하는 마우스 동작을 2문장 이내로 설명하세요. [answer] | 중단점을 비활성화하려면 마우스 왼쪽 버튼을 클릭합니다. 마우스 왼쪽 버튼을 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] | single_turn [pass] | ⏳ 미판정 [title] | 엔티티를 탐색하는 EntityService [question] | EntityService의 GetEntityByPath와 GetEntitiesByPath는 반환 값과 사용 시나리오에서 어떤 차이가 있나요? [answer] | `EntityService`의 `GetEntityByPath`와 `GetEntitiesByPath`는 반환 값과 적용 가능한 시나리오에서 다음과 같은 명확한 차이가 있습니다. ### 1. 반환 값 차이 * **`GetEntityByPath()`**: 단일 엔티티(Entity)를 반환합니다. * **`GetEntitiesByPath()`**: 엔티티 배열(Array)을 반환합니다. ### 2. 사용 시나리오 차이 * **`GetEntityByPath()`**: * 월드 경로(Path)가 **유니크(고유)** [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 월드를 제작하다 보면 특정 엔티티를 탐색하여 받아오거나, 혹은 관련 있는 여러 엔티티를 한 번에 받아야 하는 상황이 자주 발생합니다. 이럴 때 [**EntityService**](/apiReference/Services/EntityService)를 활용할 수 있습니다. **EntityService**는 엔티티 탐색, 삭제, 유효성 체크 등의 기능을 제공하고 있습니다. 이번 과정에서는 **EntityService**에서 제공하는 기능의 사용법을 하나씩 알아보도록 하겠습니다. **테스트 환경** **common

[task] | two_turn [pass] | ⏳ 미판정 [title] | 엔티티를 탐색하는 EntityService [question] | EntityCreateEvent의 event.Entity 프로퍼티를 통해 접근할 수 있는 엔티티 정보의 종류와, 해당 이벤트가 서버에서만 처리되는 이유를 알려주세요. [answer] | 참고 문서에 포함된 정보를 기준으로 답변드립니다. **1. `EntityCreateEvent`의 `event.Entity` 프로퍼티를 통해 접근 가능한 정보** 제공된 문서의 예제 코드에서는 `EntityCreateEvent` 이벤트 핸들러 내에서 `event.Entity`를 통해 **`Entity.Name`** 프로퍼티에 접근하는 것만 확인됩니다. ```lua Event Handler: [service: EntityService] HandleEntityCreateEvent (EntityCreateEvent event) { [followup] | OnBeginPlay 메서드에서 _EntityService:GetEntityByPath로 가져온 템플릿과 실제 스폰된 엔티티의 차이점을 코드 예시를 들어 설명해 주세요. [followup_answer] | 제공된 참고 문서를 기준으로 `_EntityService:GetEntityByPath`로 가져온 템플릿과 실제 스폰된 엔티티의 차이점을 설명합니다. **1. 템플릿 (`monsterTemplate`)과 실제 스폰 엔티티 (`spawnedMonster`)의 관계** * **템플릿 (`monsterTemplate`)**: `_EntityService:GetEntityByPath("/maps/map01/monster-1")`를 통해 가져온 것은 **엔티티의 원본 또는 정의(템플릿)**입니다. 이 객체 자체는 게임 월드에 직접적으로 [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] | _EntityService:GetEntityByPath()로 "/maps/map01/Bullet" 엔티티를 먼저 찾아 그 Id를 추출한 뒤, _EntityService:GetEntity() 함수에 해당 Id를 매개변수로 전달하여 동일한 엔티티를 다시 반환받고, 두 엔티티가 같는지 비교하여 같으면 Id를 log()로 출력하는 스크립트를 작성해줘 [answer] | ```lua Method: [server only] void GetEntityByIdExample() { local bulletEntity = _EntityService:GetEntityByPath("/maps/map01/Bullet") local bulletEntityId = bulletEntity.Id local bulletEntityById = _EntityService:GetEntity(bulletEntityId) if bulletEntity == bulletEntityById [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 월드를 제작하다 보면 특정 엔티티를 탐색하여 받아오거나, 혹은 관련 있는 여러 엔티티를 한 번에 받아야 하는 상황이 자주 발생합니다. 이럴 때 [**EntityService**](/apiReference/Services/EntityService)를 활용할 수 있습니다. **EntityService**는 엔티티 탐색, 삭제, 유효성 체크 등의 기능을 제공하고 있습니다. 이번 과정에서는 **EntityService**에서 제공하는 기능의 사용법을 하나씩 알아보도록 하겠습니다. **테스트 환경** **common

[task] | code [pass] | ⏳ 미판정 [title] | 엔티티를 탐색하는 EntityService [question] | `_EntityService:GetSameModelEntities(_EntityService:GetEntityByPath("/maps/map01/npc-100"))`를 사용하여 특정 NPC와 동일한 모델로 생성된 모든 엔티티의 `Name`을 순차적으로 로그로 기록하는 스크립트를 작성해줘 [answer] | ```lua Method: [server only] void OnBeginPlay() { local entities = _EntityService:GetSameModelEntities(_EntityService:GetEntityByPath("/maps/map01/npc-100")) for i, entity in pairs(entities) do log(entity.Name) end } ``` [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 모델 ID와 일치하는 모델로부터 생성된 모든 엔티티를 반환합니다. 다음과 같이 수많은 엔티티가 배치된 상황에서 NPC와 같이 동일 모델로부터 생성된 모든 엔티티를 받고 싶을 때 유용하게 사용됩니다. 특정 엔티티에 접근하여 모델을 받은 뒤, 해당 모델로부터 생성된 모든 엔티티를 받을 수 있습니다. ```lua void GetEntitiesSpawnedByModelIdExample() { local modelId = _EntityService:GetEntityByPath("/maps/map02/npc-5396_1").Mode

[task] | two_turn [pass] | ⏳ 미판정 [title] | 엔티티를 탐색하는 EntityService [question] | `_EntityService:IsValid`와 `isvalid` 함수는 동일한 결과를 반환하는지, 그리고 문서에서 `IsValid` 사용을 권장하는 구체적인 이유는 무엇인가요? [answer] | `_EntityService:IsValid`와 `isvalid` 함수는 동일한 결과를 반환합니다. 참고 문서에는 "`EntityService:IsValid`는 `isvalid` 함수로 대체할 수 있습니다"라고 명시되어 있어, 두 함수가 서로 호환 가능하다는 것을 확인할 수 있습니다. 문서에서 `IsValid` (또는 `isvalid`) 사용을 권장하는 구체적인 이유는 **`nil` 체크보다 안정성이 높기 때문**입니다. 엔티티가 존재하는지 확인하는 데 `nil` 체크를 사용할 수는 있지만, **존재했던 엔티티가 삭제되었는지**를 [followup] | 엔티티가 존재하지 않는 `nil` 상태와 삭제된 엔티티 상태를 구분할 때 `IsValid`를 적용한 예외 처리 코드를 작성해 주세요. [followup_answer] | 참고 문서에 따르면, `nil`로 확인하는 것은 존재했던 엔티티가 삭제되었는지를 판별하는 데 다소 불안정하므로 `IsValid` (또는 `isvalid`) 함수 사용을 권장합니다. 엔티티가 `nil`인 경우(처음부터 존재하지 않음)와 삭제된 엔티티 상태(일시적으로 존재했다가 삭제됨)를 구분하여 처리하는 예외 처리 코드는 다음과 같이 작성할 수 있습니다. ```lua Method: [server only] void CheckEntityState() { -- 경로에 존재하지 않는 엔티티를 조회하면 nil을 반환합니다. [scores] | [judge_reason] | [source_doc] | 매개 변수로 전달한 엔티티를 삭제합니다. ```lua void DestroyExample() { local entity = _EntityService:GetEntityByPath("/maps/map01/Monster1_1") _EntityService:Destroy(entity) if isvalid(entity) == false then log("Entity is destroyed") end } ``` 꼭 `EntityService:Destroy`를 사용하지 않고도, 엔티티의 `

[task] | instruction_following [pass] | ⏳ 미판정 [title] | 스크립트 디버그 [question] | Breakpoints 패널에서 제공하는 Entry, Method, Line 항목의 의미를 표로 정리해서 출력하세요. [answer] | Breakpoints 패널에서 제공하는 항목의 의미는 다음과 같습니다. | 항목 | 설명 | | :--- | :--- | | Entry | 중단점이 설정된 스크립트 컴포넌트 또는 스크립트 로직과 같은 스크립트 이름 | | Method | Entry 내 중단점이 설정된 Method 이름 | | Line | Method 내 중단점이 설정된 라인 위치 | [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] | instruction_following [pass] | ⏳ 미판정 [title] | 스크립트 디버그 [question] | Condition과 Hit Count가 함께 설정된 경우 평가 순서와 최종 동작 조건을 2문장 이내로 설명하세요. [answer] | Condition과 Hit Count가 함께 설정되면 먼저 Condition이 평가되며, Condition이 true일 때만 Hit Count가 증가합니다. 최종적으로 지정된 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] | two_turn [pass] | ⏳ 미판정 [title] | 엔티티를 탐색하는 EntityService [question] | 동일한 모델로부터 생성된 엔티티를 찾는 `GetSameModelEntities` 메서드의 사용법을 알려주세요. [answer] | `GetSameModelEntities(Entity entity)` 메서드는 특정 엔티티를 매개변수로 받아, 그 엔티티의 원형 모델로부터 생성된 모든 엔티티 목록을 반환합니다. 수많은 엔티티가 배치된 맵에서 같은 모델(NPC, 몬스터 등)을 가진 객체들을 일괄적으로 탐색할 때 유용합니다. 사용법은 다음과 같습니다. 1. `_EntityService:GetEntityByPath` 등으로 대상 엔티티를 하나 가져옵니다. 2. 해당 엔티티를 매개변수로 `_EntityService:GetSameModelEntities` 메서드에 전 [followup] | `GetEntityByPath`로 엔티티를 가져와 `GetSameModelEntities`에 전달하는 코드 예시를 보여주시고, 이 메서드가 `GetEntitiesSpawnedByModel`과 어떻게 다른지 비교해 주세요. [followup_answer] | 요청하신 코드 예시와 두 메서드의 차이점을 설명해 드립니다. ### `GetSameModelEntities` 코드 예시 `_EntityService:GetEntityByPath`로 엔티티를 가져온 뒤, 해당 엔티티를 매개변수로 `_EntityService:GetSameModelEntities`에 전달하는 방법은 다음과 같습니다. ```lua Method: [server only] void GetSameModelEntitiesExample() { -- 경로로 특정 엔티티를 가져옵니다. local templateEn [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:GetEntitiesByPath()로 "/ui/DefaultGroup/Image_1" 경로에 해당하는 모든 UI 엔티티를 탐색하고, 찾은 엔티티가 존재할 경우 그 개수를 log()로 출력하는 스크립트를 작성해줘 [answer] | `_EntityService:GetEntitiesByPath()`는 전달된 월드 경로와 일치하는 모든 엔티티를 배열 형태로 반환합니다. 이 함수의 반환값이 `nil`이 아니거나 빈 배열이 아닌 경우를 확인하여, 찾은 엔티티의 개수를 `#` 연산자를 이용해 계산하고 `log()`로 출력할 수 있습니다. ```lua Method: [server only] void OnBeginPlay() { local uiEntities = _EntityService:GetEntitiesByPath("/ui/DefaultGroup/Image_ [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 월드를 제작하다 보면 특정 엔티티를 탐색하여 받아오거나, 혹은 관련 있는 여러 엔티티를 한 번에 받아야 하는 상황이 자주 발생합니다. 이럴 때 [**EntityService**](/apiReference/Services/EntityService)를 활용할 수 있습니다. **EntityService**는 엔티티 탐색, 삭제, 유효성 체크 등의 기능을 제공하고 있습니다. 이번 과정에서는 **EntityService**에서 제공하는 기능의 사용법을 하나씩 알아보도록 하겠습니다. **테스트 환경** **common

[task] | code [pass] | ⏳ 미판정 [title] | 엔티티를 탐색하는 EntityService [question] | `_EntityService:GetEntitiesByTag("Monster")`로 태그가 "Monster"인 모든 엔티티를 조회하여 각각의 `TransformComponent.Position`을 로그로 출력하는 스크립트를 작성해줘 [answer] | `_EntityService:GetEntitiesByTag("Monster")`를 호출하면 태그가 "Monster"로 설정된 모든 엔티티가 반환됩니다. 이 반환 값을 테이블로 처리하며, 각 엔티티의 `TransformComponent.Position` 프로퍼티에 접근하여 좌표 값을 로그로 출력할 수 있습니다. 요청하신 기능을 수행하는 mLua 스크립트는 다음과 같습니다. ```lua Method: [server only] void PrintMonsterPositions() { local monsterEntities = _ [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 모델 ID와 일치하는 모델로부터 생성된 모든 엔티티를 반환합니다. 다음과 같이 수많은 엔티티가 배치된 상황에서 NPC와 같이 동일 모델로부터 생성된 모든 엔티티를 받고 싶을 때 유용하게 사용됩니다. 특정 엔티티에 접근하여 모델을 받은 뒤, 해당 모델로부터 생성된 모든 엔티티를 받을 수 있습니다. ```lua void GetEntitiesSpawnedByModelIdExample() { local modelId = _EntityService:GetEntityByPath("/maps/map02/npc-5396_1").Mode

[task] | single_turn [pass] | ⏳ 미판정 [title] | Entity Event System [question] | SendEvent 메서드에서 self.isSunrise 프로퍼티를 다시 할당하는 코드와 OnUpdate 로직에서의 상태 변경이 동기화되지 않을 경우 발생할 수 있는 문제는 무엇인가요? [answer] | 제시된 참고 문서의 `TimeManager` 코드를 분석하면, `SendEvent` 메서드 내에서 `self.isSunrise`를 다시 할당하는 코드와 `OnUpdate`에서의 상태 변경 로직은 **동기화되지 않는 문제가 발생하지 않습니다.** 문서의 코드 구조를 보면 다음과 같은 이유로 상태 불일치 문제가 없으며, 오히려 특정 동작을 위해 `SendEvent` 내에서 상태가 재확인됩니다. 1. **`OnUpdate`에서의 상태 변경과 `SendEvent` 호출 순서**: * `OnUpdate`에서 `self.isS [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 특정 시간마다 해가 뜨고 지는 로직을 만들어봅시다. 1. 해가 뜨고 지는 시간을 관리할 스크립트 컴포넌트가 필요합니다. **Workspace - MyDesk**의 콘텍스트 메뉴에서 **Create Scrips - Create Component**를 클릭해 새 컴포넌트를 만듭니다. 이름으로 **TimeManager**를 입력합니다. 2. **TimeManager** 스크립트 컴포넌트를 엽니다. `OnUpdate` 함수를 추가하여 해가 뜨고 지는 것을 판단하도록 합니다. ```lua Property: [Sy

[task] | code [pass] | ⏳ 미판정 [title] | 엔티티를 탐색하는 EntityService [question] | `_EntityService:GetEntitiesSpawnedByModelId(1001)`로 모델 ID가 1001인 모든 엔티티를 가져와서, 그 중 `Name`이 "Elite"로 시작하는 엔티티만 필터링하여 로그로 출력하는 스크립트를 작성해줘 [answer] | 모델 ID가 1001인 모든 엔티티를 가져온 후, 이름(`Name`)이 "Elite"로 시작하는 엔티티만 필터링하여 로그로 출력하는 스크립트는 다음과 같습니다. ```lua Method: [server only] void OnBeginPlay() { local modelId = 1001 local entities = _EntityService:GetEntitiesSpawnedByModelId(modelId) for i, entity in pairs(entities) do -- 이름이 " [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 모델 ID와 일치하는 모델로부터 생성된 모든 엔티티를 반환합니다. 다음과 같이 수많은 엔티티가 배치된 상황에서 NPC와 같이 동일 모델로부터 생성된 모든 엔티티를 받고 싶을 때 유용하게 사용됩니다. 특정 엔티티에 접근하여 모델을 받은 뒤, 해당 모델로부터 생성된 모든 엔티티를 받을 수 있습니다. ```lua void GetEntitiesSpawnedByModelIdExample() { local modelId = _EntityService:GetEntityByPath("/maps/map02/npc-5396_1").Mode

[task] | single_turn [pass] | ⏳ 미판정 [title] | 엔티티를 탐색하는 EntityService [question] | 스크립트에서 엔티티를 삭제한 후 즉시 다시 참조하려고 했는데, isvalid 체크 결과에 따라 동작이 불안정하게 느껴지는데 그 이유는 뭘까요? [answer] | 엔티티 삭제 후 `isvalid` 체크가 불안정하게 느껴지는 이유는, 엔티티가 실제로 메모리에서 완전히 제거되기까지 시간차가 있을 수 있기 때문입니다. 단순히 `Destroy`를 호출한다고 해서 즉시 모든 참조가 끊어지거나 상태가 "삭제됨"으로 전환되는 것은 아닙니다. 따라서 삭제 직후 바로 `isvalid(entity)`를 호출하면, 시스템이 아직 엔티티를 유효한 상태로 인식하고 있어 `true`를 반환할 수 있습니다. 이 때문에 "삭제했는데 왜 여전히 유효한가?"라는 혼란이 생기고, 동작이 불안정하게 느껴집니다. 안정적인 확 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 매개 변수로 전달한 엔티티를 삭제합니다. ```lua void DestroyExample() { local entity = _EntityService:GetEntityByPath("/maps/map01/Monster1_1") _EntityService:Destroy(entity) if isvalid(entity) == false then log("Entity is destroyed") end } ``` 꼭 `EntityService:Destroy`를 사용하지 않고도, 엔티티의 `

[task] | two_turn [pass] | ⏳ 미판정 [title] | 엔티티를 탐색하는 EntityService [question] | 엔티티를 삭제할 때 `_EntityService:Destroy`와 `entity:Destroy()` 중 어떤 것을 사용해야 하며, 삭제 후 존재 여부를 확인하는 가장 안정적인 방법은 무엇인가요? [answer] | 엔티티를 삭제할 때 `_EntityService:Destroy(entity)`와 `entity:Destroy()` 두 가지 방식을 모두 사용할 수 있으며, 두 방식은 동일한 결과를 만들어냅니다. 따라서 어느 하나를 특별히 선호할 필요는 없으며, 개발자의 코드 가독성이나 컨벤션에 따라 선택하시면 됩니다. 삭제 후 존재 여부를 확인하는 가장 안정적인 방법은 `isvalid(entity)` 함수를 사용하는 것입니다. * **`nil` 확인의 비권장 이유**: 엔티티가 삭제된 후 참조 변수가 `nil`이 되는 경우도 있지만, 존재했 [followup] | 삭제 직후 `isvalid(entity)`로 확인하는 코드 예시를 보여주세요. [followup_answer] | 삭제 직후 `isvalid(entity)`로 존재 여부를 확인하는 코드 예시는 다음과 같습니다. ```lua Method: [server only] void DestroyAndCheckExample() { local entity = _EntityService:GetEntityByPath("/maps/map01/Monster1_1") _EntityService:Destroy(entity) if isvalid(entity) == false then log("Entity is des [scores] | [judge_reason] | [source_doc] | 매개 변수로 전달한 엔티티를 삭제합니다. ```lua void DestroyExample() { local entity = _EntityService:GetEntityByPath("/maps/map01/Monster1_1") _EntityService:Destroy(entity) if isvalid(entity) == false then log("Entity is destroyed") end } ``` 꼭 `EntityService:Destroy`를 사용하지 않고도, 엔티티의 `

[task] | code [pass] | ⏳ 미판정 [title] | 엔티티를 탐색하는 EntityService [question] | `_EntityService`의 `EntityCreateEvent` 이벤트 핸들러를 구현하여 엔티티 생성 시 이벤트 객체를 처리하는 스크립트를 작성해줘. [answer] | `_EntityService`의 `EntityCreateEvent` 이벤트 핸들러를 구현하는 스크립트는 다음과 같습니다. ```lua Event Handler: [service: EntityService] HandleEntityCreateEvent(EntityCreateEvent event) { local Entity = event.Entity log("Entity created: " .. Entity.Name) } ``` [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 매개 변수로 전달한 엔티티를 삭제합니다. ```lua void DestroyExample() { local entity = _EntityService:GetEntityByPath("/maps/map01/Monster1_1") _EntityService:Destroy(entity) if isvalid(entity) == false then log("Entity is destroyed") end } ``` 꼭 `EntityService:Destroy`를 사용하지 않고도, 엔티티의 `

[task] | two_turn [pass] | ⏳ 미판정 [title] | 엔티티를 탐색하는 EntityService [question] | EntityService를 사용하여 엔티티 생성 시 이벤트를 처리하는 기본 구조와 SpawnService 연동 방식이 궁금합니다. [answer] | EntityService를 이용해 엔티티 생성 시 이벤트를 처리하고 SpawnService와 연동하는 기본 구조는 다음과 같습니다. 1. **엔티티 스폰 (SpawnService 연동)** * `OnBeginPlay` 또는 특정 메서드 내에서 `_EntityService:GetEntityByPath`를 사용하여 스폰할 원본 엔티티(템플릿)를 경로로 가져옵니다. * `_SpawnService:SpawnByEntityTemplate`을 호출하여 실제 엔티티를 생성합니다. 이때 생성될 엔티티의 이름을 지정하여 나 [followup] | HandleEntityCreateEvent 핸들러 내부에서 생성된 엔티티의 이름 확인을 위한 if 문 조건과, SpawnByEntityTemplate 호출 시 매개변수 목록의 의미를 구체적으로 설명해 주세요. [followup_answer] | 제공된 참고 문서에는 `HandleEntityCreateEvent` 핸들러 내부의 `if` 문 조건과 `_SpawnService:SpawnByEntityTemplate` 호출 시 매개변수 목록의 구체적인 의미에 대한 설명이 포함되어 있지 않습니다. 문서에는 다음과 같은 코드 예제만 제시되어 있습니다: 1. **if 문 조건**: ```lua if Entity.Name ~= "spawnedMonster" then return end ``` 이 코드가 "OnBeginPlay에서 생 [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] | 중단점 삭제와 해당 위치로 이동하는 방법을 단계별 번호 목록으로 작성하세요. [answer] | **중단점 삭제** 1. **Breakpoints** 패널을 엽니다. (내비게이션 메뉴의 **Panels - Debug - Breakpoints** 클릭) 2. 삭제하려는 중단점 항목을 찾습니다. 3. 해당 중단점 항목에서 마우스 오른쪽 버튼을 눌러 콘텍스트 메뉴를 엽니다. 4. 콘텍스트 메뉴에서 **Remove**를 클릭합니다. **중단점으로 이동** 1. **Breakpoints** 패널을 엽니다. (내비게이션 메뉴의 **Panels - Debug - Breakpoints** 클릭) 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] | code [pass] | ⏳ 미판정 [title] | 엔티티를 탐색하는 EntityService [question] | `_EntityService:GetEntityByPath("/maps/map01/Monster1_1")`로 엔티티를 조회하여 `_EntityService:Destroy(entity)`를 호출한 뒤, `_EntityService:IsValid(entity)`가 false인 경우 "Entity is destroyed"를 log로 출력하는 스크립트를 작성해줘. [answer] | 요청하신 동작을 수행하는 스크립트는 다음과 같습니다. ```lua Method: [server only] void OnBeginPlay() { local entity = _EntityService:GetEntityByPath("/maps/map01/Monster1_1") _EntityService:Destroy(entity) if _EntityService:IsValid(entity) == false then log("Entity is destroyed") end } ``` [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 매개 변수로 전달한 엔티티를 삭제합니다. ```lua void DestroyExample() { local entity = _EntityService:GetEntityByPath("/maps/map01/Monster1_1") _EntityService:Destroy(entity) if isvalid(entity) == false then log("Entity is destroyed") end } ``` 꼭 `EntityService:Destroy`를 사용하지 않고도, 엔티티의 `

[task] | single_turn [pass] | ⏳ 미판정 [title] | 엔티티를 탐색하는 EntityService [question] | 스크립트에서 엔티티를 탐색하는 함수를 호출했는데 엔티티가 정상적으로 반환되지 않고 오류가 발생한다면, 가장 먼저 확인해야 할 설정이나 원인은 무엇인가요? [answer] | 엔티티 탐색 함수 호출 시 오류가 발생하거나 엔티티가 정상적으로 반환되지 않는다면, 가장 먼저 **월드 경로(World Path)의 정확성**을 확인해야 합니다. `GetEntityByPath()`와 `GetEntitiesByPath()` 함수는 매개 변수로 전달된 경로와 월드 상의 실제 경로가 정확히 일치해야만 엔티티를 찾습니다. ### 1. 경로 확인 및 복사 방법 엔티티의 경로는 에디터의 **Hierarchy** 뷰에서 해당 엔티티를 우클릭하여 콘텍스트 메뉴의 **Copy Entity Path** 기능을 통해 정확히 가져와 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 월드를 제작하다 보면 특정 엔티티를 탐색하여 받아오거나, 혹은 관련 있는 여러 엔티티를 한 번에 받아야 하는 상황이 자주 발생합니다. 이럴 때 [**EntityService**](/apiReference/Services/EntityService)를 활용할 수 있습니다. **EntityService**는 엔티티 탐색, 삭제, 유효성 체크 등의 기능을 제공하고 있습니다. 이번 과정에서는 **EntityService**에서 제공하는 기능의 사용법을 하나씩 알아보도록 하겠습니다. **테스트 환경** **common

[task] | instruction_following [pass] | ⏳ 미판정 [title] | 스크립트 디버그 [question] | Hit Count에서 사용 가능한 6가지 연산자(>=, >, <=, <, ==, %)와 각각의 동작 방식을 단계별 번호 목록으로 6행만 작성하세요. [answer] | 1. `>=`: 5를 입력하면 5번째 적중부터 매번 실행을 멈춥니다. 2. `>`: 5를 입력하면 6번째 적중부터 실행을 멈춥니다. 3. `<=`: 5를 입력하면 1번째부터 5번째 적중까지만 실행을 멈춥니다. 4. `<`: 5를 입력하면 1번째부터 4번째 적중까지만 실행을 멈춥니다. 5. `==`: 5를 입력하면 5번째 적중일 때만 실행을 멈춥니다. 6. `%`: 5를 입력하면 5의 배수(5, 10, 15...) 적중될 때마다 실행을 멈춥니다. [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] | 중단점을 설정해도 게임이 멈추지 않는 이유는 크게 두 가지가 있습니다. **1. 중단점이 비활성화(Enabled 해제)되어 있는 경우** 마우스 오른쪽 버튼을 클릭해 **BreakPoint Settings** 창을 열었을 때, **Enabled(활성화 여부)** 체크 박스가 해제되어 있을 수 있습니다. 체크 박스가 해제되면 중단점은 유지되지만 실제로 동작하지 않게 되어 게임이 멈추지 않습니다. **2. 조건(Condition) 또는 적중 횟수(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] | code [pass] | ⏳ 미판정 [title] | 엔티티를 탐색하는 EntityService [question] | `/maps/map01/Monster1_1` 경로의 엔티티를 조회해 `entity:Destroy()` 메서드로 직접 삭제한 후, 전역 함수 `isvalid(entity)`를 사용해 삭제 여부를 확인하고 결과에 따라 로그를 남기는 스크립트를 작성해줘. [answer] | 요청하신 로직을 수행하는 mLua 스크립트입니다. ```lua Method: [server only] void DestroyAndCheck() { local entity = _EntityService:GetEntityByPath("/maps/map01/Monster1_1") if entity ~= nil then entity:Destroy() if isvalid(entity) == false then log("Entity is destroye [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 매개 변수로 전달한 엔티티를 삭제합니다. ```lua void DestroyExample() { local entity = _EntityService:GetEntityByPath("/maps/map01/Monster1_1") _EntityService:Destroy(entity) if isvalid(entity) == false then log("Entity is destroyed") end } ``` 꼭 `EntityService:Destroy`를 사용하지 않고도, 엔티티의 `

[task] | two_turn [pass] | ⏳ 미판정 [title] | 엔티티를 탐색하는 EntityService [question] | 엔티티가 생성되거나 삭제될 때 발생하는 `EntityCreateEvent`와 삭제 이벤트를 스크립트에서 처리하려면 어떤 이벤트 핸들러 구조로 구현해야 하나요? [answer] | 엔티티가 생성되거나 삭제될 때 발생하는 이벤트를 처리하려면, 스크립트 에디터의 **Entity Event Handler**를 통해 이벤트 핸들러를 추가하고, 이벤트 센더가 **EntityService**로 설정되어 있는지 확인해야 합니다. 참고 문서에 명시된 `EntityCreateEvent`의 경우, 아래 구조로 구현합니다. ```lua Method: [server only] void OnBeginPlay() { local monsterTemplate = _EntityService:GetEntityByPath("/map [followup] | 이벤트 핸들러에서 이벤트 센더가 `EntityService`인지 확인하는 과정과, 해당 이벤트를 수신하는 `Handle` 함수의 코드 예시를 보여주세요. [followup_answer] | 이벤트 핸들러에서 이벤트 센더가 `EntityService`인지 확인하는 과정은 다음과 같습니다. 1. 스크립트 에디터의 **Entity Event Handler** 섹션에서 원하는 이벤트를 추가합니다. 2. 이벤트 핸들러를 추가한 뒤, 해당 핸들러의 **이벤트 센더(Event Sender)** 설정이 `EntityService`로 지정되어 있는지 확인합니다. 참고 문서에 명시된 `EntityCreateEvent` 수신 예시는 다음과 같습니다. ```lua Method: [server only] void OnBeginPla [scores] | [judge_reason] | [source_doc] | 매개 변수로 전달한 엔티티를 삭제합니다. ```lua void DestroyExample() { local entity = _EntityService:GetEntityByPath("/maps/map01/Monster1_1") _EntityService:Destroy(entity) if isvalid(entity) == false then log("Entity is destroyed") end } ``` 꼭 `EntityService:Destroy`를 사용하지 않고도, 엔티티의 `

[task] | two_turn [pass] | ⏳ 미판정 [title] | 엔티티를 탐색하는 EntityService [question] | 태그를 이용해 엔티티를 탐색할 때 `TagComponent`의 역할과 주의할 점이 무엇인가요? [answer] | 태그를 이용해 엔티티를 탐색할 때 `TagComponent`는 엔티티에 태그를 설정하는 핵심 수단입니다. 한 엔티티에는 여러 개의 태그를 동시에 설정할 수 있으며, 탐색 시 이 중 하나라도 매개 변수로 전달한 태그 값과 일치하면 해당 엔티티가 결과에 포함됩니다. `_EntityService`의 태그 기반 탐색 메서드를 사용할 때 주의해야 할 점은 다음과 같습니다. 1. **`GetEntityByTag()` 사용 시**: * 매개 변수로 전달한 태그와 일치하는 **모든** 엔티티를 반환한다고 설명되어 있지만, 실제 동 [followup] | 한 엔티티에 여러 태그가 설정된 경우 `GetEntitiesByTag`가 어떻게 동작하는지, 그리고 유니크한 태그가 아닌 경우 `GetEntityByTag`를 사용할 때 발생할 수 있는 문제점을 코드와 함께 설명해 주세요. [followup_answer] | `GetEntitiesByTag`와 `GetEntityByTag`는 태그 기반 엔티티 탐색 시 다른 동작 방식을 가지고 있습니다. ### 1. `GetEntitiesByTag`의 동작 방식 `GetEntitiesByTag`는 매개 변수로 전달한 태그 값과 일치하는 **모든** 엔티티를 반환합니다. * **여러 태그가 설정된 경우:** 한 엔티티에 여러 개의 태그가 설정되어 있을 때, 이 중 **하나라도** 매개 변수로 전달한 태그와 일치하면 해당 엔티티가 반환 목록에 포함됩니다. * **복수 결과:** 특정 태그를 가진 [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`를 사용해 특정 엔티티를 가져와 `entity:Destroy()`로 삭제하고, 삭제 직후 `_EntityService:IsValid(entity)`가 false인지 확인하여 로그를 기록하는 스크립트를 작성해줘. [answer] | 요청하신 동작은 `_EntityService:GetEntityByPath`로 엔티티를 가져온 뒤 `entity:Destroy()`로 삭제하고, `_EntityService:IsValid(entity)`로 삭제 여부를 확인해 로그를 남기는 방식으로 구현할 수 있습니다. ```lua Method: [server only] void DestroyAndCheck() { local entity = _EntityService:GetEntityByPath("/maps/map01/Monster1_1") entity:Destroy( [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 매개 변수로 전달한 엔티티를 삭제합니다. ```lua void DestroyExample() { local entity = _EntityService:GetEntityByPath("/maps/map01/Monster1_1") _EntityService:Destroy(entity) if isvalid(entity) == false then log("Entity is destroyed") end } ``` 꼭 `EntityService:Destroy`를 사용하지 않고도, 엔티티의 `

[task] | single_turn [pass] | ⏳ 미판정 [title] | 엔티티를 탐색하는 EntityService [question] | Hierarchy에서 엔티티의 경로를 복사할 때 Copy Entity Path와 Copy Entity ID 중 어떤 것을 선택해야 하는지 구분 기준이 무엇인가요? [answer] | Hierarchy에서 엔티티 정보를 복사할 때 `Copy Entity Path`와 `Copy Entity ID`를 선택하는 기준은 엔티티의 **유니크성(고유성)** 과 **탐색 목적**에 따라 달라집니다. ### 1. Copy Entity Path (경로 복사) **사용 함수:** `GetEntityByPath()` 또는 `GetEntitiesByPath()` * **구분 기준:** 월드 상의 **경로(Path)가 유니크한(유일한) 단일 엔티티**를 탐색할 때 사용합니다. * **설명:** * `GetEntit [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 월드를 제작하다 보면 특정 엔티티를 탐색하여 받아오거나, 혹은 관련 있는 여러 엔티티를 한 번에 받아야 하는 상황이 자주 발생합니다. 이럴 때 [**EntityService**](/apiReference/Services/EntityService)를 활용할 수 있습니다. **EntityService**는 엔티티 탐색, 삭제, 유효성 체크 등의 기능을 제공하고 있습니다. 이번 과정에서는 **EntityService**에서 제공하는 기능의 사용법을 하나씩 알아보도록 하겠습니다. **테스트 환경** **common

[task] | code [pass] | ⏳ 미판정 [title] | 스크립트 디버그 [question] | 주어진 문서는 mLua 언어 문법이나 API가 아닌, IDE의 디버깅 기능(단축키, Watch Expression, Call Stack)에 대한 설명만 포함되어 있으므로, 요청하신 "mLua 스크립트 코드 작성 과제"를 문서 내용만으로 생성할 수 없습니다. [answer] | 제시된 참고 문서는 mLua 언어 문법이나 API가 아닌, IDE의 디버깅 기능(단축키, Watch Expression, Call Stack)에 대한 설명만 포함되어 있습니다. 따라서 요청하신 "mLua 스크립트 코드 작성 과제"를 문서 내용만으로 생성할 수 없습니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 중단점을 설정한 코드를 확인했을 때 문제가 없다면, 혹은 해당 코드 아래 줄의 상태도 함께 확인하고 싶다면 어떻게 해야 할까요? 확인하고자 하는 모든 코드 라인에 중단점을 설정할 수도 없고, 매번 디버그 시작/중지를 반복하며 중단점 설정 해제를 반복하는 것도 비효율적입니다. 디버깅 중 중단점에서 플레이가 멈춘 뒤, 중단점이 설정된 라인 이후로 코드를 실행하는 방법이 있습니다. **프로시저 단위 실행**, **한 단계씩 코드 실행** 등을 통해 단위별로 코드를 실행하며 코드의 상태나 흐름을 파악할 수 있습니다. 단위별 코드 실행은 디

[task] | code [pass] | ⏳ 미판정 [title] | 스크립트 디버그 [question] | _UserService와 UserService의 UserEnterEvent를 활용하여 사용자가 입장할 때마다 log()로 UserId를 출력하는 스크립트를 작성해줘 [answer] | 사용자가 입장할 때마다 `log()`로 `UserId`를 출력하는 스크립트는 아래와 같이 작성합니다. ```lua Event Handler: [service: UserService] HandleUserEnterEvent(UserEnterEvent event) { local UserId = event.UserId log(UserId) } ``` 설명: - `[service: UserService]`는 `UserService`에서 발생하는 이벤트를 처리한다는 뜻입니다. - `HandleUserEnterEvent`는 사 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | ## 학습 과정 소개 디버그 기능을 통해 스크립트를 디버깅하는 방법에 대해 알아봅니다. ## 중단점(Breakpoints) 스크립트 디버깅의 시작은 중단점 설정에서 시작됩니다. 이상이 발생하거나, 오작동의 원인으로 의심되는 코드 라인에 중단점을 설정 또는 해제하는 방법을 알아봅니다. ### 중단점 아이콘 중단점 설정 상태에 따라 아이콘이 다르게 나타납니다. |아이콘 | 이름 | 설명| ---|---|--- | ![[object Object]](https://mod-file.dn.nexoncdn.co.kr/bbs/17691

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