[task] | instruction_following [pass] | ✅ 통과 [title] | PlayerControllerComponent [question] | SetActionKey 메서드를 사용하여 키보드 입력을 액션에 연결하는 코드만 출력하고 설명은 주석으로 작성하세요. [answer] | ```lua Method: [client only] void OnBeginPlay () { -- 사전에 정의된 액션("Attack")에 키보드 B키를 연결합니다. self.Entity.PlayerControllerComponent:SetActionKey(KeyboardKey.B, "Attack") -- 사전에 정의된 액션("Jump")에 키보드 N키를 연결합니다. self.Entity.PlayerControllerComponent:SetActionKey(KeyboardKey.N, "Jump") -- 사용자 정의 액션 [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=3 verbosity=2 [judge_reason] | 질문한 코드만 주석과 함께 정확히 제시했으며, 문서와 시스템 규칙에 완전히 부합합니다. [source_doc] | "Jump", "Portal", "Crouch", "Attack", "Sit"와 같이 사전에 정의되어 있는 액션 이름에 키보드 입력을 추가로 연결하고, 사용자 정의 액션 이름을 키보드 입력과 연결하여 로그를 찍는 예제입니다. 키보드 B키로 공격, 키보드 N키로 점프가 가능해지며, 키보드 G키로 사용자 지정 액션 이름이 로그에 출력되는것을 확인할 수 있습니다. ```lua Method: [client only] void OnBeginPlay () { self.Entity.PlayerControllerComponent:Se
[task] | two_turn [pass] | ✅ 통과 [title] | ScrollLayoutGroupComponent [question] | ScrollPositionChangedEvent가 발생하기 위해서는 UI Entity에 어떤 조건이 충족되어야 하나요? [answer] | `ScrollPositionChangedEvent`가 발생하려면 해당 UI Entity에 `ScrollLayoutGroupComponent` 또는 `GridViewComponent` 중 하나 이상이 존재해야 합니다. [followup] | ScrollPositionChangedEvent 핸들러를 작성하여 스크롤 위치가 변경될 때마다 log로 현재 정규화된 위치를 출력하는 예제 코드를 작성해 주세요. [followup_answer] | `ScrollPositionChangedEvent` 핸들러를 사용하여 스크롤 위치가 변경될 때마다 `GetScrollNormalizedPosition()`을 호출하여 현재 정규화된 위치를 로그로 출력하는 예제입니다. ```lua Property: [None] Entity ScrollTarget = nil Method: [client only] void OnBeginPlay() { self.ScrollTarget = self.Entity } Event Handler: [client only] [self] HandleScr [scores] | helpfulness=4 correctness=4 coherence=4 complexity=2 verbosity=2 [judge_reason] | 참고 문서의 이벤트 설명과 정확히 일치하며, 질문의 핵심 조건을 간결하게 답변했습니다. [source_doc] | # Methods - **Vector2 GetScrollNormalizedPosition()** 스크롤바의 정규화된 위치를 반환합니다. - **float GetScrollNormalizedPosition(UITransformAxis axis)** 지정한 방향 스크롤바의 정규화된 위치를 반환합니다. - **void ResetScrollPosition(UITransformAxis axis)** 지정한 축의 스크롤바 위치를 처음 위치로 이동합니다. 스크롤바의 방향에 따라 처음 위치가 다릅니다. - **void SetScrol
[task] | code [pass] | ✅ 통과 [title] | TileMapComponent [question] | 엔티티 "/maps/map01/Player" 이름의 캐릭터가 트리거 영역에 들어오면 타일 맵 색상을 파랑(Color.blue)으로, 나갔다면 흰색(Color.white)으로 변경하는 스크립트를 작성해줘 (TileMapComponent, TriggerEnterEvent, TriggerLeaveEvent 사용) [answer] | 사용자 질문에 따라, 엔티티 이름이 "/maps/map01/Player"인 캐릭터가 트리거 영역에 진입하면 타일 맵 색상을 파란색(`Color.blue`)으로, 이탈하면 흰색(`Color.white`)으로 변경하는 스크립트를 작성합니다. 참고 문서의 `TileMapComponent` 예제 구조와 mLua 스크립트 규칙을 준수하여 `Method` 블록에서 타일 맵 색상을 변경하는 로직을 구현하고, `Event Handler` 블록에서 트리거 진입/이탈 이벤트를 처리합니다. ```lua Method: void SetTileMapCo [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=3 verbosity=2 [judge_reason] | 참고 문서의 API와 구조를 정확히 따르며, 요청된 조건(이름 비교, 색상 변경)을 모두 충족하는 간결하고 정확한 코드를 제공함. [source_doc] | 캐릭터가 엔티티에 출동하면 타일 맵의 색상이 변경됩니다. 충돌 범위를 벗어나면 본래 색상으로 돌아오게 됩니다. ```lua Method: void SetColor (Color color) { local tileMap = _EntityService:GetEntityByPath("/maps/map01/TileMap") tileMap.TileMapComponent.Color = color } Event Handler: [self] HandleTriggerEnterEvent (TriggerEnterEvent event) { --
[task] | single_turn [pass] | ✅ 통과 [title] | PlayerControllerComponent [question] | ActionClimb()의 두 가지 시그니처 중 boolean을 반환하는 버전을 사용해야 하는 구체적인 상황은 언제인가요? [answer] | ActionClimb()의 boolean 반환 버전은 등반 상태 전환이 실제로 성공했는지 실패했는지를 확인하고, 그 결과에 따라 추가적인 로직을 처리해야 하는 상황에서 사용해야 합니다. PlayerControllerComponent의 ActionClimb()는 다음과 같이 두 가지 시그니처를 제공합니다: 1. `void ActionClimb(Vector2 moveOffset, float climbHeight) [ScriptOverridable]`: MoveUp, MoveDown Key 입력 시 동작. 등반 가능한 Entity가 있 [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=3 verbosity=2 [judge_reason] | 참고 문서에 있는 두 시그니처의 차이(반환값 및 파라미터)를 정확히 인용하여, 성공 여부에 따라 로직을 분기해야 하는 구체적인 사용 사례를 논리적으로 제시했습니다. [source_doc] | - **void ActionAttack() [ScriptOverridable]** Attack Key를 입력했을 때 동작입니다. - **void ActionClimb(Vector2 moveOffset, float climbHeight) [ScriptOverridable]** MoveUp, MoveDown Key를 입력했을 때 동작입니다. 사다리나 로프를 오르는 액션을 수행합니다. 지정된 위치 오프셋과 높이를 기준으로 등반 가능한 Entity가 있는지 확인하고, 등반 상태로 전환을 시도합니다. - **boolean Action
[task] | single_turn [pass] | ✅ 통과 [title] | ScrollLayoutGroupComponent [question] | SetScrollPositionByItemIndex 메서드에서 인자로 전달하는 index 값은 자식 UI Entity 의 순서 번호를 의미하는 건가요? [answer] | 네, `SetScrollPositionByItemIndex` 메서드의 인자 `index`는 해당 `ScrollLayoutGroupComponent`가 붙어 있는 Entity의 자식 UI Entity 중 특정 항목의 순서 번호(인덱스)를 의미합니다. 이 메서드를 호출하면 해당 `index`에 해당하는 자식 UI Entity가 화면에 보이도록 스크롤바 위치가 자동으로 이동합니다. 참고로, `ScrollLayoutGroupComponent`는 자식 Entity를 순서대로 배치하는 레이아웃 컴포넌트이므로, 자식 Entity가 생성되거나 [followup] | [followup_answer] | [scores] | helpfulness=3 correctness=3 coherence=4 complexity=2 verbosity=2 [judge_reason] | index가 자식 UI Entity의 순서를 의미한다는 핵심은 정확하나, 0부터 시작한다는 명시적 근거가 문서에 없어 추론이 섞였으며, 레이아웃 배치 순서와 인덱스의 직접적 연관성에 대한 설명은 문서에 없는 추측성 정보이다. [source_doc] | # Methods - **Vector2 GetScrollNormalizedPosition()** 스크롤바의 정규화된 위치를 반환합니다. - **float GetScrollNormalizedPosition(UITransformAxis axis)** 지정한 방향 스크롤바의 정규화된 위치를 반환합니다. - **void ResetScrollPosition(UITransformAxis axis)** 지정한 축의 스크롤바 위치를 처음 위치로 이동합니다. 스크롤바의 방향에 따라 처음 위치가 다릅니다. - **void SetScrol
[task] | two_turn [pass] | ✅ 통과 [title] | TweenFloatingComponent [question] | SyncType 프로퍼티의 기본값(Default)과 client only 설정이 트윈 제어 함수(Play, Pause, Stop 등)의 실행 공간과 서버-클라이언트 동기화에 어떤 차이를 만드는지 설명해 주세요. [answer] | `TweenFloatingComponent`를 포함한 트윈 계열 컴포넌트의 `SyncType` 프로퍼티는 트윈 제어 함수(`Play`, `Pause`, `Stop`, `Destroy`, `RestartFromCurrentPosition`)의 실행 주체와 서버-클라이언트 동기화 방식을 결정합니다. **1. 기본값 (Default) 설정 시** * **동기화 방식:** 서버 상태가 클라이언트로 항상 동기화됩니다. * **제어 방식:** 서버와 클라이언트 양쪽에서 함수를 호출하여 트윈을 제어할 수 있습니다. 하지만 최종적인 상태 [followup] | 서버 스크립트에서 트윈을 제어하되 클라이언트에서는 제어하지 못하도록 SyncType을 설정하고, 해당 트윈을 재생·일시정지하는 mLua 코드 예제를 작성해 주세요. [followup_answer] | 참고 문서에 따르면 `SyncType` 프로퍼티는 `[ReadOnly]` 속성을 가지고 있어 스크립트 코드에서 직접 값을 설정할 수 없습니다. 또한 문서에는 `SyncType`을 서버 전용으로 제한하여 "클라이언트에서는 제어하지 못하게" 하는 설정 옵션이 명시되어 있지 않으며, 제공된 정보만으로는 이러한 설정을 스크립트로 구현하는 방법을 알 수 없습니다. 문서에 명시된 `SyncType` 동작은 다음과 같습니다: 1. **기본값 (Default):** 서버와 클라이언트에서 함수로 트윈을 제어할 수 있으며, 서버 상태는 클라이언트 [scores] | helpfulness=4 correctness=3 coherence=4 complexity=4 verbosity=2 [judge_reason] | SyncType의 동작 원리를 문서에 충실히 설명했으나, 코드 예시에서 EaseType.Linear 상수 값을 지어내어 정밀도가 약간 떨어집니다. [source_doc] | Entity가 위 아래로 왕복 이동합니다. # Properties - **float Amplitude [Sync]** 최저점에서 최고점까지의 거리를 설정합니다. 값이 1인 경우 시작 위치에서 최고/최저점까지의 거리는 0.5가 됩니다. - **float OneCycleTime [Sync]** 최저점에서 최고점까지 이동하는데 걸리는 시간을 설정합니다. 초 단위입니다. 예를 들어, 값이 1인 경우 한 이동 주기는 2초가 소요됩니다. - **EaseType TweenType [Sync]** 움직임 효과를 설정합니다. ###
[task] | two_turn [pass] | ✅ 통과 [title] | TweenFloatingComponent [question] | TweenFloatingComponent의 Amplitude와 OneCycleTime이 각각 어떤 의미를 가지며, 이동 주기에 어떻게 영향을 미치는지 설명해 주세요. [answer] | `TweenFloatingComponent`의 `Amplitude`와 `OneCycleTime`은 엔티티가 위아래로 왕복 이동할 때의 거리와 시간을 제어하는 핵심 프로퍼티입니다. **1. Amplitude (진폭)** * **의미:** 최저점에서 최고점까지의 총 이동 거리를 설정합니다. * **영향:** 값이 `1`인 경우, 시작 위치(중간 지점)에서 최고점까지의 거리는 `0.5`, 최저점까지의 거리도 `0.5`가 됩니다. 즉, `Amplitude` 값은 전체 왕복 범위의 높이를 결정합니다. **2. OneCycleTim [followup] | Amplitude가 1이고 OneCycleTime이 2일 때, 엔티티가 최저점에서 최고점으로 이동하는 데 걸리는 실제 시간과 이동 거리는 어떻게 계산되는지 구체적인 예시를 보여주세요. [followup_answer] | `Amplitude`가 1이고 `OneCycleTime`이 2일 때의 구체적인 계산은 다음과 같습니다. ### 1. 이동 거리 계산 * **Amplitude (진폭):** 1 * **의미:** `Amplitude`는 **최저점에서 최고점까지의 총 거리**입니다. * **최저점에서 최고점까지 이동 거리:** **1** * 참고: 시작 위치(중간 지점)에서 최고점까지의 거리는 0.5, 시작 위치에서 최저점까지의 거리는 0.5가 됩니다. 하지만 최저점에서 출발해 최고점에 도달하는 이동량은 총 진폭인 1입니다. # [scores] | helpfulness=4 correctness=4 coherence=4 complexity=2 verbosity=2 [judge_reason] | Amplitude와 OneCycleTime의 의미 및 주기 계산 방식이 문서와 정확히 일치하며, 제공된 mLua 코드 예시도 규칙에 맞게 작성되어 유용합니다. [source_doc] | Entity가 위 아래로 왕복 이동합니다. # Properties - **float Amplitude [Sync]** 최저점에서 최고점까지의 거리를 설정합니다. 값이 1인 경우 시작 위치에서 최고/최저점까지의 거리는 0.5가 됩니다. - **float OneCycleTime [Sync]** 최저점에서 최고점까지 이동하는데 걸리는 시간을 설정합니다. 초 단위입니다. 예를 들어, 값이 1인 경우 한 이동 주기는 2초가 소요됩니다. - **EaseType TweenType [Sync]** 움직임 효과를 설정합니다. ###
[task] | single_turn [pass] | ✅ 통과 [title] | PlayerControllerComponent [question] | UseCustomScript를 true로 설정하면 PlayerControllerComponent의 어떤 기능들이 비활성화되는지 구체적으로 어떤 부분에서 직접 만든 스크립트로 대체해야 하는지 설명해 주세요. [answer] | 제시된 문서에는 `UseCustomScript` 프로퍼티가 `true`로 설정될 경우 **PlayerControllerComponent의 일부 기능이 비활성화**되며, 직접 만든 스크립트를 사용할 수 있게 된다는 내용만 기재되어 있습니다. 하지만 구체적으로 **어떤 기능들이 비활성화되는지**나 **어떤 부분을 직접 만든 스크립트로 대체해야 하는지**에 대한 상세한 설명은 문서에 포함되어 있지 않습니다. 따라서 이 질문에 대해 정확한 답변을 드릴 수 없습니다. [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=1 verbosity=2 [judge_reason] | 문서에 없는 세부 정보를 지어내지 않고 문서 기반 한계를 명확히 설명하여 정확도와 유용도가 높음 [source_doc] | Player의 조작과 연관된 컴포넌트입니다. 입력과 액션을 연동하고 그 흐름을 제어합니다. # Properties - **boolean AlwaysMovingState [Sync]** 항상 걷기 애니메이션을 재생할지 여부를 결정합니다. - **int32 FixedLookAt [Sync]** 이동 시에 바라보는 방향을 한쪽으로 고정합니다. - **boolean IsUpdateBlocked [ReadOnly] [HideFromInspector]** 플레이어의 입력 처리가 현재 차단되었는지 여부를 나타냅니다. 맵 이동과 같
[task] | code [pass] | ✅ 통과 [title] | ScrollLayoutGroupComponent [question] | OnBeginPlay 시 ScrollLayoutGroupComponent 의 SetScrollNormalizedPosition 메서드를 사용하여 Y 축 스크롤 위치를 0.5 로 초기화하는 스크립트를 작성해줘 [answer] | `ScrollLayoutGroupComponent`의 `SetScrollNormalizedPosition` 메서드를 사용하여 Y 축 스크롤 위치를 0.5로 초기화하는 스크립트입니다. 참고로 문서에 `UITransformAxis` 상수의 구체적인 이름(예: `UITransformAxis.Y`)이 명시되어 있지 않으므로, 일반적인 mLua/UI 패턴을 따라 `UITransformAxis.Y`를 사용하는 형태로 작성했습니다. ```lua Property: [None] boolean Initialized = false Method: [followup] | [followup_answer] | [scores] | helpfulness=3 correctness=3 coherence=4 complexity=2 verbosity=2 [judge_reason] | 요구된 기능을 수행하지만, mLua 규칙상 메서드 호출 시 콜론(:) 사용이 아닌 마침표(.) 또는 명시적 self 사용이 일반적이며, UITransformAxis.Y 상수 존재 여부에 대한 문서 기반 확신이 부족함 [source_doc] | # Methods - **Vector2 GetScrollNormalizedPosition()** 스크롤바의 정규화된 위치를 반환합니다. - **float GetScrollNormalizedPosition(UITransformAxis axis)** 지정한 방향 스크롤바의 정규화된 위치를 반환합니다. - **void ResetScrollPosition(UITransformAxis axis)** 지정한 축의 스크롤바 위치를 처음 위치로 이동합니다. 스크롤바의 방향에 따라 처음 위치가 다릅니다. - **void SetScrol
[task] | code [pass] | ✅ 통과 [title] | TileMapComponent [question] | _EntityService:GetEntityByPath("/maps/map01/TileMap")으로 엔티티를 가져와서, 특정 이름의 캐릭터가 트리거에 진입하면 색상을 초록(Color.green)으로, 벗어날 때 흰색(Color.white)으로 되돌리는 스크립트를 작성해줘 (TileMapComponent, TriggerEnterEvent, TriggerLeaveEvent 사용) [answer] | 사용자가 요청한 기능은 `TileMapComponent`의 색상을 변경하는 것입니다. 제공된 참고 문서의 예제를 바탕으로, 특정 이름의 캐릭터가 트리거 영역에 진입하면 타일 맵의 색상을 초록색(`Color.green`)으로 변경하고, 영역을 벗어날 때 흰색(`Color.white`)으로 복원하는 스크립트를 작성합니다. ```lua Method: void SetColor (Color color) { local tileMap = _EntityService:GetEntityByPath("/maps/map01/TileMap") til [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=3 verbosity=2 [judge_reason] | 참고 문서의 API와 문법을 정확히 따르며, 사용자가 요청한 초록색/흰색 색상 변경 로직을 명확하고 일관성 있게 구현했습니다. [source_doc] | 캐릭터가 엔티티에 출동하면 타일 맵의 색상이 변경됩니다. 충돌 범위를 벗어나면 본래 색상으로 돌아오게 됩니다. ```lua Method: void SetColor (Color color) { local tileMap = _EntityService:GetEntityByPath("/maps/map01/TileMap") tileMap.TileMapComponent.Color = color } Event Handler: [self] HandleTriggerEnterEvent (TriggerEnterEvent event) { --
[task] | single_turn [pass] | ✅ 통과 [title] | PlayerControllerComponent [question] | AlwaysMovingState와 FixedLookAt 속성을 동시에 사용했을 때 캐릭터의 이동 애니메이션과 시선이 어떻게 상호작용하는지 궁금합니다. [answer] | 제공된 문서에는 `AlwaysMovingState`와 `FixedLookAt` 속성에 대한 개별적인 정의만 존재하며, 두 속성을 **동시에** 사용했을 때의 구체적인 상호작용이나 우선순위, 충돌 시 동작 방식에 대한 설명은 포함되어 있지 않습니다. 문서에서 확인할 수 있는 내용만으로는 두 속성의 동시 사용 시 시나리오를 정확히 예측하거나 설명할 수 없습니다. 참고로 문서에 명시된 두 속성의 정의는 다음과 같습니다: * **AlwaysMovingState**: 항상 걷기 애니메이션을 재생할지 여부를 결정합니다. * **Fi [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=2 verbosity=2 [judge_reason] | 문서에 없는 상호작용 정보를 지어내지 않고, 문서에 명시된 개별 정의만 정확히 인용하여 한계를 명확히 설명했습니다. [source_doc] | Player의 조작과 연관된 컴포넌트입니다. 입력과 액션을 연동하고 그 흐름을 제어합니다. # Properties - **boolean AlwaysMovingState [Sync]** 항상 걷기 애니메이션을 재생할지 여부를 결정합니다. - **int32 FixedLookAt [Sync]** 이동 시에 바라보는 방향을 한쪽으로 고정합니다. - **boolean IsUpdateBlocked [ReadOnly] [HideFromInspector]** 플레이어의 입력 처리가 현재 차단되었는지 여부를 나타냅니다. 맵 이동과 같
[task] | instruction_following [pass] | ✅ 통과 [title] | CostumeManagerComponent [question] | 예제 코드에서 서버 실행 공간에서 조기 반환하는 로직과 클라이언트에서 수행되는 로직을 구분하여 3문장 이내로 [answer] | 예제 코드는 `self:IsServer() == true` 조건이 참이면 즉시 `return`하여 서버 실행 공간에서는 해당 로직을 수행하지 않습니다. 반대로 클라이언트 실행 공간에서는 `TriggerBodyEntity`의 `CostumeManagerComponent`에 접근하여 헤어를 변경하고, `log`로 변경된 RUID를 출력합니다. [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=2 verbosity=2 [judge_reason] | 참고 문서의 예제 코드를 정확히 해석하여 서버/클라이언트 로직 구분을 2문장으로 명확히 설명했습니다. [source_doc] | 다음 예제는 플레이어와 다른 Entity가 닿았을 때 플레이어의 헤어를 변경하고 RUID를 출력합니다. ```lua Event Handler: [self] HandleTriggerEnterEvent (TriggerEnterEvent event) { --Parameters local TriggerBodyEntity = event.TriggerBodyEntity -------------------------------------------------------- if self:IsServer() == true then
[task] | single_turn [pass] | ✅ 통과 [title] | PlayerControllerComponent [question] | ActionAttack() 같은 메서드가 [ScriptOverridable] 태그를 가진 것과 그렇지 않은 것의 차이점이 무엇인가요? [answer] | `[ScriptOverridable]` 태그의 유무는 스크립트에서 해당 메서드를 오버라이드(재정의)할 수 있는지 여부에 따라 결정됩니다. 1. **`[ScriptOverridable]` 태그가 있는 경우 (예: `void ActionAttack()`)** * 스크립트 작성자가 이 메서드를 **오버라이드(재정의)** 하여 기본 동작을 변경하거나 추가 로직을 구현할 수 있습니다. * 즉, `override void ActionAttack()` 형태로 작성하여 Attack 키가 눌렸을 때 실행되는 기본 동작을 완 [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=3 verbosity=2 [judge_reason] | 참고 문서와 mLua 규칙에 근거하여 [ScriptOverridable] 태그의 의미와 실제 메서드 목록을 정확히 구분하여 설명하고 있으며, 지어낸 API나 오류가 없습니다. [source_doc] | - **void ActionAttack() [ScriptOverridable]** Attack Key를 입력했을 때 동작입니다. - **void ActionClimb(Vector2 moveOffset, float climbHeight) [ScriptOverridable]** MoveUp, MoveDown Key를 입력했을 때 동작입니다. 사다리나 로프를 오르는 액션을 수행합니다. 지정된 위치 오프셋과 높이를 기준으로 등반 가능한 Entity가 있는지 확인하고, 등반 상태로 전환을 시도합니다. - **boolean Action
[task] | single_turn [pass] | ✅ 통과 [title] | PlayerControllerComponent [question] | IsUpdateBlocked가 true로 설정될 때 PlayerControllerComponent의 다른 입력 처리 메서드들은 어떤 식으로 차단되는지, 그리고 이 상태를 직접 해제하는 방법이 있는지 알고 싶습니다. [answer] | `IsUpdateBlocked` 프로퍼티는 **읽기 전용(ReadOnly)** 이며, 맵 이동과 같이 일시적으로 플레이어의 조작을 막아야 할 때 시스템이 자동으로 `true`로 설정되는 상태입니다. 문서에 따르면, `IsUpdateBlocked`가 `true`일 때 PlayerControllerComponent의 다른 입력 처리 메서드들이 구체적으로 어떤 식으로 차단되는지(내부 구현 로직)에 대한 설명은 제공되지 않습니다. 또한, 이 상태를 직접 해제하는 방법이나 `IsUpdateBlocked`를 직접 수정할 수 있는 API는 문 [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=3 verbosity=2 [judge_reason] | 참고 문서와 시스템 규칙에 근거하여 읽기 전용 속성의 특성과 문서 미기재 사항을 정확하고 간결하게 답변했습니다. [source_doc] | Player의 조작과 연관된 컴포넌트입니다. 입력과 액션을 연동하고 그 흐름을 제어합니다. # Properties - **boolean AlwaysMovingState [Sync]** 항상 걷기 애니메이션을 재생할지 여부를 결정합니다. - **int32 FixedLookAt [Sync]** 이동 시에 바라보는 방향을 한쪽으로 고정합니다. - **boolean IsUpdateBlocked [ReadOnly] [HideFromInspector]** 플레이어의 입력 처리가 현재 차단되었는지 여부를 나타냅니다. 맵 이동과 같
[task] | two_turn [pass] | ✅ 통과 [title] | ScrollLayoutGroupComponent [question] | 특정 인덱스의 자식 UI Entity가 보이도록 스크롤 위치를 이동하려면 어떤 메서드를 사용해야 하나요? [answer] | 특정 인덱스의 자식 UI Entity가 보이도록 스크롤 위치를 이동하려면 `ScrollLayoutGroupComponent`의 `SetScrollPositionByItemIndex(int32 index)` 메서드를 사용합니다. 이 메서드는 지정한 `index`에 해당하는 자식 UI Entity가 화면에 보이는 위치로 스크롤바를 이동시킵니다. 사용 예시는 다음과 같습니다. ```lua Property: [None] Entity ScrollTarget = nil Method: [ClientOnly] void OnBeginPlay [followup] | SetScrollPositionByItemIndex 메서드를 사용하여 인덱스 5번의 아이템으로 스크롤을 이동하는 코드를 작성해 주세요. [followup_answer] | `SetScrollPositionByItemIndex` 메서드를 사용하여 인덱스 5번의 아이템으로 스크롤을 이동하는 코드는 다음과 같습니다. ```lua Property: [None] number TargetIndex = 5 Method: [ClientOnly] void OnBeginPlay() { local scrollLayoutComp = self.Entity.ScrollLayoutGroupComponent if scrollLayoutComp then scrollLayoutComp:SetScrol [scores] | helpfulness=4 correctness=4 coherence=4 complexity=2 verbosity=2 [judge_reason] | 문서에 명시된 SetScrollPositionByItemIndex 메서드와 그 용도를 정확히 설명하고, 표준 구문을 사용하여 예제를 제시했으므로 매우 유용하고 정확합니다. [source_doc] | # Methods - **Vector2 GetScrollNormalizedPosition()** 스크롤바의 정규화된 위치를 반환합니다. - **float GetScrollNormalizedPosition(UITransformAxis axis)** 지정한 방향 스크롤바의 정규화된 위치를 반환합니다. - **void ResetScrollPosition(UITransformAxis axis)** 지정한 축의 스크롤바 위치를 처음 위치로 이동합니다. 스크롤바의 방향에 따라 처음 위치가 다릅니다. - **void SetScrol
[task] | instruction_following [pass] | ✅ 통과 [title] | CostumeManagerComponent [question] | HandleTriggerEnterEvent 핸들러에서 헤어 변경 후 RUID를 출력하는 코드만 출력하고 설명은 주석으로 [answer] | ```lua Event Handler: [self] HandleTriggerEnterEvent (TriggerEnterEvent event) { -- Parameters local TriggerBodyEntity = event.TriggerBodyEntity -- 서버에서는 실행하지 않음 if self:IsServer() == true then return end -- 대상 Entity의 CostumeManagerComponent 접근 local costumeManager = TriggerBodyEnti [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=2 verbosity=2 [judge_reason] | 참고 문서의 코드를 정확히 재현하고, 요청대로 설명을 주석으로 처리하여 질문에 완벽하게 부응합니다. [source_doc] | 다음 예제는 플레이어와 다른 Entity가 닿았을 때 플레이어의 헤어를 변경하고 RUID를 출력합니다. ```lua Event Handler: [self] HandleTriggerEnterEvent (TriggerEnterEvent event) { --Parameters local TriggerBodyEntity = event.TriggerBodyEntity -------------------------------------------------------- if self:IsServer() == true then
[task] | code [pass] | ✅ 통과 [title] | ScrollLayoutGroupComponent [question] | 스크롤 위치가 변경될 때마다 ScrollPositionChangedEvent 를 수신하여 현재 ScrollLayoutGroupComponent 의 GetScrollNormalizedPosition() 값을 로그로 출력하는 스크립트를 작성해줘 [answer] | 스크롤 위치가 변경될 때마다 `ScrollPositionChangedEvent`를 수신하고, 해당 이벤트의 인수를 통해 `ScrollLayoutGroupComponent`에 접근하여 정규화된 스크롤 위치를 로그로 출력하는 스크립트입니다. 참고 문서에 따르면 `ScrollPositionChangedEvent`는 스크롤 위치가 변경될 때 발생하며, UI Entity에 `ScrollLayoutGroupComponent`가 있어야 발생합니다. 이벤트 핸들러에서 `event` 인수를 통해 관련 정보에 접근할 수 있으며, 현재 스크립트가 부 [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=3 coherence=4 complexity=2 verbosity=2 [judge_reason] | 기능은 정확하지만, 문서 예제와 일치하지 않는 'client only' 태그(문서는 ClientOnly)와 'DebugLog' 프로퍼티의 불필요한 추가가 있어 감점함. [source_doc] | # Methods - **Vector2 GetScrollNormalizedPosition()** 스크롤바의 정규화된 위치를 반환합니다. - **float GetScrollNormalizedPosition(UITransformAxis axis)** 지정한 방향 스크롤바의 정규화된 위치를 반환합니다. - **void ResetScrollPosition(UITransformAxis axis)** 지정한 축의 스크롤바 위치를 처음 위치로 이동합니다. 스크롤바의 방향에 따라 처음 위치가 다릅니다. - **void SetScrol
[task] | two_turn [pass] | ✅ 통과 [title] | PlayerControllerComponent [question] | `UseCustomScript` 프로퍼티를 true로 설정하면 PlayerControllerComponent의 어떤 기능들이 비활성화되며, 직접 만든 스크립트로 대체해야 하는 구체적인 입력 처리 흐름은 무엇인가요? [answer] | 제공된 문서에는 `UseCustomScript` 프로퍼티가 `true`로 설정될 때 **PlayerControllerComponent의 어떤 특정 기능들이 비활성화되는지**에 대한 구체적인 목록이 명시되어 있지 않습니다. 문서에는 "PlayerControllerComponent의 일부 기능이 비활성화되고, 직접 만든 스크립트 사용을 사용할 수 있습니다"라고만 서술되어 있을 뿐, 비활성화되는 대상(예: 기본 이동 로직, 카메라 회전, 특정 액션 매핑 등)에 대한 상세 정보가 없습니다. 또한, 직접 만든 스크립트로 대체해야 하는 ** [followup] | `UseCustomScript`가 true인 상태에서 `IsUpdateBlocked`이 true가 되는 맵 이동 중 시나리오에서, 직접 구현한 스크립트가 입력 차단을 처리하기 위해 어떤 조건을 확인해야 하나요? [followup_answer] | 제공된 문서에 따르면, `UseCustomScript`가 `true`인 상태에서 맵 이동 등으로 인해 입력이 차단되는 시나리오를 처리하기 위해 직접 구현한 스크립트는 **`IsUpdateBlocked`** 프로퍼티의 값을 확인해야 합니다. `IsUpdateBlocked`는 `PlayerControllerComponent`의 `[ReadOnly]` 프로퍼티이며, "플레이어의 입력 처리가 현재 차단되었는지 여부를 나타냅니다." 맵 이동과 같이 일시적으로 플레이어의 조작을 막아야 할 때 이 값이 `true`가 됩니다. 따라서 직접 만 [scores] | helpfulness=4 correctness=4 coherence=4 complexity=2 verbosity=2 [judge_reason] | 참고 문서에 없는 구체적인 정보나 API를 지어내지 않고, 문서에 명시된 제한된 정보만 정확히 인용하여 질문의 한계를 명확히 설명했습니다. [source_doc] | Player의 조작과 연관된 컴포넌트입니다. 입력과 액션을 연동하고 그 흐름을 제어합니다. # Properties - **boolean AlwaysMovingState [Sync]** 항상 걷기 애니메이션을 재생할지 여부를 결정합니다. - **int32 FixedLookAt [Sync]** 이동 시에 바라보는 방향을 한쪽으로 고정합니다. - **boolean IsUpdateBlocked [ReadOnly] [HideFromInspector]** 플레이어의 입력 처리가 현재 차단되었는지 여부를 나타냅니다. 맵 이동과 같
[task] | instruction_following [pass] | ✅ 통과 [title] | CostumeManagerComponent [question] | SetEquip 메서드를 호출하여 한손무기를 장착하는 mLua 코드만 출력하고, 장비를 해제하는 경우의 처리는 주석으로만 설명해 주세요. [answer] | ```lua Method: [server only] void EquipOneHandedWeapon() { -- 한손무기 장착: MapleAvatarItemCategory.OneHandedWeapon 카테고리 및 아이템 RUID를 지정 self.Entity.CostumeManagerComponent:SetEquip(MapleAvatarItemCategory.OneHandedWeapon, "000000") -- 장비를 해제하려면 SetEquip의 두 번째 인자로 빈 문자열("")을 입력합니다. } ``` [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=2 verbosity=2 [judge_reason] | 문서의 SetEquip 메서드 시그니처와 OneHandedWeapon 카테고리를 정확히 사용하여 요청된 코드와 주석을 간결하게 제공했습니다. [source_doc] | 플레이어가 장착한 의상, 무기 등의 정보를 관리합니다. # Properties - **string CustomBodyEquip [Sync]** 피부 - **string CustomCapeEquip [Sync]** 망토 - **string CustomCapEquip [Sync]** 모자 - **string CustomCoatEquip [Sync]** 코트 - **string CustomEarAccessoryEquip [Sync]** 귀 장식 - **string CustomEarEquip [Sync]** 귀 -
[task] | code [pass] | ✅ 통과 [title] | PlayerControllerComponent [question] | PlayerControllerComponent의 IsUpdateBlocked 속성을 매 프레임 확인하여 true일 경우 로깅하고, false일 경우 LookDirectionX 값이 양수인지 음수인지에 따라 "왼쪽/오른쪽"을 출력하는 스크립트를 작성해줘 [answer] | PlayerControllerComponent의 `IsUpdateBlocked` 속성은 `[ReadOnly]` 마크가 붙어 있어 읽기 전용입니다. 이 속성을 매 프레임(`OnUpdate`)마다 확인하여 요청하신 로직을 수행하는 스크립트는 다음과 같습니다. ```lua Method: [server only] void OnUpdate(number delta) { local playerController = self.Entity.PlayerControllerComponent if playerController ~ [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=3 verbosity=2 [judge_reason] | 문서의 속성 정보와 mLua 규칙을 정확히 준수하여 요청한 로직을 간결하고 명확하게 구현했습니다. [source_doc] | Player의 조작과 연관된 컴포넌트입니다. 입력과 액션을 연동하고 그 흐름을 제어합니다. # Properties - **boolean AlwaysMovingState [Sync]** 항상 걷기 애니메이션을 재생할지 여부를 결정합니다. - **int32 FixedLookAt [Sync]** 이동 시에 바라보는 방향을 한쪽으로 고정합니다. - **boolean IsUpdateBlocked [ReadOnly] [HideFromInspector]** 플레이어의 입력 처리가 현재 차단되었는지 여부를 나타냅니다. 맵 이동과 같
[task] | code [pass] | ✅ 통과 [title] | PlayerControllerComponent [question] | PlayerControllerComponent의 UseCustomScript 속성이 true일 경우 AlwaysMovingState를 true로 설정하고, false일 경우 FixedLookAt 값을 1로 강제 수정하는 초기화 로직을 OnBeginPlay에서 수행하는 스크립트를 작성해줘 [answer] | `UseCustomScript`는 `[ReadOnly]` 속성이므로 스크립트 내에서 값을 읽기만 할 수 있고, 수정할 수 없습니다. 질문에서 요구한 "true일 경우 `AlwaysMovingState` 설정", "false일 경우 `FixedLookAt` 수정" 로직은 이 읽기 전용 속성을 기준으로 분기하여 처리하면 됩니다. 아래는 `OnBeginPlay`에서 해당 초기화 로직을 수행하는 mLua 스크립트입니다. ```lua Method: [server only] void OnBeginPlay() { local playe [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=2 verbosity=2 [judge_reason] | 문서의 속성 정의(ReadOnly, Sync)를 정확히 이해하고, mLua의 표준 컴포넌트 접근 방식(self.Entity.X)과 생명주기(OnBeginPlay)를 올바르게 적용한 명확한 답변입니다. [source_doc] | Player의 조작과 연관된 컴포넌트입니다. 입력과 액션을 연동하고 그 흐름을 제어합니다. # Properties - **boolean AlwaysMovingState [Sync]** 항상 걷기 애니메이션을 재생할지 여부를 결정합니다. - **int32 FixedLookAt [Sync]** 이동 시에 바라보는 방향을 한쪽으로 고정합니다. - **boolean IsUpdateBlocked [ReadOnly] [HideFromInspector]** 플레이어의 입력 처리가 현재 차단되었는지 여부를 나타냅니다. 맵 이동과 같
[task] | instruction_following [pass] | ✅ 통과 [title] | CostumeManagerComponent [question] | CostumeManagerComponent에서 사용 가능한 모든 [Sync] 속성 이름을 10자 이내의 한국어 설명과 함께 표로 정리해서 나열해 주세요. [answer] | | 속성 이름 | 설명 (10자 이내) | | :--- | :--- | | CustomBodyEquip | 피부 | | CustomCapeEquip | 망토 | | CustomCapEquip | 모자 | | CustomCoatEquip | 코트 | | CustomEarAccessoryEquip | 귀 장식 | | CustomEarEquip | 귀 | | CustomEyeAccessoryEquip | 눈 장식 | | CustomFaceAccessoryEquip | 얼굴 장식 | | CustomFaceEquip | 얼굴 | | Cust [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=2 verbosity=2 [judge_reason] | 문서에 명시된 모든 [Sync] 속성을 누락 없이 정확하게 표로 정리하여 질문에 완벽히 부응했습니다. [source_doc] | 플레이어가 장착한 의상, 무기 등의 정보를 관리합니다. # Properties - **string CustomBodyEquip [Sync]** 피부 - **string CustomCapeEquip [Sync]** 망토 - **string CustomCapEquip [Sync]** 모자 - **string CustomCoatEquip [Sync]** 코트 - **string CustomEarAccessoryEquip [Sync]** 귀 장식 - **string CustomEarEquip [Sync]** 귀 -
[task] | instruction_following [pass] | ✅ 통과 [title] | CostumeManagerComponent [question] | CostumeManagerComponent의 고유 이벤트 2종과 상속된 Component 메서드 2종(IsClient, IsServer)의 실행 공간 제약 사항을 단계별 번호 목록으로 나열해 주세요. [answer] | 제공된 문서에는 `CostumeManagerComponent`의 고유 이벤트(`DestroyMapleCostumeEvent`, `InitMapleCostumeEvent`)와 상속된 Component 메서드(`IsClient()`, `IsServer()`)에 대한 **실행 공간 제약 사항(예: `[server only]`, `[client only]` 등)이 명시되어 있지 않습니다.** 문서에는 다음과 같은 정보만 확인됩니다: 1. `GetEquip` 메서드에 `[ClientOnly]` 태그가 붙어 있어 클라이언트에서만 실행 가능 [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=2 verbosity=2 [judge_reason] | 참고 문서에 해당 항목들의 실행 공간 제약이 명시되어 있지 않음을 정확히 지적하고, 문서에 존재하는 GetEquip의 제약만 예시로 들어 정직하게 답변했습니다. [source_doc] | 플레이어가 장착한 의상, 무기 등의 정보를 관리합니다. # Properties - **string CustomBodyEquip [Sync]** 피부 - **string CustomCapeEquip [Sync]** 망토 - **string CustomCapEquip [Sync]** 모자 - **string CustomCoatEquip [Sync]** 코트 - **string CustomEarAccessoryEquip [Sync]** 귀 장식 - **string CustomEarEquip [Sync]** 귀 -
[task] | code [pass] | ✅ 통과 [title] | CostumeManagerComponent [question] | CustomHairEquip, CustomFaceEquip, CustomGloveEquip 프로퍼티를 초기화하여 기본 의상만 사용하도록 설정하는 스크립트를 작성해줘 [answer] | `CostumeManagerComponent`에서 특정 자리에 장착된 의상을 해제(초기화)하려면 해당 프로퍼티에 빈 문자열(`""`)을 입력하면 됩니다. 문서에 따르면 `SetEquip` 메서드나 프로퍼티 직접 대입을 통해 장비를 변경하거나 해제할 수 있습니다. 요청하신 `CustomHairEquip`, `CustomFaceEquip`, `CustomGloveEquip`를 초기화하는 스크립트입니다. ```lua Method: [server only] void OnBeginPlay() { -- CostumeManagerCo [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=2 verbosity=2 [judge_reason] | 문서와 규칙에 부합하여 요청된 프로퍼티 초기화 스크립트를 정확하고 간결하게 작성했습니다. [source_doc] | 플레이어가 장착한 의상, 무기 등의 정보를 관리합니다. # Properties - **string CustomBodyEquip [Sync]** 피부 - **string CustomCapeEquip [Sync]** 망토 - **string CustomCapEquip [Sync]** 모자 - **string CustomCoatEquip [Sync]** 코트 - **string CustomEarAccessoryEquip [Sync]** 귀 장식 - **string CustomEarEquip [Sync]** 귀 -
[task] | two_turn [pass] | ✅ 통과 [title] | PlayerControllerComponent [question] | PlayerControllerComponent의 주요 프로퍼티 중 `AlwaysMovingState`, `FixedLookAt`, `LookDirectionX`의 역할과 차이는 무엇인가요? [answer] | PlayerControllerComponent의 `AlwaysMovingState`, `FixedLookAt`, `LookDirectionX`는 플레이어의 이동 및 시선(바라보는 방향) 관련 설정과 상태를 관리하지만, 각자의 역할이 명확히 다릅니다. 1. **AlwaysMovingState** (`boolean`, `[Sync]`) - **역할**: 캐릭터가 실제로 이동하고 있지 않더라도 **걷기 애니메이션을 항상 재생**할지 여부를 결정합니다. - **특징**: 애니메이션 연출용 플래그입니다. `true`로 설정하면 [followup] | `FixedLookAt`이 특정 값으로 설정되어 있을 때 `LookDirectionX`의 값은 어떻게 변화하며, `AlwaysMovingState`가 true인 상태에서 이 두 속성을 동시에 제어하는 로직은 어떻게 작성하나요? [followup_answer] | 제공된 참고 문서에 근거하여 답변드립니다. ### 1. `FixedLookAt`이 설정되어 있을 때 `LookDirectionX`의 변화 참고 문서에는 `FixedLookAt`이 특정 값으로 설정되었을 때 `LookDirectionX`가 구체적으로 어떤 수치로 고정되거나 어떻게 계산되는지에 대한 **구체적인 동작 로직이나 공식이 명시되어 있지 않습니다.** 문서에서 확인할 수 있는 정보만으로는: * `FixedLookAt`은 "이동 시에 바라보는 방향을 한쪽으로 고정"하는 속성입니다. * `LookDirectionX`은 [scores] | helpfulness=4 correctness=4 coherence=4 complexity=3 verbosity=2 [judge_reason] | 참고 문서에 명시된 세 프로퍼티의 타입, 속성(Sync), 및 역할을 정확히 설명하고 차이점을 명확히 구분하여 질문에 완벽하게 부합합니다. [source_doc] | Player의 조작과 연관된 컴포넌트입니다. 입력과 액션을 연동하고 그 흐름을 제어합니다. # Properties - **boolean AlwaysMovingState [Sync]** 항상 걷기 애니메이션을 재생할지 여부를 결정합니다. - **int32 FixedLookAt [Sync]** 이동 시에 바라보는 방향을 한쪽으로 고정합니다. - **boolean IsUpdateBlocked [ReadOnly] [HideFromInspector]** 플레이어의 입력 처리가 현재 차단되었는지 여부를 나타냅니다. 맵 이동과 같
[task] | code [pass] | ❌ 탈락 [title] | PlayerControllerComponent [question] | Attack, Jump, Crouch 액션 발생 시 PlayerActionEvent를 수신하여 로그에 액션 이름을 출력하는 스크립트를 작성해줘. [answer] | 제공된 문서에 따르면 `PlayerActionEvent`는 플레이어가 액션을 사용할 때 발생하며, 이벤트 객체를 통해 `ActionName`을 조회할 수 있습니다. 따라서 `HandlePlayerActionEvent` 이벤트 핸들러를 구현하여 이벤트의 `ActionName`을 확인하고, 요청하신 세 가지 액션(`Attack`, `Jump`, `Crouch`)에 해당할 경우 로그를 출력하는 스크립트를 작성할 수 있습니다. ```lua Event Handler: [self] HandlePlayerActionEvent (PlayerAc [followup] | [followup_answer] | [scores] | helpfulness=3 correctness=2 coherence=4 complexity=2 verbosity=2 [judge_reason] | PlayerActionEvent 객체의 ActionName, PlayerEntity 필드 존재 여부가 문서에 명시되지 않아 지어낸 API로 판단되며, 요청된 조건부 로그 출력 로직은 적절합니다. [source_doc] | - **void ActionAttack() [ScriptOverridable]** Attack Key를 입력했을 때 동작입니다. - **void ActionClimb(Vector2 moveOffset, float climbHeight) [ScriptOverridable]** MoveUp, MoveDown Key를 입력했을 때 동작입니다. 사다리나 로프를 오르는 액션을 수행합니다. 지정된 위치 오프셋과 높이를 기준으로 등반 가능한 Entity가 있는지 확인하고, 등반 상태로 전환을 시도합니다. - **boolean Action
[task] | two_turn [pass] | ✅ 통과 [title] | PlayerControllerComponent [question] | `PlayerControllerComponent`의 `SetActionKey`를 사용하여 키보드 입력을 액션에 연결하는 기본 방식이 궁금합니다 [answer] | `PlayerControllerComponent`의 `SetActionKey` 메서드를 사용하면 키보드 키를 특정 액션 이름과 연결할 수 있습니다. 이를 통해 사전에 정의된 액션(예: "Jump", "Attack")에 새로운 키를 추가하거나, 사용자 정의 액션 이름을 만들어 키보드 입력과 연결할 수 있습니다. 기본적인 사용 방식은 다음과 같습니다. 1. **연결 대상 지정**: `self.Entity.PlayerControllerComponent:SetActionKey(키보드 키, "액션 이름")` 형식으로 호출합니다. 2. [followup] | `HandlePlayerActionEvent`에서 `event.ActionName`과 `event.PlayerEntity`를 이용해 특정 액션 발생 시 해당 플레이어의 위치나 상태를 변경하는 코드 예시를 보여주세요. [followup_answer] | 참고 문서에는 `HandlePlayerActionEvent`에서 `event.ActionName`과 `event.PlayerEntity`를 사용하여 특정 액션 발생 시 플레이어의 위치나 상태를 변경하는 코드 예제가 포함되어 있지 않습니다. 문서에 명시된 `HandlePlayerActionEvent`의 용도는 액션 이름(`ActionName`)을 로그로 출력하는 것뿐이며, `PlayerEntity`를 통해 위치나 상태를 조작하는 구체적인 API나 예제는 제공되지 않습니다. 따라서 문서에 근거하여 위치나 상태 변경 코드를 작성할 수 [scores] | helpfulness=4 correctness=4 coherence=4 complexity=2 verbosity=2 [judge_reason] | 참고 문서의 API 명세와 예제 코드를 정확히 인용하여 질문에 충실하고 일관되게 답변했습니다. [source_doc] | "Jump", "Portal", "Crouch", "Attack", "Sit"와 같이 사전에 정의되어 있는 액션 이름에 키보드 입력을 추가로 연결하고, 사용자 정의 액션 이름을 키보드 입력과 연결하여 로그를 찍는 예제입니다. 키보드 B키로 공격, 키보드 N키로 점프가 가능해지며, 키보드 G키로 사용자 지정 액션 이름이 로그에 출력되는것을 확인할 수 있습니다. ```lua Method: [client only] void OnBeginPlay () { self.Entity.PlayerControllerComponent:Se
[task] | instruction_following [pass] | ✅ 통과 [title] | SpriteRendererComponent [question] | SpriteRendererComponent의 OrderInLayer와 SortingLayer 변경 시 발생하는 두 가지 이벤트 이름을 표로 정리하세요. [answer] | SpriteRendererComponent에서 OrderInLayer와 SortingLayer가 변경될 때 발생하는 이벤트는 다음과 같습니다. | 대상 속성 | 이벤트 이름 | | :--- | :--- | | OrderInLayer | OrderInLayerChangedEvent | | SortingLayer | SortingLayerChangedEvent | [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=1 verbosity=2 [judge_reason] | 참고 문서의 정보와 정확히 일치하며 요청한 표 형식으로 간결하고 명확하게 답변했습니다. [source_doc] | - **OrderInLayerChangedEvent** Component의 OrderInLayer가 변경되었을 때 발생하는 이벤트입니다. - **SortingLayerChangedEvent** 컴포넌트의 SortingLayer가 변경되었을 때 발생하는 이벤트입니다. - **SpriteAnimPlayerChangeFrameEvent** 스프라이트 애니메이션의 프레임이 바뀔 때 발생하는 이벤트입니다. - **SpriteAnimPlayerEndEvent** 스프라이트 애니메이션 재생이 끝날 때 발생하는 이벤트입니다. - *
[task] | two_turn [pass] | ✅ 통과 [title] | CostumeManagerComponent [question] | CostumeManagerComponent를 사용하여 플레이어의 외형 아이템을 변경하는 기본 방법은 무엇인가요? [answer] | `CostumeManagerComponent`를 사용하여 플레이어의 외형 아이템(헤어 등)을 변경하는 기본 방법은 다음과 같습니다. 1. **컴포넌트 접근**: 변경할 대상 Entity(예: 플레이어 또는 다른 Entity)의 `CostumeManagerComponent`에 직접 접근합니다. (예: `entity.CostumeManagerComponent`) 2. **아이템 설정**: `SetEquip(category, itemId)` 메서드를 호출하여 카테고리(`MapleAvatarItemCategory`)와 아이템 ID를 [followup] | SetEquip 호출 시 MapleAvatarItemCategory.Hair 외에 다른 아이템 카테고리를 지정할 수 있으며, 실행 공간이 client only인 경우 IsServer() 체크가 필요한 이유와 GetEquip로 변경된 RUID를 확인하는 구체적인 코드 예제를 요청합니다. [followup_answer] | 제공된 참고 문서를 기준으로 질문에 답변드립니다. **1. `MapleAvatarItemCategory.Hair` 외 다른 아이템 카테고리 지정 여부** 참고 문서에는 `MapleAvatarItemCategory.Hair`만 예제로 등장하며, 다른 아이템 카테고리(예: Face, Top, Bottom 등)가 존재하거나 `SetEquip`에 사용 가능한지에 대한 정보는 포함되어 있지 않습니다. 따라서 문서 근거로는 다른 카테고리를 지정할 수 있는지 여부를 확인할 수 없습니다. **2. `IsServer()` 체크가 필요한 이유** [scores] | helpfulness=4 correctness=4 coherence=4 complexity=3 verbosity=2 [judge_reason] | 참고 문서의 예제와 설명을 정확히 반영하여 질문에 대한 핵심 방법론과 코드를 일관되게 제시했습니다. [source_doc] | 다음 예제는 플레이어와 다른 Entity가 닿았을 때 플레이어의 헤어를 변경하고 RUID를 출력합니다. ```lua Event Handler: [self] HandleTriggerEnterEvent (TriggerEnterEvent event) { --Parameters local TriggerBodyEntity = event.TriggerBodyEntity -------------------------------------------------------- if self:IsServer() == true then
[task] | code [pass] | ✅ 통과 [title] | CostumeManagerComponent [question] | InitMapleCostumeEvent 이벤트 핸들러를 구현하여 장비 변경 시 로그를 출력하는 스크립트를 작성해줘 [answer] | `InitMapleCostumeEvent` 이벤트는 CostumeManagerComponent에 장비 착용 상태에 변화가 있을 때 발생합니다. 이 이벤트를 핸들러로 구현하여 이벤트 발생 시 로그를 출력하는 스크립트는 다음과 같습니다. ```lua Event Handler: [self] HandleInitMapleCostumeEvent(InitMapleCostumeEvent event) { log("CostumeManagerComponent: 장비 착용 상태가 변경되었습니다.") } ``` **설명:** 1. `Event [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=3 verbosity=2 [judge_reason] | 문서와 규칙에 기반한 정확한 이벤트 핸들러 구문과 설명으로 질문에 완벽하게 부응합니다. [source_doc] | 플레이어가 장착한 의상, 무기 등의 정보를 관리합니다. # Properties - **string CustomBodyEquip [Sync]** 피부 - **string CustomCapeEquip [Sync]** 망토 - **string CustomCapEquip [Sync]** 모자 - **string CustomCoatEquip [Sync]** 코트 - **string CustomEarAccessoryEquip [Sync]** 귀 장식 - **string CustomEarEquip [Sync]** 귀 -