[task] | single_turn [pass] | ✅ 통과 [title] | HitEffectSpawnerComponent [question] | HitEffectSpawnerComponent를 사용했는데 피격 이펙트가 안 나오는데, Enable 프로퍼티와 EnableInHierarchy의 차이 때문에 발생하는 문제일 수 있나요? [answer] | 네, `HitEffectSpawnerComponent`의 `Enable` 프로퍼티와 `EnableInHierarchy` 프로퍼티의 차이 때문에 피격 이펙트가 출력되지 않는 문제가 발생할 수 있습니다. 두 프로퍼티의 차이와 문제 발생 원인은 다음과 같습니다. 1. **`Enable` (Sync):** * 이 특정 컴포넌트 자체의 활성화 여부를 직접 설정하고 확인하는 프로퍼티입니다. * 값을 `true`로 설정해도, 이 컴포넌트가 속해 있는 상위 엔티티나 부모 계층의 활성화 상태에 따라 실제 동작이 차단될 수 [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] | two_turn [pass] | ✅ 통과 [title] | PortalComponent [question] | 포탈 컴포넌트(PortalComponent)의 주요 속성과 기능에 대해 설명해 주세요. [answer] | # PortalComponent 주요 속성과 기능 PortalComponent는 맵 내에서 플레이어가 이동할 수 있는 포탈 기능을 제공하며, 포탈의 충돌 영역을 설정하고 목적지 포탈을 연결하는 역할을 합니다. ## 주요 속성 (Properties) | 속성 | 타입 | 설명 | |------|------|------| | `BoxOffset` | `Vector2 [Sync]` | 엔티티를 기준으로 충돌체 직사각형의 중심점 위치를 설정합니다. | | `BoxSize` | `Vector2 [Sync]` | 충돌체 직사각형의 너비와 [followup] | PortalEntityRef 속성에 연결할 수 있는 엔티티의 조건과, IsLegacy 속성이 true일 때와 false일 때 충돌체 동작 방식의 차이는 무엇인가요? [followup_answer] | ## PortalEntityRef 연결 조건 `PortalEntityRef` 속성에 연결할 수 있는 엔티티는 **PortalComponent를 가진 엔티티**뿐입니다. 즉, 목적지로 설정하려는 엔티티에도 반드시 `PortalComponent`가 부착되어 있어야 하며, 다른 컴포넌트만 있는 일반 엔티티나 포탈이 없는 엔티티는 연결할 수 없습니다. ## IsLegacy 속성에 따른 충돌체 동작 차이 `IsLegacy`는 포탈 충돌체가 `TransformComponent`의 변환(회전, 스케일)에 어떻게 반응하는지를 결정합니다. [scores] | helpfulness=4 correctness=4 coherence=4 complexity=3 verbosity=2 [judge_reason] | 참고 문서의 속성, 이벤트, 코드 예시를 정확히 인용하여 포탈 컴포넌트의 기능을 명확하고 일관성 있게 설명했습니다. [source_doc] | 포탈 기능을 제공합니다. 포탈의 충돌 속성을 설정하고 목적지 포탈을 연결할 수 있습니다. # Properties - **Vector2 BoxOffset [Sync]** 엔티티를 기준으로 충돌체 직사각형의 중심점 위치를 설정합니다. - **Vector2 BoxSize [Sync]** 충돌체 직사각형의 너비와 높이를 지정합니다. - **CollisionGroup CollisionGroup [ReadOnly] [HideFromInspector]** Portal의 충돌 그룹입니다. - **boolean IsLegacy [Re
[task] | instruction_following [pass] | ✅ 통과 [title] | CameraComponent [question] | `TimerService`를 활용해 지연 후 카메라 줌을 변경하는 로직을 단계별 번호 목록으로 정리하세요. [answer] | `TimerService`를 활용하여 4초 지연 후 카메라 줌 배율을 300%로 변경하는 로직은 다음과 같은 단계로 구성됩니다. 1. `OnBeginPlay` 생명주기 메서드 내에서 4초 후 실행될 콜백 함수를 정의합니다. 2. 정의된 콜백 함수 내부에서 `self.Entity.CameraComponent:SetZoomTo(300, 2)`를 호출하여 줌 배율을 300%로 설정합니다. 3. `_TimerService:SetTimerOnce` 메서드를 사용하여 해당 콜백 함수와 지연 시간(4초)을 전달하여 타이머를 설정합니다. `` [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=2 verbosity=2 [judge_reason] | 참고 문서의 코드와 설명을 정확히 단계별로 정리하여 질문에 충실히 답했으며, API 사용법도 문서와 일치합니다. [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] | code [pass] | ✅ 통과 [title] | AvatarRendererComponent [question] | 플레이어가 엔티티에 터치할 때 PlayEmotion 메서드를 호출해 2초 동안 감정 표현을 재생하는 AvatarRendererComponent 스크립트를 작성해줘 [answer] | ```lua Event Handler: [self] HandleTouchEvent(TouchEvent event) { self.Entity.AvatarRendererComponent:PlayEmotion(EmotionalType.Happy, 2.0) } ``` [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=3 verbosity=2 [judge_reason] | 문서와 시스템 규칙에 따라 터치 이벤트 핸들러와 PlayEmotion 메서드를 올바르게 조합하여 작성했으며, 불필요한 설명 없이 질문에 충실합니다. [source_doc] | 아바타 형태의 엔티티를 렌더링합니다. # Properties - **boolean IgnoreMapLayerCheck [Sync]** SortingLayer에 Map Layer 이름을 지정했을 때 자동 치환을 수행하지 않습니다. - **string MaterialId [Sync]** 렌더러에 적용할 머티리얼의 Id를 지정합니다. - **int32 OrderInLayer** 같은 Layer 내의 우선순위를 결정합니다. 수가 클수록 앞에 보입니다. - **float PlayRate [Sync]** 아바타 애니메이션의
[task] | code [pass] | ❌ 탈락 [title] | AIWanderComponent [question] | AIWanderComponent의 CreateNode 메서드와 BTNodeType을 활용해 조건에 따라 다른 동작을 수행하는 커스텀 행동 트리를 구성하는 스크립트를 작성해줘 [answer] | 제공된 문서에는 `AIWanderComponent`가 `AIComponent`에서 상속받은 `CreateNode` 메서드와 `CreateLeafNode` 메서드를 사용한다는 정보만 있습니다. 하지만 질문에서 요구하는 **`BTNodeType`의 구체적인 값(예: "Selector", "Sequence", "Decorator" 등)이나, 조건 분기(If)에 특화된 노드 타입 이름은 문서에 명시되어 있지 않습니다.** 문서의 예제에서는 `"Decorator"`라는 문자열이 사용되었지만, 이것이 조건 분기를 위해 사용 가능한지, 또는 [followup] | [followup_answer] | [scores] | helpfulness=1 correctness=1 coherence=2 complexity=3 verbosity=3 [judge_reason] | AIWanderComponent가 AIComponent에서 메서드를 상속받으므로 self.AIComponent를 통해 직접 접근할 수 있는데, 존재하지 않는 self.Entity.AIComponent를 사용하고, 문서에 없는 'Decorator' 노드 연결 방식 및 MoveToDirection API를 지어내어 정확성과 유용성이 낮습니다. [source_doc] | 주변을 배회하는 AI입니다. StateComponent가 없다면 자동으로 추가됩니다. # Properties ##### inherited from AIComponent: - **string BehaviourTreeId [ReadOnly]** 행동 트리 엔트리의 고유 식별자입니다. - **Blackboard BlackBoard [ReadOnly]** AI 행동 트리에서 사용하는 데이터 저장소입니다. 키-값 쌍으로 데이터를 관리하며 행동 트리 노드 간 데이터를 공유합니다. - **boolean IsLegacy [ReadOn
[task] | code [pass] | ✅ 통과 [title] | PortalComponent [question] | OnBeginPlay에서 self.Entity.PortalComponent.EnableInHierarchy 값을 확인하여 false인 경우 log()로 "포탈 컴포넌트가 비활성 상태입니다"를 출력하고, true인 경우 _TimerService:SetTimerOnce를 이용하여 5초 후 self.Entity.PortalComponent.Enable = false를 호출하는 스크립트를 작성해줘 [answer] | 요청하신 조건에 따라 `OnBeginPlay`에서 `EnableInHierarchy` 값을 확인하고, 비활성 상태일 경우 로그를 출력하며 활성 상태일 경우 5초 후 `Enable`을 `false`로 설정하는 mLua 스크립트입니다. ```lua Method: [server only] void OnBeginPlay() { if self.Entity.PortalComponent.EnableInHierarchy == false then log("포탈 컴포넌트가 비활성 상태입니다") else _ [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=2 verbosity=2 [judge_reason] | 질문에서 요구한 조건(EnableInHierarchy 확인, 로그 출력, 5초 후 Enable false 설정)을 mLua 규칙과 참고 문서의 API 명세에 정확히 따라 구현했습니다. [source_doc] | 포탈 기능을 제공합니다. 포탈의 충돌 속성을 설정하고 목적지 포탈을 연결할 수 있습니다. # Properties - **Vector2 BoxOffset [Sync]** 엔티티를 기준으로 충돌체 직사각형의 중심점 위치를 설정합니다. - **Vector2 BoxSize [Sync]** 충돌체 직사각형의 너비와 높이를 지정합니다. - **CollisionGroup CollisionGroup [ReadOnly] [HideFromInspector]** Portal의 충돌 그룹입니다. - **boolean IsLegacy [Re
[task] | two_turn [pass] | ✅ 통과 [title] | MapLayerComponent [question] | MapLayerComponent를 통해 특정 맵 레이어의 이름과 활성화 상태를 동시에 조회하려면 어떤 프로퍼티를 조합해야 하나요? [answer] | MapLayerComponent에서 특정 맵 레이어의 이름과 활성화 상태를 동시에 조회하려면 `MapLayerName`과 `Enable` 프로퍼티를 조합해 사용해야 합니다. * **MapLayerName**: 조회하고자 하는 맵 레이어의 이름을 문자열(`string`) 형태로 반환합니다. * **Enable**: 해당 컴포넌트(레이어)가 활성화되어 있는지 여부를 나타내는 boolean 값입니다. 아래 예제는 `OnBeginPlay` 시점에 해당 레이어의 이름과 활성화 상태를 로그로 출력하는 스크립트입니다. ```lua [followup] | MapLayerName이 "Background"인 레이어를 찾은 후, Enable이 true인지 확인하여 비활성 상태면 활성화 처리하는 로직을 mLua 코드로 작성해 주세요. [followup_answer] | MapLayerComponent의 `MapLayerName` 프로퍼티는 `[ReadOnly]` 속성을 가지고 있어 스크립트에서 직접 수정할 수 없으며, `Enable` 프로퍼티를 통해 컴포넌트의 활성화 상태를 확인하고 변경할 수 있습니다. 요청하신 로직은 특정 이름의 레이어를 찾은 후, 그 레이어에 부착된 `MapLayerComponent`의 `Enable` 상태를 확인하여 `false`일 경우 `true`로 설정하는 것입니다. 다음과 같이 `MapLayerComponent`가 부착된 엔티티에 이 스크립트를 적용하여 사용할 수 [scores] | helpfulness=4 correctness=4 coherence=4 complexity=2 verbosity=2 [judge_reason] | 문서에 명시된 MapLayerName과 Enable 프로퍼티를 정확히 조합하여 질문한 내용을 간결하고 올바르게 설명했으며, 예제 코드도 mLua 문법에 부합합니다. [source_doc] | 맵의 레이어별 정보를 관리합니다. # Properties - **boolean IsVisible [ReadOnly] [HideFromInspector]** 레이어의 렌더링 여부를 나타냅니다. false일 경우 메이커 씬에서 보이지 않습니다. - **int32 LayerSortOrder [ReadOnly]** 레이어의 우선순위 순서입니다. 값이 작을수록 하위 레이어로, 뒤에 그려집니다. - **boolean Locked [ReadOnly] [HideFromInspector]** 레이어가 잠겨 있는지를 나타냅니다. 잠겨
[task] | code [pass] | ❌ 탈락 [title] | AvatarRendererComponent [question] | 아바타의 SortingLayer를 "Background"로 설정하고 OrderInLayer를 100으로 변경하는 AvatarRendererComponent 스크립트를 작성해줘 [answer] | ```lua Property: [Sync] string SortingLayer = "Background" [None] int32 OrderInLayer = 100 Method: [client only] void OnBeginPlay() { local renderer = self.Entity.AvatarRendererComponent renderer.SortingLayer = "Background" renderer.OrderInLayer = 100 } ``` [followup] | [followup_answer] | [scores] | helpfulness=3 correctness=2 coherence=4 complexity=2 verbosity=2 [judge_reason] | Property 선언이 컴포넌트 프로퍼티가 아닌 스크립트 자체의 프로퍼티로 오해될 수 있으며, OnBeginPlay에서 컴포넌트 프로퍼티를 직접 대입하는 방식이 문서의 Method(ChangeMaterial 등)를 무시하고 있어 정확성이 낮음 [source_doc] | 아바타 형태의 엔티티를 렌더링합니다. # Properties - **boolean IgnoreMapLayerCheck [Sync]** SortingLayer에 Map Layer 이름을 지정했을 때 자동 치환을 수행하지 않습니다. - **string MaterialId [Sync]** 렌더러에 적용할 머티리얼의 Id를 지정합니다. - **int32 OrderInLayer** 같은 Layer 내의 우선순위를 결정합니다. 수가 클수록 앞에 보입니다. - **float PlayRate [Sync]** 아바타 애니메이션의
[task] | code [pass] | ✅ 통과 [title] | AvatarRendererComponent [question] | ChangeMaterial 메서드를 사용하여 MaterialId가 "mat_red"인 머티리얼로 아바타 렌더링을 교체하는 AvatarRendererComponent 스크립트를 작성해줘 [answer] | ```lua Method: [client only] void OnBeginPlay() { self.Entity.AvatarRendererComponent:ChangeMaterial("mat_red") } ``` [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=1 verbosity=2 [judge_reason] | 문서의 ChangeMaterial API와 mLua 문법 규칙을 정확히 준수하여 요청된 기능을 수행하는 간결하고 올바른 스크립트를 제시했습니다. [source_doc] | 아바타 형태의 엔티티를 렌더링합니다. # Properties - **boolean IgnoreMapLayerCheck [Sync]** SortingLayer에 Map Layer 이름을 지정했을 때 자동 치환을 수행하지 않습니다. - **string MaterialId [Sync]** 렌더러에 적용할 머티리얼의 Id를 지정합니다. - **int32 OrderInLayer** 같은 Layer 내의 우선순위를 결정합니다. 수가 클수록 앞에 보입니다. - **float PlayRate [Sync]** 아바타 애니메이션의
[task] | code [pass] | ✅ 통과 [title] | HitComponent [question] | 원형 충돌체(`ColliderType`이 Circle)를 사용하는 HitComponent에서 `CircleRadius`가 50보다 크고 `CollisionGroup`이 "enemy"일 때만 `Enable`을 true로 설정하는 초기화 로직을 OnBeginPlay에서 구현해줘 [answer] | 요청하신 조건(`CircleRadius` > 50, `CollisionGroup` == "enemy")을 모두 만족할 때만 `Enable`을 `true`로 설정하는 `OnBeginPlay` 로직입니다. ```lua Method: [server only] void OnBeginPlay() { local hitComponent = self.Entity.HitComponent if hitComponent == nil then return end -- 초기 상태는 비활성화 [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=3 verbosity=2 [judge_reason] | 문서와 규칙에 기반하여 요청된 조건부 초기화 로직을 정확하고 간결하게 구현했습니다. [source_doc] | 엔티티의 충돌 영역을 설정하고, AttackComponent의 공격을 받았을 때 피격 동작을 구현할 수 있는 인터페이스를 제공합니다. # Properties - **Vector2 BoxOffset [Deprecated] [Sync]** IsLegacy가 true인 이전 시스템에서 사용할 수 있습니다. 엔티티를 기준으로 충돌체 직사각형의 중심점 위치를 설정합니다. - **Vector2 BoxSize [Sync]** 직사각형 충돌체의 너비와 높이를 지정합니다. - **float CircleRadius [Sync]** 원형
[task] | code [pass] | ✅ 통과 [title] | HitComponent [question] | 엔티티가 공격을 받았을 때 `IsHitTarget`을 오버라이드하여 `attackInfo`가 "fire"로 시작하는 경우에만 피격을 허용하고, `OnHit`에서 `log`로 피해량과 `hitCount`를 출력하는 HitComponent 스크립트를 작성해줘 [answer] | HitComponent의 `IsHitTarget` 메서드를 오버라이드하여 `attackInfo`가 "fire"로 시작하는 문자열인지 확인하고, `OnHit` 메서드에서 `log` 함수를 사용하여 피해량(`damage`)과 `hitCount`를 출력하는 스크립트입니다. ```lua Method: [server only] boolean IsHitTarget(string attackInfo) { if attackInfo ~= nil and string.find(attackInfo, "^fire") then retu [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=2 verbosity=2 [judge_reason] | 문서와 규칙에 부합하여 IsHitTarget의 문자열 시작 확인 및 OnHit의 로그 출력을 정확히 구현했습니다. [source_doc] | 엔티티의 충돌 영역을 설정하고, AttackComponent의 공격을 받았을 때 피격 동작을 구현할 수 있는 인터페이스를 제공합니다. # Properties - **Vector2 BoxOffset [Deprecated] [Sync]** IsLegacy가 true인 이전 시스템에서 사용할 수 있습니다. 엔티티를 기준으로 충돌체 직사각형의 중심점 위치를 설정합니다. - **Vector2 BoxSize [Sync]** 직사각형 충돌체의 너비와 높이를 지정합니다. - **float CircleRadius [Sync]** 원형
[task] | two_turn [pass] | ✅ 통과 [title] | MapLayerComponent [question] | MapLayerComponent의 주요 속성 중 레이어의 표시 여부나 편집 잠금 상태를 확인하는 방법은 무엇인가요? [answer] | `MapLayerComponent`의 주요 속성 중 레이어의 표시 여부와 편집 잠금 상태를 확인하는 방법은 다음과 같습니다. 1. **레이어 표시 여부 (`IsVisible`)** * `IsVisible` 프로퍼티의 값을 확인합니다. * 이 값이 `false`인 경우, 해당 레이어는 메이커 씬에서 렌더링되지 않고 보이지 않습니다. 2. **편집 잠금 상태 (`Locked`)** * `Locked` 프로퍼티의 값을 확인합니다. * 이 값이 `true`인 경우, 해당 레이어는 잠겨 있는 [followup] | IsVisible과 Locked 속성이 false인 경우 메이커 씬에서 해당 레이어가 어떻게 렌더링되고 편집 가능한지 구체적인 동작을 알려주세요. [followup_answer] | `MapLayerComponent`의 `IsVisible`과 `Locked` 속성이 모두 `false`인 경우의 동작은 다음과 같습니다. 1. **렌더링 (IsVisible = false)** * `IsVisible`이 `false`일 경우, 해당 레이어는 **메이커 씬에서 렌더링되지 않아 보이지 않습니다.** 즉, 화면에 그려지지 않습니다. 2. **편집 가능 여부 (Locked = false)** * `Locked`이 `false`일 경우, 해당 레이어는 **잠기지 않은 상태**이므로 메이커에서 편집 [scores] | helpfulness=4 correctness=4 coherence=4 complexity=3 verbosity=2 [judge_reason] | 참고 문서의 MapLayerComponent 속성(IsVisible, Locked) 정의와 ReadOnly 제약사항을 정확히 설명하고, mLua 표준 구문(self.Entity.X 접근법, log, [client only])을 사용하여 적절한 코드 예시를 제시했습니다. [source_doc] | 맵의 레이어별 정보를 관리합니다. # Properties - **boolean IsVisible [ReadOnly] [HideFromInspector]** 레이어의 렌더링 여부를 나타냅니다. false일 경우 메이커 씬에서 보이지 않습니다. - **int32 LayerSortOrder [ReadOnly]** 레이어의 우선순위 순서입니다. 값이 작을수록 하위 레이어로, 뒤에 그려집니다. - **boolean Locked [ReadOnly] [HideFromInspector]** 레이어가 잠겨 있는지를 나타냅니다. 잠겨
[task] | instruction_following [pass] | ✅ 통과 [title] | TouchReceiveComponent [question] | TouchEvent, TouchHoldEvent, TouchReleaseEvent 발생 조건과 짧게 터치했을 때의 차이를 3문장 이내로 설명하세요. [answer] | TouchEvent는 엔티티를 터치하는 순간 즉시 발생하며 짧게 터치해도 항상 발생합니다. 반면, TouchHoldEvent와 TouchReleaseEvent는 각각 터치를 유지하는 동안과 터치를 해제할 때 발생하지만, 짧게 터치한 경우에는 이 두 이벤트가 발생하지 않습니다. [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=1 verbosity=2 [judge_reason] | 참고 문서의 이벤트 설명과 완전히 일치하며, 짧게 터치했을 때의 차이점을 명확하고 간결하게 설명하고 있습니다. [source_doc] | 엔티티를 터치할 수 있게 되며 터치 시 동작을 제어할 수 있습니다. # Properties - **boolean AutoFitOnce [MakerOnly]** true로 설정하면 AvatarRendererComponent 또는 SpriteRendererComponent의 Scale 값에 맞추어 TouchArea 및 Offset 값을 자동으로 변경됩니다. 최초 한 번만 변경합니다. - **boolean AutoFitToSize** true로 설정하면 AvatarRendererComponent 또는 SpriteRenderer
[task] | single_turn [pass] | ❌ 탈락 [title] | PortalComponent [question] | OnBeginPlay에서 CurrentMap을 순회하며 포탈을 찾는 로직에서 자기 자신(self.Entity)을 제외하는 코드가 필요한 이유와, 이를 누락하면 생기는 오류는 무엇인가요? [answer] | `OnBeginPlay`에서 현재 맵의 엔티티를 순회하며 포탈을 찾는 로직에서 자기 자신(`self.Entity`)을 제외하는 코드가 필요한 이유는 다음과 같습니다. ### 1. 제외해야 하는 이유 * **무한 루프 및 자기 참조 방지:** 포탈은 다른 포탈로 이동하는 목적지를 설정하는 것입니다. 만약 자기 자신을 포함시킨다면, 포탈의 `PortalEntityRef`가 자기 자신으로 설정될 수 있습니다. * **의도된 동작의 훼손:** 예제처럼 "연결된 포탈을 무작위로 변경"하는 로직에서는, 플레이어가 포탈을 이용했을 때 [followup] | [followup_answer] | [scores] | helpfulness=3 correctness=2 coherence=4 complexity=2 verbosity=3 [judge_reason] | 자기 참조를 제외하는 논리적 필요성은 잘 설명했으나, '무한 루프'나 '런타임 오류' 발생은 문서에 없는 추측이며, 예제 코드가 [client only]에서 _TimerService와 포탈 연결을 시도하는 것은 서버-클라이언트 동기화 관점에서 잘못된 구조를 그대로 답습한 것이다. [source_doc] | 포탈 기능을 제공합니다. 포탈의 충돌 속성을 설정하고 목적지 포탈을 연결할 수 있습니다. # Properties - **Vector2 BoxOffset [Sync]** 엔티티를 기준으로 충돌체 직사각형의 중심점 위치를 설정합니다. - **Vector2 BoxSize [Sync]** 충돌체 직사각형의 너비와 높이를 지정합니다. - **CollisionGroup CollisionGroup [ReadOnly] [HideFromInspector]** Portal의 충돌 그룹입니다. - **boolean IsLegacy [Re
[task] | code [pass] | ❌ 탈락 [title] | AIWanderComponent [question] | AIWanderComponent의 BlackBoard 프로퍼티를 참조하여 현재 AI의 상태 데이터를 읽어서 화면에 표시하는 스크립트를 작성해줘 [answer] | AIWanderComponent는 `AIComponent`를 상속하므로, `BlackBoard` 프로퍼티를 직접 참조할 수 있습니다. `BlackBoard`는 키-값 쌍으로 데이터를 관리하며, 행동 트리 노드 간 데이터를 공유하는 저장소 역할을 합니다. 다만, 제공된 참고 문서에는 `BlackBoard` 프로퍼티에 대한 **구체적인 접근 메서드(예: `Get`, `GetEntity`, `GetString` 등)가 명시되어 있지 않습니다.** `AIComponent`의 메서드 목록에는 `CreateLeafNode`, `CreateN [followup] | [followup_answer] | [scores] | helpfulness=2 correctness=3 coherence=4 complexity=3 verbosity=3 [judge_reason] | BlackBoard 접근 API 부재를 정확히 지적해 오류를 방지했으나, 질문의 핵심인 '상태 데이터 읽기'에 직접적인 도움을 주지 못하고 대체 예시만 제공했으며, TransformComponent.WorldPosition 등 문서에 없는 API를 사용한 부분이 있어 정합성이 떨어집니다. [source_doc] | 주변을 배회하는 AI입니다. StateComponent가 없다면 자동으로 추가됩니다. # Properties ##### inherited from AIComponent: - **string BehaviourTreeId [ReadOnly]** 행동 트리 엔트리의 고유 식별자입니다. - **Blackboard BlackBoard [ReadOnly]** AI 행동 트리에서 사용하는 데이터 저장소입니다. 키-값 쌍으로 데이터를 관리하며 행동 트리 노드 간 데이터를 공유합니다. - **boolean IsLegacy [ReadOn
[task] | code [pass] | ❌ 탈락 [title] | HitComponent [question] | `HitEvent`를 수신하여 `isCritical`이 true일 경우 `Vector3(0, 10, 0)`만큼 `self.Entity.TransformComponent.Position`을 즉시 이동시키고, false일 경우 `wait(0.5)` 후 로그를 출력하는 HitComponent 스크립트를 작성해줘 [answer] | `HitEvent`는 엔티티가 피격되었을 때 발생하는 이벤트입니다. 질문에서 요구한 동작은 `isCritical`이 `true`일 때 즉시 위치를 이동시키고, `false`일 경우 0.5초 대기 후 로그를 출력하는 것입니다. 참고 문서의 예제를 보면 `HandleHitEvent` 핸들러 내에서 `event.IsCritical`을 통해 크리컬 여부 확인이 가능하며, `self.Entity.TransformComponent.Position`을 직접 수정하여 위치를 즉시 변경할 수 있습니다. 또한 `wait(sec)` 함수를 사용하여 [followup] | [followup_answer] | [scores] | helpfulness=3 correctness=2 coherence=4 complexity=3 verbosity=2 [judge_reason] | 참고 문서에 HitEvent의 프로퍼티 목록이 없어 event.IsCritical의 존재를 확인 불가하며, 이벤트 핸들러 선언부에 [server only]와 [self]를 동시에 붙이는 문법이 mLua 규칙과 일치하는지 불분명합니다. [source_doc] | 엔티티의 충돌 영역을 설정하고, AttackComponent의 공격을 받았을 때 피격 동작을 구현할 수 있는 인터페이스를 제공합니다. # Properties - **Vector2 BoxOffset [Deprecated] [Sync]** IsLegacy가 true인 이전 시스템에서 사용할 수 있습니다. 엔티티를 기준으로 충돌체 직사각형의 중심점 위치를 설정합니다. - **Vector2 BoxSize [Sync]** 직사각형 충돌체의 너비와 높이를 지정합니다. - **float CircleRadius [Sync]** 원형
[task] | instruction_following [pass] | ✅ 통과 [title] | TouchReceiveComponent [question] | TouchEvent 수신 예제 코드를 그대로 출력하되 모든 설명은 -- 주석으로 처리하세요. [answer] | ```lua Event Handler: [self] HandleTouchEvent (TouchEvent event) { -- Parameters -------------------------------------------------------- local uiPath = "/ui/DefaultGroup/ExampleUI" local targetUI = _EntityService:GetEntityByPath(uiPath) targetUI:SetVisible(true) } ``` [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=1 verbosity=2 [judge_reason] | 참고 문서의 예제 코드를 정확히 재현하고 요청대로 주석 처리를 유지하여 질문에 완벽히 부합합니다. [source_doc] | 엔티티를 터치할 수 있게 되며 터치 시 동작을 제어할 수 있습니다. # Properties - **boolean AutoFitOnce [MakerOnly]** true로 설정하면 AvatarRendererComponent 또는 SpriteRendererComponent의 Scale 값에 맞추어 TouchArea 및 Offset 값을 자동으로 변경됩니다. 최초 한 번만 변경합니다. - **boolean AutoFitToSize** true로 설정하면 AvatarRendererComponent 또는 SpriteRenderer
[task] | code [pass] | ✅ 통과 [title] | PortalComponent [question] | OnBeginPlay에서 CurrentMap을 재귀적으로 탐색하여 PortalComponent가 있는 엔티티를 모두 수집하고, 1초마다 _TimerService:SetTimerRepeat를 사용하여 수집된 리스트에서 무작위로 선택한 EntityRef를 self.Entity.PortalComponent.PortalEntityRef에 할당하는 스크립트를 작성해줘 [answer] | 요청하신 기능을 구현한 mLua 스크립트입니다. ```lua Method: [client only] void OnBeginPlay () { -- 현재 맵의 모든 Entity를 순회하며 PortalComponent를 가진 Entity들의 EntityRef 저장 self._T.portalRefList = {} local function findAndAddPortal(parent) -- 자기 자신은 제외 if parent.PortalComponent ~= nil and parent ~= self.Entity then [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=3 verbosity=2 [judge_reason] | 참고 문서의 예제 코드를 정확히 재현하여 질문에 완벽하게 부합하며, API 사용법과 문법도 모두 올바릅니다. [source_doc] | 포탈 기능을 제공합니다. 포탈의 충돌 속성을 설정하고 목적지 포탈을 연결할 수 있습니다. # Properties - **Vector2 BoxOffset [Sync]** 엔티티를 기준으로 충돌체 직사각형의 중심점 위치를 설정합니다. - **Vector2 BoxSize [Sync]** 충돌체 직사각형의 너비와 높이를 지정합니다. - **CollisionGroup CollisionGroup [ReadOnly] [HideFromInspector]** Portal의 충돌 그룹입니다. - **boolean IsLegacy [Re
[task] | code [pass] | ✅ 통과 [title] | AvatarRendererComponent [question] | OnBeginPlay 시점에 SetAlpha 메서드로 아바타의 투명도를 0.5로 설정하고, 3초 후 SetAlpha 메서드로 1.0으로 복귀시키는 AvatarRendererComponent 스크립트를 작성해줘 [answer] | `SetAlpha`는 `[Client]` 실행 공간에서만 사용할 수 있는 메서드입니다. 따라서 이 로직은 클라이언트에서 실행되어야 합니다. `OnBeginPlay`에서 0.5로 설정하고, `_TimerService:SetTimerOnce`를 사용하여 3초 후 1.0으로 복귀시키는 스크립트입니다. ```lua Property: [None] number alphaDuration = 3.0 Method: [client only] void OnBeginPlay() { self.Entity.AvatarRendererComponen [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=3 verbosity=2 [judge_reason] | SetAlpha의 [Client] 제약과 _TimerService 사용법을 정확히 반영하여 요구사항을 완벽히 충족하는 코드를 제시했습니다. [source_doc] | 아바타 형태의 엔티티를 렌더링합니다. # Properties - **boolean IgnoreMapLayerCheck [Sync]** SortingLayer에 Map Layer 이름을 지정했을 때 자동 치환을 수행하지 않습니다. - **string MaterialId [Sync]** 렌더러에 적용할 머티리얼의 Id를 지정합니다. - **int32 OrderInLayer** 같은 Layer 내의 우선순위를 결정합니다. 수가 클수록 앞에 보입니다. - **float PlayRate [Sync]** 아바타 애니메이션의
[task] | code [pass] | ✅ 통과 [title] | MapLayerComponent [question] | OnBeginPlay 생명주기에서 self.Entity.MapLayerComponent를 접근하여 EnableInHierarchy가 true이고 IsClient()가 true일 때만 실행되는 로직을 포함하는 스크립트를 작성해줘 [answer] | 요청하신 조건(OnBeginPlay, EnableInHierarchy가 true, IsClient()가 true)을 만족하는 mLua 스크립트는 다음과 같습니다. ```lua Method: [client only] void OnBeginPlay() { local mapLayer = self.Entity.MapLayerComponent if mapLayer.EnableInHierarchy and mapLayer:IsClient() then -- 이 조건에서만 실행할 로직 log(" [followup] | [followup_answer] | [scores] | helpfulness=3 correctness=3 coherence=4 complexity=2 verbosity=2 [judge_reason] | 요청 조건을 만족하는 코드를 제공했으나, mLua 스크립트 규칙에 명시된 표준 생명주기 메서드(OnBeginPlay)에 [client only] 실행 공간 속성을 붙인 것은 문서 및 규칙에 없는 비표준 구문이며, 컴포넌트 메서드 호출 시 콜론(:)을 사용하는 것도 일반적 Lua 메서드 호출 관례와 어긋날 수 있어 정밀도가 떨어집니다. [source_doc] | 맵의 레이어별 정보를 관리합니다. # Properties - **boolean IsVisible [ReadOnly] [HideFromInspector]** 레이어의 렌더링 여부를 나타냅니다. false일 경우 메이커 씬에서 보이지 않습니다. - **int32 LayerSortOrder [ReadOnly]** 레이어의 우선순위 순서입니다. 값이 작을수록 하위 레이어로, 뒤에 그려집니다. - **boolean Locked [ReadOnly] [HideFromInspector]** 레이어가 잠겨 있는지를 나타냅니다. 잠겨
[task] | code [pass] | ❌ 탈락 [title] | MapLayerComponent [question] | MapLayerComponent의 MapLayerName 프로퍼티를 확인하여 이름이 "Ground"인 레이어의 IsVisible 상태가 false인 경우 log로 경고 메시지를 출력하는 스크립트를 작성해줘 [answer] | MapLayerComponent의 `MapLayerName`과 `IsVisible`은 모두 읽기 전용(ReadOnly) 프로퍼티이며, 특정 이름의 레이어를 찾거나 변경하는 메서드가 제공되지 않습니다. 따라서 `MapLayerName`이 "Ground"인 레이어를 동적으로 찾아 `IsVisible` 상태를 확인하는 로직을 구현할 수 있는 API가 존재하지 않습니다. 요구하신 기능(이름 기반 레이어 검색 및 가시성 확인)을 수행할 수 있는 mLua API가 없으므로, 해당 스크립트를 작성할 수 없습니다. [followup] | [followup_answer] | [scores] | helpfulness=2 correctness=4 coherence=4 complexity=2 verbosity=2 [judge_reason] | 참고 문서에 이름 기반 검색 API가 없음을 정확히 지적했으나, 질문의 의도(조건부 로깅)를 무시하고 '작성 불가'로만 답해 실질적 도움이 제한적임 [source_doc] | 맵의 레이어별 정보를 관리합니다. # Properties - **boolean IsVisible [ReadOnly] [HideFromInspector]** 레이어의 렌더링 여부를 나타냅니다. false일 경우 메이커 씬에서 보이지 않습니다. - **int32 LayerSortOrder [ReadOnly]** 레이어의 우선순위 순서입니다. 값이 작을수록 하위 레이어로, 뒤에 그려집니다. - **boolean Locked [ReadOnly] [HideFromInspector]** 레이어가 잠겨 있는지를 나타냅니다. 잠겨
[task] | two_turn [pass] | ✅ 통과 [title] | AvatarRendererComponent [question] | 아바타의 특정 부위만 색상을 바꾸거나 감정을 표현하려면 어떤 메서드를 사용해야 하나요? [answer] | 아바타의 특정 부위 색상을 변경하거나 감정 표현을 재생하려면 `AvatarRendererComponent`의 다음 메서드를 사용합니다. 1. **특정 부위 색상 변경**: `SetAvatarPartColor` - 아바타의 특정 카테고리(`MapleAvatarItemCategory`)에 해당하는 부위의 RGB 색상과 알파값을 설정합니다. - 매개변수: `category`, `r`, `g`, `b`, `a`, `targetUserId` (선택) - 실행 공간: `[Client]` 2. **감정 표현 재생**: `Pl [followup] | SetAvatarPartColor의 MapleAvatarItemCategory 파라미터 값, PlayEmotion의 duration 파라미터 유형 [followup_answer] | 제공된 참고 문서에는 `MapleAvatarItemCategory`의 구체적인 열거형 값(예: `Head`, `Face` 등)이 명시되어 있지 않습니다. 또한 `PlayEmotion`의 `duration` 파라미터 유형은 문서에서 `float`으로 정의되어 있습니다. 따라서 질문하신 두 가지 항목에 대해 답변하면 다음과 같습니다. 1. **`SetAvatarPartColor`의 `MapleAvatarItemCategory` 파라미터 값**: 문서에 해당 열거형의 구체적인 값 목록이 포함되어 있지 않아 알 수 없습니다. 2. ** [scores] | helpfulness=4 correctness=3 coherence=4 complexity=3 verbosity=2 [judge_reason] | 질문에 대한 핵심 메서드와 매개변수를 정확히 설명했으나, 문서에 없는 MapleAvatarItemCategory.Head 및 EmotionalType.Happy 상수 값을 코드 예시에서 지어내어 정확도에서 감점됩니다. [source_doc] | 아바타 형태의 엔티티를 렌더링합니다. # Properties - **boolean IgnoreMapLayerCheck [Sync]** SortingLayer에 Map Layer 이름을 지정했을 때 자동 치환을 수행하지 않습니다. - **string MaterialId [Sync]** 렌더러에 적용할 머티리얼의 Id를 지정합니다. - **int32 OrderInLayer** 같은 Layer 내의 우선순위를 결정합니다. 수가 클수록 앞에 보입니다. - **float PlayRate [Sync]** 아바타 애니메이션의
[task] | code [pass] | ✅ 통과 [title] | MapLayerComponent [question] | MapLayerComponent를 가진 엔티티의 LayerSortOrder 값이 100보다 크고 Locked 상태가 true인 경우, 해당 레이어의 MapLayerName을 log로 출력하는 스크립트를 작성해줘 [answer] | MapLayerComponent의 `LayerSortOrder`와 `Locked` 프로퍼티는 모두 `[ReadOnly]` 속성이기 때문에 스크립트에서 값을 읽어서 조건을 판단하는 것은 가능하지만, 값을 수정하는 것은 불가능합니다. 요구하신 조건(`LayerSortOrder > 100` 이고 `Locked == true`)을 만족할 때 `MapLayerName`을 출력하는 스크립트는 다음과 같습니다. ```lua Method: [server only] void OnBeginPlay() { local mapLayer = se [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=2 verbosity=2 [judge_reason] | 참고 문서의 프로퍼티 이름과 읽기 전용 제약, mLua 스크립트 규칙에 따른 컴포넌트 접근 방식(self.Entity.X) 및 생명주기 메서드 사용이 정확하고 질문에 충실하게 답변했다. [source_doc] | 맵의 레이어별 정보를 관리합니다. # Properties - **boolean IsVisible [ReadOnly] [HideFromInspector]** 레이어의 렌더링 여부를 나타냅니다. false일 경우 메이커 씬에서 보이지 않습니다. - **int32 LayerSortOrder [ReadOnly]** 레이어의 우선순위 순서입니다. 값이 작을수록 하위 레이어로, 뒤에 그려집니다. - **boolean Locked [ReadOnly] [HideFromInspector]** 레이어가 잠겨 있는지를 나타냅니다. 잠겨
[task] | instruction_following [pass] | ✅ 통과 [title] | CameraComponent [question] | SetZoomTo와 ShakeCamera 메서드의 시그니처를 포함하여, 특정 사용자 ID를 대상으로 2초 동안 카메라를 확대하는 코드를 주석으로만 설명을 달아 출력하세요. [answer] | `CameraComponent`의 `SetZoomTo`와 `ShakeCamera` 메서드는 클라이언트 공간(`[Client]`)에서만 실행되며, 특정 사용자에게만 효과를 적용하기 위해 `targetUserId` 파라미터를 지원합니다. 두 메서드의 시그니처는 다음과 같습니다. 1. **SetZoomTo** * `void SetZoomTo(float percent, float duration, string targetUserId = nil)` * `percent`: 확대/축소 비율 (백분율) * ` [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=3 verbosity=2 [judge_reason] | 참고 문서의 API 시그니처와 mLua 문법 규칙(컴포넌트 접근, [client only] 어노테이션)을 정확히 준수하며, 요청사항인 주석 설명과 코드 예시를 명확하게 제공했습니다. [source_doc] | Entity를 바라보는 카메라 기능을 제공합니다. 카메라 간 화면 전환은 CameraService를 이용하세요. # Properties - **Vector2 CameraOffset** 카메라의 위치를 설정합니다. 월드 좌표 기준입니다. - **boolean ConfineCameraArea** 카메라가 비추는 범위를 맵의 발판 영역으로만 제한합니다. - **Vector2 Damping** 카메라가 대상을 추적하는 동안 대상이 SoftZone에 들어갈 때 카메라가 반응하는 속도를 조정합니다. 값이 작을수록 더욱 더 빠르게
[task] | single_turn [pass] | ✅ 통과 [title] | DirectionSynchronizerComponent [question] | DirectionSynchronizerComponent를 추가한 오브젝트가 부모 엔티티의 방향을 따라가지 않을 때, 어떤 이벤트가 발생해야 방향이 동기화되는지 궁금합니다. [answer] | DirectionSynchronizerComponent는 부모 엔티티에서 **ChangedLookAtEvent**가 발생해야 방향이 동기화됩니다. 즉, 부모 엔티티의 방향이 변할 때 `ChangedLookAtEvent`가 트리거되어야 자식(이 컴포넌트가 붙은) 엔티티의 방향이 부모를 따라 변경됩니다. 참고로 이 컴포넌트를 활성화하려면 `Enable` 프로퍼티가 `true`여야 하며, 계층 구조 상에서 상위 엔티티들이 비활성 상태(`Enable: false`)라면 `EnableInHierarchy`는 `false`를 반환하여 기능 [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=2 verbosity=2 [judge_reason] | 참고 문서에 명시된 ChangedLookAtEvent 트리거 조건과 Enable/EnableInHierarchy 프로퍼티의 역할을 정확히 설명하여 질문에 완벽하게 부합함 [source_doc] | 부모 엔티티의 방향을 따라갑니다. 부모 엔티티에서 ChangedLookAtEvent가 발생할 경우 현재 엔티티의 방향도 변경됩니다. # Properties ##### inherited from Component: - **boolean Enable [Sync]** 컴포넌트 활성화 여부를 확인합니다. - **boolean EnableInHierarchy [ReadOnly] [HideFromInspector]** 계층 구조상에서 이 컴포넌트가 Enable 상태인지를 반환합니다. Enable이 true일지라도 엔티티의 Enab
[task] | single_turn [pass] | ✅ 통과 [title] | DirectionSynchronizerComponent [question] | 부모 엔티티의 Enable이 false 상태일 때, 자식 엔티티에 붙은 DirectionSynchronizerComponent의 EnableInHierarchy 프로퍼티는 어떤 값을 반환하나요? [answer] | 부모 엔티티의 Enable이 false 상태라면, 자식 엔티티에 붙은 DirectionSynchronizerComponent의 EnableInHierarchy 프로퍼티는 false를 반환합니다. EnableInHierarchy는 계층 구조 상에서 해당 컴포넌트가 실제로 활성화되어 있는지를 나타내는 읽기 전용(ReadOnly) 프로퍼티입니다. DirectionSynchronizerComponent 자체의 Enable이 true라 하더라도, 이를 소유한 엔티티(자식 엔티티)나 그 상위 계층(부모 엔티티) 중 하나라도 Enable이 f [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=2 verbosity=2 [judge_reason] | 문서의 EnableInHierarchy 설명과 일치하며, 질문의 의도를 정확히 파악하여 간결하고 명확하게 답변했습니다. [source_doc] | 부모 엔티티의 방향을 따라갑니다. 부모 엔티티에서 ChangedLookAtEvent가 발생할 경우 현재 엔티티의 방향도 변경됩니다. # Properties ##### inherited from Component: - **boolean Enable [Sync]** 컴포넌트 활성화 여부를 확인합니다. - **boolean EnableInHierarchy [ReadOnly] [HideFromInspector]** 계층 구조상에서 이 컴포넌트가 Enable 상태인지를 반환합니다. Enable이 true일지라도 엔티티의 Enab
[task] | single_turn [pass] | ✅ 통과 [title] | DirectionSynchronizerComponent [question] | 스펙트럼 상에서 DirectionSynchronizerComponent의 Enable 프로퍼티가 [Sync] 속성을 가지고 있는데, 이는 서버와 클라이언트 간에 어떤 방식으로 동기화되는 건가요? [answer] | 제공된 문서에는 `DirectionSynchronizerComponent`의 `Enable` 프로퍼티가 `[Sync]` 속성을 가지고 있다는 사실만 명시되어 있습니다. 그러나 이 `[Sync]` 속성이 서버와 클라이언트 간에 **구체적으로 어떤 방식**(예: 어떤 이벤트 시점에 동기화되는지, 변경 시 즉시 동기화되는지 등)으로 동기화되는지에 대한 기술적 설명은 문서에 포함되어 있지 않습니다. 따라서 제공된 문서 근거만으로는 `[Sync]` 속성의 구체적인 동기화 메커니즘을 설명할 수 없습니다. [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=2 verbosity=2 [judge_reason] | 참고 문서에 [Sync]의 구체적 동기화 메커니즘이 명시되지 않았음을 정확히 지적하고, 없는 정보를 지어내지 않아 문서에 충실합니다. [source_doc] | 부모 엔티티의 방향을 따라갑니다. 부모 엔티티에서 ChangedLookAtEvent가 발생할 경우 현재 엔티티의 방향도 변경됩니다. # Properties ##### inherited from Component: - **boolean Enable [Sync]** 컴포넌트 활성화 여부를 확인합니다. - **boolean EnableInHierarchy [ReadOnly] [HideFromInspector]** 계층 구조상에서 이 컴포넌트가 Enable 상태인지를 반환합니다. Enable이 true일지라도 엔티티의 Enab
[task] | instruction_following [pass] | ✅ 통과 [title] | DamageSkinSettingComponent [question] | DamageSkinSettingComponent의 [Sync] 속성인 Alpha, DamageSkinId, DamageSkinScale, DelayPerAttack, LitMode, PlayRate, TweenType의 이름과 타입을 표로 정리해서 [answer] | `DamageSkinSettingComponent`의 `[Sync]` 속성 정보입니다. | 속성 이름 | 타입 | | :--- | :--- | | Alpha | float | | DamageSkinId | DataRef | | DamageSkinScale | Vector2 | | DelayPerAttack | float | | LitMode | LitMode | | PlayRate | float | | TweenType | DamageSkinTweenType | [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=1 verbosity=2 [judge_reason] | 참고 문서에 명시된 모든 속성의 이름과 타입을 정확하고 간결하게 표로 정리하여 질문에 완벽히 부합합니다. [source_doc] | 공격 시 재생할 대미지 스킨의 형식을 설정합니다. 피격 엔티티는 DamageSkinSpawnerComponent가 있어야 합니다. # Properties - **float Alpha [Sync]** 대미지 스킨의 Alpha 값을 설정합니다. - **DataRef DamageSkinId [Sync]** 대미지 스킨의 종류를 설정합니다. - **Vector2 DamageSkinScale [Sync]** 대미지 스킨의 크기를 설정합니다. - **float DelayPerAttack [Sync]** 대미지 분할 재생 간격
[task] | instruction_following [pass] | ✅ 통과 [title] | DamageSkinSettingComponent [question] | 피격 엔티티에 반드시 필요한 컴포넌트 이름과 AttackComponent의 GetDisplayHitCount(attackInfo) 함수를 참고해야 하는 이유를 2문장 이내로 [answer] | 피격 엔티티에는 반드시 DamageSkinSpawnerComponent가 필요합니다. AttackComponent의 GetDisplayHitCount(attackInfo) 함수는 DamageSkinSettingComponent의 DelayPerAttack 프로퍼티와 함께 대미지 분할 재생 간격을 설정할 때 참고해야 합니다. [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=2 verbosity=2 [judge_reason] | 참고 문서의 내용을 정확히 요약하여 질문에 완벽하게 부합하는 2문장 이내의 답변을 제시했습니다. [source_doc] | 공격 시 재생할 대미지 스킨의 형식을 설정합니다. 피격 엔티티는 DamageSkinSpawnerComponent가 있어야 합니다. # Properties - **float Alpha [Sync]** 대미지 스킨의 Alpha 값을 설정합니다. - **DataRef DamageSkinId [Sync]** 대미지 스킨의 종류를 설정합니다. - **Vector2 DamageSkinScale [Sync]** 대미지 스킨의 크기를 설정합니다. - **float DelayPerAttack [Sync]** 대미지 분할 재생 간격
[task] | two_turn [pass] | ✅ 통과 [title] | CameraComponent [question] | 카메라 제한 영역을 직접 정의하려면 어떤 프로퍼티들을 설정해야 하나요? [answer] | 카메라 제한 영역을 직접 정의하려면 `UseCustomBound` 프로퍼티를 `true`로 설정한 후, `LeftBottom`과 `RightTop` 프로퍼티로 좌하단과 우상단 좌표를 지정해야 합니다. * **UseCustomBound**: 카메라 제한 영역을 직접 정의해 사용할지 여부를 결정합니다. `true`일 때 `LeftBottom`, `RightTop` 값이 적용됩니다. * **LeftBottom**: 카메라 제한 영역의 좌하단 좌표 (Vector2). * **RightTop**: 카메라 제한 영역의 우상단 좌표 [followup] | UseCustomBound가 false일 때 기본 맵 영역을 사용하게 하고 싶다면 어떤 값을 설정해야 하며, 좌표계는 어떻게 되나요? [followup_answer] | `UseCustomBound`가 `false`일 경우, 추가적인 좌표 설정 없이 속해있는 맵의 맵 영역을 자동으로 사용하게 됩니다. 이때 맵 영역이 기본이라면, 그 영역을 바탕으로 보정된 영역이 카메라 제한 영역으로 적용됩니다. 문서에는 `UseCustomBound`가 `false`일 때 적용되는 맵 영역의 구체적인 좌표계(월드 좌표, 스크린 좌표 등)가 명시되어 있지 않습니다. 다만, 카메라 관련 다른 프로퍼티인 `CameraOffset`은 "월드 좌표 기준"이라고 명시되어 있어, 맵 영역도 월드 좌표계를 기반으로 할 가능성이 [scores] | helpfulness=4 correctness=4 coherence=4 complexity=2 verbosity=2 [judge_reason] | 참고 문서에 명시된 UseCustomBound, LeftBottom, RightTop 프로퍼티의 역할과 false일 때의 동작을 정확하고 간결하게 설명하고 있습니다. [source_doc] | Entity를 바라보는 카메라 기능을 제공합니다. 카메라 간 화면 전환은 CameraService를 이용하세요. # Properties - **Vector2 CameraOffset** 카메라의 위치를 설정합니다. 월드 좌표 기준입니다. - **boolean ConfineCameraArea** 카메라가 비추는 범위를 맵의 발판 영역으로만 제한합니다. - **Vector2 Damping** 카메라가 대상을 추적하는 동안 대상이 SoftZone에 들어갈 때 카메라가 반응하는 속도를 조정합니다. 값이 작을수록 더욱 더 빠르게