← 목록

mLua · Nemotron SDG 질문-응답 (SFT)

총 21,567개 · 페이지 501/719
🔀 랜덤
불러오는 중…

[task] | single_turn [pass] | ⏳ 미판정 [title] | 엔티티에 물리 적용하기 [question] | J 키 입력으로 ApplyLinearImpulse를 호출하는 예제에서 이벤트 핸들러의 Space가 Client인 이유는 무엇인가요? [answer] | `InputService`의 `HandleKeyDownEvent`는 클라이언트(사용자 기기)에서 발생하는 키 입력을 감지하는 이벤트입니다. 따라서 해당 이벤트 핸들러의 실행 공간(Space)은 **Client**로 고정되어 있습니다. 문서에서 제공된 예제 코드에서도 이벤트 핸들러의 Native Event Sender Info에 `Space: Client`라고 명시되어 있으며, 이는 물리 연산이 서버에서 수행되든(ClientOnly: False) 클라이언트에서 수행되든(ClientOnly: True) 키 입력 감지 자체는 항상 클라 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | **PhysicsRigidbodyComponent**의 대부분의 Property와 Function은 **PhysicsColliderComponent**의 ClientOnly 프로퍼티의 값에 따라 사용, 접근 가능한 실행 공간이 나뉘게 됩니다. ClientOnly에 따라 각각의 물리 World에서 연산되며, 이에 따라 서로 충돌하거나 영향을 주지 않습니다. * **ClientOnly가 True일 때**: 해당 Entity의 물리 강체는 Client에서만 생성되고 물리 연산은 각각의 Client에서 계산됩니다. 다른 Client와 결

[task] | code [pass] | ⏳ 미판정 [title] | 엔티티에 물리 적용하기 [question] | PhysicsRigidbodyComponent의 BodyType을 Dynamic으로 설정하고 Mass, Friction, Restitution 값을 지정하여 물리 법칙에 따라 움직이는 구체 엔티티 스크립트를 작성해줘 [answer] | PhysicsRigidbodyComponent의 `BodyType`을 `Dynamic`으로 설정하고, `Mass`, `Friction`, `Restitution` 값을 지정하여 물리 법칙에 따라 움직이는 구체 엔티티 스크립트는 다음과 같습니다. Entity에 `PhysicsRigidbodyComponent`와 `PhysicsColliderComponent`가 모두 있어야 물리 충돌이 작동하므로, 스크립트는 이 두 컴포넌트가 포함된 엔티티에 붙여 적용되어야 합니다. ```lua Property: [None] number MyMas [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 물리 법칙을 엔티티에 적용하고 물리 엔티티끼리 충돌할 수 있게 만들어 봅시다. 월드에 물리를 만드는 방법은 [물리 사용하기](/docs?postId=757%7B%22target%22:%22_self%22%7D)를 참고하세요. # PhysicsRigidbodyComponent Entity에 PhysicsRigidbodyComponent를 추가하면 Entity가 물리 엔진에 의해 제어됩니다. 또한 엔티티의 저항 계수, 마찰 계수, 질량 등 물리 연산에 영향을 주는 값을 설정할 수 있습니다. Entity가 Phy

[task] | single_turn [pass] | ⏳ 미판정 [title] | 엔티티에 물리 적용하기 [question] | Restitution 값을 다르게 설정한 Dynamic 타입 엔티티들이 부딪혀 튕겨나가는 동작을 구현하려면 어떤 컴포넌트들이 필요할까요? [answer] | Dynamic 타입의 물리 엔티티들이 서로 부딪혀 튕겨나가는 동작을 구현하려면 다음 컴포넌트들이 필요합니다. 1. **PhysicsRigidbodyComponent**: 물리 강체(Rigidbody)를 생성하고 `Mass`(질량)나 `Restitution`(탄성력)과 같은 물리적 속성을 설정하는 데 사용됩니다. 2. **PhysicsColliderComponent**: 충돌을 감지하기 위한 충돌체(Collider)를 정의합니다. `CollisionGroup`을 설정하여 어떤 그룹끼리 충돌할지 지정할 수 있습니다. 3. **P [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | **PhysicsRigidbodyComponent**의 대부분의 Property와 Function은 **PhysicsColliderComponent**의 ClientOnly 프로퍼티의 값에 따라 사용, 접근 가능한 실행 공간이 나뉘게 됩니다. ClientOnly에 따라 각각의 물리 World에서 연산되며, 이에 따라 서로 충돌하거나 영향을 주지 않습니다. * **ClientOnly가 True일 때**: 해당 Entity의 물리 강체는 Client에서만 생성되고 물리 연산은 각각의 Client에서 계산됩니다. 다른 Client와 결

[task] | two_turn [pass] | ⏳ 미판정 [title] | 다양한 물리 joint 활용하기 [question] | PulleyJointComponent에서 Ratio 프로퍼티가 양쪽 가상의 줄의 구속력(constraint force) 비율에 미치는 영향과 총길이 유지 공식은 어떻게 적용되나요? [answer] | PulleyJointComponent의 `Ratio` 프로퍼티는 양쪽 가상의 줄(엔티티와 GroundAnchor 사이의 선)의 구속력 비율을 결정합니다. `Ratio` 값이 커질수록 해당 쪽 줄의 구속력이 상대적으로 약해집니다. 구체적인 적용 방식은 다음과 같습니다. 1. **총길이 유지 공식**: PulleyJoint의 총길이는 다음 공식에 따라 최초 연결 시점에 고정됩니다. `총길이 = (Entity A와 GroundAnchorA 사이의 최초 거리) + (Ratio * Entity B와 GroundAnchorB 사 [followup] | Ratio가 3일 때 Entity A의 선이 3만큼 줄어드는 경우 Entity B의 선 변화량과 구속력 비율이 1/3이 되는 원리를 설명하고, 이를 구현하는 코드 구조를 보여주세요. [followup_answer] | Ratio가 3일 때 Entity A의 선이 3만큼 줄어드는 경우의 물리적 원리와 구현 구조는 다음과 같습니다. ### 1. 원리 설명 PulleyJointComponent에서 `Ratio`는 양쪽 가상의 줄의 구속력 비율을 결정합니다. * **선 길이 변화:** `Ratio`가 3일 때, Entity A의 선 길이가 3만큼 감소하면 Entity B의 선 길이는 1만큼 증가합니다. 이는 총길이(최초 거리 A + 3 * 최초 거리 B)가 일정하게 유지되어야 하기 때문에 발생하는 현상입니다. * **구속력(Constraint [scores] | [judge_reason] | [source_doc] | RevoluteJoint는 엔티티의 회전과 관련된 제한을 설정합니다. UseLimits를 활성화한 후, LowerAngle, UpperAngle를 활용해 회전 각도를 제한할 수 있습니다. 엔티티가 회전할 때는 LocalAnchorA와 B가 만나는 지점을 공통의 Anchor로 사용합니다. 또한 Motor를 사용하면 Anchor를 기준으로 회전하는 힘을 받을 수 있습니다. | 주요 프로퍼티 | 설명 | | --- | --- | |**UseLimits** | 상대적 각도에 제한을 설정할지 여부를 결정합니다. | |**LowerAn

[task] | code [pass] | ⏳ 미판정 [title] | 다양한 물리 joint 활용하기 [question] | PhysicsRigidbodyComponent와 PhysicsColliderComponent가 추가된 두 엔티티를 RevoluteJointComponent로 연결하고 LocalAnchor A, B 위치를 설정하는 초기화 스크립트를 작성해줘 [answer] | 참고 문서에 따르면, `RevoluteJointComponent`를 포함한 Joint 컴포넌트는 **mLua 스크립트로 직접 추가하거나 초기화하지 않습니다.** 문서에 명시된 Joint 추가 및 설정 방법은 다음과 같습니다. 1. **엔티티 준비**: `PhysicsRigidbodyComponent`, `PhysicsColliderComponent`가 추가된 두 엔티티를 생성하고 배치합니다. 2. **컴포넌트 추가**: 에디터에서 해당 엔티티에 **JointComponent** (이 경우 `RevoluteJointCompon [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | WheelJoint는 연결된 엔티티가 바퀴처럼 동작하도록 제한을 설정합니다. Motor를 사용한 TargetEntityRef는 MotorSpeed 값을 목표 속도로 사용합니다. | 주요 프로퍼티 | 설명 | | --- | --- | | **MaxMotorTorque** | 목표 모터 속도에 도달하기 위한 Joint의 모터에 적용할 수 있는 최대 힘을 설정합니다. | | **MotorEnable** | Motor를 사용할지 여부를 설정합니다. True일 경우 연결된 Entity가 LocalAxis 방향의 힘을 받습니다. | | *

[task] | single_turn [pass] | ⏳ 미판정 [title] | 루아 프로파일러를 활용하여 최적화하기 [question] | 루아 프로파일러의 Frame Data에서 All을 선택하면 개별 프레임 데이터를 합산해서 볼 수 있나요? [answer] | 네, 루아 프로파일러의 Frame Data에서 All을 선택하면 전체 프레임을 합산해서 데이터를 볼 수 있습니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | * Context는 Core에서의 실행 흐름을 뜻합니다. * Server, Client, Instance, Editor 등의 Context 중에서 선택할 수 있습니다. * Context를 선택하면 ⑤ 차트 영역과 ⑨ 프로파일링 결과 영역에서 데이터를 확인할 수 있습니다. ### ④ 그래프 선택 * **Elapsed Time, Network Send, Network Receive, Lua Memory** 중에서 어떤 그래프를 ⑤의 차트 영역에 표시할 것인지 선택합니다. * **File - Option**에서 **Network**를

[task] | single_turn [pass] | ⏳ 미판정 [title] | 루아 프로파일러를 활용하여 최적화하기 [question] | Network Send와 Network Receive 그래프를 차트 영역에 표시하려면 File - Option에서 어떤 항목을 체크해야 하나요? [answer] | Network Send와 Network Receive 그래프를 차트 영역에 표시하려면 **File - Option**에서 **Network** 항목을 체크해야 합니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | * Context는 Core에서의 실행 흐름을 뜻합니다. * Server, Client, Instance, Editor 등의 Context 중에서 선택할 수 있습니다. * Context를 선택하면 ⑤ 차트 영역과 ⑨ 프로파일링 결과 영역에서 데이터를 확인할 수 있습니다. ### ④ 그래프 선택 * **Elapsed Time, Network Send, Network Receive, Lua Memory** 중에서 어떤 그래프를 ⑤의 차트 영역에 표시할 것인지 선택합니다. * **File - Option**에서 **Network**를

[task] | single_turn [pass] | ⏳ 미판정 [title] | 다양한 물리 joint 활용하기 [question] | WeldJointComponent로 연결된 두 엔티티가 서로 일정한 거리를 유지하며 움직일 때, 각각의 절대 좌표가 고정되는 것과 어떤 차이가 있나요? [answer] | WeldJointComponent로 연결된 두 엔티티의 움직임은 "각각의 절대 좌표가 고정되는 것"과 명확한 차이가 있습니다. **WeldJointComponent의 동작 원리** WeldJointComponent는 두 엔티티가 마치 꼬챙이에 양 끝을 끼운 것처럼 **상대적인 위치(거리와 각도)가 일정하게 유지**되도록 제한을 걸고 있습니다. 즉, 두 엔티티는 서로에 대해 절대적인 이동이나 회전이 불가능하지만, 두 엔티티를 포함한 **전체 시스템이 공간상에서 이동하거나 회전하는 것은 가능합니다.** * **절대 좌표 고정:* [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | RevoluteJoint는 엔티티의 회전과 관련된 제한을 설정합니다. UseLimits를 활성화한 후, LowerAngle, UpperAngle를 활용해 회전 각도를 제한할 수 있습니다. 엔티티가 회전할 때는 LocalAnchorA와 B가 만나는 지점을 공통의 Anchor로 사용합니다. 또한 Motor를 사용하면 Anchor를 기준으로 회전하는 힘을 받을 수 있습니다. | 주요 프로퍼티 | 설명 | | --- | --- | |**UseLimits** | 상대적 각도에 제한을 설정할지 여부를 결정합니다. | |**LowerAn

[task] | single_turn [pass] | ⏳ 미판정 [title] | 루아 프로파일러를 활용하여 최적화하기 [question] | 차트를 확대해서 보다가 다시 전체 차트를 화면에 맞게 보기 위해 우클릭 메뉴에서 선택해야 하는 항목은 무엇인가요? [answer] | 차트를 확대해서 보다가 다시 전체 차트를 화면에 맞게 보려면 차트 영역에서 우클릭한 후 **Zoom to Fit Data** 항목을 선택하면 됩니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | * Context는 Core에서의 실행 흐름을 뜻합니다. * Server, Client, Instance, Editor 등의 Context 중에서 선택할 수 있습니다. * Context를 선택하면 ⑤ 차트 영역과 ⑨ 프로파일링 결과 영역에서 데이터를 확인할 수 있습니다. ### ④ 그래프 선택 * **Elapsed Time, Network Send, Network Receive, Lua Memory** 중에서 어떤 그래프를 ⑤의 차트 영역에 표시할 것인지 선택합니다. * **File - Option**에서 **Network**를

[task] | single_turn [pass] | ⏳ 미판정 [title] | 엔티티에 물리 적용하기 [question] | 엔티티가 물리 법칙에 따라 움직이게 하려면 PhysicsRigidbodyComponent만 추가하면 되는지, 아니면 다른 컴포넌트와 반드시 함께 사용해야 하는지 알려주세요. [answer] | 엔티티가 물리 법칙에 따라 움직이려면 **PhysicsRigidbodyComponent**를 추가해야 합니다. 하지만 다른 엔티티와 **충돌**이 일어나려면 **PhysicsColliderComponent**도 반드시 함께 포함해야 합니다. 즉, 물리 엔진의 제어를 받기 위해서는 PhysicsRigidbodyComponent만으로도 가능하지만, 물리적 충돌 상호작용을 원한다면 두 컴포넌트가 함께 존재해야 합니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 물리 법칙을 엔티티에 적용하고 물리 엔티티끼리 충돌할 수 있게 만들어 봅시다. 월드에 물리를 만드는 방법은 [물리 사용하기](/docs?postId=757%7B%22target%22:%22_self%22%7D)를 참고하세요. # PhysicsRigidbodyComponent Entity에 PhysicsRigidbodyComponent를 추가하면 Entity가 물리 엔진에 의해 제어됩니다. 또한 엔티티의 저항 계수, 마찰 계수, 질량 등 물리 연산에 영향을 주는 값을 설정할 수 있습니다. Entity가 Phy

[task] | code [pass] | ⏳ 미판정 [title] | 엔티티에 물리 적용하기 [question] | PhysicsRigidbodyComponent의 GravityScale 값을 2로 설정하여 기본 중력의 2배로 가속되어 떨어지는 엔티티 스크립트를 작성해줘 [answer] | `PhysicsRigidbodyComponent`의 `GravityScale` 프로퍼티는 엔티티가 받는 중력의 배수를 조절합니다. `GravityScale`을 2로 설정하면, 기본 중력 값(예: `(0, -10)`)의 2배인 `(0, -20)`만큼의 중력을 받아 더 빠르게 아래로 가속됩니다. 엔티티가 물리 법칙에 따라 떨어지고 충돌하려면 **`PhysicsRigidbodyComponent`** 와 **`PhysicsColliderComponent`** 가 모두 필요합니다. 또한 `BodyType`이 중력의 영향을 받아 움직이려면 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 물리 법칙을 엔티티에 적용하고 물리 엔티티끼리 충돌할 수 있게 만들어 봅시다. 월드에 물리를 만드는 방법은 [물리 사용하기](/docs?postId=757%7B%22target%22:%22_self%22%7D)를 참고하세요. # PhysicsRigidbodyComponent Entity에 PhysicsRigidbodyComponent를 추가하면 Entity가 물리 엔진에 의해 제어됩니다. 또한 엔티티의 저항 계수, 마찰 계수, 질량 등 물리 연산에 영향을 주는 값을 설정할 수 있습니다. Entity가 Phy

[task] | single_turn [pass] | ⏳ 미판정 [title] | 엔티티에 물리 적용하기 [question] | ApplyForce()와 ApplyLinearImpulse() 함수를 사용할 때 각각의 물리적 의미와 사용 시나리오가 어떻게 다른지 설명해 주세요. [answer] | `ApplyForce()`와 `ApplyLinearImpulse()`는 모두 엔티티의 물리 강체에 영향을 미치지만, 물리적 의미와 적용 방식에서 명확한 차이가 있습니다. **1. ApplyForce()** * **물리적 의미:** 엔티티에 **지속적인 힘(force)**을 가하는 함수입니다. * **사용 시나리오:** 특정 키를 누르고 있는 동안 지속적으로 특정 방향으로 힘을 가하고 싶은 경우에 사용합니다. 예를 들어, 캐릭터가 방향키를 유지하는 동안 계속 가속되어 이동하는 상황 등이 해당됩니다. * **특징:** 적용 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | #### 힘을 가하는 함수 `ApplyForce()`, `ApplyTorque()` 함수는 지속적인 힘을 가할 수 있습니다. 특정 Key를 눌러 지속적으로 특정 방향으로 힘 가하고 싶을 때가 해당됩니다. 매개 변수 force는 힘을 의미합니다. 해당 Entity에 대응하는 물리 강체의 질량 값에 영향을 받습니다. #### 충격량을 적용하는 함수 `ApplyAngularImpulse()`, `ApplyLinearImpulse()` 함수는 일시적으로 짧은 충격을 가할 수 있습니다. 대포 발파, 방망이 휘두르기 같은 짧은 충격을 주

[task] | single_turn [pass] | ⏳ 미판정 [title] | 엔티티에 물리 적용하기 [question] | PhysicsRigidbodyComponent의 BodyType 중 Static과 Kinematic은 질량이 무한히 크다는 점에서 유사해 보이지만, 실제로는 어떤 동작 차이 때문에 각각을 선택해야 하나요? [answer] | `PhysicsRigidbodyComponent`의 `BodyType` 중 `Static`과 `Kinematic`은 모두 물리 엔진상에서 질량이 무한히 크다고 취급된다는 공통점이 있습니다. 하지만 두 타입을 선택해야 하는 결정적인 동작 차이는 **속도를 지정하여 움직일 수 있는지 여부**입니다. * **Static**: 질량이 무한히 큰 엔티티로 취급되며, `Dynamic` 타입의 엔티티와 충돌할 수 있습니다. 하지만 속도를 지정하여 스스로 움직일 수 없습니다. * **Kinematic**: 질량이 무한히 큰 엔티티로 취급 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 물리 법칙을 엔티티에 적용하고 물리 엔티티끼리 충돌할 수 있게 만들어 봅시다. 월드에 물리를 만드는 방법은 [물리 사용하기](/docs?postId=757%7B%22target%22:%22_self%22%7D)를 참고하세요. # PhysicsRigidbodyComponent Entity에 PhysicsRigidbodyComponent를 추가하면 Entity가 물리 엔진에 의해 제어됩니다. 또한 엔티티의 저항 계수, 마찰 계수, 질량 등 물리 연산에 영향을 주는 값을 설정할 수 있습니다. Entity가 Phy

[task] | single_turn [pass] | ⏳ 미판정 [title] | 엔티티에 물리 적용하기 [question] | 물리 강체의 위치가 서버와 클라이언트 사이에 동기화되지 않는 현상이 발생하는데 ClientOnly 값을 어떻게 확인해야 하나요? [answer] | `PhysicsRigidbodyComponent`의 물리 연산과 위치 동기화 방식은 `PhysicsColliderComponent`의 **ClientOnly** 프로퍼티 값에 따라 결정됩니다. **ClientOnly 값에 따른 동작** 1. **ClientOnly가 True인 경우** * 해당 엔티티의 물리 강체는 **Client에서만** 생성됩니다. * 물리 연산은 각 클라이언트에서 개별적으로 계산되며, **서버나 다른 클라이언트와 결과가 동기화되지 않습니다.** * 관련 함수 호출 및 대부분의 프로퍼티 변경은 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | **PhysicsRigidbodyComponent**의 대부분의 Property와 Function은 **PhysicsColliderComponent**의 ClientOnly 프로퍼티의 값에 따라 사용, 접근 가능한 실행 공간이 나뉘게 됩니다. ClientOnly에 따라 각각의 물리 World에서 연산되며, 이에 따라 서로 충돌하거나 영향을 주지 않습니다. * **ClientOnly가 True일 때**: 해당 Entity의 물리 강체는 Client에서만 생성되고 물리 연산은 각각의 Client에서 계산됩니다. 다른 Client와 결

[task] | single_turn [pass] | ⏳ 미판정 [title] | 루아 프로파일러를 활용하여 최적화하기 [question] | 배포된 게임에서 루아 프로파일러를 실행할 때, 설정 메뉴의 어떤 탭에서 어떤 옵션을 활성화해야 바로 기록이 시작되나요? [answer] | 배포된 게임에서 루아 프로파일러를 실행하여 바로 기록을 시작하려면, 게임 우측 상단의 설정 버튼을 눌러 **기타** 탭을 선택해야 합니다. 이 탭에서 **Lua Profiler 사용** 옵션을 켜고 **Lua Profiler 실행** 버튼을 누르면 루아 프로파일러가 실행되면서 즉시 기록이 시작됩니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 제작한 게임을 플레이하다 보면 다양한 상황에서 느려지는 것을 경험할 수 있습니다. 이처럼 게임의 처리 속도에서 부하가 걸리는 병목 지점(Bottleneck)을 찾아 수정하는 것을 최적화라고 합니다. 일부 병목 지점만 해결해도 게임의 전체적인 성능 향상을 기대할 수 있기 때문에 최적화는 상당히 중요한 작업입니다. 루아 프로파일러는 이러한 스크립트 최적화 작업을 더욱 손쉽게 진행할 수 있도록 도와줍니다. 이번 시간에는 **루아 프로파일러**가 무엇인지 알아보고 활용법을 살펴보도록 합시다. **더 알아보기** >

[task] | code [pass] | ⏳ 미판정 [title] | 다양한 물리 joint 활용하기 [question] | RevoluteJointComponent의 MotorEnable과 MotorSpeed 프로퍼티를 조작하여 연결된 엔티티의 회전 방향과 속도를 역동적으로 변경하는 스크립트를 작성해줘 [answer] | 제공된 참고 문서에는 `WheelJoint`의 `MaxMotorTorque`, `MotorEnable`, `MotorSpeed` 프로퍼티에 대한 설명만 포함되어 있으며, **`RevoluteJointComponent`에 대해 이 프로퍼티들이 존재한다는 명시적 언급이 없습니다.** 또한, 문서의 "활용 예제" 섹션에서 `RevoluteJointComponent`를 언급하긴 하지만, 해당 컴포넌트의 프로퍼티(특히 Motor 관련 프로퍼티)를 직접 조작하는 코드 예시나 API 정의가 제공되지 않았습니다. 문서에 있는 mLua 예제들은 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | WheelJoint는 연결된 엔티티가 바퀴처럼 동작하도록 제한을 설정합니다. Motor를 사용한 TargetEntityRef는 MotorSpeed 값을 목표 속도로 사용합니다. | 주요 프로퍼티 | 설명 | | --- | --- | | **MaxMotorTorque** | 목표 모터 속도에 도달하기 위한 Joint의 모터에 적용할 수 있는 최대 힘을 설정합니다. | | **MotorEnable** | Motor를 사용할지 여부를 설정합니다. True일 경우 연결된 Entity가 LocalAxis 방향의 힘을 받습니다. | | *

[task] | single_turn [pass] | ⏳ 미판정 [title] | 루아 프로파일러를 활용하여 최적화하기 [question] | Total Time과 Total Self Time의 차이는 무엇이며, 하위 함수 호출 시간을 제외하고 본 함수 자체의 실행 시간만 확인하려면 어떤 항목을 봐야 하나요? [answer] | 루아 프로파일러의 프로파일링 결과에서 **Total Time**과 **Total Self Time**은 측정 범위에 따라 다음과 같이 구분됩니다. * **Total Time (ms)**: 해당 함수가 실행되는 동안의 **총 실행 시간**입니다. 이 시간에는 해당 함수 내부에서 호출된 하위 함수(자식 함수)들의 실행 시간도 모두 포함됩니다. * **Total Self Time (ms)**: 하위 샘플(하위 함수 호출) 시간을 제외하고, **해당 함수 자체에서 소요된 시간**만 나타냅니다. 따라서 하위 함수 호출 시간을 제외 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | * Context는 Core에서의 실행 흐름을 뜻합니다. * Server, Client, Instance, Editor 등의 Context 중에서 선택할 수 있습니다. * Context를 선택하면 ⑤ 차트 영역과 ⑨ 프로파일링 결과 영역에서 데이터를 확인할 수 있습니다. ### ④ 그래프 선택 * **Elapsed Time, Network Send, Network Receive, Lua Memory** 중에서 어떤 그래프를 ⑤의 차트 영역에 표시할 것인지 선택합니다. * **File - Option**에서 **Network**를

[task] | single_turn [pass] | ⏳ 미판정 [title] | 엔티티에 물리 적용하기 [question] | PhysicsRigidbodyComponent 없이 PhysicsColliderComponent만 붙인 엔티티는 어떤 물리 동작을 하며, 어떤 용도로 주로 사용되나요? [answer] | `PhysicsRigidbodyComponent` 없이 `PhysicsColliderComponent`만 부착된 엔티티는 **Static(정적) 타입**으로 취급됩니다. ### 물리 동작 * **물리적 이동 불가:** 중력이나 외부 힘(`ApplyForce`, `ApplyImpulse` 등)의 영향을 받지 않으며, 다른 물체와 충돌해도 위치가 바뀌지 않습니다. * **충돌 판정 수행:** `PhysicsColliderComponent`의 설정(크기, 형태, 충돌 그룹 등)에 따라 다른 물체와의 충돌 판정은 정상적으로 이루어 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | #### 힘을 가하는 함수 `ApplyForce()`, `ApplyTorque()` 함수는 지속적인 힘을 가할 수 있습니다. 특정 Key를 눌러 지속적으로 특정 방향으로 힘 가하고 싶을 때가 해당됩니다. 매개 변수 force는 힘을 의미합니다. 해당 Entity에 대응하는 물리 강체의 질량 값에 영향을 받습니다. #### 충격량을 적용하는 함수 `ApplyAngularImpulse()`, `ApplyLinearImpulse()` 함수는 일시적으로 짧은 충격을 가할 수 있습니다. 대포 발파, 방망이 휘두르기 같은 짧은 충격을 주

[task] | single_turn [pass] | ⏳ 미판정 [title] | 루아 프로파일러를 활용하여 최적화하기 [question] | 루아 프로파일러가 뜨지 않거나 실행 오류가 나는 경우, 어떤 운영체제와 런타임 환경 요건을 확인해야 하나요? [answer] | 루아 프로파일러가 실행되지 않거나 오류가 발생하는 경우, 다음 두 가지 환경 요건을 확인해야 합니다. 1. **운영체제**: 최신 업데이트가 적용된 **Windows 7** 이상의 운영체제를 사용해야 합니다. 2. **.NET Runtime**: **`.NET Core 3.1 Desktop Runtime`** 이상의 버전이 설치되어 있어야 합니다. `.NET Core 3.1 Desktop Runtime`이 설치되어 있지 않아 프로파일러가 실행되지 않는다면, 해당 런타임을 설치한 후 다시 실행을 시도해 보세요. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 제작한 게임을 플레이하다 보면 다양한 상황에서 느려지는 것을 경험할 수 있습니다. 이처럼 게임의 처리 속도에서 부하가 걸리는 병목 지점(Bottleneck)을 찾아 수정하는 것을 최적화라고 합니다. 일부 병목 지점만 해결해도 게임의 전체적인 성능 향상을 기대할 수 있기 때문에 최적화는 상당히 중요한 작업입니다. 루아 프로파일러는 이러한 스크립트 최적화 작업을 더욱 손쉽게 진행할 수 있도록 도와줍니다. 이번 시간에는 **루아 프로파일러**가 무엇인지 알아보고 활용법을 살펴보도록 합시다. **더 알아보기** >

[task] | single_turn [pass] | ⏳ 미판정 [title] | 루아 프로파일러를 활용하여 최적화하기 [question] | 기록이 너무 많이 쌓여서 프로파일러 자체가 느려지는 현상을 방지하기 위해, 옵션에서 어떤 항목을 조정하면 좋은가요? [answer] | 프로파일러가 기록 데이터가 과도하게 쌓이면서 느려지는 문제를 방지하려면 **File > Options** 메뉴의 **Record Max Frames** 항목을 조정하면 됩니다. 이 옵션은 지정한 프레임 수 이상으로 기록이 쌓일 경우 이전 데이터를 자동으로 버리도록 처리하는 역할을 합니다. 기본값은 1,000프레임으로 설정되어 있으며, 1초에 60프레임을 기준으로 하면 약 16초간의 데이터가 기록되는 것입니다. 프로파일러의 부하를 줄이고 싶다면 이 값을 더 낮게 설정하여 기록 범위를 제한할 수 있습니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 제작한 게임을 플레이하다 보면 다양한 상황에서 느려지는 것을 경험할 수 있습니다. 이처럼 게임의 처리 속도에서 부하가 걸리는 병목 지점(Bottleneck)을 찾아 수정하는 것을 최적화라고 합니다. 일부 병목 지점만 해결해도 게임의 전체적인 성능 향상을 기대할 수 있기 때문에 최적화는 상당히 중요한 작업입니다. 루아 프로파일러는 이러한 스크립트 최적화 작업을 더욱 손쉽게 진행할 수 있도록 도와줍니다. 이번 시간에는 **루아 프로파일러**가 무엇인지 알아보고 활용법을 살펴보도록 합시다. **더 알아보기** >

[task] | single_turn [pass] | ⏳ 미판정 [title] | 루아 프로파일러를 활용하여 최적화하기 [question] | 프로파일러로 수집한 데이터를 외부에서 분석하거나 공유하기 위해, File 메뉴의 어떤 기능을 통해 어떤 형식의 파일로 저장할 수 있나요? [answer] | 루아 프로파일러의 **File** 메뉴에서 수집한 데이터를 외부로 내보내거나 공유할 수 있습니다. 1. **Load / Save**: 프로파일링으로 수집한 데이터를 **XML** 형식으로 저장하거나 불러올 수 있습니다. 2. **Export Report**: 루아 프로파일링 요약 보고서를 **XML** 형식으로 Export할 수 있습니다. 따라서 데이터는 **XML** 파일 형식으로 저장 및 공유할 수 있습니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 제작한 게임을 플레이하다 보면 다양한 상황에서 느려지는 것을 경험할 수 있습니다. 이처럼 게임의 처리 속도에서 부하가 걸리는 병목 지점(Bottleneck)을 찾아 수정하는 것을 최적화라고 합니다. 일부 병목 지점만 해결해도 게임의 전체적인 성능 향상을 기대할 수 있기 때문에 최적화는 상당히 중요한 작업입니다. 루아 프로파일러는 이러한 스크립트 최적화 작업을 더욱 손쉽게 진행할 수 있도록 도와줍니다. 이번 시간에는 **루아 프로파일러**가 무엇인지 알아보고 활용법을 살펴보도록 합시다. **더 알아보기** >

[task] | single_turn [pass] | ⏳ 미판정 [title] | 엔티티에 물리 적용하기 [question] | Restitution 값이 0과 1일 때 나타나는 충돌 특성의 차이가 무엇이며, 이 값이 역학적 에너지 보존에 어떤 영향을 주나요? [answer] | Restitution(반발 계수) 값이 0과 1일 때의 충돌 특성과 역학적 에너지 보존에 미치는 영향은 다음과 같습니다. **1. Restitution 값에 따른 충돌 특성** * **Restitution = 0**: **완전 비탄성 충돌**에 가깝게 충돌합니다. 이 경우 충돌 시 역학적 에너지가 손실됩니다. 극단적인 경우(완전 비탄성 충돌)에는 역학적 에너지가 손실되며 충돌 후 두 물체가 하나가 되어 함께 운동하게 됩니다. * **Restitution = 1**: **완전 탄성 충돌**에 가깝게 충돌합니다. 이 경우 충돌 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 물리 법칙을 엔티티에 적용하고 물리 엔티티끼리 충돌할 수 있게 만들어 봅시다. 월드에 물리를 만드는 방법은 [물리 사용하기](/docs?postId=757%7B%22target%22:%22_self%22%7D)를 참고하세요. # PhysicsRigidbodyComponent Entity에 PhysicsRigidbodyComponent를 추가하면 Entity가 물리 엔진에 의해 제어됩니다. 또한 엔티티의 저항 계수, 마찰 계수, 질량 등 물리 연산에 영향을 주는 값을 설정할 수 있습니다. Entity가 Phy

[task] | single_turn [pass] | ⏳ 미판정 [title] | 엔티티에 물리 적용하기 [question] | CollisionDetectionMode를 Discrete로 설정했을 때, 빠른 속도로 움직이는 작은 오브젝트가 바닥을 뚫고 내려가는 현상이 발생하는 원인은 무엇이며 이를 어떻게 해결할 수 있나요? [answer] | CollisionDetectionMode를 Discrete로 설정했을 때 빠른 속도로 움직이는 작은 오브젝트가 바닥을 뚫고 내려가는 현상은 충돌 감지 방식이 비연속적(Discrete)이기 때문에 발생합니다. Discrete 모드는 물체의 위치가 바뀌는 순간마다(프레임마다) 충돌을 확인합니다. 따라서 물체가 한 프레임 동안 이동한 거리가 물체 자체의 크기나 바닥의 두께보다 크면, 물체가 바닥 위쪽에서 아래쪽 위치로 점프하는 사이에 충돌 체크가 이루어지지 않아 바닥을 통과하게 됩니다. 특히 속도가 빠를수록 한 프레임당 이동 거리가 길 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 물리 법칙을 엔티티에 적용하고 물리 엔티티끼리 충돌할 수 있게 만들어 봅시다. 월드에 물리를 만드는 방법은 [물리 사용하기](/docs?postId=757%7B%22target%22:%22_self%22%7D)를 참고하세요. # PhysicsRigidbodyComponent Entity에 PhysicsRigidbodyComponent를 추가하면 Entity가 물리 엔진에 의해 제어됩니다. 또한 엔티티의 저항 계수, 마찰 계수, 질량 등 물리 연산에 영향을 주는 값을 설정할 수 있습니다. Entity가 Phy

[task] | code [pass] | ⏳ 미판정 [title] | 다양한 물리 joint 활용하기 [question] | /maps/map01/LeftEntity, /maps/map01/RightEntity 경로의 엔티티를 [Sync] 속성으로 선언하고, 서버에서만 실행되는 MoveLeft, MoveRight 메서드를 통해 각각의 RevoluteJointComponent 모터 상태를 전환하는 스크립트를 작성해줘 [answer] | ```lua Property: [Sync] Entity Left = /maps/map01/LeftEntity [Sync] Entity Right = /maps/map01/RightEntity Method: [server] void MoveLeft(boolean enable) { self.Left.RevoluteJointComponent:SetMotorEnable(1, enable) } [server] void MoveRight(boolean enable) { self.Right.RevoluteJointCompone [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 1. 새로운 **LeftEntity, LeftBar** 오브젝트 엔티티를 만들고, **PhysicsRigidbodyComponent, PhysicsColliderComponent**를 추가합니다. * LeftEntity SpriteRUID: **e75cac80f719471fa482195531ed57cc** * LeftBar SpriteRUID: **0308ac89b10843fcab6384aa43f6ae22** 2. 원형 모양 엔티티에 **RevoluteJointComponent**를 추가하고, **Joint**에 **

[task] | single_turn [pass] | ⏳ 미판정 [title] | 엔티티에 물리 적용하기 [question] | ClientOnly 프로퍼티가 true와 false일 때 물리 연산이 일어나는 공간과 동기화 방식의 차이는 무엇이며, 각 설정의 장단점은 어떻게 되나요? [answer] | `PhysicsColliderComponent`의 `ClientOnly` 프로퍼티는 물리 연산이 수행되는 공간과 그 결과가 다른 클라이언트와 동기화되는 방식을 결정합니다. **1. ClientOnly = true 일 때** * **물리 연산 공간:** Client(클라이언트)에서 물리 연산이 수행됩니다. * **함수/프로퍼티 접근:** Client 공간에서 물리 관련 함수 사용 및 프로퍼티 변경이 가능합니다. * **동기화 방식:** 물리 연산 결과가 **다른 Clients와 동기화되지 않습니다.** 각 클라이언트에서 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | #### 힘을 가하는 함수 `ApplyForce()`, `ApplyTorque()` 함수는 지속적인 힘을 가할 수 있습니다. 특정 Key를 눌러 지속적으로 특정 방향으로 힘 가하고 싶을 때가 해당됩니다. 매개 변수 force는 힘을 의미합니다. 해당 Entity에 대응하는 물리 강체의 질량 값에 영향을 받습니다. #### 충격량을 적용하는 함수 `ApplyAngularImpulse()`, `ApplyLinearImpulse()` 함수는 일시적으로 짧은 충격을 가할 수 있습니다. 대포 발파, 방망이 휘두르기 같은 짧은 충격을 주

[task] | single_turn [pass] | ⏳ 미판정 [title] | 엔티티에 물리 적용하기 [question] | ApplyForce 계열 함수와 SetVelocity 계열 함수는 모두 엔티티를 움직이게 하지만, 엔티티의 Mass(질량) 값이 각각의 동작에 미치는 영향이 어떻게 다른가요? [answer] | `ApplyForce` 계열 함수와 `SetVelocity` 계열 함수는 모두 엔티티를 이동시키는 수단이지만, 엔티티의 질량(`Mass`)이 미치는 영향이 근본적으로 다릅니다. **1. `ApplyForce` 계열 함수** * **질량 영향:** 질량 값에 **영향을 받습니다.** * **동작 방식:** 특정 방향으로 힘을 가하여 움직이게 만듭니다. 동일한 힘(`Force`)을 가하더라도 질량이 큰 엔티티일수록 가속도가 작아 느리게 움직이며, 질량이 작은 엔티티일수록 가속도가 커 빠르게 움직입니다. 즉, 물리 법칙에 따라 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 물리 법칙을 엔티티에 적용하고 물리 엔티티끼리 충돌할 수 있게 만들어 봅시다. 월드에 물리를 만드는 방법은 [물리 사용하기](/docs?postId=757%7B%22target%22:%22_self%22%7D)를 참고하세요. # PhysicsRigidbodyComponent Entity에 PhysicsRigidbodyComponent를 추가하면 Entity가 물리 엔진에 의해 제어됩니다. 또한 엔티티의 저항 계수, 마찰 계수, 질량 등 물리 연산에 영향을 주는 값을 설정할 수 있습니다. Entity가 Phy

[task] | code [pass] | ⏳ 미판정 [title] | 엔티티에 물리 적용하기 [question] | PhysicsRigidbodyComponent의 SleepingMode를 StartAsleep로 설정하여 초기에는 정지하다가 충돌 시에만 물리 연산을 수행하는 에너지 효율적인 물리 엔티티 스크립트를 작성해줘 [answer] | PhysicsRigidbodyComponent의 `SleepingMode` 프로퍼티를 `StartAsleep`로 설정하면 엔티티는 초기에 수면 상태로 시작하며, 충돌이 발생할 때만 깨어나 물리 연산을 수행합니다. 이는 물리 엔진이 모든 엔티티에 대해 매 프레임마다 물리 계산을 수행하지 않도록 하여 CPU 부하를 줄이는 데 도움이 됩니다. 아래 스크립트는 `PhysicsRigidbodyComponent`의 `SleepingMode`를 `StartAsleep`로 설정하고, 충돌 감지 이벤트(`HandlePhysicsContactBeg [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 물리 법칙을 엔티티에 적용하고 물리 엔티티끼리 충돌할 수 있게 만들어 봅시다. 월드에 물리를 만드는 방법은 [물리 사용하기](/docs?postId=757%7B%22target%22:%22_self%22%7D)를 참고하세요. # PhysicsRigidbodyComponent Entity에 PhysicsRigidbodyComponent를 추가하면 Entity가 물리 엔진에 의해 제어됩니다. 또한 엔티티의 저항 계수, 마찰 계수, 질량 등 물리 연산에 영향을 주는 값을 설정할 수 있습니다. Entity가 Phy

[task] | single_turn [pass] | ⏳ 미판정 [title] | 루아 프로파일러를 활용하여 최적화하기 [question] | 프로파일링 결과에서 프로퍼티의 Get과 Set 동작도 함수로 취급되어 나타나는 이유는 무엇인가요? [answer] | mLua에서 프로퍼티(Property)에 대한 접근은 내부적으로 게터(Getter)와 세터(Setter) 함수 호출로 처리됩니다. 따라서 루아 프로파일러의 프로파일링 결과에서 프로퍼티의 Get과 Set 동작은 독립된 함수 항목으로 나타납니다. 구체적인 이유는 다음과 같습니다: 1. **함수로서의 처리**: 프로파일러의 `Name` 항목은 함수나 Scope의 이름을 표시하는데, 프로퍼티에 대한 Get(읽기)과 Set(쓰기) 동작도 이 범주에 포함됩니다. 2. **분류(Category)**: 결과의 `Category` 항목에서 프로 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | * Context는 Core에서의 실행 흐름을 뜻합니다. * Server, Client, Instance, Editor 등의 Context 중에서 선택할 수 있습니다. * Context를 선택하면 ⑤ 차트 영역과 ⑨ 프로파일링 결과 영역에서 데이터를 확인할 수 있습니다. ### ④ 그래프 선택 * **Elapsed Time, Network Send, Network Receive, Lua Memory** 중에서 어떤 그래프를 ⑤의 차트 영역에 표시할 것인지 선택합니다. * **File - Option**에서 **Network**를

[task] | single_turn [pass] | ⏳ 미판정 [title] | 엔티티에 물리 적용하기 [question] | CollisionGroup을 설정했는데 특정 엔티티끼리는 왜 충돌이 안 되는 건가요? [answer] | 충돌이 안 되는 가장 흔한 원인은 **CollisionGroup 간의 충돌 허용 설정**이 되어 있지 않기 때문입니다. 단순히 두 엔티티에 같은 CollisionGroup을 지정한다고 자동으로 충돌하는 것이 아니라, 해당 그룹끼리 충돌이 발생하도록 명시적으로 설정해야 합니다. 또한, `PhysicsColliderComponent`의 `ClientOnly` 프로퍼티 값에 따라 물리 연산이 수행되는 공간이 달라지므로 충돌 여부가 달라질 수 있습니다. ### 1. 충돌 그룹 간 충돌 허용 여부 확인 `PhysicsColliderCom [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | **PhysicsRigidbodyComponent**의 대부분의 Property와 Function은 **PhysicsColliderComponent**의 ClientOnly 프로퍼티의 값에 따라 사용, 접근 가능한 실행 공간이 나뉘게 됩니다. ClientOnly에 따라 각각의 물리 World에서 연산되며, 이에 따라 서로 충돌하거나 영향을 주지 않습니다. * **ClientOnly가 True일 때**: 해당 Entity의 물리 강체는 Client에서만 생성되고 물리 연산은 각각의 Client에서 계산됩니다. 다른 Client와 결

[task] | single_turn [pass] | ⏳ 미판정 [title] | 루아 프로파일러를 활용하여 최적화하기 [question] | Active Module 중 Execution Time, Memory, Network 항목 각각이 측정하는 구체적인 데이터는 무엇이며, 최적화 시 어떤 지표가 가장 중요하다고 강조되고 있나요? [answer] | 루아 프로파일러의 Active Module 설정에서 각 항목이 측정하는 데이터와 최적화 시 중요도는 다음과 같습니다. **1. 각 항목별 측정 데이터** * **Execution Time**: 함수 또는 Scope의 실행 시간을 측정합니다. * **Memory**: 함수 또는 Scope가 실행되는 동안 발생한 Lua Memory Allocation Size(메모리 할당 크기)를 측정합니다. * **Network**: 함수 또는 Scope가 실행되는 동안 발생한 Network Write(네트워크 쓰기) 데이터를 측정합니 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 제작한 게임을 플레이하다 보면 다양한 상황에서 느려지는 것을 경험할 수 있습니다. 이처럼 게임의 처리 속도에서 부하가 걸리는 병목 지점(Bottleneck)을 찾아 수정하는 것을 최적화라고 합니다. 일부 병목 지점만 해결해도 게임의 전체적인 성능 향상을 기대할 수 있기 때문에 최적화는 상당히 중요한 작업입니다. 루아 프로파일러는 이러한 스크립트 최적화 작업을 더욱 손쉽게 진행할 수 있도록 도와줍니다. 이번 시간에는 **루아 프로파일러**가 무엇인지 알아보고 활용법을 살펴보도록 합시다. **더 알아보기** >

← → 방향키로 페이지 이동 · 숫자 입력 후 Enter로 점프