[task] | code [pass] | ⏳ 미판정 [title] | PhysicsRigidbodyComponent [question] | PhysicsRigidbodyComponent의 FixedRotation 속성을 true로 설정하여 물리 상호작용에 의한 회전을 방지하는 스크립트를 작성해줘 [answer] | `PhysicsRigidbodyComponent`의 `FixedRotation` 속성을 `true`로 설정하면 물체가 물리 상호작용(충돌, 힘 등)에 의해 회전하지 않습니다. 아래 스크립트는 엔티티가 생성될 때(`OnBeginPlay`) 이 속성을 활성화하는 예시입니다. ```lua Property: [None] boolean IsRotationFixed = false Method: [server only] void OnBeginPlay () { -- 물리 상호작용에 의한 회전을 방지하기 위해 FixedRotation을 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 엔티티가 물리 엔진에 의해 제어됩니다. 물리 연산에 영향을 주는 값을 설정할 수 있습니다. # Properties - **float AngularDamping [Sync]** 각속도의 변화에 대한 저항 계수를 설정합니다. 값이 클수록 각속도 변화에 더 많은 힘이 필요합니다. 0 이상의 값만 설정할 수 있습니다. - **BodyType BodyType [Sync]** 강체 타입을 설정합니다. - **PhysicsCollisionDetectionMode CollisionDetectionMode [Sync]** 물리 충돌의
[task] | code [pass] | ⏳ 미판정 [title] | PhysicsRigidbodyComponent [question] | PhysicsRigidbodyComponent 의 GravityScale 프로퍼티를 활용해, PhysicsContactBeginEvent 이벤트가 발생했을 때 충돌한 대상 엔티티의 중력 배율을 0.2 로 설정하여 부유감 있는 움직임을 구현하는 스크립트를 작성해줘 [answer] | PhysicsRigidbodyComponent 의 `GravityScale` 프로퍼티를 설정하면 해당 물체에게 적용되는 중력 강도를 조절할 수 있습니다. `PhysicsContactBeginEvent` 이벤트 핸들러 내에서 충돌한 대상 엔티티(`ContactedBodyEntity`)의 `PhysicsRigidbodyComponent`에 접근하여 `GravityScale` 값을 `0.2`로 할당하면, 해당 엔티티는 평소보다 중력의 영향을 적게 받아 부유감 있는 움직임을 보일 것입니다. 아래는 요청하신 동작을 수행하는 mLua 스크립 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | ```lua Event Handler: [self] HandlePhysicsContactBeginEvent (PhysicsContactBeginEvent event) { --------------- Native Event Sender Info ---------------- -- Sender: PhysicsColliderComponent -- Space: Server, Client --------------------------------------------------------- -- Parameters local
[task] | single_turn [pass] | ⏳ 미판정 [title] | PhysicsRigidbodyComponent [question] | 강체의 회전 방향이 반시계 방향(CCW)으로 정의되어 있는데, 시계 방향 회전력을 가하려면 어떻게 해야 하나요? [answer] | `ApplyTorque`와 `ApplyAngularImpulse` 메서드는 기본적으로 반시계 방향(CCW)을 양수(positive)로 정의합니다. 따라서 시계 방향(CW) 회전력을 가하려면 **음수(negative) 값**을 전달하면 됩니다. 예를 들어, 시계 방향으로 힘(토크)을 가하려면 다음과 같이 음수를 사용합니다. ```lua Method: [server only] void ApplyClockwiseTorque() { -- 음수 값을 전달하면 시계 방향(CW)으로 회전력을 가합니다. self.Entity.P [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | - **void ApplyAngularImpulse(float impulse)** 강체에 반시계 방향으로(CCW) 각 충격량을 적용합니다. - **void ApplyForce(Vector2 force)** 강체의 무게 중심에 특정 방향으로 힘을 가합니다. - **void ApplyForce(Vector2 force, Vector2 worldPoint)** 강체에 월드 상 특정 위치에서 특정 방향으로 힘을 가합니다. - **void ApplyLinearImpulse(Vector2 impulse)** 강체의 무게 중심에
[task] | code [pass] | ⏳ 미판정 [title] | PhysicsRigidbodyComponent [question] | PhysicsRigidbodyComponent 의 ApplyLinearImpulse 메서드를 활용해, PhysicsContactBeginEvent 이벤트가 발생했을 때 충돌한 대상 엔티티에 상향 방향의 선형 임펄스를 적용하여 튀게 만드는 스크립트를 작성해줘 [answer] | `PhysicsRigidbodyComponent`의 `ApplyLinearImpulse` 메서드는 `Vector2` 타입의 인자를 받아 해당 방향의 선형 임펄스를 적용합니다. `Vector2(0, 5)`처럼 Y 값이 양수이면 상향 방향의 임펄스가 됩니다. `PhysicsContactBeginEvent` 이벤트 핸들러에서 `event.ContactedBodyEntity`를 통해 충돌한 대상 엔티티를 얻고, 해당 엔티티의 `PhysicsRigidbodyComponent`에 `ApplyLinearImpulse` 메서드를 호출하여 상향 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | ```lua Event Handler: [self] HandlePhysicsContactBeginEvent (PhysicsContactBeginEvent event) { --------------- Native Event Sender Info ---------------- -- Sender: PhysicsColliderComponent -- Space: Server, Client --------------------------------------------------------- -- Parameters local
[task] | two_turn [pass] | ⏳ 미판정 [title] | PhysicsRigidbodyComponent [question] | PhysicsRigidbodyComponent에서 ApplyLinearImpulse 메서드의 오버로드 차이와 사용 시 주의할 점은 무엇인가요? [answer] | PhysicsRigidbodyComponent의 ApplyLinearImpulse 메서드는 강체에 선형 충격량을 가하는 역할을 하며, 제공되는 두 가지 오버로드는 적용 위치의 지정 여부에서 차이가 있습니다. 첫 번째 오버로드는 `ApplyLinearImpulse(Vector2 impulse)`입니다. 이 메서드는 강체의 무게 중심(Center of Mass)에 특정 방향으로 선형 충격량을 가합니다. 두 번째 오버로드는 `ApplyLinearImpulse(Vector2 impulse, Vector2 worldPoint)`입니다. 이 [followup] | ApplyLinearImpulse에 worldPoint 인자를 전달했을 때, 무게 중심 기준과 비교하여 회전 운동에 어떤 차이가 발생하며, 이 차이를 줄이려면 어떤 코드를 작성해야 하나요? [followup_answer] | `ApplyLinearImpulse`에 `worldPoint` 인자를 전달했을 때, 무게 중심 기준과 비교하여 회전 운동에 다음과 같은 차이가 발생합니다. 1. **무게 중심 기준 (`ApplyLinearImpulse(Vector2 impulse)`)**: * 충격량이 강체의 무게 중심에 직접 가해집니다. * 무게 중심으로 힘이 가해지므로 **회전 운동(토크)은 발생하지 않습니다**. * 강체는 순수하게 직선 운동(선형 운동)만 합니다. 2. **월드 포인트 기준 (`ApplyLinearImp [scores] | [judge_reason] | [source_doc] | - **void ApplyAngularImpulse(float impulse)** 강체에 반시계 방향으로(CCW) 각 충격량을 적용합니다. - **void ApplyForce(Vector2 force)** 강체의 무게 중심에 특정 방향으로 힘을 가합니다. - **void ApplyForce(Vector2 force, Vector2 worldPoint)** 강체에 월드 상 특정 위치에서 특정 방향으로 힘을 가합니다. - **void ApplyLinearImpulse(Vector2 impulse)** 강체의 무게 중심에
[task] | instruction_following [pass] | ⏳ 미판정 [title] | PhysicsSimulatorComponent [question] | PhysicsSimulatorComponent의 WorldBounds 속성이 (100, 100)으로 설정되었을 때 실제 물리 연산 범위의 가로, 세로 크기를 표로 정리해서 설명하세요. [answer] | PhysicsSimulatorComponent의 `WorldBounds` 속성은 물리 연산이 적용되는 범위를 원점(0, 0)을 중심으로 설정합니다. `WorldBounds` 값이 `(100, 100)`으로 설정되면, 원점 기준 가로와 세로 방향 각각 100 단위만큼 확장된 영역이 물리 연산 범위입니다. 따라서 실제 물리 연산 범위의 크기는 다음과 같습니다. | 방향 | 범위 (원점 기준) | 총 크기 | | :--- | :--- | :--- | | 가로 | -100 ~ 100 | 200 | | 세로 | -100 ~ 100 | 2 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 맵에 물리 법칙을 적용합니다. 물리 연산과 관련된 설정을 조절할 수 있습니다. # Properties - **Vector2 Gravity [Sync]** 물리 연산의 중력 값을 설정합니다. - **boolean Paused [Sync]** 물리 연산의 일시정지 여부를 설정합니다. - **Vector2 WorldBounds [Sync] [ReadOnly]** 물리 연산 범위를 설정합니다. 엔티티가 범위를 벗어나면 물리 연산을 하지 않습니다. 예를 들어, 값을 (100, 100)으로 설정하면 원점(0, 0)을 중심으로 가
[task] | single_turn [pass] | ⏳ 미판정 [title] | PhysicsRigidbodyComponent [question] | UseDensity를 true로 변경했을 때, 하나의 강체에 여러 개의 PhysicsColliderComponent가 붙어 있으면 각각의 밀도와 크기를 어떻게 합산하여 질량을 계산하나요? [answer] | `UseDensity` 프로퍼티를 `true`로 설정하면, `Mass` 값 대신 각 `PhysicsColliderComponent`의 `Density` 값과 Collider 크기를 곱한 값을 각각 계산하여 이를 **합산**한 결과를 최종 질량(Mass)으로 사용합니다. 즉, 하나의 강체(Rigidbody)에 여러 개의 Collider가 붙어 있는 경우, 각 Collider의 (Density × Collider 크기) 값들을 모두 더하여 총 질량을 결정합니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 엔티티가 물리 엔진에 의해 제어됩니다. 물리 연산에 영향을 주는 값을 설정할 수 있습니다. # Properties - **float AngularDamping [Sync]** 각속도의 변화에 대한 저항 계수를 설정합니다. 값이 클수록 각속도 변화에 더 많은 힘이 필요합니다. 0 이상의 값만 설정할 수 있습니다. - **BodyType BodyType [Sync]** 강체 타입을 설정합니다. - **PhysicsCollisionDetectionMode CollisionDetectionMode [Sync]** 물리 충돌의
[task] | single_turn [pass] | ⏳ 미판정 [title] | PhysicsRigidbodyComponent [question] | GravityScale을 0으로 설정하면 중력의 영향을 완전히 받지 않는데, 이 값이 음수일 경우 중력이 반대로 작용하는 효과가 있나요? [answer] | 제공된 문서 정보에 따르면, `GravityScale` 프로퍼티는 중력에 영향을 받는 정도를 설정하는 값이며, 값이 0일 경우 중력에 영향을 받지 않고, 1일 경우 중력 그대로 영향을 받습니다. 또한 값이 커질수록 중력에 영향을 더 많이 받는다고 설명되어 있습니다. 하지만 문서에는 **음수 값에 대한 설명이 없습니다.** 따라서 음수를 설정했을 때 중력이 반대로 작용하는지 여부는 제공된 문서만으로 확인할 수 없습니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 엔티티가 물리 엔진에 의해 제어됩니다. 물리 연산에 영향을 주는 값을 설정할 수 있습니다. # Properties - **float AngularDamping [Sync]** 각속도의 변화에 대한 저항 계수를 설정합니다. 값이 클수록 각속도 변화에 더 많은 힘이 필요합니다. 0 이상의 값만 설정할 수 있습니다. - **BodyType BodyType [Sync]** 강체 타입을 설정합니다. - **PhysicsCollisionDetectionMode CollisionDetectionMode [Sync]** 물리 충돌의
[task] | single_turn [pass] | ⏳ 미판정 [title] | PhysicsRigidbodyComponent [question] | PhysicsColliderComponent에서 발생하는 물리 접촉 이벤트는 어떤 조건에서 트리거되나요? [answer] | 제공된 참고 문서에는 `HandlePhysicsContactBeginEvent` 이벤트 핸들러의 코드 예제와 파라미터(`event.ContactedBodyEntity`), 그리고 이벤트의 발신자(`Sender: PhysicsColliderComponent`) 및 실행 공간(`Space: Server, Client`) 정보만 포함되어 있습니다. 그러나 해당 이벤트가 정확히 **어떤 물리적 조건**(예: 충돌 속도 임계값, 특정 태그 매칭, 오버랩 여부 등)에서 트리거되는지에 대한 설명은 문서에 명시되어 있지 않습니다. 따라서 주어진 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | ```lua Event Handler: [self] HandlePhysicsContactBeginEvent (PhysicsContactBeginEvent event) { --------------- Native Event Sender Info ---------------- -- Sender: PhysicsColliderComponent -- Space: Server, Client --------------------------------------------------------- -- Parameters local
[task] | two_turn [pass] | ⏳ 미판정 [title] | GridViewComponent [question] | GridViewComponent의 스크롤바 관련 속성(ScrollBarVisibility, ScrollBarThickness 등)을 설정할 때, 스크롤바가 완전히 숨겨진 상태에서 UseScroll은 true인 경우 사용자가 어떻게 스크롤할 수 있나요? [answer] | GridViewComponent에서 스크롤바가 완전히 숨겨진 상태(`ScrollBarVisibility`가 숨김으로 설정)이고 `UseScroll`이 `true`인 경우, 스크롤바 UI는 화면에 표시되지 않지만 **스크롤 기능 자체는 활성화**되어 있습니다. 따라서 사용자는 스크롤바를 직접 드래그하는 대신, **마우스 휠**이나 **터치 패드/터치스크린의 제스처(스와이프)**와 같은 입력 장치를 이용해 그리드 내용을 스크롤할 수 있습니다. `UseScroll` 속성은 스크롤바의 표시 여부와 독립적으로, 그리드 뷰 내에서 스크롤 동 [followup] | 스크롤바는 숨기되 마우스 휠이나 터치 제스처로만 스크롤이 작동하도록 설정하기 위해 변경해야 하는 속성 값과 그 설정을 위한 mLua 코드 스니펫을 요청합니다. [followup_answer] | GridViewComponent에서 스크롤바 UI는 숨기되 마우스 휠이나 터치 제스처를 통한 스크롤 기능을 유지하려면, 다음 두 속성을 설정해야 합니다. 1. **`UseScroll`**: `true`로 설정하여 스크롤 기능 자체를 활성화합니다. 2. **`ScrollBarVisible`**: `ScrollBarVisibility` 타입의 값 중 스크롤바를 숨기는 값으로 설정합니다. (참고 문서에는 `ScrollBarVisibility`의 구체적인 열거형 값(예: `Hidden`, `Always` 등)이 명시되어 있지 않으므로 [scores] | [judge_reason] | [source_doc] | 규격화된 UI Entity들을 Grid 형태로 표현합니다. 화면에 보이는 UI Entity만 생성하고 재사용합니다. 대량의 Grid를 표현하기에 최적화된 형태입니다. # Properties - **Vector2 CellSize** 자식 UI Entity의 고정 크기입니다. - **int32 FixedCount** 고정된 행 혹은 열의 개수를 설정합니다. - **GridViewFixedType FixedType** 행을 고정할지 열을 고정할지 설정합니다. - **HorizontalScrollBarDirection Hor
[task] | single_turn [pass] | ⏳ 미판정 [title] | PhysicsRigidbodyComponent [question] | Restitution 값이 1에 가까울수록 완전히 탄성 충돌에 가깝다고 하는데, 0과 1 사이의 값이 아닌 1 이상의 값을 설정하면 어떻게 되나요? [answer] | 참고 문서에는 `Restitution` 프로퍼티의 설명이 "0은 완전 비탄성 충돌, 1은 완전 탄성 충돌에 가깝습니다"라고만 나와 있으며, 1 이상의 값을 설정했을 때의 동작에 대한 설명은 포함되어 있지 않습니다. 따라서 1 이상의 값을 설정했을 때 어떤 일이 발생하는지에 대해서는 알 수 없습니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 엔티티가 물리 엔진에 의해 제어됩니다. 물리 연산에 영향을 주는 값을 설정할 수 있습니다. # Properties - **float AngularDamping [Sync]** 각속도의 변화에 대한 저항 계수를 설정합니다. 값이 클수록 각속도 변화에 더 많은 힘이 필요합니다. 0 이상의 값만 설정할 수 있습니다. - **BodyType BodyType [Sync]** 강체 타입을 설정합니다. - **PhysicsCollisionDetectionMode CollisionDetectionMode [Sync]** 물리 충돌의
[task] | single_turn [pass] | ⏳ 미판정 [title] | PhysicsRigidbodyComponent [question] | FixedRotation을 true로 설정하면 물리 상호작용에 의한 회전이 막히는데, 스크립트로 직접 회전 각도를 변경하는 것에는 영향을 주지 않나요? [answer] | `FixedRotation`이 `true`로 설정되면 물리 엔진이 계산하는 충돌이나 힘에 의한 회전은 발생하지 않습니다. 하지만 스크립트에서 엔티티의 Transform 컴포넌트를 직접 조작하여 회전 각도를 변경하는 것은 물리 엔진의 제어 영역 밖이므로, `FixedRotation` 설정에 영향을 받지 않습니다. 즉, `FixedRotation = true` 상태에서도 스크립트를 통해 회전 각도를 직접 변경할 수 있습니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 엔티티가 물리 엔진에 의해 제어됩니다. 물리 연산에 영향을 주는 값을 설정할 수 있습니다. # Properties - **float AngularDamping [Sync]** 각속도의 변화에 대한 저항 계수를 설정합니다. 값이 클수록 각속도 변화에 더 많은 힘이 필요합니다. 0 이상의 값만 설정할 수 있습니다. - **BodyType BodyType [Sync]** 강체 타입을 설정합니다. - **PhysicsCollisionDetectionMode CollisionDetectionMode [Sync]** 물리 충돌의
[task] | instruction_following [pass] | ⏳ 미판정 [title] | PhysicsSimulatorComponent [question] | 제시된 예제 코드에서 P키와 G키 입력 시 발생하는 PhysicsSimulatorComponent 상태 변화를 코드만 출력하고 설명은 주석으로 작성하세요. [answer] | ```lua Event Handler: [server only] [self] HandleTriggerEnterEvent (TriggerEnterEvent event) { --------------- Native Event Sender Info ---------------- -- Sender: InputService -- Space: Client --------------------------------------------------------- -- Parameters local inputValue = event.i [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 맵에 물리 법칙을 적용합니다. 물리 연산과 관련된 설정을 조절할 수 있습니다. # Properties - **Vector2 Gravity [Sync]** 물리 연산의 중력 값을 설정합니다. - **boolean Paused [Sync]** 물리 연산의 일시정지 여부를 설정합니다. - **Vector2 WorldBounds [Sync] [ReadOnly]** 물리 연산 범위를 설정합니다. 엔티티가 범위를 벗어나면 물리 연산을 하지 않습니다. 예를 들어, 값을 (100, 100)으로 설정하면 원점(0, 0)을 중심으로 가
[task] | single_turn [pass] | ⏳ 미판정 [title] | PhysicsRigidbodyComponent [question] | SetLinearVelocity로 속도를 변경할 때 질량에 영향을 받지 않는다는 설명이 있는데, ApplyForce로 힘을 가했을 때는 질량이 속도에 영향을 주나요? [answer] | 네, `ApplyForce`로 힘을 가할 때는 질량이 속도에 영향을 줍니다. 물리 엔진의 기본 원리에 따라 힘(F)은 질량(m)과 가속도(a)의 관계(F = m * a)를 따르므로, 동일한 크기의 힘을 가해도 질량이 클수록 가속도가 작아지고 결과적으로 속도 변화량이 적어집니다. 참고 문서에는 `ApplyForce` 메서드에 대해 "강체의 무게 중심에 특정 방향으로 힘을 가합니다"라고만 명시되어 있으며, 질량에 영향을 받지 않는다는 예외 조항은 없습니다. 반면, `SetLinearVelocity` 메서드의 설명에는 명시적으로 "질 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | - **void ApplyAngularImpulse(float impulse)** 강체에 반시계 방향으로(CCW) 각 충격량을 적용합니다. - **void ApplyForce(Vector2 force)** 강체의 무게 중심에 특정 방향으로 힘을 가합니다. - **void ApplyForce(Vector2 force, Vector2 worldPoint)** 강체에 월드 상 특정 위치에서 특정 방향으로 힘을 가합니다. - **void ApplyLinearImpulse(Vector2 impulse)** 강체의 무게 중심에
[task] | single_turn [pass] | ⏳ 미판정 [title] | PhysicsRigidbodyComponent [question] | GravityScale을 0.2로 설정하면 물체의 중력 가속도가 원래의 20%로 줄어드는 것인가요? [answer] | 네, `PhysicsRigidbodyComponent`의 `GravityScale`을 0.2로 설정하면 해당 물체에 적용되는 중력 가속도가 기본값(1.0)의 20%로 줄어듭니다. 즉, 물체는 평소보다 5배 느리게 떨어지게 됩니다. 아래는 물체가 다른 물체와 처음 접촉할 때(`HandlePhysicsContactBeginEvent` 이벤트 발생 시) `GravityScale`을 0.2로 변경하는 mLua 코드 예시입니다. ```lua Event Handler: [self] HandlePhysicsContactBeginEvent ( [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | ```lua Event Handler: [self] HandlePhysicsContactBeginEvent (PhysicsContactBeginEvent event) { --------------- Native Event Sender Info ---------------- -- Sender: PhysicsColliderComponent -- Space: Server, Client --------------------------------------------------------- -- Parameters local
[task] | single_turn [pass] | ⏳ 미판정 [title] | PhysicsRigidbodyComponent [question] | ApplyLinearImpulse로 힘을 줄 때 Vector2(0, 5)의 두 번째 값이 양수인 경우 위쪽으로 가속이 걸리는 건가요? [answer] | 네, 그렇습니다. 제공된 예제 코드에서 `ContactedBodyEntity.PhysicsRigidbodyComponent:ApplyLinearImpulse(Vector2(0, 5))`를 호출하는 것이 "위쪽으로 가속이 걸리는" 동작을 나타내는 맥락에서 사용되고 있습니다. `Vector2`의 두 번째 값(보통 Y 좌표)이 양수(`5`)인 경우, 이는 물리 엔진의 좌표계 기준에서 위쪽 방향의 임펄스(충격력)를 적용함을 의미합니다. 반대로 음수값을 주면 아래쪽으로, 첫 번째 값(X 좌표)이 양수/음수인 경우 각각 오른쪽/왼쪽으로 힘이 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | ```lua Event Handler: [self] HandlePhysicsContactBeginEvent (PhysicsContactBeginEvent event) { --------------- Native Event Sender Info ---------------- -- Sender: PhysicsColliderComponent -- Space: Server, Client --------------------------------------------------------- -- Parameters local
[task] | single_turn [pass] | ⏳ 미판정 [title] | PhysicsColliderComponent [question] | CollisionGroup을 변경하기 위해 Sleep()을 호출해야 하는데, NeverSleep 모드와 Sleep() 호출의 구체적인 차이점과 주의사항이 궁금합니다. [answer] | 제공된 참고 문서에는 `PhysicsRigidbodyComponent`의 `Sleep()` 메서드와 `SleepingMode` 프로퍼티에 대한 구체적인 동작 원리, `NeverSleep` 모드와 `Sleep()` 호출 사이의 차이점, 또는 CollisionGroup 변경 시의 주의사항에 대한 정보가 포함되어 있지 않습니다. 문서에는 예제 코드에서 `SleepingMode`를 `NeverSleep`으로 설정해야 한다는 언급과 `OnBeginPlay`에서 `self.Entity.PhysicsRigidbodyComponent:Sleep [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | - **PhysicsRigidbodyComponent GetAttachedPhysicsRigidbody()** 연결된 PhysicsRigidbodyComponent를 반환합니다. - **void OnContactBegin(PhysicsContactBeginEvent beginEvent) [ScriptOverridable]** 두 물리 강체가 충돌을 시작할 때 호출됩니다. - **void OnContactEnd(PhysicsContactEndEvent endEvent) [ScriptOverridable]** 두 물리 강체의
[task] | single_turn [pass] | ⏳ 미판정 [title] | PhysicsColliderComponent [question] | SpriteRendererComponent의 SpriteRUID를 변경하는 코드와 PhysicsColliderComponent의 CollisionGroup 변경 코드를 함께 사용했을 때, 시각적 상태와 물리적 충돌 상태가 일치하지 않는 버그가 발생할 수 있는 이유는 무엇인가요? [answer] | 제공된 참고 문서에는 `SpriteRendererComponent`의 `SpriteRUID` 변경과 `PhysicsColliderComponent`의 `CollisionGroup` 변경을 동시에 수행할 때 발생할 수 있는 동기화 버그의 원인이나 메커니즘에 대한 정보가 포함되어 있지 않습니다. 문서에는 두 컴포넌트의 개별 속성(`SpriteRUID`, `CollisionGroup`)을 수정하는 코드 예제만 제시되어 있을 뿐, 시각적 상태와 물리적 충돌 상태 간의 불일치 원인에 대한 설명은 없습니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | - **PhysicsRigidbodyComponent GetAttachedPhysicsRigidbody()** 연결된 PhysicsRigidbodyComponent를 반환합니다. - **void OnContactBegin(PhysicsContactBeginEvent beginEvent) [ScriptOverridable]** 두 물리 강체가 충돌을 시작할 때 호출됩니다. - **void OnContactEnd(PhysicsContactEndEvent endEvent) [ScriptOverridable]** 두 물리 강체의
[task] | two_turn [pass] | ⏳ 미판정 [title] | PhysicsRigidbodyComponent [question] | PhysicsRigidbodyComponent 에서 HandlePhysicsContactBeginEvent 를 어떻게 처리하나요? [answer] | `PhysicsRigidbodyComponent`에서 `HandlePhysicsContactBeginEvent`는 **`[self]`** 이벤트 핸들러로 등록하여 처리합니다. 이 이벤트는 `PhysicsColliderComponent`에서 발생하며, 서버(Server)와 클라이언트(Client) 양쪽 공간에서 모두 실행됩니다. 이벤트 객체(`PhysicsContactBeginEvent`)를 통해 `event.ContactedBodyEntity`를 접근하여 충돌한 상대 엔티티를 가져오고, 해당 엔티티의 `PhysicsRigidbod [followup] | ContactedBodyEntity 의 GravityScale 을 0.2 로 설정하는 코드를 작성해 주세요. [followup_answer] | `ContactedBodyEntity`의 `GravityScale`을 0.2로 설정하는 mLua 코드는 다음과 같습니다. ```lua Event Handler: [self] HandlePhysicsContactBeginEvent (PhysicsContactBeginEvent event) { --------------- Native Event Sender Info ---------------- -- Sender: PhysicsColliderComponent -- Space: Server, Client ------------- [scores] | [judge_reason] | [source_doc] | ```lua Event Handler: [self] HandlePhysicsContactBeginEvent (PhysicsContactBeginEvent event) { --------------- Native Event Sender Info ---------------- -- Sender: PhysicsColliderComponent -- Space: Server, Client --------------------------------------------------------- -- Parameters local
[task] | two_turn [pass] | ⏳ 미판정 [title] | GridViewComponent [question] | GridViewComponent의 주요 속성 중 FixedType과 FixedCount를 조합해 행과 열을 고정하는 방식이 어떻게 달라지는지 설명해 주세요. [answer] | `GridViewComponent`에서 그리드의 레이아웃을 고정하려면 `FixedType`과 `FixedCount`를 함께 설정해야 합니다. 이 두 속성은 서로 독립적으로 존재하지만, `FixedType`이 어떤 축을 기준으로 고정할지를 결정하고 `FixedCount`는 그 기준의 구체적인 수치를 제공합니다. ### 1. FixedType (고정 기준) `GridViewFixedType` 타입의 이 속성은 **행(Row)을 고정할지, 열(Column)을 고정할지**를 선택합니다. ### 2. FixedCount (고정 개수) ` [followup] | FixedType을 행 고정으로 설정하고 FixedCount를 5로 지정했을 때, TotalCount가 100개인 경우 실제 생성되는 자식 UI Entity의 수와 스크롤 동작이 어떻게 되는지 구체적으로 알려 주세요. [followup_answer] | 참고 문서에 따르면, `GridViewComponent`는 "화면에 보이는 UI Entity만 생성하고 재사용"하며 "대량의 Grid를 표현하기에 최적화"되어 있습니다. 따라서 `TotalCount`가 100개라고 해서 실제로 100개의 자식 UI Entity가 생성되는 것은 아닙니다. ### 1. 실제 생성되는 자식 UI Entity의 수 - **생성 수:** 화면에 **동시에 보이는(Visible) 영역**에 맞는 개수만큼만 생성됩니다. - **재사용:** 스크롤로 화면이 이동되면, 화면 밖으로 나간 Entity는 `OnCl [scores] | [judge_reason] | [source_doc] | 규격화된 UI Entity들을 Grid 형태로 표현합니다. 화면에 보이는 UI Entity만 생성하고 재사용합니다. 대량의 Grid를 표현하기에 최적화된 형태입니다. # Properties - **Vector2 CellSize** 자식 UI Entity의 고정 크기입니다. - **int32 FixedCount** 고정된 행 혹은 열의 개수를 설정합니다. - **GridViewFixedType FixedType** 행을 고정할지 열을 고정할지 설정합니다. - **HorizontalScrollBarDirection Hor
[task] | code [pass] | ⏳ 미판정 [title] | PhysicsColliderComponent [question] | PhysicsColliderComponent의 IsSensor를 true로 설정하여 물리적 상호작용 없이 충돌 이벤트만 감지하도록 하는 스크립트를 작성해줘 [answer] | `PhysicsColliderComponent`의 `IsSensor` 프로퍼티를 `true`로 설정하면, 해당 충돌체는 다른 물리 강체와 물리적으로 상호작용(밀어내거나 막는 등)하지 않지만, 충돌 감지 이벤트는 정상적으로 발생합니다. 문서에 제공된 `PhysicsColliderComponent`의 메서드 목록에는 `IsSensor` 값을 런타임에 변경하는 전용 메서드가 명시되어 있지 않습니다. 따라서 컴포넌트를 추가하거나 에디터에서 해당 프로퍼티를 미리 설정하는 것이 일반적이며, 스크립트에서는 주로 **충돌 이벤트 핸들러**를 구 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 물리 강체의 모양을 설정하고 다른 강체와 충돌 시 이벤트를 발생시킵니다. 자동으로 부모 또는 자신의 PhysicsRigidbodyComponent에 연결됩니다. 연결된 PhysicsRigidbodyComponent가 없으면 Static 강체로 취급됩니다. # Properties - **Vector2 BoxSize [Sync]** Box Collider 크기를 설정합니다. - **float CircleRadius [Sync]** Circle Collider의 반지름 길이를 설정합니다. - **boolean ClientOnl
[task] | two_turn [pass] | ⏳ 미판정 [title] | PhysicsRigidbodyComponent [question] | PhysicsSleepingMode와 CollisionDetectionMode 프로퍼티가 물리 연산 성능에 미치는 영향은 무엇인가요? [answer] | 제공된 문서에 `PhysicsSleepingMode`와 `CollisionDetectionMode` 프로퍼티의 정확한 이름과 "충돌의 수면 상태를 설정합니다", "물리 충돌의 감지 방식을 설정합니다"라는 기능 설명은 포함되어 있습니다. 하지만 이 두 프로퍼티가 **물리 연산 성능(Processing Cost, CPU Load 등)에 구체적으로 어떤 영향을 미치는지**에 대한 기술적 설명은 문서에 포함되어 있지 않습니다. 따라서 문서 근거만으로는 성능 영향에 대해 답변할 수 없습니다. [followup] | SleepingMode를 변경할 때 충돌 감지 방식(CollisionDetectionMode)이 어떻게 상호작용하며, 특정 상황에서 물체가 잠들지 않도록 막기 위해 OnUpdate에서 어떤 로직을 추가해야 하는지 구체적인 코드 요청을 합니다. [followup_answer] | 제공된 문서에는 `PhysicsSleepingMode`와 `PhysicsCollisionDetectionMode` 프로퍼티의 존재와 기본적인 기능 설명("충돌의 수면 상태를 설정", "물리 충돌의 감지 방식을 설정")만 포함되어 있습니다. 1. **상호작용 관계**: 두 프로퍼티가 서로 어떻게 상호작용하는지에 대한 기술적 설명은 문서에 없습니다. 2. **수면 방지 로직**: `OnUpdate`에서 물체가 잠들지 않도록 막기 위해 실행해야 하는 구체적인 메서드(예: `WakeUp()`)나 로직에 대한 설명도 문서에 포함되어 있지 [scores] | [judge_reason] | [source_doc] | 엔티티가 물리 엔진에 의해 제어됩니다. 물리 연산에 영향을 주는 값을 설정할 수 있습니다. # Properties - **float AngularDamping [Sync]** 각속도의 변화에 대한 저항 계수를 설정합니다. 값이 클수록 각속도 변화에 더 많은 힘이 필요합니다. 0 이상의 값만 설정할 수 있습니다. - **BodyType BodyType [Sync]** 강체 타입을 설정합니다. - **PhysicsCollisionDetectionMode CollisionDetectionMode [Sync]** 물리 충돌의
[task] | single_turn [pass] | ⏳ 미판정 [title] | PrismaticJointComponent [question] | PrismaticJointComponent의 AddJoint 메서드가 -1을 반환하는 경우, 어떤 원인으로 실패할 수 있는지 궁금합니다. [answer] | 참고 문서에는 `PrismaticJointComponent`의 `AddJoint` 메서드가 성공 시 index를, 실패 시 -1을 반환한다는 사실만 명시되어 있습니다. 그러나 **-1을 반환하는 구체적인 실패 원인(예: 타겟 엔티티에 강체 컴포넌트가 없는 경우, 동일한 엔티티에 이미 연결된 경우 등)에 대한 설명은 문서에 포함되어 있지 않습니다.** 따라서 제공된 문서 내용만으로는 `AddJoint`가 실패하는 정확한 원인을 답변할 수 없습니다. [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] | PhysicsRigidbodyComponent [question] | LinearDamping과 AngularDamping은 모두 속도의 변화에 대한 저항 계수인데, 선형속도와 각속도 중 어느 쪽에 더 큰 값을 주어야 물체가 더 빨리 정지하나요? [answer] | 문서에 따르면 `LinearDamping`은 선형속도의 변화에 대한 저항 계수이며, `AngularDamping`은 각속도의 변화에 대한 저항 계수입니다. 두 값 모두 클수록 해당 속도 변화에 더 많은 힘이 필요하며(즉, 감속이 더 빠릅니다) 0 이상의 값만 설정할 수 있습니다. 물체가 **더 빨리 정지**하려면 **진행 방향(선형) 운동**과 **회전 운동** 모두 빠르게 줄어들어야 하므로, **둘 다 큰 값을 주어야** 물체가 빠르게 정지합니다. 구체적으로: * **선형속도(전진/후진/옆으로 이동)** 를 빠르게 멈추려면 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 엔티티가 물리 엔진에 의해 제어됩니다. 물리 연산에 영향을 주는 값을 설정할 수 있습니다. # Properties - **float AngularDamping [Sync]** 각속도의 변화에 대한 저항 계수를 설정합니다. 값이 클수록 각속도 변화에 더 많은 힘이 필요합니다. 0 이상의 값만 설정할 수 있습니다. - **BodyType BodyType [Sync]** 강체 타입을 설정합니다. - **PhysicsCollisionDetectionMode CollisionDetectionMode [Sync]** 물리 충돌의
[task] | two_turn [pass] | ⏳ 미판정 [title] | PhysicsColliderComponent [question] | PhysicsColliderComponent의 물리적 특성(Friction, Restitution)을 커스텀으로 설정하려면 어떤 조건이 필요합니까? [answer] | PhysicsColliderComponent의 Friction과 Restitution 값을 커스텀으로 설정하려면 **UseCustomPhysicalProperties** 프로퍼티가 `true`여야 합니다. 이 조건이 만족되어야만 Friction과 Restitution 값이 물리 강체에 적용됩니다. `UseCustomPhysicalProperties`가 `false`인 경우, 해당 값들은 무시되고 연결된 PhysicsRigidbodyComponent의 값이 사용됩니다. 또한 Friction과 Restitution에는 각각 0 이상 [followup] | UseCustomPhysicalProperties가 true일 때 Friction과 Restitution 값이 0 이상이어야 하는 제약 사항과, 연결된 PhysicsRigidbodyComponent의 UseDensity가 true일 경우 Density 속성이 어떻게 적용되는지 코드 예시를 통해 설명해 주세요. [followup_answer] | `UseCustomPhysicalProperties`가 `true`일 때 `Friction`과 `Restitution`은 0 이상의 값만 설정할 수 있습니다. 이 조건이 만족되면 해당 값들이 물리 강체에 적용됩니다. `Density` 속성은 연결된 `PhysicsRigidbodyComponent`의 `UseDensity`가 `true`일 경우에만 사용됩니다. `UseDensity`가 `false`이면 `Density` 값은 무시됩니다. 아래 코드 예시에서는 `PhysicsColliderComponent`의 물리적 특성을 커스텀으 [scores] | [judge_reason] | [source_doc] | 물리 강체의 모양을 설정하고 다른 강체와 충돌 시 이벤트를 발생시킵니다. 자동으로 부모 또는 자신의 PhysicsRigidbodyComponent에 연결됩니다. 연결된 PhysicsRigidbodyComponent가 없으면 Static 강체로 취급됩니다. # Properties - **Vector2 BoxSize [Sync]** Box Collider 크기를 설정합니다. - **float CircleRadius [Sync]** Circle Collider의 반지름 길이를 설정합니다. - **boolean ClientOnl
[task] | single_turn [pass] | ⏳ 미판정 [title] | PrismaticJointComponent [question] | SetLocalAxis에 Vector2를 전달할 때, 축 방향이 0,0이면 어떻게 처리되는지 알고 싶습니다. [answer] | 제공된 문서에는 `SetLocalAxis` 메서드에 `Vector2(0, 0)`을 전달했을 때의 구체적인 동작이나 에러 처리 방식이 명시되어 있지 않습니다. 문서에서 확인할 수 있는 정보는 다음과 같습니다. * `SetLocalAxis(int32 index, Vector2 localAxis)` 메서드는 순번이 `index`에 해당하는 Joint의 LocalAxis 값을 설정합니다. * PrismaticJoint는 연결된 강체가 특정 축 방향으로만 상대적 이동하도록 제한하는 용도로 사용됩니다. 따라서 축 방향이 `(0, 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] | code [pass] | ⏳ 미판정 [title] | LineRendererComponent [question] | LineRendererComponent의 IsFlexible와 IsSmooth 속성을 true로 설정하고, OnUpdate에서 sin 함수를 이용해 x축 방향으로 파동 형태를 띠는 부드러운 곡선을 실시간으로 갱신하는 스크립트를 작성해줘 [answer] | LineRendererComponent의 `IsFlexible`와 `IsSmooth` 속성을 모두 `true`로 설정하면, 선의 꺾이는 부분을 부드럽게 이어 그릴 수 있습니다. `OnUpdate`에서 `math.sin` 함수를 활용하여 각 정점의 Y 좌표를 시간(`delta` 누적값)에 따라 변형시키면, X축 방향으로 진행하는 파동 형태의 부드러운 곡선을 실시간으로 갱신할 수 있습니다. 아래는 이를 구현한 mLua 스크립트입니다. ```lua Property: [None] number TimeAccumulator = 0.0 [N [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 선을 그리며, 선의 속성을 설정할 수 있는 기능을 제공합니다. # Properties - **float Flexibility [Sync]** 꺾이는 부분의 너비를 조절합니다. IsFlexible이 true일 때 적용됩니다. - **boolean IgnoreMapLayerCheck [Sync]** SortingLayer에 Map Layer 이름을 지정했을 때 자동 치환을 수행하지 않습니다. - **boolean IsFlexible [Sync]** 꺾이는 부분을 이어 그릴지 끊어 그릴지 설정합니다. - **boolean
[task] | instruction_following [pass] | ⏳ 미판정 [title] | PrismaticJointComponent [question] | W, S 키 입력 시 SetMotorSpeed 값을 변경하는 로직을 코드만 출력하고 설명은 주석으로 작성하세요. [answer] | ```lua Property: [None] number currentMotorSpeed = 0 Method: [server only] void OnBeginPlay() { -- PrismaticJointComponent 초기화 및 Motor 활성화 설정 -- AddJoint을 통해 타겟 엔티티와 연결하고, 모터가 동작하도록 설정합니다. local targetEntity = _EntityService:GetEntityByPath("/maps/map01/TargetEntity") if targetEntit [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] | PhysicsColliderComponent [question] | OnContactBegin과 OnContactEnd 이벤트 핸들러를 사용했는데, 충돌 감지가 안 되거나 중복으로 호출되는 현상이 발생하는 원인은 무엇인가요? [answer] | 제공된 참고 문서에는 `OnContactBegin`과 `OnContactEnd` 이벤트 핸들러의 정확한 동작 원리, 충돌 감지 실패 또는 중복 호출에 대한 기술적인 원인, 그리고 해당 문제를 해결하기 위한 구체적인 설정 사항이나 디버깅 가이드가 포함되어 있지 않습니다. 문서에서 확인 가능한 정보는 다음과 같습니다. 1. **기능 정의**: * `OnContactBegin(PhysicsContactBeginEvent beginEvent)`: 두 물리 강체(Rigidbody)가 충돌을 **시작할 때** 호출됩니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | - **PhysicsRigidbodyComponent GetAttachedPhysicsRigidbody()** 연결된 PhysicsRigidbodyComponent를 반환합니다. - **void OnContactBegin(PhysicsContactBeginEvent beginEvent) [ScriptOverridable]** 두 물리 강체가 충돌을 시작할 때 호출됩니다. - **void OnContactEnd(PhysicsContactEndEvent endEvent) [ScriptOverridable]** 두 물리 강체의
[task] | single_turn [pass] | ⏳ 미판정 [title] | PhysicsColliderComponent [question] | GetAttachedPhysicsRigidbody() 메서드로 강체 컴포넌트를 가져와서 속도를 조작할 때, 클라이언트와 서버 간 동기화 문제를 방지하기 위해 어떤 실행 공간([server only] 또는 [client only])을 지정해야 하나요? [answer] | 물리 강체(PhysicsRigidbodyComponent)의 속도나 임펄스 등 물리 상태를 조작하는 것은 서버에서 처리되어야 합니다. 클라이언트에서 물리 상태를 직접 변경하면 클라이언트와 서버 간의 물리 상태 불일치(동기화 문제)가 발생하기 때문입니다. 따라서 `GetAttachedPhysicsRigidbody()` 메서드로 강체 컴포넌트를 가져와 속도를 조작하는 메서드에는 **`[server only]`** 실행 공간을 지정해야 합니다. 참고로, 제공된 문서에는 `PhysicsRigidbodyComponent`의 구체적인 속도 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | - **PhysicsRigidbodyComponent GetAttachedPhysicsRigidbody()** 연결된 PhysicsRigidbodyComponent를 반환합니다. - **void OnContactBegin(PhysicsContactBeginEvent beginEvent) [ScriptOverridable]** 두 물리 강체가 충돌을 시작할 때 호출됩니다. - **void OnContactEnd(PhysicsContactEndEvent endEvent) [ScriptOverridable]** 두 물리 강체의