[task] | single_turn [pass] | ✅ 통과 [title] | DirectionSynchronizerComponent [question] | OnBeginPlay에서 SpawnService로 생성한 자식 엔티티에 DirectionSynchronizerComponent를 붙이려면 AddComponent 메서드의 인자로 컴포넌트 이름을 어떻게 지정해야 하나요? [answer] | `AddComponent` 메서드의 인자로 컴포넌트 이름을 지정할 때는 **컴포넌트 이름 문자열**을 사용해야 합니다. 구체적으로는 `"DirectionSynchronizerComponent"`와 같이 컴포넌트 클래스 이름을 그대로 문자열로 전달합니다. 참고 문서의 예제에서 확인되듯, `SpawnService`로 생성한 엔티티에 해당 컴포넌트를 붙이는 코드는 다음과 같습니다. ```lua Method: [server only] void OnBeginPlay() { local modelId = "Model Entry ID" l [followup] | [followup_answer] | [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] | two_turn [pass] | ✅ 통과 [title] | CameraComponent [question] | SoftZone과 DeadZone이 각각 카메라 움직임에 어떤 역할을 하며, Damping 값이 작아지면 어떻게 변화하나요? [answer] | SoftZone과 DeadZone은 카메라가 타겟을 추적할 때 프레임 내 위치를 결정하는 두 가지 서로 다른 영역입니다. **DeadZone**은 카메라가 타겟을 유지하는 프레임의 중심 영역입니다. 타겟이 이 영역 안에 있을 때는 카메라가 움직이지 않고 그대로 유지됩니다. **SoftZone**은 DeadZone을 둘러싼 바깥쪽 영역입니다. 타겟이 DeadZone을 벗어나 SoftZone 안으로 들어오면, 카메라는 방향을 바꾸어 타겟을 다시 DeadZone 안으로 되돌리기 위해 움직임을 시작합니다. 즉, SoftZone은 카메라 [followup] | Damping이 0에 가까워질 때 카메라가 대상 추적을 어떻게 반응하는지 설명해 주세요. [followup_answer] | Damping 값이 0에 가까워질수록 카메라가 대상 추적을 반응하는 속도가 더욱 빨라집니다. [scores] | helpfulness=4 correctness=4 coherence=4 complexity=3 verbosity=2 [judge_reason] | 참고 문서에 명시된 SoftZone, DeadZone, Damping의 정의와 동작 원리를 정확하고 명확하게 설명하여 질문에 완벽히 부합합니다. [source_doc] | Entity를 바라보는 카메라 기능을 제공합니다. 카메라 간 화면 전환은 CameraService를 이용하세요. # Properties - **Vector2 CameraOffset** 카메라의 위치를 설정합니다. 월드 좌표 기준입니다. - **boolean ConfineCameraArea** 카메라가 비추는 범위를 맵의 발판 영역으로만 제한합니다. - **Vector2 Damping** 카메라가 대상을 추적하는 동안 대상이 SoftZone에 들어갈 때 카메라가 반응하는 속도를 조정합니다. 값이 작을수록 더욱 더 빠르게
[task] | two_turn [pass] | ✅ 통과 [title] | AvatarRendererComponent [question] | 아바타 렌더링 시 겹침 순서와 색상 변경을 어떻게 제어하나요? [answer] | 아바타 렌더링 시 겹침 순서와 색상 변경은 `AvatarRendererComponent`의 프로퍼티와 메서드를 사용하여 제어합니다. ### 1. 겹침 순서 제어 여러 아바타가 겹쳤을 때 어떤 아바타가 위에 보이는지 결정하는 것은 `SortingLayer`와 `OrderInLayer` 프로퍼티입니다. * **SortingLayer**: 아바타의 정렬 레이어를 설정합니다. 서로 다른 레이어에 있는 엔티티 간 우선순위를 결정합니다. * **OrderInLayer**: 같은 `SortingLayer` 내에서 우선순위를 결정합니다 [followup] | OrderInLayer와 SortingLayer의 차이점, SetColor 메서드 사용 시 targetUserId 지정 예시 [followup_answer] | ### OrderInLayer와 SortingLayer의 차이점 아바타 렌더링 시 겹침 순서는 `SortingLayer`와 `OrderInLayer`가 함께 결정하며, 두 프로퍼티의 역할은 다음과 같이 구분됩니다. 1. **SortingLayer (string)** * 아바타의 정렬 레이어를 설정합니다. * 2개 이상의 엔티티가 겹쳤을 때, **레이어 간** 우선순위를 결정합니다. * `Map Layer` 이름을 지정했을 때 자동 치환이 발생할 수 있으며, 이를 방지하려면 `IgnoreMapLa [scores] | helpfulness=4 correctness=3 coherence=4 complexity=3 verbosity=2 [judge_reason] | 문서의 API와 메서드 시그니처를 정확히 설명하고 있으나, 코드 예제에서 문서에 없는 열거형 값(MapleAvatarItemCategory.Hair)을 예시로 제시하여 사실 무근의 세부 정보를 포함하였습니다. [source_doc] | 아바타 형태의 엔티티를 렌더링합니다. # Properties - **boolean IgnoreMapLayerCheck [Sync]** SortingLayer에 Map Layer 이름을 지정했을 때 자동 치환을 수행하지 않습니다. - **string MaterialId [Sync]** 렌더러에 적용할 머티리얼의 Id를 지정합니다. - **int32 OrderInLayer** 같은 Layer 내의 우선순위를 결정합니다. 수가 클수록 앞에 보입니다. - **float PlayRate [Sync]** 아바타 애니메이션의
[task] | two_turn [pass] | ✅ 통과 [title] | CameraComponent [question] | SetZoomTo 메서드에서 줌 비율 범위를 벗어나는 값을 입력하면 어떻게 처리되나요? [answer] | `SetZoomTo` 메서드 자체에 대한 입력값 검증 로직이나 범위를 벗어났을 때의 구체적인 처리 방식(예: 최소/최대값으로 자동 클램핑, 오류 발생 등)은 제공된 문서에 명시되어 있지 않습니다. 다만, 카메라 줌 비율을 설정하는 프로퍼티인 `ZoomRatio`의 설명에는 "값은 ZoomRatioMin 이상, ZoomRationmax 이하로만 설정할 수 있습니다"라는 제약 사항이 포함되어 있습니다. 따라서 `SetZoomTo`의 `percent` 파라미터에 `ZoomRatioMin`(최소 30) 미만 또는 `ZoomRatioMax [followup] | ZoomRatioMin과 ZoomRatioMax의 허용 범위를 초과하는 값을 전달했을 때 발생하는 예외나 동작 방식을 알려 주세요. [followup_answer] | 제공된 문서에는 `ZoomRatioMin` 또는 `ZoomRatioMax` 프로퍼티에 허용 범위(각각 30, 500)를 초과하는 값을 전달했을 때 발생하는 구체적인 예외나 동작 방식이 명시되어 있지 않습니다. 문서에는 해당 프로퍼티에 대해 "30보다 작은 값으로 설정할 수 없습니다" 및 "500보다 큰 값으로 설정할 수 없습니다"라는 제약 사항만 언급되어 있을 뿐, 이 제약을 위반했을 때 엔진이 어떻게 반응하는지(예: 값이 자동으로 제한 값으로 클램핑되는지, 오류가 발생하는지, 무시되는지 등)에 대한 설명은 포함되어 있지 않습니다 [scores] | helpfulness=4 correctness=4 coherence=4 complexity=2 verbosity=2 [judge_reason] | 문서에 명시되지 않은 SetZoomTo의 오버플로 처리 방식을 정확히 부인하고, 관련 프로퍼티 제약 사항만 인용하여 사실에 기반한 답변을 제공했습니다. [source_doc] | Entity를 바라보는 카메라 기능을 제공합니다. 카메라 간 화면 전환은 CameraService를 이용하세요. # Properties - **Vector2 CameraOffset** 카메라의 위치를 설정합니다. 월드 좌표 기준입니다. - **boolean ConfineCameraArea** 카메라가 비추는 범위를 맵의 발판 영역으로만 제한합니다. - **Vector2 Damping** 카메라가 대상을 추적하는 동안 대상이 SoftZone에 들어갈 때 카메라가 반응하는 속도를 조정합니다. 값이 작을수록 더욱 더 빠르게
[task] | instruction_following [pass] | ✅ 통과 [title] | TouchReceiveComponent [question] | AutoFitToSize와 AutoFitOnce 프로퍼티의 동작 차이와 DynamicTouchArea의 대안을 표로 정리하세요. [answer] | `AutoFitToSize`와 `AutoFitOnce`는 `AvatarRendererComponent` 또는 `SpriteRendererComponent`의 Scale 값에 따라 `TouchReceiveComponent`의 터치 영역(`TouchArea`)과 중심점(`Offset`)을 자동으로 조정하는 프로퍼티입니다. 두 프로퍼티의 주요 차이점과 비권장 프로퍼티인 `DynamicTouchArea`의 대안은 다음과 같습니다. | 프로퍼티 | 동작 방식 | 비고 | | :--- | :--- | :--- | | **AutoFitOnce [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=3 verbosity=2 [judge_reason] | 참고 문서의 내용과 정확히 일치하며, 질문한 프로퍼티들의 차이와 대안을 표로 명확하고 간결하게 정리했습니다. [source_doc] | 엔티티를 터치할 수 있게 되며 터치 시 동작을 제어할 수 있습니다. # Properties - **boolean AutoFitOnce [MakerOnly]** true로 설정하면 AvatarRendererComponent 또는 SpriteRendererComponent의 Scale 값에 맞추어 TouchArea 및 Offset 값을 자동으로 변경됩니다. 최초 한 번만 변경합니다. - **boolean AutoFitToSize** true로 설정하면 AvatarRendererComponent 또는 SpriteRenderer
[task] | two_turn [pass] | ✅ 통과 [title] | HitComponent [question] | 몬스터의 체력이 줄어들수록 피격 판정 영역이 커지는 HitComponent 동작을 구현하고 싶은데, 기본 제공 스크립트와 어떻게 다른가요? [answer] | 제공된 문서에 따르면, 기본 제공 스크립트와 체력 감소에 따라 피격 판정 영역(`HitComponent.BoxSize`)을 동적으로 변경하는 스크립트 간에는 구현 목적과 방식에서 명확한 차이가 있습니다. **1. 기본 제공 스크립트 (PlayerHit 스크립트 기반)** 기본 제공 스크립트는 피격 여부 자체를 제어하는 로직에 초점을 맞춥니다. * **핵심 기능:** `IsHitTarget()` 함수를 오버라이드하여 특정 시간(쿨다운) 동안에는 플레이어가 공격을 받지 않도록 **무적 상태**를 부여합니다. * **동작 방식: [followup] | 예제 코드에서 ratio 계산 시 InitialHealth가 0이거나 Health가 음수가 되는 경우의 예외 처리는 어떻게 해야 하나요? [followup_answer] | 제공된 참고 문서를 기준으로 분석할 때, 예제 코드에 명시된 예외 처리 로직은 다음과 같습니다. **1. `Health`가 음수가 되는 경우** 예제 코드 내 `HandleHitEvent` 함수에서 체력 차감 직후 `math.max(self.Health, 0.0)` 함수를 호출하고 있습니다. ```lua self.Health = self.Health - TotalDamage self.Health = math.max(self.Health, 0.0) ``` 이 로직 덕분에 `Health` 값이 0보다 작아지는(음수가 되는) 일은 ** [scores] | helpfulness=4 correctness=4 coherence=4 complexity=3 verbosity=2 [judge_reason] | 참고 문서의 두 예제(기본 제공 PlayerHit 스크립트와 HitComponent BoxSize 확장 예제)를 정확히 대조하여 차이점을 명확히 설명하고, 문서의 코드를 그대로 인용하여 질문자에게 실질적인 도움을 주었음. [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] | code [pass] | ✅ 통과 [title] | PortalComponent [question] | OnBeginPlay에서 self.Entity.PortalComponent.BoxSize와 BoxOffset 값을 가져와서 충돌체 직사각형의 최소/최대 좌표(x, y)를 계산하여 self._T에 저장하고, 저장된 좌표를 log()로 출력하는 스크립트를 작성해줘 [answer] | `PortalComponent`의 `BoxOffset`과 `BoxSize`는 모두 `Vector2` 타입입니다. `BoxOffset`은 충돌체 직사각형의 중심점 위치를, `BoxSize`는 너비와 높이를 나타냅니다. 중심점(`BoxOffset`)과 크기(`BoxSize`)를 이용하여 직사각형의 최소 좌표(좌하단)와 최대 좌표(우상단)를 계산하는 수식은 다음과 같습니다. * **최소 x** = `BoxOffset.x` - (`BoxSize.x` / 2) * **최소 y** = `BoxOffset.y` - (`BoxSize.y [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=2 verbosity=2 [judge_reason] | 문서의 PortalComponent 프로퍼티 정의와 mLua 문법 규칙에 정확히 부합하며, 요청한 좌표 계산 및 로그 출력 로직이 명확하고 간결하게 제시되었습니다. [source_doc] | 포탈 기능을 제공합니다. 포탈의 충돌 속성을 설정하고 목적지 포탈을 연결할 수 있습니다. # Properties - **Vector2 BoxOffset [Sync]** 엔티티를 기준으로 충돌체 직사각형의 중심점 위치를 설정합니다. - **Vector2 BoxSize [Sync]** 충돌체 직사각형의 너비와 높이를 지정합니다. - **CollisionGroup CollisionGroup [ReadOnly] [HideFromInspector]** Portal의 충돌 그룹입니다. - **boolean IsLegacy [Re
[task] | single_turn [pass] | ✅ 통과 [title] | CameraComponent [question] | UseCustomBound가 true로 설정되어 있을 때만 LeftBottom과 RightTop 값을 직접 지정할 수 있는데, false 상태에서는 카메라 제한 영역이 어떻게 결정되는지 알고 싶습니다. [answer] | `UseCustomBound`가 `false`일 경우, 카메라 제한 영역은 직접 정의한 좌표가 아니라 엔티티가 속해 있는 맵의 영역을 기준으로 결정됩니다. 구체적으로, 맵 영역이 기본 상태라면 그 영역을 바탕으로 보정된 영역이 카메라 제한 영역으로 사용됩니다. [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=2 verbosity=2 [judge_reason] | 참고 문서의 UseCustomBound 설명과 정확히 일치하며, 질문에 대해 간결하고 정확하게 답변했습니다. [source_doc] | Entity를 바라보는 카메라 기능을 제공합니다. 카메라 간 화면 전환은 CameraService를 이용하세요. # Properties - **Vector2 CameraOffset** 카메라의 위치를 설정합니다. 월드 좌표 기준입니다. - **boolean ConfineCameraArea** 카메라가 비추는 범위를 맵의 발판 영역으로만 제한합니다. - **Vector2 Damping** 카메라가 대상을 추적하는 동안 대상이 SoftZone에 들어갈 때 카메라가 반응하는 속도를 조정합니다. 값이 작을수록 더욱 더 빠르게
[task] | code [pass] | ❌ 탈락 [title] | HitComponent [question] | `OnHit` 이벤트 핸들러에서 `attacker`가 `self.Entity`와 동일한 경우 아무 동작도 하지 않고, 다르면 `_EntityService:GetEntityByPath`를 사용해 "/maps/map01/obj"에 있는 엔티티의 `TransformComponent.Position`을 `attacker`의 현재 위치로 동기화하는 스크립트를 작성해줘 [answer] | 제공된 문서에 따르면, `OnHit`은 이벤트 핸들러(Event Handler)가 아니라 `HitComponent`의 오버라이드 가능한 메서드(Method)입니다. 또한 `HandleHitEvent`는 `HitEvent`를 처리하는 핸들러로, `OnHit` 메서드와 직접적인 매핑 관계가 명시되지 않았습니다. 질문하신 로직(`attacker` 비교 및 위치 동기화)은 피격 시 실행되어야 하므로, 문서의 예제에 나타난 표준적인 피격 처리 방식인 **`HandleHitEvent`** 이벤트 핸들러를 사용하여 구현해야 합니다. `Hand [followup] | [followup_answer] | [scores] | helpfulness=2 correctness=1 coherence=3 complexity=3 verbosity=3 [judge_reason] | 질문에서 명시한 OnHit 메서드 오버라이드 방식이 아닌, 문서에 없는 HandleHitEvent 이벤트 핸들러를 지어내어 구현했으며, 이는 문서와 규칙에 없는 API를 사용한 오류입니다. [source_doc] | 엔티티의 충돌 영역을 설정하고, AttackComponent의 공격을 받았을 때 피격 동작을 구현할 수 있는 인터페이스를 제공합니다. # Properties - **Vector2 BoxOffset [Deprecated] [Sync]** IsLegacy가 true인 이전 시스템에서 사용할 수 있습니다. 엔티티를 기준으로 충돌체 직사각형의 중심점 위치를 설정합니다. - **Vector2 BoxSize [Sync]** 직사각형 충돌체의 너비와 높이를 지정합니다. - **float CircleRadius [Sync]** 원형
[task] | two_turn [pass] | ❌ 탈락 [title] | AIWanderComponent [question] | AIWanderComponent의 UpdateAuthority 프로퍼티가 Server와 Client 중 하나를 지정할 때, IsServer() 또는 IsClient() 메서드를 사용하여 현재 실행 환경을 판별하는 로직을 어떻게 작성해야 하며, LogEnabled가 true일 때 메이커 환경에서 어떤 로그가 출력되는지 궁금합니다. [answer] | `AIWanderComponent`의 `UpdateAuthority` 프로퍼티는 행동 트리의 실행이 서버(`Server`)와 클라이언트(`Client`) 중 어디에서 수행될지를 결정합니다. 이 권한에 따라 스크립트 내부에서 현재 실행 환경을 정확히 판별하고, `LogEnabled`가 활성화된 경우의 로그 출력 동작은 다음과 같습니다. ### 1. UpdateAuthority와 실행 환경 판별 로직 `UpdateAuthority`가 `Server`로 설정되어 있으면 행동 트리 노드가 서버에서 실행되며, `Client`로 설정되어 [followup] | 클라이언트와 서버에서 동시에 AIWanderComponent가 실행되지 않도록 보장하는 mLua 코드 스니펫을 작성해 주세요. [followup_answer] | `AIWanderComponent`의 `UpdateAuthority` 프로퍼티는 행동 트리의 실행 위치를 서버 또는 클라이언트 중 하나로 지정하는 역할을 합니다. 즉, `UpdateAuthority`가 `Server`로 설정되어 있으면 클라이언트에서는 행동 트리가 실행되지 않고, `Client`로 설정되어 있으면 서버에서는 실행되지 않습니다. 따라서 "클라이언트와 서버에서 **동시에** 실행되지 않도록" 보장하는 것은 `UpdateAuthority` 설정 자체의 기능이며, 이를 코드에서 명시적으로 체크하여 한쪽 환경에서 로직을 건 [scores] | helpfulness=1 correctness=0 coherence=2 complexity=3 verbosity=3 [judge_reason] | 문서에 없는 self.ParentAI, MovementComponent:MoveToDirection, BehaviourTreeStatus.Success, Vector2.zero 등을 지어내어 정확도가 0점이며, UpdateAuthority가 IsServer/IsClient의 반환값을 직접 결정한다는 서술은 문서의 '현재 실행 환경' 정의와 모순됩니다. [source_doc] | 주변을 배회하는 AI입니다. StateComponent가 없다면 자동으로 추가됩니다. # Properties ##### inherited from AIComponent: - **string BehaviourTreeId [ReadOnly]** 행동 트리 엔트리의 고유 식별자입니다. - **Blackboard BlackBoard [ReadOnly]** AI 행동 트리에서 사용하는 데이터 저장소입니다. 키-값 쌍으로 데이터를 관리하며 행동 트리 노드 간 데이터를 공유합니다. - **boolean IsLegacy [ReadOn
[task] | single_turn [pass] | ✅ 통과 [title] | CameraComponent [question] | Damping 프로퍼티의 값이 작을수록 카메라 반응이 빠진다고 설명되어 있는데, 이 값이 0에 가까워질수록 발생하는 현상이나 주의할 점은 무엇인가요? [answer] | 제공된 CameraComponent 문서에는 `Damping` 프로퍼티의 값이 "작을수록 더욱 더 빠르게 반응한다"는 설명만 존재합니다. 문서에는 **`Damping` 값이 0에 가까워질 때 발생하는 구체적인 현상(예: 진동, 튕김, 불안정 등)이나 주의할 점에 대한 정보가 포함되어 있지 않습니다.** 따라서 문서의 내용만으로는 0에 가까워질 때의 부작용이나 권장 범위에 대해 답변할 수 없습니다. [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=2 verbosity=2 [judge_reason] | 참고 문서에 없는 정보를 지어내지 않고 문서의 한계를 정확히 지적하여 질문자의 오해를 방지했습니다. [source_doc] | Entity를 바라보는 카메라 기능을 제공합니다. 카메라 간 화면 전환은 CameraService를 이용하세요. # Properties - **Vector2 CameraOffset** 카메라의 위치를 설정합니다. 월드 좌표 기준입니다. - **boolean ConfineCameraArea** 카메라가 비추는 범위를 맵의 발판 영역으로만 제한합니다. - **Vector2 Damping** 카메라가 대상을 추적하는 동안 대상이 SoftZone에 들어갈 때 카메라가 반응하는 속도를 조정합니다. 값이 작을수록 더욱 더 빠르게
[task] | single_turn [pass] | ✅ 통과 [title] | CameraComponent [question] | ShakeCamera와 SetZoomTo 메서드에 targetUserId 인자가 선택적으로 존재하는데, 이 값을 생략할 경우 카메라 효과는 누구의 화면에만 적용되나요? [answer] | 제공된 CameraComponent 문서에는 `ShakeCamera`와 `SetZoomTo` 메서드의 `targetUserId` 인자가 선택적(nil 기본값)임을 명시하고 있으나, **이 값을 생략할 경우 카메라 효과가 구체적으로 누구의 화면에 적용되는지에 대한 설명은 포함되어 있지 않습니다.** 따라서 문서에 근거하여 생략 시 적용 대상(예: 해당 스크립트가 부착된 엔티티가 따라다니는 플레이어, 또는 모든 클라이언트 등)을 확정하여 답변할 수 없습니다. [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=3 verbosity=2 [judge_reason] | 문서에 없는 정보를 지어내지 않고, 문서에 해당 설명이 없음을 정확히 지적하여 질문에 대한 가장 정확한 답변을 제공했습니다. [source_doc] | Entity를 바라보는 카메라 기능을 제공합니다. 카메라 간 화면 전환은 CameraService를 이용하세요. # Properties - **Vector2 CameraOffset** 카메라의 위치를 설정합니다. 월드 좌표 기준입니다. - **boolean ConfineCameraArea** 카메라가 비추는 범위를 맵의 발판 영역으로만 제한합니다. - **Vector2 Damping** 카메라가 대상을 추적하는 동안 대상이 SoftZone에 들어갈 때 카메라가 반응하는 속도를 조정합니다. 값이 작을수록 더욱 더 빠르게
[task] | single_turn [pass] | ✅ 통과 [title] | DamageSkinSettingComponent [question] | DamageSkinScale의 Vector2 값이 0 또는 음수일 경우 대미지 스킨이 안 보일 수 있는지에 대한 안내가 있나요? [answer] | 제공된 참고 문서에는 `DamageSkinScale`의 `Vector2` 값이 0 또는 음수일 경우 대미지 스킨이 안 보일 수 있다는 명시적인 경고나 동작에 대한 설명이 포함되어 있지 않습니다. 문서에는 `DamageSkinScale`이 대미지 스킨의 크기를 설정하는 `Vector2` 타입의 프로퍼티라는 정의만 존재하며, 특정 값(0, 음수 등)에 따른 시각적 결과나 예외 처리 방식에 대한 정보는 찾을 수 없습니다. [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] | DelayPerAttack 속성이 초 단위를 사용한다는 점과 AttackComponent의 GetDisplayHitCount(attackInfo) 함수와의 연관성을 단계별 번호 목록으로 [answer] | 제공된 문서에는 `DelayPerAttack` 속성이 초 단위를 사용한다는 정보와 `AttackComponent`의 `GetDisplayHitCount(attackInfo)` 함수를 참고하라는 안내만 존재합니다. 두 요소 간의 구체적인 연관성(예: 분할 재생 횟수 계산 방식 등)에 대한 상세 설명은 문서에 포함되어 있지 않습니다. 따라서 문서에 명시된 내용만을 근거로 답변드립니다. 1. `DelayPerAttack` 속성은 대미지 스킨의 분할 재생 간격을 설정할 때 사용하며, 단위는 초입니다. 2. 이 속성의 동작 방식이나 계산 [followup] | [followup_answer] | [scores] | helpfulness=3 correctness=4 coherence=4 complexity=2 verbosity=2 [judge_reason] | 문서에 없는 구체적인 연관성을 지어내지 않고, 문서에 명시된 사실만 단계별로 정확히 서술하여 질문에 충실하게 답변했습니다. [source_doc] | 공격 시 재생할 대미지 스킨의 형식을 설정합니다. 피격 엔티티는 DamageSkinSpawnerComponent가 있어야 합니다. # Properties - **float Alpha [Sync]** 대미지 스킨의 Alpha 값을 설정합니다. - **DataRef DamageSkinId [Sync]** 대미지 스킨의 종류를 설정합니다. - **Vector2 DamageSkinScale [Sync]** 대미지 스킨의 크기를 설정합니다. - **float DelayPerAttack [Sync]** 대미지 분할 재생 간격
[task] | single_turn [pass] | ✅ 통과 [title] | DamageSkinSettingComponent [question] | 피격당한 엔티티에 DamageSkinSpawnerComponent가 없으면 공격 측의 DamageSkinSettingComponent 설정이 제대로 적용되지 않는 건가요? [answer] | 네, 그렇습니다. `DamageSkinSettingComponent`는 공격 시 재생할 대미지 스킨의 형식만 설정하는 역할이며, 실제 피격 엔티티에 대미지 스킨을 생성하고 표시하기 위해서는 해당 피격 엔티티에 `DamageSkinSpawnerComponent`가 반드시 존재해야 합니다. 따라서 피격 엔티티에 `DamageSkinSpawnerComponent`가 없다면, 공격 측의 `DamageSkinSettingComponent` 설정값이 전송되더라도 대미지 스킨이 실제로 생성되거나 표시되지 않습니다. [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=2 verbosity=2 [judge_reason] | 참고 문서의 핵심 제약 사항(피격 엔티티에 DamageSkinSpawnerComponent 필수)을 정확히 인용하여 질문에 명확하고 일관되게 답변했습니다. [source_doc] | 공격 시 재생할 대미지 스킨의 형식을 설정합니다. 피격 엔티티는 DamageSkinSpawnerComponent가 있어야 합니다. # Properties - **float Alpha [Sync]** 대미지 스킨의 Alpha 값을 설정합니다. - **DataRef DamageSkinId [Sync]** 대미지 스킨의 종류를 설정합니다. - **Vector2 DamageSkinScale [Sync]** 대미지 스킨의 크기를 설정합니다. - **float DelayPerAttack [Sync]** 대미지 분할 재생 간격
[task] | code [pass] | ✅ 통과 [title] | DirectionSynchronizerComponent [question] | _SpawnService로 생성된 자식 엔티티에 DirectionSynchronizerComponent를 추가한 후, 해당 컴포넌트의 Enable 속성이 true인지 확인하여 false라면 true로 설정하는 스크립트를 작성해줘. [answer] | _SpawnService로 생성된 자식 엔티티에 DirectionSynchronizerComponent를 추가한 후, Enable 속성을 확인하여 false라면 true로 설정하는 스크립트는 다음과 같습니다. 참고: 제공된 문서에는 DirectionSynchronizerComponent의 Enable 속성을 직접 읽거나 쓰도록 하는 전용 메서드(예: GetEnable, SetEnable)가 명시되어 있지 않습니다. 하지만 mLua의 일반 컴포넌트 접근 방식과 문서의 예제에서 `entity:AddComponent` 후 컴포넌트 인스 [followup] | [followup_answer] | [scores] | helpfulness=3 correctness=3 coherence=4 complexity=3 verbosity=2 [judge_reason] | 문서에 없는 AddComponent 반환값 기반 컴포넌트 접근 패턴을 가정하여 작성했으나, mLua 규칙상 컴포넌트 접근은 self.Entity.X 형태로 명시되어 있어 정확도에 의문이 남음 [source_doc] | 부모 엔티티의 방향을 따라갑니다. 부모 엔티티에서 ChangedLookAtEvent가 발생할 경우 현재 엔티티의 방향도 변경됩니다. # Properties ##### inherited from Component: - **boolean Enable [Sync]** 컴포넌트 활성화 여부를 확인합니다. - **boolean EnableInHierarchy [ReadOnly] [HideFromInspector]** 계층 구조상에서 이 컴포넌트가 Enable 상태인지를 반환합니다. Enable이 true일지라도 엔티티의 Enab
[task] | two_turn [pass] | ✅ 통과 [title] | TouchReceiveComponent [question] | TouchEvent 핸들러에서 UI를 표시하는 예제 코드를 보여주세요. [answer] | TouchEvent 핸들러에서 UI를 표시하는 예제 코드는 다음과 같습니다. 엔티티에 `TouchReceiveComponent`가 설치되어 있어야 터치 이벤트가 발생합니다. ```lua Event Handler: [self] HandleTouchEvent (TouchEvent event) { -- Parameters -------------------------------------------------------- local uiPath = "/ui/DefaultGroup/ExampleUI" local targetU [followup] | _EntityService:GetEntityByPath를 사용하여 "/ui/DefaultGroup/ExampleUI" 경로의 엔티티를 찾고 SetVisible(true)를 호출하는 mLua 코드 블록을 작성해 주세요. [followup_answer] | 요청하신 `_EntityService:GetEntityByPath`를 사용하여 UI 엔티티를 찾고 표시하는 mLua 코드 블록은 다음과 같습니다. ```lua local uiPath = "/ui/DefaultGroup/ExampleUI" local targetUI = _EntityService:GetEntityByPath(uiPath) targetUI:SetVisible(true) ``` [scores] | helpfulness=4 correctness=4 coherence=4 complexity=2 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] | MapLayerComponent [question] | MapLayerComponent의 LayerSortOrder가 가장 작은 값(가장 하위 레이어)을 찾기 위해, self.Entity.MapLayerComponent.LayerSortOrder 값을 log로 출력하고 IsVisible이 true인지 확인하는 스크립트를 작성해줘 [answer] | 제공된 `MapLayerComponent` 문서에는 해당 컴포넌트의 프로퍼티(`IsVisible`, `LayerSortOrder`)와 상속된 메서드만 정의되어 있습니다. 문서에 명시된 API를 사용하여 현재 엔티티에 연결된 `MapLayerComponent`의 정보를 출력하고 가시성을 확인하는 스크립트는 다음과 같습니다. 참고로, "가장 작은 값을 찾기" 위한 반복 처리나 다른 레이어와의 비교 로직은 `MapLayerComponent` 문서에 제공된 API가 아니므로, 요청하신 대로 **현재 엔티티의** `LayerSortOrde [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=2 verbosity=2 [judge_reason] | 문서에 명시된 API와 mLua 규칙을 정확히 준수하여 요청된 로그 출력 및 가시성 확인 스크립트를 작성했고, 문서에 없는 반복 로직은 제외하여 정확성을 유지했습니다. [source_doc] | 맵의 레이어별 정보를 관리합니다. # Properties - **boolean IsVisible [ReadOnly] [HideFromInspector]** 레이어의 렌더링 여부를 나타냅니다. false일 경우 메이커 씬에서 보이지 않습니다. - **int32 LayerSortOrder [ReadOnly]** 레이어의 우선순위 순서입니다. 값이 작을수록 하위 레이어로, 뒤에 그려집니다. - **boolean Locked [ReadOnly] [HideFromInspector]** 레이어가 잠겨 있는지를 나타냅니다. 잠겨
[task] | single_turn [pass] | ✅ 통과 [title] | TouchReceiveComponent [question] | 짧게 탭한 경우에도 TouchReleaseEvent가 발생하지 않는 이유는 무엇인가요? [answer] | `TouchReleaseEvent`는 엔티티를 터치를 **뗐을 때** 발생하는 이벤트이지만, 참고 문서에 명시된 대로 **짧게 터치하면 발생하지 않습니다.** 이는 `TouchHoldEvent`와 동일한 조건이며, 단순히 터치 입력이 끝났다는 사실만으로는 이 이벤트가 트리거되지 않습니다. 즉, 시스템이 '짧은 터치(탭)'를 감지할 경우 `TouchReleaseEvent`를 무시하도록 설계되어 있습니다. [followup] | [followup_answer] | [scores] | helpfulness=3 correctness=4 coherence=4 complexity=2 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] | DirectionSynchronizerComponent [question] | DirectionSynchronizerComponent를 사용할 때 ChangedLookAtEvent가 발생하는 조건이 무엇인지, 그리고 이 이벤트가 발생하면 자식 엔티티의 방향이 즉시 변경되는지 확인하고 싶습니다. [answer] | 제공된 참고 문서에 따르면, `DirectionSynchronizerComponent`가 동작하는 원리는 다음과 같습니다. 1. **ChangedLookAtEvent 발생 조건**: 문서에는 `ChangedLookAtEvent`가 발생하는 구체적인 내부 조건이나 트리거(예: 플레이어의 회전 입력, 특정 메서드 호출 등)에 대한 상세한 설명이 포함되어 있지 않습니다. 다만, **"부모 엔티티에서 ChangedLookAtEvent가 발생할 경우"** 이라는 표현으로, 이 이벤트가 부모 엔티티의 방향 변경과 관련되어 발생한다는 [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=3 verbosity=2 [judge_reason] | 참고 문서의 제한된 정보 범위 내에서 ChangedLookAtEvent 발생 조건이 미상이라는 점과 이벤트 발생 시 방향이 변경된다는 인과관계를 정확히 설명했으며, 문서의 예제 코드를 충실히 인용하여 질문자의 의도에 부합하는 답변을 제공했습니다. [source_doc] | 부모 엔티티의 방향을 따라갑니다. 부모 엔티티에서 ChangedLookAtEvent가 발생할 경우 현재 엔티티의 방향도 변경됩니다. # Properties ##### inherited from Component: - **boolean Enable [Sync]** 컴포넌트 활성화 여부를 확인합니다. - **boolean EnableInHierarchy [ReadOnly] [HideFromInspector]** 계층 구조상에서 이 컴포넌트가 Enable 상태인지를 반환합니다. Enable이 true일지라도 엔티티의 Enab
[task] | single_turn [pass] | ✅ 통과 [title] | TouchReceiveComponent [question] | RelayEventToBehind가 true로 설정되어 있을 때, 터치 이벤트는 어떤 순서로 전달되나요? [answer] | `RelayEventToBehind`가 `true`로 설정되어 있을 때, 해당 엔티티의 터치 이벤트가 발생한 후 렌더링 순서상 뒤에 위치한 `TouchReceiveComponent`가 있는 엔티티에도 터치 이벤트가 전달됩니다. 즉, 앞선 엔티티의 터치 이벤트 처리와 동시에(또는 그 직후) 뒤에 있는 엔티티의 터치 이벤트 핸들러도 호출됩니다. 이 프로퍼티를 `false`로 설정하면, 앞에 있는 엔티티가 터치를 받아 처리한 경우 뒤에 있는 엔티티로는 터치 이벤트가 전달되지 않습니다. [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=2 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] | DamageSkinSettingComponent [question] | LitMode 속성이 기본값인 경우 대미지 스킨이 주변 조명에 영향을 받아 어둡게 보일 수 있는 문제가 발생할 수 있나요? [answer] | 제공된 문서에는 `LitMode` 속성이 "머티리얼 또는 오브젝트가 광원의 영향을 받을지 여부를 결정하는 렌더링 방식을 선택합니다"라고만 정의되어 있습니다. 문서에는 `LitMode`의 구체적인 열거형 값(예: Lit, Unlit 등)이 나열되어 있지 않으며, **기본값이 무엇인지**에 대한 정보도 포함되어 있지 않습니다. 또한, 특정 기본값 설정 시 대미지 스킨이 어둡게 보이는 현상이 실제로 발생하는지에 대한 기술적 설명이나 경고 사항 역시 문서에 존재하지 않습니다. 따라서 주어진 문서의 정보만으로는 `LitMode`의 기본값 [followup] | [followup_answer] | [scores] | helpfulness=3 correctness=4 coherence=4 complexity=2 verbosity=2 [judge_reason] | 문서에 없는 기본값이나 렌더링 문제를 지어내지 않고, 문서에 명시된 정의만 근거로 답변하여 정확도와 일관성이 높으며, 질문자의 의도를 파악하여 정보 부족을 명확히 설명했습니다. [source_doc] | 공격 시 재생할 대미지 스킨의 형식을 설정합니다. 피격 엔티티는 DamageSkinSpawnerComponent가 있어야 합니다. # Properties - **float Alpha [Sync]** 대미지 스킨의 Alpha 값을 설정합니다. - **DataRef DamageSkinId [Sync]** 대미지 스킨의 종류를 설정합니다. - **Vector2 DamageSkinScale [Sync]** 대미지 스킨의 크기를 설정합니다. - **float DelayPerAttack [Sync]** 대미지 분할 재생 간격
[task] | single_turn [pass] | ✅ 통과 [title] | TouchReceiveComponent [question] | TouchEvent 핸들러에서 _EntityService:GetEntityByPath를 사용해 UI를 표시하는 예제 코드는 어떻게 작성하나요? [answer] | TouchEvent 핸들러에서 `_EntityService:GetEntityByPath`를 사용해 UI를 표시하는 예제 코드는 다음과 같습니다. ```lua Event Handler: [self] HandleTouchEvent (TouchEvent event) { -- Parameters -------------------------------------------------------- local uiPath = "/ui/DefaultGroup/ExampleUI" local targetUI = _EntityServi [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] | CameraComponent [question] | 4초 뒤 줌을 300%로 바꾸는 예제에서 `SetZoomTo`의 두 번째 인자 2는 무엇을 의미하나요? [answer] | 제공된 참고 문서에는 `SetZoomTo` 메서드의 두 번째 인자 `2`가 무엇을 의미하는지에 대한 설명이 포함되어 있지 않습니다. 따라서 해당 인자의 의미를 확인할 수 없습니다. [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] | code [pass] | ❌ 탈락 [title] | DirectionSynchronizerComponent [question] | 플레이어 엔티티의 DirectionSynchronizerComponent가 활성화되어 있는지 확인하고, 비활성 상태라면 활성화하도록 OnBeginPlay에서 처리하는 스크립트를 작성해줘. [answer] | 제공된 참고 문서에 따르면 `DirectionSynchronizerComponent`는 `boolean Enable [Sync]` 프로퍼티를 가지고 있으며, 이는 "컴포넌트 활성화 여부를 확인"하는 용도로 설명되어 있습니다. 그러나 문서에는 이 `Enable` 프로퍼티를 직접 설정(쓰기)하거나, `OnBeginPlay`에서 해당 컴포넌트를 가져와서 활성화 상태를 변경하는 구체적인 API나 예제가 포함되어 있지 않습니다. 참고 문서의 예제는 `DirectionSynchronizerComponent`를 **추가(Add)** 하는 방법 [followup] | [followup_answer] | [scores] | helpfulness=1 correctness=4 coherence=4 complexity=2 verbosity=2 [judge_reason] | 문서에 없는 GetComponent을 지어내지 않고 문서 범위 내에서 답변했으나, mLua 규칙에 명시된 self.Entity.TransformComponent 패턴을 무시하고 컴포넌트 접근 방법을 모른다고 하여 실제 질문(활성화 확인 및 처리)에 대한 도움을 주지 못함 [source_doc] | 부모 엔티티의 방향을 따라갑니다. 부모 엔티티에서 ChangedLookAtEvent가 발생할 경우 현재 엔티티의 방향도 변경됩니다. # Properties ##### inherited from Component: - **boolean Enable [Sync]** 컴포넌트 활성화 여부를 확인합니다. - **boolean EnableInHierarchy [ReadOnly] [HideFromInspector]** 계층 구조상에서 이 컴포넌트가 Enable 상태인지를 반환합니다. Enable이 true일지라도 엔티티의 Enab
[task] | code [pass] | ❌ 탈락 [title] | PortalComponent [question] | OnBeginPlay에서 self.Entity.PortalComponent.PortalEntityRef가 nil인지 확인하고, 만약 nil이면 log()로 "목적지 포탈이 설정되지 않았습니다"를 출력하고, 설정되어 있다면 해당 EntityRef를 가진 엔티티의 TransformComponent.Position을 log()로 출력하는 스크립트를 작성해줘 [answer] | `OnBeginPlay`에서 `self.Entity.PortalComponent.PortalEntityRef`가 nil인지 확인하고, nil이면 오류 메시지를 출력하며, 값이 있으면 해당 포탈 엔티티의 좌표를 출력하는 스크립트입니다. 참고: `EntityRef`에서 실제 `Entity` 객체를 가져오는 API는 제공된 문서에 명시되어 있지 않습니다. 따라서 `EntityRef` 자체를 직접 변환하는 대신, `EntityRef`가 가리키는 엔티티의 `TransformComponent.Position`을 얻기 위해서는 해당 엔티티에 [followup] | [followup_answer] | [scores] | helpfulness=1 correctness=3 coherence=3 complexity=3 verbosity=4 [judge_reason] | EntityRef를 Entity로 변환하는 API가 존재하지 않는다는 판단은 적절하나, 질문에서 요구한 위치 출력 로직을 구현하지 못하고 대안만 제시하여 도움이 적으며, 반복적인 설명으로 장황함. [source_doc] | 포탈 기능을 제공합니다. 포탈의 충돌 속성을 설정하고 목적지 포탈을 연결할 수 있습니다. # Properties - **Vector2 BoxOffset [Sync]** 엔티티를 기준으로 충돌체 직사각형의 중심점 위치를 설정합니다. - **Vector2 BoxSize [Sync]** 충돌체 직사각형의 너비와 높이를 지정합니다. - **CollisionGroup CollisionGroup [ReadOnly] [HideFromInspector]** Portal의 충돌 그룹입니다. - **boolean IsLegacy [Re
[task] | single_turn [pass] | ✅ 통과 [title] | TouchReceiveComponent [question] | AutoFitOnce와 AutoFitToSize 프로퍼티의 동작 차이가 무엇인지 궁금합니다. [answer] | `AutoFitOnce`와 `AutoFitToSize` 프로퍼티의 주요 동작 차이는 **스케일 변경에 대한 반응 주기**에 있습니다. * **AutoFitOnce**: `true`로 설정하면 `AvatarRendererComponent` 또는 `SpriteRendererComponent`의 Scale 값에 맞춰 `TouchArea` 및 `Offset` 값을 **최초 한 번만** 자동으로 변경합니다. 이후 렌더러의 Scale 값이 변경되어도 터치 영역은 다시 조정되지 않습니다. * **AutoFitToSize**: `true [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=2 verbosity=2 [judge_reason] | 참고 문서의 AutoFitOnce와 AutoFitToSize 정의 및 비추천 프로퍼티 안내를 정확하고 명확하게 설명했습니다. [source_doc] | 엔티티를 터치할 수 있게 되며 터치 시 동작을 제어할 수 있습니다. # Properties - **boolean AutoFitOnce [MakerOnly]** true로 설정하면 AvatarRendererComponent 또는 SpriteRendererComponent의 Scale 값에 맞추어 TouchArea 및 Offset 값을 자동으로 변경됩니다. 최초 한 번만 변경합니다. - **boolean AutoFitToSize** true로 설정하면 AvatarRendererComponent 또는 SpriteRenderer
[task] | single_turn [pass] | ✅ 통과 [title] | DamageSkinSettingComponent [question] | 대미지 스킨이 화면에 겹쳐서 보이는 현상을 방지하기 위해 DelayPerAttack 값을 어떻게 설정해야 하며 AttackComponent와 어떤 관계가 있나요? [answer] | 대미지 스킨이 화면에 겹쳐서 보이는 현상을 방지하기 위해서는 `DamageSkinSettingComponent`의 `DelayPerAttack` 프로퍼티를 적절히 설정해야 합니다. `DelayPerAttack`은 대미지 분할 재생 간격을 초 단위로 지정하는 값으로, 공격이 여러 번 분할되어 적용될 때 각 대미지 스킨이 재생되는 시간 간격을 제어합니다. 이 값은 `AttackComponent`의 `GetDisplayHitCount(attackInfo)` 함수와 밀접한 관련이 있습니다. `GetDisplayHitCount(attack [followup] | [followup_answer] | [scores] | helpfulness=3 correctness=3 coherence=4 complexity=2 verbosity=2 [judge_reason] | 문서의 DelayPerAttack 정의와 AttackComponent 연관성을 잘 설명했으나, '겹침 방지'라는 질문의 인과 관계를 과장하여 서술했고 GetDisplayHitCount의 구체적인 동작(표시 횟수 반환)은 문서에 명시되지 않은 추론으로 볼 여지가 있어 정밀도가 다소 떨어집니다. [source_doc] | 공격 시 재생할 대미지 스킨의 형식을 설정합니다. 피격 엔티티는 DamageSkinSpawnerComponent가 있어야 합니다. # Properties - **float Alpha [Sync]** 대미지 스킨의 Alpha 값을 설정합니다. - **DataRef DamageSkinId [Sync]** 대미지 스킨의 종류를 설정합니다. - **Vector2 DamageSkinScale [Sync]** 대미지 스킨의 크기를 설정합니다. - **float DelayPerAttack [Sync]** 대미지 분할 재생 간격
[task] | single_turn [pass] | ❌ 탈락 [title] | CameraComponent [question] | `TimerService`로 지연 처리를 하는 대신 `wait()` 함수를 사용하여 줌을 변경하면 어떤 차이가 생기나요? [answer] | 제공된 참고 문서에는 `wait()` 함수의 정의, 동작 방식, 또는 `TimerService`와의 차이점에 대한 정보가 포함되어 있지 않습니다. 따라서 제공된 문서를 근거로 `wait()` 함수를 사용할 경우의 차이점을 설명할 수 없습니다. 문서에 있는 내용으로는 `TimerService:SetTimerOnce`를 사용하여 4초 후 `CameraComponent:SetZoomTo(300, 2)`를 호출하는 방법만 확인됩니다. [followup] | [followup_answer] | [scores] | helpfulness=2 correctness=4 coherence=4 complexity=2 verbosity=2 [judge_reason] | 참고 문서에 wait() 관련 정보가 없어 답변을 거부한 것은 사실에 부합하지만, 시스템 규칙에 명시된 wait() 표준 구문을 활용해 차이점을 설명할 수 있었음에도 이를 무시하여 유용성이 낮음. [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] | CameraComponent [question] | `CameraComponent`를 사용하려면 반드시 서버 스크립트에서만 실행해야 하는 이유와 클라이언트에서 호출 시 발생하는 문제는 무엇인가요? [answer] | 제공된 참고 문서에는 `CameraComponent`가 서버 스크립트에서만 실행되어야 하는 이유나 클라이언트에서 호출 시 발생하는 문제에 대한 설명이 포함되어 있지 않습니다. 문서에는 4초 후 줌 배율을 300%로 설정하는 예제 코드만 있으며, 해당 예제에서 메서드가 `[server only]`로 선언되어 있는 것을 확인할 수 있을 뿐, 그 이유나 클라이언트 실행 시의 문제점에 대한 정보는 없습니다. [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=2 verbosity=2 [judge_reason] | 참고 문서에 해당 정보가 없음을 정확히 인지하고 지어내지 않으며, 예제 코드의 [server only] 태그를 근거로 한 사실적인 답변을 제공했습니다. [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)