[task] | code [pass] | ⏳ 미판정 [title] | PrismaticJointComponent [question] | PrismaticJointComponent 의 SetMotorSpeed 메서드와 InputService 의 HandleKeyDownEvent 핸들러를 활용하여, W 키와 S 키 입력 시 각각 상하 방향으로 이동하도록 제어하는 스크립트를 작성해줘 [answer] | PrismaticJointComponent의 `SetMotorSpeed` 메서드와 InputService의 `HandleKeyDownEvent` 핸들러를 활용하여 W 키와 S 키 입력 시 상하 방향으로 이동하도록 제어하는 스크립트는 다음과 같습니다. ```lua Method: [server] void GoUp () { self.Entity.PrismaticJointComponent:SetMotorSpeed(1, 3) } [server] void GoDown () { self.Entity.PrismaticJointCompone [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | ```lua Method: [server] void GoUp () { self.Entity.PrismaticJointComponent:SetMotorSpeed(1, 3) } [server] void GoDown () { self.Entity.PrismaticJointComponent:SetMotorSpeed(1, -3) } Event Handler: [service: InputService] HandleKeyDownEvent (KeyDownEvent event) { --------------- Native Event Sen
[task] | code [pass] | ⏳ 미판정 [title] | PrismaticJointComponent [question] | PrismaticJointComponent의 GetJointsCount, SetLocalAxis, SetCollideConnected 메서드를 사용하여 현재 생성된 조인트의 개수를 확인하고 축 방향 및 연결 충돌 여부를 초기화하는 스크립트를 작성해줘 [answer] | `PrismaticJointComponent`의 `GetJointsCount`, `SetLocalAxis`, `SetCollideConnected` 메서드를 사용하여 현재 생성된 조인트 개수를 확인하고, 모든 조인트의 축 방향 및 연결 충돌 여부를 초기화하는 스크립트는 다음과 같습니다. ```lua Method: [server] void InitializeJoints() { local jointCount = self.Entity.PrismaticJointComponent:GetJointsCount() log [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | PrismaticJoint를 생성, 삭제할 수 있습니다. 연결된 강체가 특정 축 방향으로만 상대적 이동하도록 제한할 수 있습니다. # Properties - **SyncList<PrismaticJoint> Joints [Sync] [ReadOnly]** Joint의 정보를 설정합니다. ##### inherited from Component: - **boolean Enable [Sync]** 컴포넌트 활성화 여부를 확인합니다. - **boolean EnableInHierarchy [ReadOnly] [HideFromIn
[task] | code [pass] | ⏳ 미판정 [title] | PrismaticJointComponent [question] | InputService 의 HandleKeyDownEvent 핸들러에서 KeyboardKey.W 와 KeyboardKey.S 키를 감지하여, 각각 PrismaticJointComponent 의 SetMotorSpeed 메서드를 통해 속도 2와 -2로 이동하는 스크립트를 작성해줘 [answer] | InputService의 `HandleKeyDownEvent` 이벤트 핸들러를 사용하여 `KeyboardKey.W` 키가 눌리면 `PrismaticJointComponent`의 `SetMotorSpeed` 메서드에 속도 2를, `KeyboardKey.S` 키가 눌리면 -2를 전달하는 스크립트는 다음과 같습니다. ```lua Method: [server] void GoUp() { self.Entity.PrismaticJointComponent:SetMotorSpeed(1, 2) } [server] void GoDown() [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | ```lua Method: [server] void GoUp () { self.Entity.PrismaticJointComponent:SetMotorSpeed(1, 3) } [server] void GoDown () { self.Entity.PrismaticJointComponent:SetMotorSpeed(1, -3) } Event Handler: [service: InputService] HandleKeyDownEvent (KeyDownEvent event) { --------------- Native Event Sen
[task] | code [pass] | ⏳ 미판정 [title] | PrismaticJointComponent [question] | PrismaticJointComponent 의 SetMotorSpeed 메서드를 호출할 때 두 번째 인자로 0을 전달하여 모터를 정지시키는 기능을 가진 GoStop 메서드를 정의하고, InputService 의 HandleKeyDownEvent 를 통해 Space 키 입력 시 해당 메서드가 실행되도록 하는 스크립트를 작성해줘 [answer] | PrismaticJointComponent의 `SetMotorSpeed` 메서드는 첫 번째 인자로 조인트 인덱스, 두 번째 인자로 모터 속도를 받습니다. 따라서 두 번째 인자에 `0`을 전달하면 해당 조인트의 모터를 정지시킬 수 있습니다. 요청하신 기능(Space 키 입력 시 모터 정지)을 구현한 mLua 스크립트는 다음과 같습니다. ```lua Method: [server] void GoStop() { self.Entity.PrismaticJointComponent:SetMotorSpeed(1, 0) } Event H [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | ```lua Method: [server] void GoUp () { self.Entity.PrismaticJointComponent:SetMotorSpeed(1, 3) } [server] void GoDown () { self.Entity.PrismaticJointComponent:SetMotorSpeed(1, -3) } Event Handler: [service: InputService] HandleKeyDownEvent (KeyDownEvent event) { --------------- Native Event Sen
[task] | instruction_following [pass] | ⏳ 미판정 [title] | SpriteParticleComponent [question] | 예제 코드에서 KeyboardKey.Q 를 누를 때와 KeyboardKey.E 를 누를 때 호출되는 메서드를 단계별 번호 목록으로 나열하세요. [answer] | 제공된 예제 코드에서 키보드 입력에 따라 호출되는 메서드는 다음과 같습니다. 1. **KeyboardKey.Q 를 누를 때**: `self.SpriteParticle:Stop()` (또는 다른 예제에서는 `self.ParticleComponent:Stop()`) 2. **KeyboardKey.E 를 누를 때**: `self.SpriteParticle:Play()` (또는 다른 예제에서는 `self.ParticleComponent:Play()`) [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | - **OrderInLayerChangedEvent** Component의 OrderInLayer가 변경되었을 때 발생하는 이벤트입니다. - **ParticleEmitEndEvent** 파티클의 방출이 종료되었을 때 BaseParticleComponent에서 발생하는 이벤트입니다. - **ParticleEmitStartEvent** 파티클 입자 방출이 시작될 때 발생하는 이벤트입니다. - **ParticleLoopEvent** Loop 프로퍼티가 활성화 된 경우, 파티클의 방출 주기가 돌아와서 방출을 반복할 때 발생하
[task] | instruction_following [pass] | ⏳ 미판정 [title] | SpriteParticleComponent [question] | SpriteParticleComponent 에서 발생하는 이벤트 5 가지의 이름과 발생 조건을 표로 정리하세요. [answer] | SpriteParticleComponent 에서 발생하는 5가지 이벤트의 이름과 발생 조건은 다음과 같습니다. | 이벤트 이름 | 발생 조건 | | :--- | :--- | | `OrderInLayerChangedEvent` | Component의 OrderInLayer가 변경되었을 때 | | `ParticleEmitEndEvent` | 파티클의 방출이 종료되었을 때 BaseParticleComponent에서 발생 | | `ParticleEmitStartEvent` | 파티클 입자 방출이 시작될 때 | | `ParticleLoop [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | - **OrderInLayerChangedEvent** Component의 OrderInLayer가 변경되었을 때 발생하는 이벤트입니다. - **ParticleEmitEndEvent** 파티클의 방출이 종료되었을 때 BaseParticleComponent에서 발생하는 이벤트입니다. - **ParticleEmitStartEvent** 파티클 입자 방출이 시작될 때 발생하는 이벤트입니다. - **ParticleLoopEvent** Loop 프로퍼티가 활성화 된 경우, 파티클의 방출 주기가 돌아와서 방출을 반복할 때 발생하
[task] | single_turn [pass] | ⏳ 미판정 [title] | PrismaticJointComponent [question] | InputService 를 통해 키 입력을 받아 GoUp 또는 GoDown 을 호출할 때, 키가 눌린 상태가 아닌 한 번만 눌릴 때만 반응하도록 코드를 수정하려면 어떤 부분을 변경해야 하나요? [answer] | `KeyDownEvent`는 물리적으로 키가 눌리는 순간(Edge)에만 1회 발생하며, 키를 계속 누르고 있어도 연속적으로 발생하지 않습니다. 따라서 제공된 문서의 예제처럼 `HandleKeyDownEvent` 핸들러를 사용하면 이미 "한 번만 눌릴 때만 반응"하는 동작이 됩니다. 만약 키를 계속 누르고 있을 때 반복적으로 반응하는 것을 원하지 않는다면, 현재 `KeyDownEvent` 사용 방식이 정확합니다. 반대로 키를 누르고 있는 동안 연속적으로 반응(예: 이동)하게 하려면 `OnUpdate`에서 키 상태를 체크하는 방식이 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | ```lua Method: [server] void GoUp () { self.Entity.PrismaticJointComponent:SetMotorSpeed(1, 3) } [server] void GoDown () { self.Entity.PrismaticJointComponent:SetMotorSpeed(1, -3) } Event Handler: [service: InputService] HandleKeyDownEvent (KeyDownEvent event) { --------------- Native Event Sen
[task] | two_turn [pass] | ⏳ 미판정 [title] | RevoluteJointComponent [question] | RevoluteJointComponent의 기본 동작 방식과 AddJoint 메서드 활용법이 궁금합니다. [answer] | `RevoluteJointComponent`는 연결된 두 강체(Rigid Body) 사이의 상대적인 회전을 제어하기 위해 사용하는 컴포넌트입니다. 이 컴포넌트는 `RevoluteJoint`를 생성하고 삭제하며, 각 조인트의 앵커 위치, 회전 제한 범위, 모터 설정 등을 관리합니다. ### 기본 동작 방식 1. **조인트 관리**: `Joints` 프로퍼티는 `SyncList<RevoluteJoint>` 타입으로, 현재 생성된 조인트들의 정보를 저장합니다. 이 값은 읽기 전용(ReadOnly)이며, 직접 수정하기보다는 메서드를 [followup] | AddJoint 호출 시 targetEntity가 비활성 상태이거나 좌표계 변환이 필요한 경우, localAnchorA와 localAnchorB의 좌표 기준은 무엇이며 실패 시 -1을 반환하는 구체적인 예외 상황은 어떤 것들이 있나요? [followup_answer] | 제공된 참고 문서에 근거하여 질문에 답변드립니다. ### 1. localAnchorA와 localAnchorB의 좌표 기준 문서에서 `AddJoint` 메서드의 매개변수 설명은 다음과 같습니다: * `localAnchorA`: 현재 엔티티(`self.Entity`) 기준의 로컬 좌표계에서의 앵커 위치 * `localAnchorB`: `targetEntity` 기준의 로컬 좌표계에서의 앵커 위치 따라서 좌표 기준은 **각각의 엔티티가 소유한 로컬 좌표계(Local Coordinate System)** 입니다. * `l [scores] | [judge_reason] | [source_doc] | RevoluteJoint를 생성, 삭제합니다. 연결된 강체끼리의 상대적 회전을 제어합니다. # Properties - **SyncList<RevoluteJoint> Joints [Sync] [ReadOnly]** Joint 정보를 설정합니다. ##### inherited from Component: - **boolean Enable [Sync]** 컴포넌트 활성화 여부를 확인합니다. - **boolean EnableInHierarchy [ReadOnly] [HideFromInspector]** 계층 구조상에서 이
[task] | code [pass] | ⏳ 미판정 [title] | PrismaticJointComponent [question] | PrismaticJointComponent의 SetMotorEnable, SetMotorSpeed, SetMaxMotorForce 메서드를 활용하여 W, S 키 입력에 따라 모터 속도를 변경하고 최대 힘을 설정하는 스크립트를 작성해줘 [answer] | PrismaticJointComponent의 `SetMotorEnable`, `SetMotorSpeed`, `SetMaxMotorForce` 메서드는 모두 서버 공간에서 실행되어야 합니다. W, S 키 입력은 클라이언트에서 감지되므로, `InputService`의 `HandleKeyDownEvent` 이벤트 핸들러를 사용하여 키 입력을 감지한 후, 서버 메서드를 호출하는 방식으로 구현해야 합니다. 아래 스크립트는 PrismaticJointComponent에 연결된 첫 번째 Joint(index 0)를 대상으로 모터 상태를 제어합니 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | PrismaticJoint를 생성, 삭제할 수 있습니다. 연결된 강체가 특정 축 방향으로만 상대적 이동하도록 제한할 수 있습니다. # Properties - **SyncList<PrismaticJoint> Joints [Sync] [ReadOnly]** Joint의 정보를 설정합니다. ##### inherited from Component: - **boolean Enable [Sync]** 컴포넌트 활성화 여부를 확인합니다. - **boolean EnableInHierarchy [ReadOnly] [HideFromIn
[task] | single_turn [pass] | ⏳ 미판정 [title] | PhysicsSimulatorComponent [question] | P 키를 눌러 물리 시뮬레이션을 일시 정지시키는 코드가 동작하지 않을 때, 스크립트의 실행 공간([server only] 등) 설정과 이벤트 핸들러의 위치를 어떻게 점검해야 하나요? [answer] | PhysicsSimulatorComponent의 `Paused` 프로퍼티는 `[Sync]` 속성을 가지고 있어 서버와 클라이언트 모두에서 상태를 동기화합니다. 따라서 이 프로퍼티를 직접 수정하는 스크립트는 **서버 공간**에서 실행되어야 합니다. 코드가 동작하지 않을 때 점검해야 할 핵심 사항은 다음과 같습니다. ### 1. 이벤트 핸들러의 실행 공간 확인 `HandleTriggerEnterEvent`와 같은 입력 이벤트 핸들러는 기본적으로 클라이언트에서 발생하지만, `Paused`를 변경하려면 핸들러 내부 또는 호출된 로직이 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 맵에 물리 법칙을 적용합니다. 물리 연산과 관련된 설정을 조절할 수 있습니다. # Properties - **Vector2 Gravity [Sync]** 물리 연산의 중력 값을 설정합니다. - **boolean Paused [Sync]** 물리 연산의 일시정지 여부를 설정합니다. - **Vector2 WorldBounds [Sync] [ReadOnly]** 물리 연산 범위를 설정합니다. 엔티티가 범위를 벗어나면 물리 연산을 하지 않습니다. 예를 들어, 값을 (100, 100)으로 설정하면 원점(0, 0)을 중심으로 가
[task] | code [pass] | ⏳ 미판정 [title] | PrismaticJointComponent [question] | PrismaticJointComponent의 AddJoint, SetUseLimits, SetLowerTranslation, SetUpperTranslation 메서드를 사용하여 강체를 고정된 축 방향으로 제한된 거리만 이동하도록 설정하는 스크립트를 작성해줘 [answer] | PrismaticJointComponent는 강체가 특정 축 방향으로만 상대적 이동하도록 제한하는 역할을 합니다. 요청하신 기능을 구현하기 위해 `AddJoint`로 조인트를 생성한 후, `SetUseLimits`, `SetLowerTranslation`, `SetUpperTranslation`을 통해 이동 범위를 설정하는 스크립트를 작성했습니다. ```lua Property: [None] Entity TargetEntity = nil [None] Vector2 LocalAxis = Vector2(0, 1) [None] numbe [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | PrismaticJoint를 생성, 삭제할 수 있습니다. 연결된 강체가 특정 축 방향으로만 상대적 이동하도록 제한할 수 있습니다. # Properties - **SyncList<PrismaticJoint> Joints [Sync] [ReadOnly]** Joint의 정보를 설정합니다. ##### inherited from Component: - **boolean Enable [Sync]** 컴포넌트 활성화 여부를 확인합니다. - **boolean EnableInHierarchy [ReadOnly] [HideFromIn
[task] | two_turn [pass] | ⏳ 미판정 [title] | PrismaticJointComponent [question] | PrismaticJointComponent의 SetMotorSpeed 메서드를 호출할 때 첫 번째 인자로 1을 전달하는 이유는 무엇이며, 이 값이 관절의 어떤 특성을 나타내나요? [answer] | 제공된 참고 문서에는 `PrismaticJointComponent`의 `SetMotorSpeed` 메서드에서 첫 번째 인자로 `1`을 전달하는 구체적인 이유나, 이 값이 관절의 어떤 특정 특성(예: 모터 ID, 관절 인덱스 등)을 나타내는지 설명하는 내용이 포함되어 있지 않습니다. 문서에는 `self.Entity.PrismaticJointComponent:SetMotorSpeed(1, 3)`와 같이 첫 번째 인자가 1인 코드 예제만 제시되어 있을 뿐, 해당 인자의 의미에 대한 기술적 설명은 없습니다. [followup] | SetMotorSpeed의 첫 번째 인자를 변경했을 때 발생할 수 있는 오류나 의도하지 않은 동작은 무엇이며, 올바른 인자 값을 확인하기 위해 참조해야 할 관련 문서나 API는 무엇인가요? [followup_answer] | 제공된 참고 문서에는 `SetMotorSpeed` 메서드의 첫 번째 인자를 변경했을 때 발생할 수 있는 오류나 의도하지 않은 동작에 대한 정보가 포함되어 있지 않습니다. 또한, 올바른 인자 값을 확인하기 위해 참조해야 할 구체적인 API 명세나 인자 설명이 문서에 명시되어 있지 않습니다. 참고 문서의 `SeeAlso` 섹션에서는 다음과 같은 관련 문서 링크만 제시하고 있으며, 이 링크들을 통해 더 자세한 정보를 얻을 수 있을 것으로 추정되지만, 문서 본문 자체에는 해당 인자의 의미나 오류 사례에 대한 설명이 없습니다. * [ [scores] | [judge_reason] | [source_doc] | ```lua Method: [server] void GoUp () { self.Entity.PrismaticJointComponent:SetMotorSpeed(1, 3) } [server] void GoDown () { self.Entity.PrismaticJointComponent:SetMotorSpeed(1, -3) } Event Handler: [service: InputService] HandleKeyDownEvent (KeyDownEvent event) { --------------- Native Event Sen
[task] | instruction_following [pass] | ⏳ 미판정 [title] | SpriteParticleComponent [question] | 키 입력으로 파티클 재생을 제어하는 예제 코드를 출력하되, 설명은 주석으로만 작성하세요. [answer] | ```lua Property: [Sync] SpriteParticleComponent SpriteParticle = nil Method: [client only] void OnBeginPlay { -- Entity에 연결된 SpriteParticleComponent를 참조합니다. self.SpriteParticle = self.Entity.SpriteParticleComponent -- 새 SpriteRUID를 설정합니다. self.SpriteParticle.SpriteRUID = "000000" -- Sprite의 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | - **OrderInLayerChangedEvent** Component의 OrderInLayer가 변경되었을 때 발생하는 이벤트입니다. - **ParticleEmitEndEvent** 파티클의 방출이 종료되었을 때 BaseParticleComponent에서 발생하는 이벤트입니다. - **ParticleEmitStartEvent** 파티클 입자 방출이 시작될 때 발생하는 이벤트입니다. - **ParticleLoopEvent** Loop 프로퍼티가 활성화 된 경우, 파티클의 방출 주기가 돌아와서 방출을 반복할 때 발생하
[task] | single_turn [pass] | ⏳ 미판정 [title] | RevoluteJointComponent [question] | SetMotorSpeed와 SetMotorEnable을 함께 사용할 때 모터가 실제로 회전하기 위해 충족해야 하는 조건이 무엇인가요? [answer] | `RevoluteJointComponent`에서 모터가 실제로 작동하려면 다음 두 조건을 모두 충족해야 합니다. 1. **모터 활성화**: `SetMotorEnable(index, true)`를 호출하여 해당 조인트의 모터를 활성화해야 합니다. 2. **모터 속도 설정**: `SetMotorSpeed(index, speed)`를 호출하여 회전할 속도를 지정해야 합니다. 또한, 모터가 회전 범위를 벗어나지 않도록 각도 제한이 필요한 경우 `SetUseLimits(index, true)`와 함께 `SetLowerAngle`, `Se [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | RevoluteJoint를 생성, 삭제합니다. 연결된 강체끼리의 상대적 회전을 제어합니다. # Properties - **SyncList<RevoluteJoint> Joints [Sync] [ReadOnly]** Joint 정보를 설정합니다. ##### inherited from Component: - **boolean Enable [Sync]** 컴포넌트 활성화 여부를 확인합니다. - **boolean EnableInHierarchy [ReadOnly] [HideFromInspector]** 계층 구조상에서 이
[task] | single_turn [pass] | ⏳ 미판정 [title] | RevoluteJointComponent [question] | RevoluteJointComponent에서 SetMotorSpeed 메서드의 첫 번째 인자 1은 무엇을 의미하며, 여러 개의 모터가 있는 경우 어떻게 구분해서 제어하나요? [answer] | 제시된 참고 문서에는 `RevoluteJointComponent`의 `SetMotorSpeed` 메서드에서 첫 번째 인자 `1`의 구체적인 의미(모터 인덱스인지, ID인지 등)나 여러 개의 모터를 구분하여 제어하는 방법에 대한 설명이 포함되어 있지 않습니다. 문서에는 단순히 `self.Entity.RevoluteJointComponent:SetMotorSpeed(1, 10)`과 같이 첫 번째 인자로 `1`을 전달하여 속도를 설정하는 예제만 제공되고 있을 뿐, 인자 `1`이 무엇을 나타내는지 정의하지 않았습니다. 따라서 문서에 근거 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | W, S를 누르면 TargetEntityRef로 지정한 Entity를 회전시키는 예제입니다. ```lua Method: [server] void GoUp ( ) { self.Entity.RevoluteJointComponent:SetMotorSpeed(1, 10) } [server] void GoDown ( ) { self.Entity.RevoluteJointComponent:SetMotorSpeed(1, -10) } [server] void Stop ( ) { self.Entity.RevoluteJointComponen
[task] | two_turn [pass] | ⏳ 미판정 [title] | SpriteParticleComponent [question] | SpriteParticleComponent에서 발생하는 이벤트와 스프라이트 색상 적용 및 재생 제어에 대해 설명해 주세요. [answer] | SpriteParticleComponent에서 발생하는 주요 이벤트는 다음과 같습니다. * **OrderInLayerChangedEvent**: 컴포넌트의 `OrderInLayer` 값이 변경되었을 때 발생합니다. * **ParticleEmitStartEvent**: 파티클 입자 방출이 시작될 때 발생합니다. * **ParticleEmitEndEvent**: 파티클의 방출이 종료되었을 때 발생합니다. * **ParticleLoopEvent**: `Loop` 프로퍼티가 활성화된 경우, 방출 주기가 돌아와 파티클 방출이 [followup] | OrderInLayerChangedEvent와 ParticleEmitStartEvent의 발생 시점을 구분하고, ApplySpriteColor가 true일 때의 색상 적용 로직을 코드 예시로 보여주세요. [followup_answer] | `OrderInLayerChangedEvent`와 `ParticleEmitStartEvent`는 발생 시점이 명확히 다릅니다. * **OrderInLayerChangedEvent**: `SpriteParticleComponent`의 `OrderInLayer` 값이 변경되었을 때 발생합니다. 이는 파티클이 다른 스프라이트나 파티클과 겹칠 때의 표시 순서가 바뀌는 시점입니다. * **ParticleEmitStartEvent**: 파티클 입자 방출이 시작될 때 발생합니다. 즉, `Play()` 메서드가 호출되어 파티클이 실제로 [scores] | [judge_reason] | [source_doc] | - **OrderInLayerChangedEvent** Component의 OrderInLayer가 변경되었을 때 발생하는 이벤트입니다. - **ParticleEmitEndEvent** 파티클의 방출이 종료되었을 때 BaseParticleComponent에서 발생하는 이벤트입니다. - **ParticleEmitStartEvent** 파티클 입자 방출이 시작될 때 발생하는 이벤트입니다. - **ParticleLoopEvent** Loop 프로퍼티가 활성화 된 경우, 파티클의 방출 주기가 돌아와서 방출을 반복할 때 발생하
[task] | two_turn [pass] | ⏳ 미판정 [title] | PrismaticJointComponent [question] | InputService를 통해 키 입력을 수신하여 PrismaticJointComponent의 모터 속도를 제어하는 예시 코드에서, KeyboardKey.W와 S를 구분하는 조건문 구조는 어떤 형태인가요? [answer] | InputService를 통해 키 입력을 수신하여 `PrismaticJointComponent`의 모터 속도를 제어하는 예시에서, `KeyboardKey.W`와 `KeyboardKey.S`를 구분하는 조건문은 `if-elseif` 구조로 작성됩니다. 구체적으로 `HandleKeyDownEvent` 이벤트 핸들러 내부에서 이벤트 객체의 `key` 속성을 확인하여, 값이 `KeyboardKey.W`인지 `KeyboardKey.S`인지 비교합니다. ```lua Method: [server] void GoUp () { self.Ent [followup] | 만약 동시에 W와 S 키가 눌리는 경우나, 키를 누르고 있는 동안 반복적으로 이벤트가 발생하는 상황을 처리하기 위해 추가적인 로직(예: 키 상태 체크)이 필요할 때 어떤 점을 고려해야 하나요? [followup_answer] | 제공된 참고 문서에는 `PrismaticJointComponent`를 사용하여 W키와 S키 입력에 따라 모터 속도를 제어하는 기본 예제만 포함되어 있습니다. 문서에 따르면, 키 입력 처리는 `HandleKeyDownEvent` 이벤트 핸들러 내에서 `event.key` 값을 `KeyboardKey.W` 또는 `KeyboardKey.S`와 비교하는 `if-elseif` 구조로만 구현되어 있습니다. 사용자가 질문하신 **동시 키 입력 처리**, **키 상태 체크(예: `IsKeyDown` 등)**, 또는 **키를 누르고 있는 동안의 [scores] | [judge_reason] | [source_doc] | ```lua Method: [server] void GoUp () { self.Entity.PrismaticJointComponent:SetMotorSpeed(1, 3) } [server] void GoDown () { self.Entity.PrismaticJointComponent:SetMotorSpeed(1, -3) } Event Handler: [service: InputService] HandleKeyDownEvent (KeyDownEvent event) { --------------- Native Event Sen
[task] | single_turn [pass] | ⏳ 미판정 [title] | RevoluteJointComponent [question] | TargetEntityRef를 지정하지 않으면 컴포넌트가 어떤 동작을 하며, 물리 시뮬레이션에서 이 Joint가 정상적으로 작동하지 않을 때 우선적으로 체크해야 할 설정은 무엇인가요? [answer] | 제공된 참고 문서에는 `TargetEntityRef`를 지정하지 않았을 때의 구체적인 동작 방식이나, 물리 시뮬레이션에서 Joint가 정상적으로 작동하지 않을 때 우선적으로 체크해야 할 설정 사항에 대한 정보가 포함되어 있지 않습니다. 문서에는 `W`, `S` 키 입력 시 `TargetEntityRef`로 지정한 Entity를 회전시키기 위해 `RevoluteJointComponent:SetMotorSpeed` 메서드를 호출하는 예제 코드만 제공되고 있으며, `TargetEntityRef`의 필수 여부나 오류 시 디버깅 가이드는 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | W, S를 누르면 TargetEntityRef로 지정한 Entity를 회전시키는 예제입니다. ```lua Method: [server] void GoUp ( ) { self.Entity.RevoluteJointComponent:SetMotorSpeed(1, 10) } [server] void GoDown ( ) { self.Entity.RevoluteJointComponent:SetMotorSpeed(1, -10) } [server] void Stop ( ) { self.Entity.RevoluteJointComponen
[task] | single_turn [pass] | ⏳ 미판정 [title] | RevoluteJointComponent [question] | SetMotorSpeed의 두 번째 인자로 10과 -10을 사용하는데, 이 값의 단위는 무엇이며 값이 클수록 회전이 빨라지는 구조인가요? [answer] | 제공된 참고 문서에는 `SetMotorSpeed` 메서드의 두 번째 인자(속도 값)의 **단위**가 명시되어 있지 않습니다. 또한, 값의 크기와 회전 속도 간의 구체적인 수학적 관계나 비례 구조에 대한 설명도 문서에 포함되어 있지 않습니다. 문서에서 확인할 수 있는 사실은 다음과 같습니다: 1. `self.Entity.RevoluteJointComponent:SetMotorSpeed(1, 10)` 호출 시 엔티티가 회전합니다. 2. `self.Entity.RevoluteJointComponent:SetMotorSpeed(1, -1 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | W, S를 누르면 TargetEntityRef로 지정한 Entity를 회전시키는 예제입니다. ```lua Method: [server] void GoUp ( ) { self.Entity.RevoluteJointComponent:SetMotorSpeed(1, 10) } [server] void GoDown ( ) { self.Entity.RevoluteJointComponent:SetMotorSpeed(1, -10) } [server] void Stop ( ) { self.Entity.RevoluteJointComponen
[task] | code [pass] | ⏳ 미판정 [title] | RevoluteJointComponent [question] | server 실행 공간에서 실행되는 GoUp, GoDown, Stop 메서드를 정의하고, RevoluteJointComponent 인스턴스의 1번 축 모터 속도를 각각 10, -10, 0으로 제어하는 스크립트를 작성해줘. [answer] | ```lua Method: [server] void GoUp ( ) { self.Entity.RevoluteJointComponent:SetMotorSpeed(1, 10) } [server] void GoDown ( ) { self.Entity.RevoluteJointComponent:SetMotorSpeed(1, -10) } [server] void Stop ( ) { self.Entity.RevoluteJointComponent:SetMotorSpeed(1, 0) } ``` [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | W, S를 누르면 TargetEntityRef로 지정한 Entity를 회전시키는 예제입니다. ```lua Method: [server] void GoUp ( ) { self.Entity.RevoluteJointComponent:SetMotorSpeed(1, 10) } [server] void GoDown ( ) { self.Entity.RevoluteJointComponent:SetMotorSpeed(1, -10) } [server] void Stop ( ) { self.Entity.RevoluteJointComponen
[task] | two_turn [pass] | ⏳ 미판정 [title] | SideviewbodyComponent [question] | SideviewbodyComponent 를 활용해 벽 타일 충돌을 감지하는 기본 원리와 `RectTileCollisionBeginEvent` 의 주요 파라미터는 무엇인가요? [answer] | `SideviewbodyComponent`는 2D 사이드뷰 환경에서 벽 타일과 같은 직사각형 타일과의 충돌을 감지하는 데 사용됩니다. 벽 타일 충돌 감지의 기본 원리는 다음과 같습니다. 1. **충돌 시작 감지**: 엔티티가 벽 타일과 처음 닿았을 때 `RectTileCollisionBeginEvent`가 발생합니다. 이 이벤트를 통해 충돌 방향(Normal)을 확인하여 좌측(`Vector2.left`) 또는 우측(`Vector2.right`) 벽에 닿았는지 판단합니다. 2. **정보 저장**: 벽에 닿았다고 판단되면, 해당 [followup] | `HandleRectTileCollisionEndEvent` 에서 `self.WallTile` 을 초기화할 때 `currWallTile.position == TilePosition` 비교가 실패하거나 다른 타일과의 충돌로 인한 오작동이 발생하는 예외 상황과 해결 방법은 무엇인가요? [followup_answer] | 제공된 참고 문서에는 `HandleRectTileCollisionEndEvent`에서 `self.WallTile`을 초기화하는 로직과 해당 비교가 실패하거나 오작동하는 예외 상황에 대한 설명, 그리고 그 해결 방법이 포함되어 있지 않습니다. 문서에 명시된 내용만으로는 해당 예외 상황과 해결 방법을 답변할 수 없습니다. [scores] | [judge_reason] | [source_doc] | 측면에 닿은 벽 타일을 감지하는 예제입니다. ```lua Property: [None] table WallTile = {} Method: [client only] table GetWallTile () { return self.WallTile } Event Handler: [client only] [self] HandleRectTileCollisionBeginEvent (RectTileCollisionBeginEvent event) { ----------------- Native Emitter Info -----------
[task] | code [pass] | ⏳ 미판정 [title] | MODTweenLogic [question] | Furthermore, creating tasks based on the *deprecated* `MODTweenLogic` methods would contradict the document's instruction ("더는 사용하지 않는 Logic입니다" - It is a Logic that is no longer used) and my instruction not to invent facts or use non-recommended approaches when the document explicitly deprecates th [answer] | `MODTweenLogic`은 더 이상 사용되지 않는 비추천(Deprecated) 로직입니다. 해당 로직의 모든 메서드(`Ease`, `MoveTo`, `MoveToOffset`, `StartFloating`, `StartRot`, `StopFloating`, `StopRot`)는 폐기되었으며, 이를 기반으로 스크립트를 작성하거나 태스크를 생성하는 것은 권장되지 않습니다. 대신 용도에 맞는 최신 API를 사용해야 합니다: 1. **이동 (Linear Movement)**: * `TweenLogic:MoveTo(Ent [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 더는 사용하지 않는 Logic입니다. 용도에 맞게 TweenLogic, TweenLineComponent, TweenFloatingComponent, TweenCircularComponent를 사용하세요. # Methods - **float Ease(EaseType type, float from, float totalDelta, float time, float duration) [Deprecated] [Static]** 더는 사용하지 않는 함수입니다. TweenLogic의 Ease(float, float, float, Eas
[task] | two_turn [pass] | ⏳ 미판정 [title] | PrismaticJointComponent [question] | PrismaticJointComponent를 사용하여 엔티티가 직선으로 이동하도록 설정하는 기본적인 방법과 입력 처리 로직은 어떻게 구성되나요? [answer] | PrismaticJointComponent를 사용하여 엔티티가 직선으로 이동하도록 설정하려면 `SetMotorSpeed` 메서드를 호출하여 모터의 속도를 제어해야 합니다. 첫 번째 인자는 조인트 인덱스(보통 1), 두 번째 인자는 속도 값입니다. 양수 값은 한 방향으로, 음수 값은 반대 방향으로 이동하게 합니다. 입력 처리 로직은 `InputService`의 `KeyDownEvent`를 구독하여 특정 키(W, S 등)가 눌렸을 때 서버에서 모터 속도를 변경하는 방식으로 구성됩니다. 아래는 W 키를 누르면 위로, S 키를 누르면 [followup] | GoUp/GoDown 메서드에서 SetMotorSpeed의 두 번째 인자가 음수일 때의 물리적 의미와, W/S 키를 눌렀을 때 발생하는 HandleKeyDownEvent의 처리 순서를 자세히 설명해 주세요. [followup_answer] | PrismaticJointComponent의 `SetMotorSpeed` 메서드와 `HandleKeyDownEvent` 처리 순서에 대해 설명해 드리겠습니다. ### 1. SetMotorSpeed 두 번째 인자(속도)의 물리적 의미 `self.Entity.PrismaticJointComponent:SetMotorSpeed(1, speed)`에서 두 번째 인자인 `speed`는 **모터가 조인트를 따라 이동시키는 속도의 크기 및 방향**을 나타냅니다. * **양수 값 (예: 3):** Prismatic Joint가 정의한 * [scores] | [judge_reason] | [source_doc] | ```lua Method: [server] void GoUp () { self.Entity.PrismaticJointComponent:SetMotorSpeed(1, 3) } [server] void GoDown () { self.Entity.PrismaticJointComponent:SetMotorSpeed(1, -3) } Event Handler: [service: InputService] HandleKeyDownEvent (KeyDownEvent event) { --------------- Native Event Sen
[task] | two_turn [pass] | ⏳ 미판정 [title] | PulleyJointComponent [question] | PulleyJointComponent에서 도르래를 만들기 위해 두 강체를 연결하는 기본적인 절차가 무엇인가요? [answer] | PulleyJointComponent를 사용하여 두 강체를 도르래처럼 연결하는 기본 절차는 다음과 같습니다. 1. **타겟 엔티티 획득**: 연결할 두 번째 강체(타겟)의 `Entity` 참조를 가져옵니다. 2. **Anchor 위치 설정**: * `localAnchorA`: 현재 엔티티(강체 A)의 로컬 좌표계 기준 앵커 위치입니다. * `localAnchorB`: 타겟 엔티티(강체 B)의 로컬 좌표계 기준 앵커 위치입니다. * `groundAnchorA`: 세계 좌표계 기준, 강체 A의 앵커 [followup] | AddJoint 메서드에서 localAnchorA, localAnchorB, groundAnchorA, groundAnchorB 파라미터가 각각 어떤 위치를 지정하는지 구체적으로 설명해 주세요. [followup_answer] | `PulleyJointComponent`의 `AddJoint` 메서드에서 사용되는 앵커 파라미터는 도르래(Pulley) 물리 구조를 정의하는 네 가지 핵심 위치를 지정합니다. 각 파라미터의 역할은 다음과 같습니다. 1. **localAnchorA (Vector2)** * **의미**: 현재 스크립트가 붙어 있는 엔티티(강체 A)의 **로컬 좌표계(Local Space)** 기준 연결 지점입니다. * **설명**: 강체 A의 몸체 어디에 줄이 매달리는지를 정의합니다. 예를 들어, 강체 A의 중심을 기준으로 위 [scores] | [judge_reason] | [source_doc] | PulleyJoint를 생성, 삭제합니다. 연결된 두 강체가 도르래처럼 이동합니다. # Properties - **SyncList<PulleyJoint> Joints [Sync] [ReadOnly]** Joint 정보를 설정합니다. ##### inherited from Component: - **boolean Enable [Sync]** 컴포넌트 활성화 여부를 확인합니다. - **boolean EnableInHierarchy [ReadOnly] [HideFromInspector]** 계층 구조상에서 이 컴포넌트가
[task] | code [pass] | ⏳ 미판정 [title] | PrismaticJointComponent [question] | PrismaticJointComponent의 SetLocalAnchorA, SetLocalAnchorB, DestroyJoint 메서드를 이용하여 조인트의 앵커 위치를 재설정하거나 특정 인덱스의 조인트를 삭제하는 관리 로직을 구현하는 스크립트를 작성해줘 [answer] | `PrismaticJointComponent`의 `SetLocalAnchorA`, `SetLocalAnchorB`, `DestroyJoint` 메서드를 활용하여 조인트 앵커를 재설정하고 특정 인덱스의 조인트를 삭제하는 관리 로직을 구현하는 스크립트입니다. 아래 예제에서는 서버 환경(`[server]`)에서 실행되며, `AddJoint`를 통해 조인트를 생성한 후 앵커 위치를 변경하고, 조건에 따라 특정 인덱스의 조인트를 삭제하는 흐름을 보여줍니다. ```lua Property: [None] number TargetJointInd [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | PrismaticJoint를 생성, 삭제할 수 있습니다. 연결된 강체가 특정 축 방향으로만 상대적 이동하도록 제한할 수 있습니다. # Properties - **SyncList<PrismaticJoint> Joints [Sync] [ReadOnly]** Joint의 정보를 설정합니다. ##### inherited from Component: - **boolean Enable [Sync]** 컴포넌트 활성화 여부를 확인합니다. - **boolean EnableInHierarchy [ReadOnly] [HideFromIn
[task] | code [pass] | ⏳ 미판정 [title] | RevoluteJointComponent [question] | RevoluteJointComponent의 SetMotorSpeed를 활용해 W키와 S키 입력에 따라 모터 속도를 양수/음수로 설정하고, 모든 키가 풀리면 속도를 0으로 초기화하는 스크립트를 작성해줘. [answer] | RevoluteJointComponent의 SetMotorSpeed 메서드를 사용하여 W키와 S키 입력에 따라 모터 속도를 조절하고, 키가 풀리면 속도를 0으로 초기화하는 스크립트는 다음과 같습니다. ```lua Method: [server] void GoUp ( ) { self.Entity.RevoluteJointComponent:SetMotorSpeed(1, 10) } [server] void GoDown ( ) { self.Entity.RevoluteJointComponent:SetMotorSpeed(1, -10) } [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | W, S를 누르면 TargetEntityRef로 지정한 Entity를 회전시키는 예제입니다. ```lua Method: [server] void GoUp ( ) { self.Entity.RevoluteJointComponent:SetMotorSpeed(1, 10) } [server] void GoDown ( ) { self.Entity.RevoluteJointComponent:SetMotorSpeed(1, -10) } [server] void Stop ( ) { self.Entity.RevoluteJointComponen
[task] | two_turn [pass] | ⏳ 미판정 [title] | WebViewComponent [question] | WebViewComponent 에서 발생하는 이벤트들을 모두 나열해 주세요. [answer] | WebViewComponent 에서 발생하는 이벤트는 다음과 같습니다. * **OrderInLayerChangedEvent**: Component의 OrderInLayer가 변경되었을 때 발생합니다. * **SortingLayerChangedEvent**: 컴포넌트의 SortingLayer가 변경되었을 때 발생합니다. * **WebLoadCompleteEvent**: 웹 페이지 로드 완료 시 발생합니다. * **WebLoadFailEvent**: 웹 페이지 로드 실패 시 발생합니다. * **WebViewClick [followup] | WebLoadFailEvent 가 발생했을 때 유저에게 알림을 보내는 스크립트 예시를 작성해 주세요. [followup_answer] | 참고 문서에는 `WebLoadFailEvent`가 정의되어 있지만, 해당 이벤트를 수신하기 위한 구체적인 Event Handler 시그니처(매개변수 타입 등)나 UI 알림을 위한 특정 API(예: 토스트 메시지 출력 메서드)가 명시되어 있지 않습니다. 따라서 제공된 참고 문서에만 근거하여 `WebLoadFailEvent` 발생 시 유저에게 알림을 보내는 **완전한 동작하는 스크립트 코드를 작성할 수 없습니다.** 다만, 문서에 명시된 `WebLoadFailEvent`가 "웹 페이지 로드 실패 시 발생하는 이벤트"라는 사실과, 일 [scores] | [judge_reason] | [source_doc] | - **OrderInLayerChangedEvent** Component의 OrderInLayer가 변경되었을 때 발생하는 이벤트입니다. - **SortingLayerChangedEvent** 컴포넌트의 SortingLayer가 변경되었을 때 발생하는 이벤트입니다. - **WebLoadCompleteEvent** 웹 페이지 로드 완료 시 발생하는 이벤트입니다. - **WebLoadFailEvent** 웹 페이지 로드 실패 시 발생하는 이벤트입니다. - **WebViewClickedEvent** 웹뷰에 클릭을 입력했
[task] | code [pass] | ⏳ 미판정 [title] | PulleyJointComponent [question] | PulleyJointComponent의 SetLocalAnchorA와 SetLocalAnchorB 메서드를 사용하여 기존 조인트의 앵커 위치를 동적으로 변경하는 스크립트를 작성해줘 [answer] | `PulleyJointComponent`의 `SetLocalAnchorA`와 `SetLocalAnchorB` 메서드는 기존에 생성된 조인트의 로컬 앵커 위치를 수정하는 데 사용됩니다. 이 메서드들은 특정 조인트를 식별하는 `index`와 새로운 로컬 앵커 좌표 `Vector2`를 인수로 받습니다. 아래 예제는 `OnUpdate` 루프에서 매 프레임마다 조인트의 앵커 위치를 동적으로 변경하는 스크립트입니다. 조인트가 존재하는지 확인한 후, `index` 0번 조인트의 `LocalAnchorA`와 `LocalAnchorB`를 사인(` [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | PulleyJoint를 생성, 삭제합니다. 연결된 두 강체가 도르래처럼 이동합니다. # Properties - **SyncList<PulleyJoint> Joints [Sync] [ReadOnly]** Joint 정보를 설정합니다. ##### inherited from Component: - **boolean Enable [Sync]** 컴포넌트 활성화 여부를 확인합니다. - **boolean EnableInHierarchy [ReadOnly] [HideFromInspector]** 계층 구조상에서 이 컴포넌트가
[task] | two_turn [pass] | ⏳ 미판정 [title] | PrismaticJointComponent [question] | PrismaticJointComponent의 AddJoint 메서드에서 반환하는 index 값은 어떤 상황에서 -1을 반환하며, 이 실패 케이스를 처리하는 예외 처리 로직을 작성해 주세요. [answer] | 문서에 따르면 `PrismaticJointComponent`의 `AddJoint` 메서드는 성공 시 joint의 index를, **실패 시 -1**을 반환합니다. 다만, 문서에는 **-1을 반환하는 구체적인 실패 조건(예: 타겟 엔티티가 null인 경우, 물리 컴포넌트가 없는 경우 등)에 대한 설명이 없습니다.** 단순히 "실패 시 -1"이라고만 명시되어 있으므로, 어떤 상황에서 실패하는지 단정 짓거나 지어낼 수 없습니다. 따라서 제공된 문서 범위 내에서 **반환 값이 -1인지 확인하여 실패 여부를 처리하는 예외 처리 로직**만 [followup] | AddJoint 호출 후 반환값이 -1일 때 실패 원인을 로그로 출력하고, 이후 DestroyJoint를 안전하게 호출하기 위해 GetJointsCount로 검증하는 코드 블록을 작성해 주세요. [followup_answer] | 제공된 문서에는 `AddJoint`가 `-1`을 반환하는 **구체적인 실패 원인(예: 타겟이 물리 엔티티가 아닌 경우, 이미 연결된 경우 등)에 대한 정보가 없습니다.** 따라서 문서에 근거하여 실패 *원인*을 특정하여 로그로 출력하는 것은 불가능하며, 단순히 "실패했다"는 사실만 로그로 남길 수 있습니다. 또한, `DestroyJoint`를 안전하게 호출하기 위해 `GetJointsCount`로 검증하는 로직은 문서의 메서드 정의에 따라 작성할 수 있습니다. `DestroyJoint`는 `void` 타입이며 인자로 index를 [scores] | [judge_reason] | [source_doc] | PrismaticJoint를 생성, 삭제할 수 있습니다. 연결된 강체가 특정 축 방향으로만 상대적 이동하도록 제한할 수 있습니다. # Properties - **SyncList<PrismaticJoint> Joints [Sync] [ReadOnly]** Joint의 정보를 설정합니다. ##### inherited from Component: - **boolean Enable [Sync]** 컴포넌트 활성화 여부를 확인합니다. - **boolean EnableInHierarchy [ReadOnly] [HideFromIn
[task] | code [pass] | ⏳ 미판정 [title] | PulleyJointComponent [question] | PulleyJointComponent의 Enable 속성을 통해 컴포넌트 활성화 여부를 제어하고, IsServer 메서드를 사용하여 서버에서만 조인트 생성 로직이 실행되도록 하는 스크립트를 작성해줘 [answer] | PulleyJointComponent의 `Enable` 속성은 컴포넌트 자체의 활성화 여부를 제어하며, `IsServer()` 메서드는 현재 스크립트가 서버 환경에서 실행 중인지 확인하는 데 사용됩니다. 두 강체가 도르래처럼 연결되도록 조인트를 생성하고 싶다면, 서버에서 `AddJoint` 메서드를 호출해야 합니다. 아래 스크립트는 `OnBeginPlay` 시 서버에서 PulleyJointComponent를 활성화하고, 특정 엔티티(`/maps/map01/TargetBody`)와 도르래 조인트를 연결하는 예시입니다. ```lua [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | PulleyJoint를 생성, 삭제합니다. 연결된 두 강체가 도르래처럼 이동합니다. # Properties - **SyncList<PulleyJoint> Joints [Sync] [ReadOnly]** Joint 정보를 설정합니다. ##### inherited from Component: - **boolean Enable [Sync]** 컴포넌트 활성화 여부를 확인합니다. - **boolean EnableInHierarchy [ReadOnly] [HideFromInspector]** 계층 구조상에서 이 컴포넌트가