← 목록

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

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

[task] | code [pass] | ⏳ 미판정 [title] | Maple GYM 만들기 Ⅱ [question] | Stats 컴포넌트의 CurrentSkillGrade, CurrentDnaGrade, CurrentMoney 속성과 SkillGradeTable, DnaGradeTable 테이블을 참조하여, 다음 등급의 비용(Cost)이 현재 보유 금액보다 적거나 같으면 흰색(Color(1,1,1,1)), 아니면 빨간색(Color(1,0,0,1))으로 설정하고 최종 등급 달성 시에는 "최종 등급 달성"이라는 텍스트와 함께 빨간색으로 표시하는 SetShopInfo() 메서드를 작성해줘. [answer] | 요청하신 조건에 따라 `SetShopInfo()` 메서드를 구현했습니다. * `SkillGradeTable` 또는 `DnaGradeTable`의 길이(`#table`)와 현재 등급을 비교하여 최종 등급 여부를 판별합니다. * 최종 등급이 아닌 경우, 다음 등급의 `Cost`를 가져와 현재 보유 금액(`CurrentMoney`)과 비교합니다. * 보유 금액이 비용보다 크거나 같으면 흰색(`Color(1,1,1,1)`), 작으면 빨간색(`Color(1,0,0,1)`)으로 설정합니다. * 최종 등급이거나 금액이 부족할 경 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | ```lua void SetShopInfo() { local skillGrade = math.floor(self.Stats.CurrentSkillGrade) local dnaGrade = math.floor(self.Stats.CurrentDnaGrade) self.SkillLevelText.Text = ("기술 레벨: "..skillGrade.."레벨") self.DnaLevelText.Text = ("DNA: "..self.Stats.DnaG

[task] | single_turn [pass] | ⏳ 미판정 [title] | 엔티티와 컴포넌트 참조 [question] | 상위 엔티티에서 하위 엔티티를 참조할 때 Entity.Children을 사용하는 것과 Entity:GetChildByName()를 사용하는 것 중 어떤 것이 더 효율적인가요? [answer] | 제공된 문서에는 `Entity:GetChildByName()` 메서드의 구체적인 사용법이나 구현 예시가 포함되어 있지 않습니다. 문서에 있는 예제 코드는 모두 `Entity.Children` 배열을 순회하며 이름(`child.Name`)을 비교하는 방식을 사용하고 있습니다. 따라서 문서에만 근거할 때, **`Entity:GetChildByName()`가 더 효율적인지 여부에 대한 판단은 할 수 없습니다.** 문서에서 확인 가능한 하위 엔티티 참조 방법은 다음과 같습니다. 1. **`Entity.Children` 사용**: [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 엔티티와 컴포넌트 구조를 간략하게 이해하고, 스크립트를 통해 엔티티와 컴포넌트에 접근하는 방법을 알아봅니다. # 엔티티와 컴포넌트 구조 먼저 엔티티와 컴포넌트의 구조를 알아보겠습니다. 기본적으로 엔티티는 각기 다른 컴포넌트들로 구성되어 있고, 각각의 엔티티는 상위, 하위 관계로 연결되어 있습니다. 이 연결 구조를 이용하면 특정 컴포넌트에서 다른 엔티티나 컴포넌트로 접근할 수 있습니다. 아래 이미지는 엔티티 간의 상-하위 구조와 각 엔티티를 구성하는 컴포넌트를 도식화한 것입니다. 이후 이 구조를 바탕으로 설명

[task] | code [pass] | ⏳ 미판정 [title] | 엔티티와 컴포넌트 참조 [question] | Entity.Children 와 for 루프를 사용하여 상위 엔티티의 하위 목록에서 이름이 "EntityD" 인 엔티티를 찾고, 찾으면 그 이름을 출력하고 아니면 "EmptyEntityD" 를 출력하는 스크립트를 작성해줘 [answer] | Entity.Children 은 해당 엔티티의 모든 하위 엔티티를 테이블 형태로 반환합니다. 이 테이블을 for 루프와 pairs 함수를 이용해 순회하면서 각 하위 엔티티의 Name 속성을 확인하여 "EntityD"와 일치하는 엔티티를 찾습니다. 찾은 경우 해당 이름을 출력하고, 찾지 못한 경우 "EmptyEntityD"를 출력하도록 작성한 스크립트는 다음과 같습니다. ```lua void OnBeginPlay() { local myEntity = self.Entity log(myEntity.Name) [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 엔티티와 컴포넌트 구조를 간략하게 이해하고, 스크립트를 통해 엔티티와 컴포넌트에 접근하는 방법을 알아봅니다. # 엔티티와 컴포넌트 구조 먼저 엔티티와 컴포넌트의 구조를 알아보겠습니다. 기본적으로 엔티티는 각기 다른 컴포넌트들로 구성되어 있고, 각각의 엔티티는 상위, 하위 관계로 연결되어 있습니다. 이 연결 구조를 이용하면 특정 컴포넌트에서 다른 엔티티나 컴포넌트로 접근할 수 있습니다. 아래 이미지는 엔티티 간의 상-하위 구조와 각 엔티티를 구성하는 컴포넌트를 도식화한 것입니다. 이후 이 구조를 바탕으로 설명

[task] | instruction_following [pass] | ⏳ 미판정 [title] | 엔티티와 컴포넌트 참조 [question] | _GetEntity_ 함수의 반환 값이 nil일 때의 처리 로직을 포함하여, 주어진 UUID를 통해 엔티티를 조회하는 코드를 주석으로 설명만 작성하고 출력하세요. [answer] | ```lua Method: [server only] void OnBeginPlay() { -- 찾고자 하는 엔티티의 UUID를 문자열로 정의합니다. local targetId = "eb9c3412-9730-4e32-a180-69f4d1596652" -- _EntityService:GetEntity 함수를 호출하여 해당 ID의 엔티티를 조회합니다. local targetEntity = _EntityService:GetEntity(targetId) -- 반환 값이 nil인 경우, 해 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 매개 변수로 엔티티 ID를 넘겨주면 해당 ID의 엔티티를 반환하는 함수입니다. 엔티티의 계층 구조가 동적으로 변경되거나 엔티티의 이름이 바뀌면서 경로가 변경될 여지가 있으면, 유니크한 ID를 이용해 엔티티를 받아올 수 있는 GetEntity를 사용하는 것이 효율적입니다. * **매개 변수** | Parameter | Type | Description | | --- | --- | --- | | ID | string | 얻고자 하는 엔티티 ID를 넣어줍니다. 엔티티의 콘텍스트 메뉴에서 **Copy Entity I

[task] | instruction_following [pass] | ⏳ 미판정 [title] | 엔티티와 컴포넌트 참조 [question] | 엔티티를 통한 컴포넌트 접근 방식과 네이티브 및 스크립트 컴포넌트 접근 예시를 3문장 이내로 요약하세요. [answer] | 컴포넌트는 반드시 엔티티를 통해 `Entity.컴포넌트명` 형식으로 접근해야 합니다. 네이티브 컴포넌트는 스크립트 에디터에서 이름이 자동 완성되며, 스크립트 컴포넌트는 생성 시 지정한 이름으로 동일하게 접근합니다. 예를 들어 `_UserService.LocalPlayer`로 엔티티를 얻은 뒤 `.RigidbodyComponent`나 `.CharacterStatus`를 붙여 사용할 수 있습니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 컴포넌트는 엔티티를 작동시키는 구성품입니다. 그러므로 반드시 엔티티를 통해 컴포넌트로 접근해야 합니다. 일반적으로 **Entity.컴포넌트 명** 형태로 컴포넌트에 접근할 수 있습니다. 네이티브 컴포넌트는 스크립트 에디터에서 컴포넌트 명이 자동 완성됩니다. 다음은 내 플레이어 엔티티의 **RigidbodyComponent**에 접근하는 예시 코드입니다. ```lua [client only] void OnBeginPlay() { local myPlayerEntity = _UserService.LocalPlayer

[task] | code [pass] | ⏳ 미판정 [title] | MSW 기본 이벤트 함수 [question] | `OnInitialize` 함수에서 `self.B` 프로퍼티에 "Hello" 값을 할당하고, `OnBeginPlay` 함수에서 `self.Entity` 를 통해 접근 가능한 다른 컴포넌트 `ComponentA` 의 `B` 프로퍼티 값을 참조하여 콘솔에 출력하는 스크립트를 작성해줘 [answer] | `OnInitialize`에서 프로퍼티 값을 설정하고, `OnBeginPlay`에서 다른 컴포넌트의 해당 값을 참조하여 출력하는 스크립트는 다음과 같습니다. `OnBeginPlay`는 다른 엔티티와 컴포넌트가 모두 생성된 후 호출되므로, `self.Entity`를 통해 같은 엔티티에 적용된 다른 컴포넌트(`ComponentA`)를 안전하게 참조할 수 있습니다. ```lua Property: [Sync] string B = "" Method: [server only] void OnInitialize() { self.B = [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 본격적으로 로직이 시작되는 시점(`OnInitialize` 함수 호출 이후, `OnUpdate` 호출 직전)에 1회 호출되는 함수입니다. 엔티티의 `OnBeginPlay` 함수는 다른 엔티티와 컴포넌트가 모두 생성된 뒤에 호출됩니다. 동적으로 생성된 엔티티도 해당 엔티티의 컴포넌트가 모두 생성된 후에 `OnBeginPlay` 함수가 호출됩니다. 그러므로 `OnInitialize` 함수와는 달리 `OnBeginPlay` 함수는 다른 엔티티 및 컴포넌트의 참조가 보장됩니다. ```lua void OnBeginPlay() { lo

[task] | single_turn [pass] | ⏳ 미판정 [title] | 엔티티와 컴포넌트 참조 [question] | Entity.Children으로 하위 엔티티 목록을 받아 특정 이름의 엔티티만 찾기 위해 for문을 돌릴 때, 찾지 못하면 어떻게 처리하는 것이 안전한가요? [answer] | `Entity.Children`은 해당 엔티티의 모든 하위 엔티티를 테이블 형태로 반환하므로, 특정 이름의 엔티티를 찾기 위해 `for` 루프를 돌린 후 찾지 못한 경우를 명시적으로 처리하는 것이 안전합니다. 문서에서 제시한 안전한 처리 방식은 다음과 같습니다: 1. 초기값이 빈 문자열(`""`)인 변수를 선언합니다. 2. `for` 루프를 통해 `Entity.Children`을 순회하며 이름이 일치하는 엔티티를 찾습니다. 3. 루프 종료 후, 해당 변수가 여전히 빈 문자열인지 확인합니다. 4. 빈 문자열이라면 엔티티를 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 엔티티와 컴포넌트 구조를 간략하게 이해하고, 스크립트를 통해 엔티티와 컴포넌트에 접근하는 방법을 알아봅니다. # 엔티티와 컴포넌트 구조 먼저 엔티티와 컴포넌트의 구조를 알아보겠습니다. 기본적으로 엔티티는 각기 다른 컴포넌트들로 구성되어 있고, 각각의 엔티티는 상위, 하위 관계로 연결되어 있습니다. 이 연결 구조를 이용하면 특정 컴포넌트에서 다른 엔티티나 컴포넌트로 접근할 수 있습니다. 아래 이미지는 엔티티 간의 상-하위 구조와 각 엔티티를 구성하는 컴포넌트를 도식화한 것입니다. 이후 이 구조를 바탕으로 설명

[task] | instruction_following [pass] | ⏳ 미판정 [title] | 엔티티와 컴포넌트 참조 [question] | Entity:GetChildComponentsByTypeName 메서드의 매개변수 이름, 타입, 설명을 표로 정리하세요. [answer] | `Entity:GetChildComponentsByTypeName` 메서드의 매개변수는 다음과 같습니다. | Parameter | Type | Description | | --- | --- | --- | | typename | string | 찾고자 하는 컴포넌트의 이름을 입력합니다. | | recursive | bool | 하위에 하위 엔티티까지 찾아 들어갈지를 설정합니다. `true`로 설정할 경우, 하위에 하위 엔티티까지 컴포넌트를 찾습니다. `false`로 설정할 경우, Entity의 하위 엔티티까지만 찾습니다. 아무 값도 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 컴포넌트는 엔티티를 작동시키는 구성품입니다. 그러므로 반드시 엔티티를 통해 컴포넌트로 접근해야 합니다. 일반적으로 **Entity.컴포넌트 명** 형태로 컴포넌트에 접근할 수 있습니다. 네이티브 컴포넌트는 스크립트 에디터에서 컴포넌트 명이 자동 완성됩니다. 다음은 내 플레이어 엔티티의 **RigidbodyComponent**에 접근하는 예시 코드입니다. ```lua [client only] void OnBeginPlay() { local myPlayerEntity = _UserService.LocalPlayer

[task] | single_turn [pass] | ⏳ 미판정 [title] | 엔티티와 컴포넌트 참조 [question] | Entity:GetChildByName() 함수의 두 번째 매개 변수인 recursive를 true로 설정하면 어떤 범위의 엔티티까지 검색하게 되나요? [answer] | `Entity:GetChildByName()` 함수의 두 번째 매개 변수인 `recursive`를 `true`로 설정하면, **하위에 하위 엔티티까지 재귀적으로 계속 찾아** 검색 범위가 확장됩니다. 즉, 직접적인 자식 엔티티뿐 아니라 그 자식들의 자식(손자 엔티티) 및 더 깊은 계층의 엔티티까지 탐색하여 이름이 매개 변수로 넘겨진 값과 일치하는 엔티티를 찾습니다. 반면, `recursive`를 `false`로 설정하거나 값 자체를 생략하면 바로 아래 단계(직접적인 자식)까지만 검색합니다. ```lua void OnBeginP [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | Entity.Children처럼 하위 엔티티를 참조하는 또 다른 방법을 알아봅시다. Entity:GetChildByName()은 하위 엔티티 중 매개 변수로 넘겨진 값과 같은 이름의 엔티티를 반환하는 함수입니다. 따라서 Entity.Children처럼 모든 하위 엔티티를 받아온 후 반복문을 통해 원하는 엔티티를 찾을 필요가 없습니다. 찾고자 하는 엔티티의 이름만 알고 있다면 훨씬 간단하게 하위 엔티티를 가져올 수 있습니다. * **매개 변수** * GetChildByName 함수는 두 개의 매개 변수를 받을 수 있습니다.

[task] | code [pass] | ⏳ 미판정 [title] | MSW 기본 이벤트 함수 [question] | 엔티티가 생성된 후 5초가 될 때마다 "Time Passed"를 로그로 출력하고, 그 후 10초가 넘으면 엔티티가 제거되도록 OnUpdate와 OnDestroy를 사용하는 스크립트를 작성해줘. [answer] | 요청하신 기능(5초마다 로그 출력, 10초 초과 시 엔티티 제거)을 구현하기 위해 `OnUpdate`와 `OnDestroy`를 사용하는 스크립트는 다음과 같습니다. 참고로, 엔티티를 제거하는 API는 제공된 문서의 예제(`_EntityService:Destroy(monsterEntity)`)에 근거하여 작성되었습니다. ```lua Property: [None] number elapsedTime = 0 Method: [server only] void OnUpdate(number delta) { self.elapsedTim [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | `OnBeginPlay` 함수 호출 이후, 프레임마다 호출되는 함수입니다. 따라서 프레임별로 엔티티 위치, 상태, 동작을 변경하고 싶다면 `OnUpdate` 함수에 스크립트를 작성합니다. 매개 변수로 **delta**를 사용하며, 이전 프레임에 걸린 시간 값(단위: 초)을 받습니다. **delta**를 활용하여 프레임 단위 구현을 할 수 있고, 특정 시간마다 액션을 제어할 수 있습니다. ```lua void OnUpdate(number delta) { if self._T.Time == nil then self._T.Time

[task] | instruction_following [pass] | ⏳ 미판정 [title] | 엔티티와 컴포넌트 참조 [question] | recursive 매개변수에 따라 하위 엔티티 탐색 범위가 어떻게 달라지는지 단계별 번호 목록으로 설명하세요. [answer] | `Entity:GetChildComponentsByTypeName(string typename, bool recursive)` 메서드에서 `recursive` 매개변수는 탐색 범위를 다음과 같이 결정합니다. 1. `false` (또는 값 미입력): 현재 엔티티의 **직접적인 하위 엔티티**까지만 탐색합니다. 하위 엔티티에 다시 하위 엔티티가 있는 경우, 그 깊은 층위의 컴포넌트는 찾지 않습니다. 2. `true`: 현재 엔티티의 하위 엔티티뿐만 아니라, **하위에 하위 엔티티까지 재귀적으로** 탐색합니다. 즉, 트리의 모든 하위 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 컴포넌트는 엔티티를 작동시키는 구성품입니다. 그러므로 반드시 엔티티를 통해 컴포넌트로 접근해야 합니다. 일반적으로 **Entity.컴포넌트 명** 형태로 컴포넌트에 접근할 수 있습니다. 네이티브 컴포넌트는 스크립트 에디터에서 컴포넌트 명이 자동 완성됩니다. 다음은 내 플레이어 엔티티의 **RigidbodyComponent**에 접근하는 예시 코드입니다. ```lua [client only] void OnBeginPlay() { local myPlayerEntity = _UserService.LocalPlayer

[task] | instruction_following [pass] | ⏳ 미판정 [title] | 엔티티와 컴포넌트 참조 [question] | _Entity.CurrentWorld_ 프로퍼티를 통해 월드 엔티티를 참조하는 코드 예시를 표로 정리하여, 각 변수 선언 및 출력 문장의 역할을 설명하세요. [answer] | `Entity.CurrentWorld` 프로퍼티를 통해 월드 엔티티를 참조하는 코드 예시와 각 문장의 역할을 다음 표와 같이 정리할 수 있습니다. ```lua void OnBeginPlay() { local myEntity = self.Entity local world = myEntity.CurrentWorld if isvalid(world) == false then return end log(world.Name) } ``` | 코드 문장 | 역할 설명 | | :--- [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 매개 변수로 엔티티 ID를 넘겨주면 해당 ID의 엔티티를 반환하는 함수입니다. 엔티티의 계층 구조가 동적으로 변경되거나 엔티티의 이름이 바뀌면서 경로가 변경될 여지가 있으면, 유니크한 ID를 이용해 엔티티를 받아올 수 있는 GetEntity를 사용하는 것이 효율적입니다. * **매개 변수** | Parameter | Type | Description | | --- | --- | --- | | ID | string | 얻고자 하는 엔티티 ID를 넣어줍니다. 엔티티의 콘텍스트 메뉴에서 **Copy Entity I

[task] | single_turn [pass] | ⏳ 미판정 [title] | 엔티티와 컴포넌트 참조 [question] | 엔티티 경로 입력 시 오타를 방지하기 위해 에디터에서 제공하는 특정 기능은 무엇이며 어떻게 사용하나요? [answer] | 엔티티 경로 입력 시 오타를 방지하기 위해 에디터에서 제공하는 기능은 **Copy Entity Path**입니다. 사용 방법은 다음과 같습니다: 1. 특정 엔티티를 선택합니다. 2. 해당 엔티티의 콘텍스트 메뉴(우클릭 메뉴)에서 **Copy Entity Path**를 클릭합니다. 3. 클립보드에 저장된 경로를 스크립트의 매개 변수로 붙여넣기하면 됩니다. 이 기능을 사용하면 수동으로 경로를 입력할 때 발생할 수 있는 번거로움과 오타를 방지할 수 있습니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 찾으려는 엔티티 경로(Path)를 매개 변수로 넘겨주면, 해당 경로의 엔티티를 반환하는 함수입니다. 가장 보편적으로 사용되는 함수입니다. * **매개 변수** | Parameter | Type | Description | | --- | --- | --- | | worldPath | string | 얻고자 하는 엔티티 경로를 넣어줍니다. 경로는 /maps/부터 시작해서 하위 엔티티들을 입력합니다. 예를 들어 다음과 같은 계층 구조에서 "object_1"의 경로는 다음과 같습니다. "/maps/map01

[task] | two_turn [pass] | ⏳ 미판정 [title] | 엔티티와 컴포넌트 참조 [question] | 원하는 하위 엔티티가 실제로 존재하지 않을 때 `GetChildByName()` 함수는 어떤 값을 반환하나요? [answer] | `GetChildByName()` 함수는 찾고자 하는 이름의 하위 엔티티가 존재하지 않는 경우 `nil`을 반환합니다. [followup] | 존재하지 않는 엔티티를 참조했을 때 발생하는 `nil` 반환 상황을 확인하기 위한 간단한 스크립트 예시를 작성해 주세요. [followup_answer] | 존재하지 않는 엔티티를 참조했을 때 `nil`이 반환되는 상황을 확인하기 위한 스크립트 예시는 다음과 같습니다. ```lua Method: [server only] void OnBeginPlay() { local entityA = self.Entity -- 존재하지 않는 이름 "EntityF"로 하위 엔티티를 조회 local entityF = entityA:GetChildByName("EntityF") -- 조회 결과가 nil인지 확인하여 로그 출력 if entityF == nil th [scores] | [judge_reason] | [source_doc] | Entity.Children처럼 하위 엔티티를 참조하는 또 다른 방법을 알아봅시다. Entity:GetChildByName()은 하위 엔티티 중 매개 변수로 넘겨진 값과 같은 이름의 엔티티를 반환하는 함수입니다. 따라서 Entity.Children처럼 모든 하위 엔티티를 받아온 후 반복문을 통해 원하는 엔티티를 찾을 필요가 없습니다. 찾고자 하는 엔티티의 이름만 알고 있다면 훨씬 간단하게 하위 엔티티를 가져올 수 있습니다. * **매개 변수** * GetChildByName 함수는 두 개의 매개 변수를 받을 수 있습니다.

[task] | single_turn [pass] | ⏳ 미판정 [title] | 엔티티와 컴포넌트 참조 [question] | 하위 엔티티가 존재하지 않을 때 GetChildByName() 함수가 반환하는 값은 무엇이며, 이 값을 바로 사용하려 하면 어떤 문제가 발생할 수 있나요? [answer] | `GetChildByName()` 함수는 찾고자 하는 이름의 하위 엔티티가 존재하지 않을 경우 `nil`을 반환합니다. 이 `nil` 값을 반환값 검증 없이 바로 사용하려 하면 다음과 같은 문제가 발생할 수 있습니다. 1. **코드 실행 오류(러닝타임 에러)**: `nil` 값에 접근하거나 메서드를 호출하면 스크립트가 정상적으로 동작하지 않고 오류가 발생합니다. 2. **예시**: 만약 `GetChildByName()`의 결과인 `entityF`가 `nil`인데, 이를 무시하고 `log(entityF.Name)`과 같이 속성 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | Entity.Children처럼 하위 엔티티를 참조하는 또 다른 방법을 알아봅시다. Entity:GetChildByName()은 하위 엔티티 중 매개 변수로 넘겨진 값과 같은 이름의 엔티티를 반환하는 함수입니다. 따라서 Entity.Children처럼 모든 하위 엔티티를 받아온 후 반복문을 통해 원하는 엔티티를 찾을 필요가 없습니다. 찾고자 하는 엔티티의 이름만 알고 있다면 훨씬 간단하게 하위 엔티티를 가져올 수 있습니다. * **매개 변수** * GetChildByName 함수는 두 개의 매개 변수를 받을 수 있습니다.

[task] | code [pass] | ⏳ 미판정 [title] | MSW 기본 이벤트 함수 [question] | `OnBeginPlay` 함수 내부에서 `self.Entity` 참조를 활용해 자기 자신 엔티티의 이름과 "Hello MapleStory Worlds" 를 연결하여 `log` 로 출력하고, 동시에 `_EntityService:GetEntityByPath` 로 다른 엔티티를 조회하여 해당 엔티티의 특정 컴포넌트를 참조하는 스크립트를 작성해줘 [answer] | `OnBeginPlay` 함수는 엔티티와 컴포넌트가 모두 생성된 후에 호출되므로, 다른 엔티티나 컴포넌트의 참조가 보장됩니다. 하지만 컴포넌트 간의 `OnBeginPlay` 호출 순서가 보장되지 않으므로, 다른 컴포넌트의 프로퍼티 값을 읽을 때는 주의해야 합니다. 요구하신 대로 `self.Entity`로 자기 자신 엔티티의 이름을 출력하고, `_EntityService:GetEntityByPath`로 다른 엔티티를 조회하여 특정 컴포넌트를 참조하는 스크립트는 다음과 같습니다. ```lua Method: [server only] [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 본격적으로 로직이 시작되는 시점(`OnInitialize` 함수 호출 이후, `OnUpdate` 호출 직전)에 1회 호출되는 함수입니다. 엔티티의 `OnBeginPlay` 함수는 다른 엔티티와 컴포넌트가 모두 생성된 뒤에 호출됩니다. 동적으로 생성된 엔티티도 해당 엔티티의 컴포넌트가 모두 생성된 후에 `OnBeginPlay` 함수가 호출됩니다. 그러므로 `OnInitialize` 함수와는 달리 `OnBeginPlay` 함수는 다른 엔티티 및 컴포넌트의 참조가 보장됩니다. ```lua void OnBeginPlay() { lo

[task] | single_turn [pass] | ⏳ 미판정 [title] | 엔티티와 컴포넌트 참조 [question] | _GetEntityService:GetEntityByPath()를 사용하는 것이 엔티티의 위계 구조를 따라 직접 참조하는 것보다 어떤 상황에서 더 편리한가요? [answer] | `_EntityService:GetEntityByPath()`는 엔티티의 위계 구조(부모-자식 관계)를 직접 따라가며 참조하는 것보다, **위계가 깊거나 복잡한 경우**에 훨씬 편리합니다. 구체적으로 다음과 같은 상황에서 유리합니다: 1. **깊은 위계 구조인 경우**: 부모의 부모의 부모를 찾고, 다시 그 부모의 하위 엔티티를 찾아야 하는 등 여러 단계의 위계를 거쳐야 하는 경우입니다. 2. **직접적인 경로가 명확한 경우**: 엔티티의 이름만 알고 있지만, 그 엔티티가 현재 스크립트가 적용된 엔티티의 직접적인 자식이 아니 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | Entity.Children처럼 하위 엔티티를 참조하는 또 다른 방법을 알아봅시다. Entity:GetChildByName()은 하위 엔티티 중 매개 변수로 넘겨진 값과 같은 이름의 엔티티를 반환하는 함수입니다. 따라서 Entity.Children처럼 모든 하위 엔티티를 받아온 후 반복문을 통해 원하는 엔티티를 찾을 필요가 없습니다. 찾고자 하는 엔티티의 이름만 알고 있다면 훨씬 간단하게 하위 엔티티를 가져올 수 있습니다. * **매개 변수** * GetChildByName 함수는 두 개의 매개 변수를 받을 수 있습니다.

[task] | code [pass] | ⏳ 미판정 [title] | Maple GYM 만들기 Ⅱ [question] | UIManager 컴포넌트에 [None] 타입의 Component SkillLevelText, DnaLevelText, SkillUpButtonText, DnaUpButtonText 프로퍼티를 선언하고, OnBeginPlay() 메서드에서 _EntityService:GetEntityByPath("/ui/UIGroup/SkillLevelText").TextComponent, _EntityService:GetEntityByPath("/ui/UIGroup/DnaLevelText").TextComponent, _EntityService:G [answer] | 요청하신 `UIManager` 컴포넌트 스크립트는 아래 코드로 작성할 수 있습니다. ```lua Property: [None] Component SkillLevelText = nil [None] Component DnaLevelText = nil [None] Component SkillUpButtonText = nil [None] Component DnaUpButtonText = nil [None] Component ShopGroup = nil Method: [client only] void OnBeginPlay() { [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 상점에 알맞는 정보가 표시될 수 있도록 만들어봅시다. 1. **UIManager** 컴포넌트에 새로운 프로퍼티를 4개를 추가합니다. 이 프로퍼티들은 **TextComponent** 정보를 가집니다. ```lua Property: [None] Component SkillLevelText = nil [None] Component DnaLevelText = nil [None] Component SkillUpButtonText = nil [None] Componen

[task] | single_turn [pass] | ⏳ 미판정 [title] | 엔티티와 컴포넌트 참조 [question] | 경로가 일치하는 엔티티가 여러 개 있을 때 GetEntityByPath()는 어떤 엔티티를 반환하며, 만약 엔티티가 하나도 없다면 어떤 값이 반환되나요? [answer] | 경로가 일치하는 엔티티가 여러 개 있는 경우 `GetEntityByPath()`는 그 중 **가장 먼저 찾은 엔티티 하나만** 반환합니다. 만약 해당 경로와 일치하는 엔티티가 하나도 없다면 **`nil`** 이 반환됩니다. 코드를 작성할 때는 `nil` 반환 여부를 반드시 검사하는 것이 좋습니다. ```lua Method: [server only] void OnBeginPlay() { local targetEntity = _EntityService:GetEntityByPath("/maps/map01/object_1") [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 찾으려는 엔티티 경로(Path)를 매개 변수로 넘겨주면, 해당 경로의 엔티티를 반환하는 함수입니다. 가장 보편적으로 사용되는 함수입니다. * **매개 변수** | Parameter | Type | Description | | --- | --- | --- | | worldPath | string | 얻고자 하는 엔티티 경로를 넣어줍니다. 경로는 /maps/부터 시작해서 하위 엔티티들을 입력합니다. 예를 들어 다음과 같은 계층 구조에서 "object_1"의 경로는 다음과 같습니다. "/maps/map01

[task] | single_turn [pass] | ⏳ 미판정 [title] | 엔티티와 컴포넌트 참조 [question] | 상위 엔티티에서 바로 아래 단계의 하위 엔티티만 찾고 싶을 때 recursive 매개 변수를 생략하면 어떻게 처리되는지 설명해 주세요. [answer] | `GetChildByName` 함수의 두 번째 매개 변수인 `recursive`는 옵셔널(선택 사항)입니다. 이 값을 생략하면 기본값으로 `false`가 적용됩니다. `false`가 적용되면 상위 엔티티의 **바로 아래 단계(직접적인 자식)에만 존재하는** 엔티티를 검색하게 됩니다. 하위에 다시 하위(손자, 증손자 등)가 있는 경우까지 재귀적으로 찾아가지 않습니다. 예를 들어 `EntityA`에 `EntityB`가 있고, `EntityB` 안에 `EntityC`가 있는 구조일 때 `EntityA:GetChildByName("En [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | Entity.Children처럼 하위 엔티티를 참조하는 또 다른 방법을 알아봅시다. Entity:GetChildByName()은 하위 엔티티 중 매개 변수로 넘겨진 값과 같은 이름의 엔티티를 반환하는 함수입니다. 따라서 Entity.Children처럼 모든 하위 엔티티를 받아온 후 반복문을 통해 원하는 엔티티를 찾을 필요가 없습니다. 찾고자 하는 엔티티의 이름만 알고 있다면 훨씬 간단하게 하위 엔티티를 가져올 수 있습니다. * **매개 변수** * GetChildByName 함수는 두 개의 매개 변수를 받을 수 있습니다.

[task] | code [pass] | ⏳ 미판정 [title] | MSW 기본 이벤트 함수 [question] | 맵을 진입할 때마다 `OnMapEnter` 이벤트를 처리하여 현재 맵 이름이 "map01"이면 `log`로 환영 메시지를 출력하고, "map02"면 `OnMapLeave`에서 축소된 크기를 원래대로 복구하는 플레이어 엔티티 스크립트를 작성해줘 [answer] | 요청하신 동작을 구현하기 위해 `OnMapEnter`와 `OnMapLeave` 이벤트 핸들러를 사용해야 합니다. 참고 문서에 따르면: 1. `OnMapEnter(Entity enteredMap)` 함수는 엔티티가 맵을 진입할 때마다 호출되며, 매개변수로 진입한 맵 엔티티를 받습니다. 2. `OnMapLeave(Entity leftMap)` 함수는 엔티티가 맵을 퇴장할 때마다 호출되며, 매개변수로 퇴장한 맵 엔티티를 받습니다. 3. 엔티티의 이름은 `Entity.Name` 프로퍼티를 통해 확인할 수 있습니다. 4. 플레이어 엔티티의 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 예를 들어, 내 플레이어 엔티티가 **map01에서 map02로 이동**했다고 가정합니다. 이때 내 플레이어 엔티티의 스크립트 컴포넌트에 `OnMapEnter` 함수가 있었다면, map02로 이동할 때 내 플레이어 엔티티의 `OnMapEnter` 함수가 호출됩니다. 그런데 내 플레이어뿐만 아니라 다른 플레이어의 `OnMapEnter` 함수도 호출되는 것을 볼 수 있습니다. 클라이언트 상에서 보자면, 현재 내가 존재하는 맵에 다른 플레이어 엔티티가 생성된 것과 마찬가지이기 때문입니다. 하지만 서버상에서는 내 플레이어 엔티티가 map

[task] | single_turn [pass] | ⏳ 미판정 [title] | 엔티티와 컴포넌트 참조 [question] | Entity.Children 배열을 직접 반복문으로 순회하는 방식과 GetChildByName() 함수를 사용하는 방식 중 특정 이름의 엔티티를 빠르게 찾기 위해서는 어떤 방식이 더 효율적인가요? [answer] | `Entity.Children` 배열을 직접 반복문으로 순회하는 방식보다 `GetChildByName()` 함수를 사용하는 방식이 특정 이름의 엔티티를 찾는 데 더 효율적입니다. `Entity.Children`을 사용할 경우, 모든 하위 엔티티를 받아온 후 반복문을 통해 원하는 이름의 엔티티를 하나씩 비교해야 합니다. 반면 `GetChildByName()`은 찾고자 하는 엔티티의 이름만 매개 변수로 전달하면 내부적으로 해당 엔티티를 직접 찾아 반환해 주기 때문에, 반복 처리가 불필요하며 코드가 훨씬 간단하고 빠릅니다. 예를 들어 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | Entity.Children처럼 하위 엔티티를 참조하는 또 다른 방법을 알아봅시다. Entity:GetChildByName()은 하위 엔티티 중 매개 변수로 넘겨진 값과 같은 이름의 엔티티를 반환하는 함수입니다. 따라서 Entity.Children처럼 모든 하위 엔티티를 받아온 후 반복문을 통해 원하는 엔티티를 찾을 필요가 없습니다. 찾고자 하는 엔티티의 이름만 알고 있다면 훨씬 간단하게 하위 엔티티를 가져올 수 있습니다. * **매개 변수** * GetChildByName 함수는 두 개의 매개 변수를 받을 수 있습니다.

[task] | single_turn [pass] | ⏳ 미판정 [title] | 엔티티와 컴포넌트 참조 [question] | 스크립트에서 GetEntityByPath()로 엔티티를 가져온 후, 해당 엔티티가 실제로 존재하는지 확인하기 위해 어떤 함수를 호출해야 하나요? [answer] | `GetEntityByPath()`로 엔티티를 가져온 후, 해당 엔티티가 실제로 존재하는지(즉, `nil`이 아닌지) 확인하기 위해 **`isvalid()`** 함수를 호출해야 합니다. 참고 문서의 스크립트 작성 예시에서 다음과 같이 사용법을 확인할 수 있습니다. ```lua void OnBeginPlay() { -- EntityE의 경로를 매개 변수로 입력하여 EntityE를 반환 local EntityE = _EntityService:GetEntityByPath("/maps/map01/EntityO/Enti [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 찾으려는 엔티티 경로(Path)를 매개 변수로 넘겨주면, 해당 경로의 엔티티를 반환하는 함수입니다. 가장 보편적으로 사용되는 함수입니다. * **매개 변수** | Parameter | Type | Description | | --- | --- | --- | | worldPath | string | 얻고자 하는 엔티티 경로를 넣어줍니다. 경로는 /maps/부터 시작해서 하위 엔티티들을 입력합니다. 예를 들어 다음과 같은 계층 구조에서 "object_1"의 경로는 다음과 같습니다. "/maps/map01

[task] | code [pass] | ⏳ 미판정 [title] | Maple GYM 만들기 Ⅱ [question] | UIManager 컴포넌트에 4개의 Component 타입 프로퍼티를 추가하고, OnBeginPlay() 에서 _EntityService 를 통해 "/ui/UIGroup/ " 경로 하위 엔티티의 TextComponent 를 가져와 프로퍼티에 대입하며, PlayerStats 컴포넌트의 테이블 데이터를 참조하여 SetShopInfo() 메서드에서 텍스트 색상과 금액을 갱신하는 로직을 구현하는 스크립트를 작성해줘 [answer] | 참고 문서에는 `SetShopInfo()` 메서드의 구체적인 구현 코드(본문 로직)가 제공되지 않았습니다. 문서에서는 해당 메서드를 추가하라고 지시할 뿐, `PlayerStats` 테이블을 참조하여 색상과 금액을 갱신하는 실제 Lua 코드 블록은 포함되어 있지 않습니다. 따라서 문서에 근거하여 작성할 수 있는 부분은 **Property 블록**과 **OnBeginPlay() 메서드** 부분입니다. `SetShopInfo()` 메서드는 문서에 구현 예시가 없어 정확한 코드를 제시할 수 없으므로, 해당 부분만 메서드 시그니처와 함께 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 상점에 알맞는 정보가 표시될 수 있도록 만들어봅시다. 1. **UIManager** 컴포넌트에 새로운 프로퍼티를 4개를 추가합니다. 이 프로퍼티들은 **TextComponent** 정보를 가집니다. ```lua Property: [None] Component SkillLevelText = nil [None] Component DnaLevelText = nil [None] Component SkillUpButtonText = nil [None] Componen

[task] | two_turn [pass] | ⏳ 미판정 [title] | 엔티티와 컴포넌트 참조 [question] | 엔티티의 ID를 콘텍스트 메뉴에서 복사하는 방법과 스크립트에서 ID를 가져오는 방법은 무엇인가요? [answer] | 엔티티의 ID를 가져오는 방법은 다음과 같습니다. **1. 콘텍스트 메뉴에서 복사하는 방법** 엔티티의 콘텍스트 메뉴에서 **Copy Entity ID**를 클릭하면 해당 엔티티의 ID가 클립보드에 복사됩니다. **2. 스크립트에서 ID를 가져오는 방법** 스크립트에서는 `Entity.ID` 프로퍼티를 통해 엔티티의 ID를 직접 얻을 수 있습니다. ```lua local id = Entity.ID ``` [followup] | 로컬 변수로 ID를 저장하여 GetEntity에 전달하는 전체 코드 예시를 보여주세요. [followup_answer] | 참고 문서에 있는 정보만 사용하여, 로컬 변수로 ID를 저장한 뒤 `_EntityService:GetEntity`에 전달하는 전체 코드 예시는 다음과 같습니다. ```lua Method: [server only] void OnBeginPlay() { -- 엔티티의 ID를 로컬 변수에 저장 local id = "eb9c3412-9730-4e32-a180-69f4d1596652" -- 로컬 변수로 저장한 ID를 매개 변수로 전달하여 엔티티를 가져옴 local entityE = _EntityServ [scores] | [judge_reason] | [source_doc] | 매개 변수로 엔티티 ID를 넘겨주면 해당 ID의 엔티티를 반환하는 함수입니다. 엔티티의 계층 구조가 동적으로 변경되거나 엔티티의 이름이 바뀌면서 경로가 변경될 여지가 있으면, 유니크한 ID를 이용해 엔티티를 받아올 수 있는 GetEntity를 사용하는 것이 효율적입니다. * **매개 변수** | Parameter | Type | Description | | --- | --- | --- | | ID | string | 얻고자 하는 엔티티 ID를 넣어줍니다. 엔티티의 콘텍스트 메뉴에서 **Copy Entity I

[task] | code [pass] | ⏳ 미판정 [title] | Maple GYM 만들기 Ⅱ [question] | UIManager 컴포넌트의 OnBeginPlay() 메서드 하단에 _EntityService:GetEntityByPath("/ui/UIGroup/SkillLevelText").TextComponent, _EntityService:GetEntityByPath("/ui/UIGroup/DnaLevelText").TextComponent, _EntityService:GetEntityByPath("/ui/UIGroup/SkillUpButton").TextComponent, _EntityService:GetEntityByPath("/ui/U [answer] | UIManager 컴포넌트에 필요한 4개의 TextComponent 프로퍼티를 선언하고, OnBeginPlay() 메서드에서 해당 UI 엔티티의 TextComponent를 가져와 프로퍼티에 할당하며 ShopGroup의 가시성을 숨기는 스크립트는 다음과 같습니다. ```lua Property: [None] Component SkillLevelText = nil [None] Component DnaLevelText = nil [None] Component SkillUpButtonText = nil [None] Component Dna [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 상점에 알맞는 정보가 표시될 수 있도록 만들어봅시다. 1. **UIManager** 컴포넌트에 새로운 프로퍼티를 4개를 추가합니다. 이 프로퍼티들은 **TextComponent** 정보를 가집니다. ```lua Property: [None] Component SkillLevelText = nil [None] Component DnaLevelText = nil [None] Component SkillUpButtonText = nil [None] Componen

[task] | two_turn [pass] | ⏳ 미판정 [title] | MSW 기본 이벤트 함수 [question] | `OnUpdate`에서 `delta` 매개변수를 활용해 3초마다 액션을 실행하는 로직을 작성하고 싶으니 예제 코드를 보여주세요. [answer] | `OnUpdate` 함수는 `OnBeginPlay` 호출 이후 프레임마다 실행되며, 매개변수 `delta`는 이전 프레임에 걸린 시간(단위: 초)을 나타냅니다. 이를 누적하여 특정 시간(예: 3초)이 지난 시점에 액션을 실행하는 로직을 구현할 수 있습니다. 아래는 `OnUpdate`에서 `delta`를 활용하여 3초마다 콘솔에 메시지를 출력하는 예제입니다. ```lua void OnUpdate(number delta) { if self._T.Time == nil then self._T.Time = 0 end sel [followup] | `delta`가 0.1초씩 증가할 때 누적 시간이 3.0초가 되기 직전에 에러가 나는 현상이 발생하는데, 부동소수점 비교 문제 때문인지 확인하고 해결 방법을 알려주세요. [followup_answer] | 참고 문서에 부동소수점 비교 문제나 `delta` 값 관련 구체적인 에러 원인 및 해결 방법에 대한 설명이 없습니다. 문서에 제공된 정보로는 `delta`가 이전 프레임에 걸린 시간 값(단위: 초)임을 알 수 있을 뿐, 특정 프레임에서 `delta`가 정확히 0.1초가 보장되는지, 부동소수점 오차로 인해 누적 시간이 정확히 3.0이 되지 않는 경우의 처리 방식에 대한 가이드가 포함되어 있지 않습니다. 따라서 문서 근거만으로 이 현상의 원인 확인 및 해결 방법을 제시할 수 없습니다. 다만, 문서의 예제 코드는 `>=` (크거나 같 [scores] | [judge_reason] | [source_doc] | `OnBeginPlay` 함수 호출 이후, 프레임마다 호출되는 함수입니다. 따라서 프레임별로 엔티티 위치, 상태, 동작을 변경하고 싶다면 `OnUpdate` 함수에 스크립트를 작성합니다. 매개 변수로 **delta**를 사용하며, 이전 프레임에 걸린 시간 값(단위: 초)을 받습니다. **delta**를 활용하여 프레임 단위 구현을 할 수 있고, 특정 시간마다 액션을 제어할 수 있습니다. ```lua void OnUpdate(number delta) { if self._T.Time == nil then self._T.Time

[task] | two_turn [pass] | ⏳ 미판정 [title] | MSW 기본 이벤트 함수 [question] | `OnEndPlay`와 `OnDestroy`가 모두 엔티티 제거 시점에 호출되는데, 두 함수가 실행된 후 엔티티 상태에 차이가 있는지 설명해 주세요. [answer] | `OnEndPlay`와 `OnDestroy`는 모두 엔티티가 제거되는 시점에 호출되지만, 함수가 실행된 후 엔티티의 유효성에 차이가 있습니다. 1. **OnEndPlay**: 이 함수가 완료된 이후에도 엔티티는 여전히 유효한 상태입니다. 즉, 함수 실행 중에 엔티티의 상태를 조회하거나 변경하는 것이 가능합니다. 2. **OnDestroy**: 이 함수가 호출된 뒤에는 엔티티가 완전히 제거됩니다. 따라서 `OnDestroy` 함수 본문이 종료된 시점부터는 해당 엔티티에 대한 접근이 불가능해집니다. 두 함수의 실행 순서는 `OnEn [followup] | `OnEndPlay` 실행 후에도 엔티티가 유효한 상태에서 다른 스크립트로부터 접근받아 오류가 나는 경우가 있는지, 또는 `OnDestroy` 전에 특정 데이터를 정리해야 한다면 어느 함수에 작성하는 것이 적합한지 구체적으로 알려주세요. [followup_answer] | 제공된 참고 문서에는 `OnEndPlay` 실행 후 다른 스크립트로부터 접근받아 발생하는 구체적인 오류 사례나, 데이터 정리를 위한 특정 함수 선택에 대한 명시적인 지침이 포함되어 있지 않습니다. 문서에서 확인할 수 있는 사실은 다음과 같습니다. 1. `OnEndPlay` 함수가 완료된 후에도 엔티티는 제거되지 않고 유효한 상태입니다. 2. `OnDestroy` 함수가 완료된 뒤에는 엔티티가 제거됩니다. 3. 실행 순서는 `OnEndPlay`가 호출된 이후 `OnDestroy`가 호출됩니다. 따라서 문서의 정보만으로는 "어느 함 [scores] | [judge_reason] | [source_doc] | `OnBeginPlay` 함수 호출 이후, 프레임마다 호출되는 함수입니다. 따라서 프레임별로 엔티티 위치, 상태, 동작을 변경하고 싶다면 `OnUpdate` 함수에 스크립트를 작성합니다. 매개 변수로 **delta**를 사용하며, 이전 프레임에 걸린 시간 값(단위: 초)을 받습니다. **delta**를 활용하여 프레임 단위 구현을 할 수 있고, 특정 시간마다 액션을 제어할 수 있습니다. ```lua void OnUpdate(number delta) { if self._T.Time == nil then self._T.Time

[task] | two_turn [pass] | ⏳ 미판정 [title] | MSW 기본 이벤트 함수 [question] | `OnMapEnter` 함수에서 매개변수로 전달되는 `enteredMap` 엔티티를 이용해 특정 맵(`map01`)에만 적용되는 효과를 구현하고 싶으니 코드 예시를 보여주세요. [answer] | `OnMapEnter` 함수는 엔티티가 맵에 입장하거나 생성될 때마다 호출되며, 매개변수로 입장한 맵의 엔티티(`enteredMap`)를 전달받습니다. 특정 맵 이름(예: `map01`)을 확인하여 해당 맵에만 적용되는 효과를 구현할 수 있습니다. 아래는 `map01`에 입장할 때마다 적용된 엔티티의 크기가 1만큼 커지도록 구현한 mLua 코드 예시입니다. ```lua void OnMapEnter(Entity enteredMap) { -- map01에 입장할 때마다 적용된 엔티티의 크기가 커집니다. if enter [followup] | `OnBeginPlay`와 `OnMapEnter`의 호출 주기가 어떻게 다른지 비교하고, 플레이어가 맵을 반복적으로 왕복할 때 `OnMapEnter`의 누적 효과(예: 크기 증가)가 의도대로 동작하는지 테스트 시나리오를 알려주세요. [followup_answer] | ### 1. `OnBeginPlay`와 `OnMapEnter` 호출 주기 비교 두 함수의 가장 큰 차이는 **호출되는 시점과 빈도**에 있습니다. * **`OnBeginPlay`**: * 엔티티가 **생성될 때마다** 1회 호출됩니다. * 월드에 처음 진입하거나 엔티티가 초기화되는 시점에 실행되며, 이후 맵 이동 시에는 다시 호출되지 않습니다. * 주로 엔티티의 초기 상태 설정(변수 초기화, 컴포넌트 참조 등)에 사용해야 합니다. * **`OnMapEnter`**: * 엔티티가 [scores] | [judge_reason] | [source_doc] | `OnBeginPlay` 함수 호출 이후, 프레임마다 호출되는 함수입니다. 따라서 프레임별로 엔티티 위치, 상태, 동작을 변경하고 싶다면 `OnUpdate` 함수에 스크립트를 작성합니다. 매개 변수로 **delta**를 사용하며, 이전 프레임에 걸린 시간 값(단위: 초)을 받습니다. **delta**를 활용하여 프레임 단위 구현을 할 수 있고, 특정 시간마다 액션을 제어할 수 있습니다. ```lua void OnUpdate(number delta) { if self._T.Time == nil then self._T.Time

[task] | single_turn [pass] | ⏳ 미판정 [title] | 엔티티와 컴포넌트 참조 [question] | 탄막이나 총알처럼 동일한 이름으로 대량 생성된 엔티티들을 한 번에 제어하고 싶을 때 어떤 함수를 사용해야 하며, 반환된 데이터를 어떻게 처리하나요? [answer] | 탄막이나 총알처럼 동일한 이름으로 대량 생성되어 경로가 같은 엔티티들을 한 번에 제어하려면 `_EntityService:GetEntitiesByPath()` 함수를 사용해야 합니다. 이 함수는 매개 변수로 넘겨진 경로와 일치하는 **모든** 엔티티를 리스트(테이블) 형태로 반환합니다. 단, 일치하는 엔티티가 하나도 없으면 `nil`을 반환하므로, 반환값이 `nil`인지 반드시 확인하는 것이 중요합니다. 반환된 데이터는 테이블 형식이며, `pairs`를 사용하여 순회하면서 각 엔티티에 접근하여 제어할 수 있습니다. 아래는 해당 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 찾으려는 엔티티 경로(Path)를 매개 변수로 넘겨주면, 해당 경로의 엔티티를 반환하는 함수입니다. 가장 보편적으로 사용되는 함수입니다. * **매개 변수** | Parameter | Type | Description | | --- | --- | --- | | worldPath | string | 얻고자 하는 엔티티 경로를 넣어줍니다. 경로는 /maps/부터 시작해서 하위 엔티티들을 입력합니다. 예를 들어 다음과 같은 계층 구조에서 "object_1"의 경로는 다음과 같습니다. "/maps/map01

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