← 목록

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

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

[task] | two_turn [pass] | ✅ 통과 [title] | DirectionSynchronizerComponent [question] | DirectionSynchronizerComponent의 기본 동작 원리와 주요 속성(Enable 등)에 대해 설명해 주세요. [answer] | DirectionSynchronizerComponent는 부모 엔티티의 방향을 따라가도록 하는 컴포넌트입니다. 이 컴포넌트가 부착된 엔티티의 부모에서 `ChangedLookAtEvent`가 발생하면, 해당 엔티티의 방향도 자동으로 변경됩니다. 주요 속성은 다음과 같습니다: * **Enable**: `boolean` 타입의 동기화(Sync) 속성으로, 컴포넌트의 활성화 여부를 설정하거나 확인합니다. * **EnableInHierarchy**: `boolean` 타입의 읽기 전용(ReadOnly) 속성으로, 계층 구조상에서 [followup] | DirectionSynchronizerComponent를 DefaultPlayer에 추가하여 부모의 방향을 따라가게 하려면, OnBeginPlay에서 SpawnService를 사용하여 자식 엔티티를 생성하고 컴포넌트를 추가하는 구체적인 코드 예시를 작성해 주세요. [followup_answer] | DefaultPlayer에 DirectionSynchronizerComponent를 적용하여 플레이어의 방향을 따라가는 자식 엔티티를 생성하려면, `OnBeginPlay`에서 `_SpawnService`를 사용해 엔티티를 스폰한 뒤 해당 엔티티에 컴포넌트를 추가하면 됩니다. 아래 코드는 DefaultPlayer 엔티티에 부착된 스크립트에서 실행될 때, 지정된 모델 ID를 가진 엔티티를 플레이어(self.Entity)의 자식으로 스폰하고, 그 자식 엔티티에 `DirectionSynchronizerComponent`를 추가하는 예시입 [scores] | helpfulness=4 correctness=4 coherence=4 complexity=2 verbosity=2 [judge_reason] | 참고 문서의 동작 원리, 속성 정의, 예제 코드가 모두 정확히 반영되어 질문을 완벽하게 충족합니다. [source_doc] | 부모 엔티티의 방향을 따라갑니다. 부모 엔티티에서 ChangedLookAtEvent가 발생할 경우 현재 엔티티의 방향도 변경됩니다. # Properties ##### inherited from Component: - **boolean Enable [Sync]** 컴포넌트 활성화 여부를 확인합니다. - **boolean EnableInHierarchy [ReadOnly] [HideFromInspector]** 계층 구조상에서 이 컴포넌트가 Enable 상태인지를 반환합니다. Enable이 true일지라도 엔티티의 Enab

[task] | single_turn [pass] | ✅ 통과 [title] | HitComponent [question] | AttackComponent의 공격을 특정 조건에서만 받도록 IsHitTarget 메서드를 오버라이드하는 예시 코드를 작성해 주세요. [answer] | `IsHitTarget` 메서드는 엔티티가 `AttackComponent`의 공격을 받을지 말지 여부를 판단하는 데 사용됩니다. 이 메서드는 기본적으로 `true`를 반환하지만, 스크립트에서 오버라이드하여 특정 조건(예: 특정 상태, 특정 시간, 특정 공격 정보 등)에 따라 `true` 또는 `false`를 반환하도록 수정할 수 있습니다. 아래 예시에서는 엔티티의 `Health` 프로퍼티가 0보다 클 때만 공격을 받도록 `IsHitTarget` 메서드를 오버라이드하는 방법을 보여줍니다. 이는 엔티티가 이미 사망(Health가 0 [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=3 verbosity=2 [judge_reason] | 참고 문서에 있는 IsHitTarget 메서드의 시그니처와 오버라이드 가능(ScriptOverridable) 속성을 정확히 반영하여, mLua 스크립트 규칙에 부합하는 예시 코드를 제공하여 질문에 완벽하게 답하고 있습니다. [source_doc] | 엔티티의 충돌 영역을 설정하고, AttackComponent의 공격을 받았을 때 피격 동작을 구현할 수 있는 인터페이스를 제공합니다. # Properties - **Vector2 BoxOffset [Deprecated] [Sync]** IsLegacy가 true인 이전 시스템에서 사용할 수 있습니다. 엔티티를 기준으로 충돌체 직사각형의 중심점 위치를 설정합니다. - **Vector2 BoxSize [Sync]** 직사각형 충돌체의 너비와 높이를 지정합니다. - **float CircleRadius [Sync]** 원형

[task] | single_turn [pass] | ✅ 통과 [title] | MapLayerComponent [question] | 맵에서 특정 레이어가 보이지 않을 때 IsVisible과 Locked 프로퍼티 중 어떤 값을 먼저 확인해야 하는지 궁금합니다. [answer] | 레이어가 보이지 않는 원인을 확인하려면 먼저 **`IsVisible`** 프로퍼티의 값을 확인해야 합니다. `MapLayerComponent`의 `IsVisible`은 레이어의 렌더링 여부를 직접적으로 나타내며, 이 값이 `false`일 경우 메이커 씬에서 해당 레이어가 보이지 않습니다. 반면, `Locked` 프로퍼티는 레이어가 잠겨 있는지를 나타내며, 잠겨 있으면 메이커에서 편집이 막히는 것이지 가시성(보이는지 여부)을 결정하지 않습니다. 따라서 특정 레이어가 보이지 않는다면 `IsVisible`이 `false`로 설정되어 [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=2 verbosity=2 [judge_reason] | 문서에서 정의한 IsVisible과 Locked의 역할을 정확히 구분하여 질문에 적절히 답변했습니다. [source_doc] | 맵의 레이어별 정보를 관리합니다. # Properties - **boolean IsVisible [ReadOnly] [HideFromInspector]** 레이어의 렌더링 여부를 나타냅니다. false일 경우 메이커 씬에서 보이지 않습니다. - **int32 LayerSortOrder [ReadOnly]** 레이어의 우선순위 순서입니다. 값이 작을수록 하위 레이어로, 뒤에 그려집니다. - **boolean Locked [ReadOnly] [HideFromInspector]** 레이어가 잠겨 있는지를 나타냅니다. 잠겨

[task] | single_turn [pass] | ✅ 통과 [title] | HitComponent [question] | HitComponent에서 IsLegacy가 true와 false일 때 충돌체 설정에 어떤 차이가 있는지 알려주세요. [answer] | HitComponent의 `IsLegacy` 프로퍼티는 컴포넌트가 이전 시스템(Legacy)인지 신규 시스템인지에 따라 충돌체 설정 방식이 달라집니다. ### 1. IsLegacy가 true인 경우 (이전 시스템) * **사용 가능한 프로퍼티:** `BoxOffset` * 엔티티를 기준으로 충돌체 직사각형의 중심점 위치를 설정합니다. * `BoxSize`와 함께 사용되어 직사각형 충돌체의 크기를 지정합니다. * **제한 사항:** * `ColliderType` 프로퍼티를 사용할 수 없습니다. [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=3 verbosity=2 [judge_reason] | 참고 문서에 명시된 IsLegacy 기반 충돌체 설정 차이(속성, 타입, Transform 영향)를 정확하고 명확하게 정리하여 질문에 충실히 답변했습니다. [source_doc] | 엔티티의 충돌 영역을 설정하고, AttackComponent의 공격을 받았을 때 피격 동작을 구현할 수 있는 인터페이스를 제공합니다. # Properties - **Vector2 BoxOffset [Deprecated] [Sync]** IsLegacy가 true인 이전 시스템에서 사용할 수 있습니다. 엔티티를 기준으로 충돌체 직사각형의 중심점 위치를 설정합니다. - **Vector2 BoxSize [Sync]** 직사각형 충돌체의 너비와 높이를 지정합니다. - **float CircleRadius [Sync]** 원형

[task] | single_turn [pass] | ✅ 통과 [title] | MapLayerComponent [question] | Enable 프로퍼티와 EnableInHierarchy 프로퍼티의 값이 서로 다른 경우, 그 원인은 무엇인가요? [answer] | `Enable`과 `EnableInHierarchy` 프로퍼티의 값이 서로 다른 주된 원인은 **엔티티 자체의 활성화 상태** 때문입니다. * **Enable**: 해당 컴포넌트 자체의 활성화 여부를 나타냅니다. * **EnableInHierarchy**: 컴포넌트의 `Enable` 상태가 `true`여도, 이를 소유한 **엔티티(Entity)의 `Enable` 상태가 `false`** 라면 `false`를 반환합니다. 즉, 컴포넌트는 켜져 있으나(`Enable = true`) 해당 컴포넌트가 붙어 있는 엔티티는 꺼져 있 [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=2 verbosity=2 [judge_reason] | 참고 문서의 EnableInHierarchy 설명을 정확히 인용하여 두 프로퍼티가 다른 원인을 명확히 설명했습니다. [source_doc] | 맵의 레이어별 정보를 관리합니다. # Properties - **boolean IsVisible [ReadOnly] [HideFromInspector]** 레이어의 렌더링 여부를 나타냅니다. false일 경우 메이커 씬에서 보이지 않습니다. - **int32 LayerSortOrder [ReadOnly]** 레이어의 우선순위 순서입니다. 값이 작을수록 하위 레이어로, 뒤에 그려집니다. - **boolean Locked [ReadOnly] [HideFromInspector]** 레이어가 잠겨 있는지를 나타냅니다. 잠겨

[task] | code [pass] | ✅ 통과 [title] | HitEffectSpawnerComponent [question] | HitEffectSpawnerComponent의 Entity 프로퍼티를 통해 해당 컴포넌트를 소유한 엔티티를 참조하는 스크립트를 작성해줘 [answer] | `HitEffectSpawnerComponent`에 포함된 `Entity` 프로퍼티는 읽기 전용(ReadOnly)이며, 해당 컴포넌트를 소유하고 있는 엔티티를 직접 참조할 수 있습니다. 아래 예제는 `OnBeginPlay` 라이프사이클 메서드에서 `self.Entity`를 통해 소유 엔티티를 가져와 그 이름(Name)을 로그로 출력하는 스크립트입니다. ```lua Property: [None] Entity HitEffectSpawner = /maps/map01/obj/HitEffectSpawner Method: [server [followup] | [followup_answer] | [scores] | helpfulness=3 correctness=3 coherence=4 complexity=2 verbosity=2 [judge_reason] | Entity 프로퍼티 존재와 읽기 전용 특성은 정확하지만, 예제에서 Property 블록에 Entity 타입을 직접 선언하는 구문은 mLua 규칙의 예시(타입명 또는 기본값)와 다소 어긋나며, self.Entity 사용 설명은 규칙에 부합합니다. [source_doc] | 엔티티에 피격 이벤트가 발생했을 때 피격 이펙트를 출력합니다. # Properties ##### inherited from Component: - **boolean Enable [Sync]** 컴포넌트 활성화 여부를 확인합니다. - **boolean EnableInHierarchy [ReadOnly] [HideFromInspector]** 계층 구조상에서 이 컴포넌트가 Enable 상태인지를 반환합니다. Enable이 true일지라도 엔티티의 Enable이 false라면 false를 반환합니다. - **Entity En

[task] | code [pass] | ✅ 통과 [title] | HitEffectSpawnerComponent [question] | HitEffectSpawnerComponent의 Enable 프로퍼티를 사용하여 컴포넌트를 비활성화하는 스크립트를 작성해줘 [answer] | `HitEffectSpawnerComponent`의 `Enable` 프로퍼티는 `boolean` 타입이며, `Sync` 속성을 가지고 있습니다. 이 프로퍼티의 값을 `false`로 설정하면 해당 컴포넌트가 비활성화되어 피격 이벤트 발생 시 피격 이펙트가 출력되지 않습니다. 아래 스크립트는 `OnBeginPlay` 라이프사이클에서 컴포넌트를 비활성화하는 예제입니다. ```lua Property: [None] boolean IsComponentDisabled = false Method: [server only] void OnBeg [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=2 verbosity=2 [judge_reason] | 문서의 API 정의와 시스템 규칙에 부합하여 컴포넌트 비활성화 방법을 정확하고 명확하게 설명했습니다. [source_doc] | 엔티티에 피격 이벤트가 발생했을 때 피격 이펙트를 출력합니다. # Properties ##### inherited from Component: - **boolean Enable [Sync]** 컴포넌트 활성화 여부를 확인합니다. - **boolean EnableInHierarchy [ReadOnly] [HideFromInspector]** 계층 구조상에서 이 컴포넌트가 Enable 상태인지를 반환합니다. Enable이 true일지라도 엔티티의 Enable이 false라면 false를 반환합니다. - **Entity En

[task] | single_turn [pass] | ✅ 통과 [title] | MapLayerComponent [question] | MapLayerComponent에서 제공하는 메서드 중 서버와 클라이언트 실행 환경을 구별하는 방법은 무엇인가요? [answer] | `MapLayerComponent`는 `Component`에서 상속된 두 개의 메서드를 통해 현재 실행 환경을 구별할 수 있습니다. 1. **`IsServer()`**: 현재 실행 환경이 서버인지 여부를 반환합니다. 서버에서 실행 중이라면 `true`, 클라이언트에서 실행 중이라면 `false`를 반환합니다. 2. **`IsClient()`**: 현재 실행 환경이 클라이언트인지 여부를 반환합니다. 클라이언트에서 실행 중이라면 `true`, 서버에서 실행 중이라면 `false`를 반환합니다. 이 메서드들은 컴포넌트 인스턴스에서 직 [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=2 verbosity=2 [judge_reason] | 참고 문서에 명시된 IsServer()와 IsClient() 메서드의 기능을 정확히 설명하고, mLua 문법에 맞는 예제를 제시하여 질문에 완벽하게 답하고 있습니다. [source_doc] | 맵의 레이어별 정보를 관리합니다. # Properties - **boolean IsVisible [ReadOnly] [HideFromInspector]** 레이어의 렌더링 여부를 나타냅니다. false일 경우 메이커 씬에서 보이지 않습니다. - **int32 LayerSortOrder [ReadOnly]** 레이어의 우선순위 순서입니다. 값이 작을수록 하위 레이어로, 뒤에 그려집니다. - **boolean Locked [ReadOnly] [HideFromInspector]** 레이어가 잠겨 있는지를 나타냅니다. 잠겨

[task] | two_turn [pass] | ✅ 통과 [title] | HitComponent [question] | IsHitTarget 함수를 오버라이드하여 피격 무적 시간을 조절하는 로직이 궁금한데, ImmuneCooldown 속성을 클라이언트에서 동기화하여 UI에 표시하려면 어떻게 해야 하나요? [answer] | 제공된 문서에 따르면, `ImmuneCooldown` 속성은 `[None]` 범위로 선언되어 있습니다. mLua에서 `[None]` 속성은 클라이언트와 서버 간에 동기화되지 않는 로컬 변수로 취급됩니다. 따라서 이 속성의 값을 클라이언트로 전송하여 UI에 표시하는 방법은 문서에 명시되어 있지 않으며, 제공된 예제 코드에서도 클라이언트로 동기화하는 과정이 없습니다. 문서에서 확인 가능한 사실은 다음과 같습니다: 1. `ImmuneCooldown`은 `[None]` 속성으로 정의됩니다. 2. `IsHitTarget()` 함수는 서버 [followup] | [Sync] 속성을 적용했을 때 LastHitTime이 서버와 클라이언트 간에 어떻게 동기화되는지, 그리고 네트워크 지연으로 인한 무적 상태 불일치를 방지하는 구체적인 코드 예시를 보여주세요. [followup_answer] | 제공된 문서를 근거로 답변드립니다. 1. **`LastHitTime`의 `[Sync]` 적용 시 동기화 방식** 제공된 문서에는 `LastHitTime` 속성에 `[Sync]`를 적용했을 때 서버와 클라이언트 간에 구체적으로 어떻게 동기화되는지(예: 즉시 동기화, 틱 단위 동기화, 이벤트 발생 시 동기화 등)에 대한 설명이나 메커니즘이 **명시되어 있지 않습니다.** 문서의 예제 코드에서는 `LastHitTime`이 `[None]` 속성으로 선언되어 있으며, 이는 클라이언트와 서버 간에 동기화되지 않는 로컬 변수임을 의 [scores] | helpfulness=3 correctness=4 coherence=4 complexity=3 verbosity=3 [judge_reason] | 문서에 없는 UI 표시 API나 동기화 방법을 지어내지 않고, ImmuneCooldown이 [None]임을 정확히 지적하며 문서 내 근거로 답변한 점(정확성)이 좋으나, [Sync] 변경 제안이 문서에 없는 추론임을 명시했음에도 불구하고 질문의 '어떻게 해야 하나요'에 대한 실질적 해결책이 부족하여 도움 정도가 다소 낮음. [source_doc] | 다음은 몬스터가 플레이어의 공격을 받을 때마다 `HitComponent`의 BoxSize를 남은 체력에 반비례하게 키우는 예제입니다. ```lua Property: [Sync] number Health = 1000 [None] number InitialHealth = 0 [None] Vector2 InitialBoxSize = Vector2(0,0) Method: [server only] void OnBeginPlay () { self.InitialHealth = self.Health self.InitialBoxSize

[task] | single_turn [pass] | ✅ 통과 [title] | HitEffectSpawnerComponent [question] | HitEffectSpawnerComponent에서 self.Entity.TransformComponent.Position을 이용해 이펙트 위치를 직접 지정할 수 있는 메서드가 없나요? [answer] | 제시된 참고 문서에는 `HitEffectSpawnerComponent`의 구체적인 메서드 목록이 포함되어 있지 않습니다. 문서에는 "엔티티에 피격 이벤트가 발생했을 때 피격 이펙트를 출력한다"는 기능 설명과, `Component`에서 상속된 기본 프로퍼티(`Enable`, `EnableInHierarchy`, `Entity`) 및 메서드(`IsClient`, `IsServer`) 정보만 기재되어 있습니다. 따라서 `HitEffectSpawnerComponent`에 이펙트 위치를 직접 지정하는 메서드가 있는지 여부는 제공된 문서만으 [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=2 verbosity=2 [judge_reason] | 참고 문서에 위치 지정 메서드가 없으므로 존재 여부를 단정할 수 없다는 답변이 정확하며, 문서 기반 제한 사항을 명확히 설명했습니다. [source_doc] | 엔티티에 피격 이벤트가 발생했을 때 피격 이펙트를 출력합니다. # Properties ##### inherited from Component: - **boolean Enable [Sync]** 컴포넌트 활성화 여부를 확인합니다. - **boolean EnableInHierarchy [ReadOnly] [HideFromInspector]** 계층 구조상에서 이 컴포넌트가 Enable 상태인지를 반환합니다. Enable이 true일지라도 엔티티의 Enable이 false라면 false를 반환합니다. - **Entity En

[task] | code [pass] | ✅ 통과 [title] | HitEffectSpawnerComponent [question] | HitEffectSpawnerComponent의 EnableInHierarchy 프로퍼티를 확인하여 계층 구조상 활성화 상태를 로그로 출력하는 스크립트를 작성해줘 [answer] | `HitEffectSpawnerComponent`의 `EnableInHierarchy` 프로퍼티는 읽기 전용(ReadOnly)이며, 계층 구조를 따라 상위 엔티티까지 모두 활성화(Enable) 상태인지 여부를 반환합니다. 요청하신 대로 해당 프로퍼티 값을 확인하여 로그로 출력하는 mLua 스크립트는 다음과 같습니다. ```lua Property: [None] boolean IsHierarchyEnabled = false Method: [server only] void OnBeginPlay() { -- HitEffectS [followup] | [followup_answer] | [scores] | helpfulness=3 correctness=3 coherence=4 complexity=2 verbosity=2 [judge_reason] | 컴포넌트 접근 방식이 mLua 규칙에 부합하지만, 문서에 없는 HitEffectSpawnerComponent 필드명을 가정하고 nil 체크를 포함해 불필요하게 복잡하다. [source_doc] | 엔티티에 피격 이벤트가 발생했을 때 피격 이펙트를 출력합니다. # Properties ##### inherited from Component: - **boolean Enable [Sync]** 컴포넌트 활성화 여부를 확인합니다. - **boolean EnableInHierarchy [ReadOnly] [HideFromInspector]** 계층 구조상에서 이 컴포넌트가 Enable 상태인지를 반환합니다. Enable이 true일지라도 엔티티의 Enable이 false라면 false를 반환합니다. - **Entity En

[task] | single_turn [pass] | ✅ 통과 [title] | HitEffectSpawnerComponent [question] | HitEffectSpawnerComponent의 Enable을 false로 설정해도 엔티티 자체는 활성화된 상태에서 다른 컴포넌트는 정상 작동하나요? [answer] | 네, `HitEffectSpawnerComponent`의 `Enable`을 `false`로 설정해도 엔티티 자체는 활성화된 상태가 유지되며, 다른 컴포넌트는 정상적으로 작동합니다. `Enable` 프로퍼티는 해당 컴포넌트(`HitEffectSpawnerComponent`) 자체의 활성화 여부를 제어하는 것이지, 엔티티 전체의 활성화 상태를 제어하는 것이 아닙니다. 따라서 이 컴포넌트만 비활성화되며, 동일한 엔티티에 존재하는 다른 컴포넌트들은 각각의 `Enable` 상태에 따라 독립적으로 동작합니다. 참고로 `EnableInHie [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=2 verbosity=2 [judge_reason] | 문서의 Enable 및 EnableInHierarchy 정의와 일치하며, 컴포넌트별 독립적 동작을 명확히 설명했습니다. [source_doc] | 엔티티에 피격 이벤트가 발생했을 때 피격 이펙트를 출력합니다. # Properties ##### inherited from Component: - **boolean Enable [Sync]** 컴포넌트 활성화 여부를 확인합니다. - **boolean EnableInHierarchy [ReadOnly] [HideFromInspector]** 계층 구조상에서 이 컴포넌트가 Enable 상태인지를 반환합니다. Enable이 true일지라도 엔티티의 Enable이 false라면 false를 반환합니다. - **Entity En

[task] | instruction_following [pass] | ✅ 통과 [title] | AvatarRendererComponent [question] | `ChangeMaterial` 메서드와 `MaterialId` 속성 중 런타임에 머티리얼을 교체하기 위해 호출해야 하는 대상은 무엇인지 한 줄로 답하세요. [answer] | 런타임에 머티리얼을 교체하기 위해 호출해야 하는 대상은 `ChangeMaterial` 메서드입니다. [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=1 verbosity=2 [judge_reason] | 문서의 ChangeMaterial 메서드 설명과 정확히 일치하며, 질문에 한 줄로 명확하게 답변했습니다. [source_doc] | 아바타 형태의 엔티티를 렌더링합니다. # Properties - **boolean IgnoreMapLayerCheck [Sync]** SortingLayer에 Map Layer 이름을 지정했을 때 자동 치환을 수행하지 않습니다. - **string MaterialId [Sync]** 렌더러에 적용할 머티리얼의 Id를 지정합니다. - **int32 OrderInLayer** 같은 Layer 내의 우선순위를 결정합니다. 수가 클수록 앞에 보입니다. - **float PlayRate [Sync]** 아바타 애니메이션의

[task] | single_turn [pass] | ✅ 통과 [title] | HitComponent [question] | HitEvent 처리에서 TotalDamage를 체력에서 뺀 후 0보다 작아졌을 때 즉시 Destroy를 호출해도 되나요? [answer] | 네, `HandleHitEvent`에서 `TotalDamage`를 체력에서 뺀 후 체력이 0 이하가 되면 즉시 `_EntityService:Destroy(self.Entity)`를 호출하는 것이 정상적인 처리 방식입니다. 참고 문서의 예제에서도 동일한 로직을 사용하고 있습니다. `HitEvent`가 발생하면 `event.TotalDamage`를 가져와 `Health`에서 차감하고, `math.max`를 통해 음수가 되지 않도록 처리한 뒤 체력이 0보다 크면 `HitComponent`의 `BoxSize`를 조정하고, 0 이하이면 엔 [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=3 verbosity=2 [judge_reason] | 문서의 예제 코드와 로직을 정확히 인용하여 질문에 대한 답을 명확하게 제시했으며, API 사용법과 실행 컨텍스트 설명도 정확합니다. [source_doc] | 다음은 몬스터가 플레이어의 공격을 받을 때마다 `HitComponent`의 BoxSize를 남은 체력에 반비례하게 키우는 예제입니다. ```lua Property: [Sync] number Health = 1000 [None] number InitialHealth = 0 [None] Vector2 InitialBoxSize = Vector2(0,0) Method: [server only] void OnBeginPlay () { self.InitialHealth = self.Health self.InitialBoxSize

[task] | instruction_following [pass] | ✅ 통과 [title] | AvatarRendererComponent [question] | `AvatarRendererComponent`의 `SetAvatarPartColor` 메서드 시그니처를 정확히 기재하되, 매개변수 5개와 기본값 포함 여부를 코드 블록 하나에만 출력하세요. [answer] | ```lua void SetAvatarPartColor(MapleAvatarItemCategory category, float r, float g, float b, float a, string targetUserId = nil) [Client] ``` [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=1 verbosity=1 [judge_reason] | 참고 문서의 SetAvatarPartColor 메서드 시그니처, 매개변수 6개(기본값 포함), 실행 공간([Client])이 정확히 기재되어 있으며 요청된 형식(코드 블록 하나)을 준수했습니다. [source_doc] | 아바타 형태의 엔티티를 렌더링합니다. # Properties - **boolean IgnoreMapLayerCheck [Sync]** SortingLayer에 Map Layer 이름을 지정했을 때 자동 치환을 수행하지 않습니다. - **string MaterialId [Sync]** 렌더러에 적용할 머티리얼의 Id를 지정합니다. - **int32 OrderInLayer** 같은 Layer 내의 우선순위를 결정합니다. 수가 클수록 앞에 보입니다. - **float PlayRate [Sync]** 아바타 애니메이션의

[task] | two_turn [pass] | ✅ 통과 [title] | AIWanderComponent [question] | AIWanderComponent의 기본 동작 원리와 StateComponent와의 관계는 어떻게 되나요? [answer] | AIWanderComponent는 엔티티가 주변을 배회하도록 만드는 AI 컴포넌트입니다. 이 컴포넌트를 엔티티에 추가하면 해당 엔티티는 자동으로 주변을 어슬렁거리며 이동하는 기본 동작을 수행합니다. StateComponent와의 관계는 다음과 같습니다. AIWanderComponent가 적용된 엔티티에 StateComponent가 이미 존재하지 않는다면, AIWanderComponent는 StateComponent를 자동으로 추가합니다. 이는 AIWanderComponent의 동작을 위해 상태 관리 기능이 필요하기 때문입니다. [followup] | AIWanderComponent를 추가했는데 StateComponent가 자동으로 추가되는지 확인하고, 기존에 StateComponent가 있는 경우 충돌이나 우선순위는 어떻게 처리되는지 궁금합니다. [followup_answer] | AIWanderComponent를 엔티티에 추가하면, 해당 엔티티에 StateComponent가 존재하지 않는 경우에만 StateComponent가 자동으로 추가됩니다. 기존에 StateComponent가 이미 있는 경우, 참고 문서에 명시된 내용만으로는 충돌이나 우선순위 처리 방식에 대해 설명할 수 없습니다. 문서에는 "StateComponent가 없다면 자동으로 추가됩니다"라는 조건부 설명만 제공되고, 이미 존재할 때의 동작이나 우선순위 규칙에 대한 정보는 포함되어 있지 않습니다. [scores] | helpfulness=4 correctness=4 coherence=4 complexity=2 verbosity=2 [judge_reason] | 참고 문서에 명시된 AIWanderComponent의 기능과 StateComponent 자동 추가 로직을 정확하고 간결하게 설명했습니다. [source_doc] | 주변을 배회하는 AI입니다. StateComponent가 없다면 자동으로 추가됩니다. # Properties ##### inherited from AIComponent: - **string BehaviourTreeId [ReadOnly]** 행동 트리 엔트리의 고유 식별자입니다. - **Blackboard BlackBoard [ReadOnly]** AI 행동 트리에서 사용하는 데이터 저장소입니다. 키-값 쌍으로 데이터를 관리하며 행동 트리 노드 간 데이터를 공유합니다. - **boolean IsLegacy [ReadOn

[task] | instruction_following [pass] | ✅ 통과 [title] | AvatarRendererComponent [question] | `OrderInLayer`와 `SortingLayer` 속성의 동작 원리 및 차이점을 3문장 이내로 설명하세요. [answer] | `SortingLayer`는 2개 이상의 엔티티가 겹쳤을 때의 전체적인 렌더링 우선순위를 결정하며, `OrderInLayer`는 같은 `SortingLayer` 내에서 더 세밀한 우선순위를 정합니다. `OrderInLayer` 값이 클수록 같은 레이어 내에서 더 앞에 보이게 됩니다. [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=2 verbosity=2 [judge_reason] | 참고 문서의 정의와 제약사항을 정확히 요약하여 질문에 간결하고 명확하게 답변했습니다. [source_doc] | 아바타 형태의 엔티티를 렌더링합니다. # Properties - **boolean IgnoreMapLayerCheck [Sync]** SortingLayer에 Map Layer 이름을 지정했을 때 자동 치환을 수행하지 않습니다. - **string MaterialId [Sync]** 렌더러에 적용할 머티리얼의 Id를 지정합니다. - **int32 OrderInLayer** 같은 Layer 내의 우선순위를 결정합니다. 수가 클수록 앞에 보입니다. - **float PlayRate [Sync]** 아바타 애니메이션의

[task] | single_turn [pass] | ✅ 통과 [title] | HitEffectSpawnerComponent [question] | 이 컴포넌트가 서버에서만 작동하는지 클라이언트에서도 이펙트가 보이는지 IsClient()와 IsServer()로 어떻게 확인해야 하나요? [answer] | `HitEffectSpawnerComponent`는 엔티티에 피격 이벤트가 발생했을 때 피격 이펙트를 출력하는 컴포넌트입니다. 제공된 문서에는 이 컴포넌트가 서버 전용인지 클라이언트에서도 작동하는지에 대한 명시적인 실행 공간(Execution Space) 정보나 `IsClient()`/`IsServer()`를 활용한 구체적인 사용 예제가 포함되어 있지 않습니다. 문서에 따르면, `IsClient()`와 `IsServer()`는 `Component`에서 상속된 메서드로, 각각 "현재 실행 환경이 클라이언트인지 아닌지의 여부"와 "현 [followup] | [followup_answer] | [scores] | helpfulness=3 correctness=4 coherence=4 complexity=2 verbosity=2 [judge_reason] | 문서에 없는 정보(실행 공간 지정 등)를 지어내지 않고, 문서에 명시된 메서드 정의만 근거로 답할 수 없는 상황을 정확히 설명하여 신뢰성이 높음 [source_doc] | 엔티티에 피격 이벤트가 발생했을 때 피격 이펙트를 출력합니다. # Properties ##### inherited from Component: - **boolean Enable [Sync]** 컴포넌트 활성화 여부를 확인합니다. - **boolean EnableInHierarchy [ReadOnly] [HideFromInspector]** 계층 구조상에서 이 컴포넌트가 Enable 상태인지를 반환합니다. Enable이 true일지라도 엔티티의 Enable이 false라면 false를 반환합니다. - **Entity En

[task] | instruction_following [pass] | ✅ 통과 [title] | CameraComponent [question] | `CameraComponent`의 줌 설정 메서드 이름과 해당 메서드가 호출되는 시점을 2문장 이내로 설명하세요. [answer] | `CameraComponent`의 줌 설정 메서드 이름은 `SetZoomTo`입니다. 해당 메서드는 `OnBeginPlay` 이후 `_TimerService:SetTimerOnce`를 통해 4초가 지난 시점에 호출됩니다. [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=2 verbosity=2 [judge_reason] | 참고 문서의 예제 코드와 메서드 이름, 실행 시점을 정확하고 간결하게 요약하여 질문에 완벽히 부합합니다. [source_doc] | # Examples 4초 뒤에 줌 배율을 300%로 설정하는 코드입니다. ```lua Method: [server only] void OnBeginPlay ( ) { local zoom = function() self.Entity.CameraComponent:SetZoomTo(300, 2) end _TimerService:SetTimerOnce(zoom, 4) } ``` # SeeAlso * TimerService * [CameraService를 활용한 카메라 제어](/docs?postId=118)

[task] | two_turn [pass] | ✅ 통과 [title] | PortalComponent [question] | PortalUseEvent 이벤트가 발생했을 때 플레이어가 이동하도록 처리하는 스크립트 예제를 작성해 주세요. [answer] | `PortalUseEvent` 이벤트는 플레이어가 포탈을 이용할 때 발생하며, 기본적으로 `PortalComponent`에 설정된 `PortalEntityRef`(목적지 포탈)로 이동하는 동작을 담당합니다. 참고 문서에는 `PortalUseEvent`를 직접 핸들링하여 **추가적인 이동 로직**(예: 특정 좌표로 강제 이동, 이동 속도 변경 등)을 처리하는 구체적인 API나 예제 코드가 제공되지 않습니다. 또한, `PortalUseEvent` 핸들러 내부에서 플레이어 엔티티의 `TransformComponent.Position`을 [followup] | 이 이벤트 핸들러에서 목적지 포탈의 위치를 직접 참조하지 않고 PortalComponent의 내부 메커니즘에 의존하는 이유와, 클라이언트와 서버 중 어디서 이 이벤트를 처리해야 하는지 설명해 주세요. [followup_answer] | 제시된 참고 문서를 근거로 답변드립니다. ### 1. 목적지 포탈의 위치를 직접 참조하지 않고 `PortalComponent` 내부 메커니즘에 의존하는 이유 참고 문서에는 `PortalUseEvent` 핸들러 내부에서 목적지 엔티티의 좌표를 직접 가져와서(`TransformComponent.Position` 등) 플레이어의 위치를 수정하는 코드나 API가 명시되어 있지 않습니다. 대신 문서의 **Properties** 섹션에서 `PortalEntityRef`가 "목적지 포탈을 설정"하는 프로퍼티임을, 그리고 **Events** [scores] | helpfulness=3 correctness=4 coherence=4 complexity=2 verbosity=2 [judge_reason] | 문서에 명시된 API와 예제 범위 내에서 질문의 의도(이동 처리)를 정확히 해석하고, 직접적인 예제가 없음을 인정하면서 문서에 있는 동적 변경 예제를 제공하여 사실에 기반한 도움을 주었습니다. [source_doc] | 포탈 기능을 제공합니다. 포탈의 충돌 속성을 설정하고 목적지 포탈을 연결할 수 있습니다. # Properties - **Vector2 BoxOffset [Sync]** 엔티티를 기준으로 충돌체 직사각형의 중심점 위치를 설정합니다. - **Vector2 BoxSize [Sync]** 충돌체 직사각형의 너비와 높이를 지정합니다. - **CollisionGroup CollisionGroup [ReadOnly] [HideFromInspector]** Portal의 충돌 그룹입니다. - **boolean IsLegacy [Re

[task] | instruction_following [pass] | ✅ 통과 [title] | CameraComponent [question] | 4초 후 줌 배율을 300%로 설정하는 코드를 `Method:` 블록 형식으로 출력하세요. [answer] | ```lua Method: [server only] void OnBeginPlay ( ) { local zoom = function() self.Entity.CameraComponent:SetZoomTo(300, 2) end _TimerService:SetTimerOnce(zoom, 4) } ``` [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=1 verbosity=1 [judge_reason] | 참고 문서의 예제 코드를 정확히 그대로 출력하여 질문에 완벽하게 부응했습니다. [source_doc] | # Examples 4초 뒤에 줌 배율을 300%로 설정하는 코드입니다. ```lua Method: [server only] void OnBeginPlay ( ) { local zoom = function() self.Entity.CameraComponent:SetZoomTo(300, 2) end _TimerService:SetTimerOnce(zoom, 4) } ``` # SeeAlso * TimerService * [CameraService를 활용한 카메라 제어](/docs?postId=118)

[task] | single_turn [pass] | ✅ 통과 [title] | HitEffectSpawnerComponent [question] | 피격 이벤트가 발생했을 때만 이펙트를 띄우는데, HitEffectSpawnerComponent에 이벤트 핸들러를 직접 붙여서 트리거 조건을 변경할 수 있나요? [answer] | 참고 문서에 제공된 `HitEffectSpawnerComponent`의 정보만으로는 **이벤트 핸들러를 직접 붙여서 트리거 조건을 변경할 수 있는지에 대한 명시적인 설명이 없습니다.** 문서에는 `HitEffectSpawnerComponent`가 "엔티티에 피격 이벤트가 발생했을 때 피격 이펙트를 출력한다"는 기능 설명과, `Component`에서 상속받은 기본 Properties(`Enable`, `Entity` 등) 및 Methods(`IsClient`, `IsServer`)만 나열되어 있습니다. `HitEffectSpawn [followup] | [followup_answer] | [scores] | helpfulness=3 correctness=4 coherence=4 complexity=3 verbosity=2 [judge_reason] | 문서에 명시되지 않은 기능을 추측하지 않고 문서 범위 내에서 사실관계를 정확히 서술했으며, mLua의 일반 구조를 언급하되 단정하지 않는 적절한 태도를 보였습니다. [source_doc] | 엔티티에 피격 이벤트가 발생했을 때 피격 이펙트를 출력합니다. # Properties ##### inherited from Component: - **boolean Enable [Sync]** 컴포넌트 활성화 여부를 확인합니다. - **boolean EnableInHierarchy [ReadOnly] [HideFromInspector]** 계층 구조상에서 이 컴포넌트가 Enable 상태인지를 반환합니다. Enable이 true일지라도 엔티티의 Enable이 false라면 false를 반환합니다. - **Entity En

[task] | instruction_following [pass] | ✅ 통과 [title] | CameraComponent [question] | ConfineCameraArea가 false일 때만 사용 가능한 ScreenOffset 프로퍼티의 기능 설명과 유효한 값 범위를 2문장 이내로 요약하세요. [answer] | ScreenOffset은 대상을 기준으로 한 전체 스크린의 비율 값을 설정하며, 값이 0.5일 경우 카메라가 중앙에 위치합니다. ConfineCameraArea가 false인 경우에만 사용 가능하며, 유효한 값 범위는 0부터 1 사이입니다. [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=1 verbosity=2 [judge_reason] | 참고 문서의 ScreenOffset 설명과 유효 범위(0~1), 조건(ConfineCameraArea false)을 정확하고 간결하게 요약했습니다. [source_doc] | Entity를 바라보는 카메라 기능을 제공합니다. 카메라 간 화면 전환은 CameraService를 이용하세요. # Properties - **Vector2 CameraOffset** 카메라의 위치를 설정합니다. 월드 좌표 기준입니다. - **boolean ConfineCameraArea** 카메라가 비추는 범위를 맵의 발판 영역으로만 제한합니다. - **Vector2 Damping** 카메라가 대상을 추적하는 동안 대상이 SoftZone에 들어갈 때 카메라가 반응하는 속도를 조정합니다. 값이 작을수록 더욱 더 빠르게

[task] | single_turn [pass] | ❌ 탈락 [title] | HitComponent [question] | HitComponent의 BoxSize를 남은 체력 비율에 맞춰 줄이려면 Vector2 연산 시 Clone()을 사용해야 하는 이유가 무엇인가요? [answer] | mLua에서 `Vector2`와 같은 구조체 타입은 **값 타입(value type)**으로 동작합니다. 이 때문에 `self.InitialBoxSize = self.Entity.HitComponent.BoxSize`와 같이 참조를 그대로 대입하면, 원본 `BoxSize`가 나중에 변경될 때 `InitialBoxSize` 값도 함께 변해버리는 문제가 생길 수 있습니다. 예제 코드에서 `OnBeginPlay()` 함수 내에서 `self.InitialBoxSize = self.Entity.HitComponent.BoxSize:Clon [followup] | [followup_answer] | [scores] | helpfulness=3 correctness=2 coherence=4 complexity=3 verbosity=2 [judge_reason] | mLua는 Lua 5.3 기반이라 Vector2가 값 타입(value type)이라는 설명은 언어적 사실과 어긋나며, 문서에도 Clone() 사용의 원인이 명시되어 있지 않아 근거 없는 추측에 기반한 답변입니다. [source_doc] | 다음은 몬스터가 플레이어의 공격을 받을 때마다 `HitComponent`의 BoxSize를 남은 체력에 반비례하게 키우는 예제입니다. ```lua Property: [Sync] number Health = 1000 [None] number InitialHealth = 0 [None] Vector2 InitialBoxSize = Vector2(0,0) Method: [server only] void OnBeginPlay () { self.InitialHealth = self.Health self.InitialBoxSize

[task] | instruction_following [pass] | ✅ 통과 [title] | CameraComponent [question] | CameraComponent의 줌 관련 프로퍼티(ZoomRatio, ZoomRatioMin, ZoomRatioMax)의 이름, 데이터 타입, 그리고 문서에 명시된 최소/최대 수치 제한 범위를 3행 이내의 표로 정리하세요. [answer] | | 프로퍼티 이름 | 데이터 타입 | 제한 범위 | | :--- | :--- | :--- | | ZoomRatio | float | ZoomRatioMin 이상, ZoomRatioMax 이하 | | ZoomRatioMin | float | 30 이상 (30보다 작으면 안 됨) | | ZoomRatioMax | float | 500 이하 (500보다 크면 안 됨) | [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=2 verbosity=2 [judge_reason] | 참고 문서의 ZoomRatio, ZoomRatioMin, ZoomRatioMax 프로퍼티의 이름, 타입(float), 그리고 수치 제한 범위(30, 500)를 정확하고 간결하게 표로 정리했습니다. [source_doc] | Entity를 바라보는 카메라 기능을 제공합니다. 카메라 간 화면 전환은 CameraService를 이용하세요. # Properties - **Vector2 CameraOffset** 카메라의 위치를 설정합니다. 월드 좌표 기준입니다. - **boolean ConfineCameraArea** 카메라가 비추는 범위를 맵의 발판 영역으로만 제한합니다. - **Vector2 Damping** 카메라가 대상을 추적하는 동안 대상이 SoftZone에 들어갈 때 카메라가 반응하는 속도를 조정합니다. 값이 작을수록 더욱 더 빠르게

[task] | two_turn [pass] | ✅ 통과 [title] | CameraComponent [question] | 4초 뒤에 줌 배율을 300%로 설정하는 코드를 어떻게 작성하나요? [answer] | 4초 뒤에 줌 배율을 300%로 설정하려면 `_TimerService:SetTimerOnce`를 사용해 4초 후 실행될 함수를 등록하고, 그 함수 안에서 `self.Entity.CameraComponent:SetZoomTo` 메서드를 호출하면 됩니다. ```lua Method: [server only] void OnBeginPlay() { local zoom = function() self.Entity.CameraComponent:SetZoomTo(300, 2) end _TimerService: [followup] | _TimerService:SetTimerOnce를 사용하면서, self.Entity.CameraComponent:SetZoomTo(300, 2)의 두 번째 매개변수인 2가 의미하는 것이 무엇인지 설명해 주세요. [followup_answer] | 제공된 참고 문서에는 `SetZoomTo` 메서드의 매개변수 설명이 포함되어 있지 않아 두 번째 매개변수 `2`가 의미하는 내용을 확인할 수 없습니다. [scores] | helpfulness=4 correctness=4 coherence=4 complexity=2 verbosity=2 [judge_reason] | 참고 문서의 예제 코드를 정확히 인용하여 질문에 완벽하게 답변했습니다. [source_doc] | # Examples 4초 뒤에 줌 배율을 300%로 설정하는 코드입니다. ```lua Method: [server only] void OnBeginPlay ( ) { local zoom = function() self.Entity.CameraComponent:SetZoomTo(300, 2) end _TimerService:SetTimerOnce(zoom, 4) } ``` # SeeAlso * TimerService * [CameraService를 활용한 카메라 제어](/docs?postId=118)

[task] | two_turn [pass] | ✅ 통과 [title] | MapLayerComponent [question] | MapLayerComponent에서 LayerSortOrder 값이 작은 레이어와 큰 레이어의 렌더링 우선순위는 어떻게 구분되나요? [answer] | `MapLayerComponent`의 `LayerSortOrder` 값이 **작을수록** 하위 레이어로 취급되어 **뒤에 그려집니다**. 반대로 값이 클수록 상위 레이어가 되어 앞에 렌더링됩니다. 즉, 숫자가 작으면 뒤에, 숫자가 크면 앞에 표시됩니다. [followup] | LayerSortOrder가 0인 레이어와 1인 레이어가 겹쳐 있을 때, 어떤 레이어가 상단에 보이는지 코드 예시를 통해 확인하는 방법을 알려주세요. [followup_answer] | `LayerSortOrder` 값이 **작을수록 하위 레이어**로 그려지므로, `0`인 레이어는 `1`인 레이어보다 **뒤(하위)** 에 위치합니다. 따라서 겹칠 경우 **`LayerSortOrder`가 1인 레이어가 상단(앞)** 에 보입니다. 아래 코드 예시는 서버에서 실행되며, 두 레이어 엔티티의 `MapLayerComponent`를 참조해 `LayerSortOrder` 값을 로그로 출력하여 우선순위를 확인하는 방법입니다. ```lua Property: [None] Entity LayerOrder0 = /maps/map01 [scores] | helpfulness=4 correctness=4 coherence=4 complexity=2 verbosity=2 [judge_reason] | 참고 문서의 LayerSortOrder 설명(작을수록 하위 레이어로, 뒤에 그려짐)을 정확히 반영하여 질문에 대해 명확하고 간결하게 답변했습니다. [source_doc] | 맵의 레이어별 정보를 관리합니다. # Properties - **boolean IsVisible [ReadOnly] [HideFromInspector]** 레이어의 렌더링 여부를 나타냅니다. false일 경우 메이커 씬에서 보이지 않습니다. - **int32 LayerSortOrder [ReadOnly]** 레이어의 우선순위 순서입니다. 값이 작을수록 하위 레이어로, 뒤에 그려집니다. - **boolean Locked [ReadOnly] [HideFromInspector]** 레이어가 잠겨 있는지를 나타냅니다. 잠겨

[task] | two_turn [pass] | ✅ 통과 [title] | HitComponent [question] | HitComponent의 충돌 영역 설정 및 피격 동작 구현 방식에 대해 알려주세요. [answer] | HitComponent는 엔티티의 충돌 영역을 정의하고, `AttackComponent`의 공격을 받았을 때의 피격 반응을 제어하는 컴포넌트입니다. 이 컴포넌트는 **이전 시스템(Legacy)** 과 **신규 시스템** 두 가지 모드로 동작하며, `IsLegacy` 프로퍼티의 값에 따라 사용 가능한 충돌체 설정 방법이 달라집니다. ### 1. 충돌 영역 설정 충돌 영역은 `ColliderType`, `BoxSize`, `CircleRadius`, `PolygonPoints`, `ColliderOffset` 프로퍼티를 통해 설정합 [followup] | IsLegacy가 true인 경우와 false인 경우 충돌체 프로퍼티(BoxOffset, BoxSize, ColliderOffset, ColliderType) 사용법의 차이와 코드를 보여주세요. [followup_answer] | `HitComponent`의 `IsLegacy` 프로퍼티는 읽기 전용(ReadOnly)이며, 해당 컴포넌트가 **이전 시스템(Legacy)** 이냐 **신규 시스템**이냐를 결정짓는 기준입니다. 이 값에 따라 충돌체 설정에 사용할 수 있는 프로퍼티와 동작 방식이 명확히 나뉩니다. ### 1. `IsLegacy` 값별 충돌체 프로퍼티 사용법 차이 | 프로퍼티 | `IsLegacy` = true (이전 시스템) | `IsLegacy` = false (신규 시스템) | | :--- | :--- | :--- | | **BoxOffset [scores] | helpfulness=4 correctness=4 coherence=4 complexity=3 verbosity=2 [judge_reason] | 참고 문서에 없는 HitEvent 필드(AttackerEntity, TotalDamage 등)를 지어내지 않고, 문서의 프로퍼티와 메서드 시그니처를 정확히 설명하며 mLua 문법 규칙에 부합하는 예제를 제공하여 매우 유용하고 정확합니다. [source_doc] | 엔티티의 충돌 영역을 설정하고, AttackComponent의 공격을 받았을 때 피격 동작을 구현할 수 있는 인터페이스를 제공합니다. # Properties - **Vector2 BoxOffset [Deprecated] [Sync]** IsLegacy가 true인 이전 시스템에서 사용할 수 있습니다. 엔티티를 기준으로 충돌체 직사각형의 중심점 위치를 설정합니다. - **Vector2 BoxSize [Sync]** 직사각형 충돌체의 너비와 높이를 지정합니다. - **float CircleRadius [Sync]** 원형

[task] | code [pass] | ✅ 통과 [title] | HitEffectSpawnerComponent [question] | HitEffectSpawnerComponent의 IsServer 메서드를 호출하여 서버 환경에서 실행되도록 로직을 구성하는 스크립트를 작성해줘 [answer] | HitEffectSpawnerComponent는 피격 이펙트 스포너 컴포넌트이며, 이 컴포넌트에서 `IsServer()` 메서드를 호출하면 현재 실행 환경이 서버인지 여부를 `boolean` 값으로 반환합니다. 참고 문서에 따르면 `IsServer()`는 Component에서 상속받은 메서드로, `self:IsServer()` 형식으로 호출할 수 있습니다. 아래 스크립트는 `OnUpdate` 생명주기 메서드에서 `IsServer()`를 호출하여 서버 환경에서만 특정 로직(예: 로그 출력)이 실행되도록 구성한 예시입니다. ```l [followup] | [followup_answer] | [scores] | helpfulness=3 correctness=3 coherence=4 complexity=2 verbosity=2 [judge_reason] | IsServer() 사용법은 정확하나, 문서에 없는 HandleHitEvent/HitEvent를 예시로 언급하여 사실 생성에 해당하며, [server only] 사용 시 IsServer() 호출의 불필요함을 지적하는 점은 유용합니다. [source_doc] | 엔티티에 피격 이벤트가 발생했을 때 피격 이펙트를 출력합니다. # Properties ##### inherited from Component: - **boolean Enable [Sync]** 컴포넌트 활성화 여부를 확인합니다. - **boolean EnableInHierarchy [ReadOnly] [HideFromInspector]** 계층 구조상에서 이 컴포넌트가 Enable 상태인지를 반환합니다. Enable이 true일지라도 엔티티의 Enable이 false라면 false를 반환합니다. - **Entity En

[task] | single_turn [pass] | ✅ 통과 [title] | PortalComponent [question] | TimerService:SetTimerRepeat을 사용하여 1초마다 PortalEntityRef를 변경하는 예제 코드에서, self._T.portalRefList가 비어있는 경우를 미리 체크하는 것이 왜 중요한가요? [answer] | `self._T.portalRefList`가 비어 있는 경우를 미리 체크하는 것은 **런타임 오류(예외)를 방지하기 위해** 필수적입니다. 문서 예제에서 확인되듯, `_TimerService:SetTimerRepeat` 내부의 콜백 함수에서 다음과 같이 포탈을 선택합니다. ```lua self.Entity.PortalComponent.PortalEntityRef = self._T.portalRefList[_UtilLogic:RandomIntegerRange(1, #self._T.portalRefList)] ``` 여기서 `#s [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=3 verbosity=2 [judge_reason] | 문서 예제의 로직을 정확히 분석하여 비어있는 테이블 접근 시 발생할 수 있는 nil 참조 및 런타임 오류를 방지하기 위해 체크가 필요함을 명확히 설명했습니다. [source_doc] | 포탈 기능을 제공합니다. 포탈의 충돌 속성을 설정하고 목적지 포탈을 연결할 수 있습니다. # Properties - **Vector2 BoxOffset [Sync]** 엔티티를 기준으로 충돌체 직사각형의 중심점 위치를 설정합니다. - **Vector2 BoxSize [Sync]** 충돌체 직사각형의 너비와 높이를 지정합니다. - **CollisionGroup CollisionGroup [ReadOnly] [HideFromInspector]** Portal의 충돌 그룹입니다. - **boolean IsLegacy [Re

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