[task] | extract_knowledge [title] | 다양한 물리 joint 활용하기 [category] | Guides [rephrased] | # 물리 Joint 컴포넌트 활용 본 절에서는 `RevoluteJoint`, `PrismaticJointComponent`, `PulleyJointComponent`, `WeldJointComponent`의 동작 원리와 주요 프로퍼티를 다룹니다. 각 Joint는 엔티티 간의 상대적 운동(회전, 선형 이동, 구속)을 제한하거나 특정 힘을 가하기 위해 사용됩니다. ## 1. RevoluteJoint `RevoluteJoint`는 엔티티의 회전을 제한하거나 회전력을 가하기 위한 Joint입니다. ### 동작 원리 * 엔티티가 [original] | RevoluteJoint는 엔티티의 회전과 관련된 제한을 설정합니다. UseLimits를 활성화한 후, LowerAngle, UpperAngle를 활용해 회전 각도를 제한할 수 있습니다. 엔티티가 회전할 때는 LocalAnchorA와 B가 만나는 지점을 공통의 Anchor로 사용합니다. 또한 Motor를 사용하면 Anchor를 기준으로 회전하는 힘을 받을 수 있습니다. | 주요 프로퍼티 | 설명 | | --- | --- | |**UseLimits** | 상대적 각도에 제한을 설정할지 여부를 결정합니다. | |**LowerAn [chunk_id] | Guides:760:1
[task] | distill [title] | 엔티티에 물리 적용하기 [category] | Guides [rephrased] | ```lua -- 힘/충격량/속도 적용 함수 시그니처 및 동작 규칙 -- ApplyForce(force), ApplyTorque(torque): 지속적 힘 적용. 물리 강체 질량에 영향받음. -- ApplyLinearImpulse(impulse), ApplyAngularImpulse(impulse): 일시적 충격량 적용. 물리 강체 질량에 영향받음. -- SetLinearVelocity(velocity), SetAngularVelocity(velocity): 질량과 무관하게 속도 직접 설정. ``` ### PhysicsCollid [original] | #### 힘을 가하는 함수 `ApplyForce()`, `ApplyTorque()` 함수는 지속적인 힘을 가할 수 있습니다. 특정 Key를 눌러 지속적으로 특정 방향으로 힘 가하고 싶을 때가 해당됩니다. 매개 변수 force는 힘을 의미합니다. 해당 Entity에 대응하는 물리 강체의 질량 값에 영향을 받습니다. #### 충격량을 적용하는 함수 `ApplyAngularImpulse()`, `ApplyLinearImpulse()` 함수는 일시적으로 짧은 충격을 가할 수 있습니다. 대포 발파, 방망이 휘두르기 같은 짧은 충격을 주 [chunk_id] | Guides:761:1
[task] | extract_knowledge [title] | SideViewRectTileMap에서 캐릭터 이동 제어 [category] | Guides [rephrased] | # SideViewRectTileMap에서 캐릭터 이동 제어: 마찰력 및 가속도 적용 ## 1. 개념 설명 기본적인 `MoveVelocity` 사용법에서는 캐릭터가 입력에 따라 즉시 정지하거나 방향을 바꾸는 경직된 움직임을 보입니다. 더 자연스럽고 게임 콘셉트(예: 눈과 얼음 위를 걷는 느낌)에 맞는 움직임을 구현하기 위해 **가속도(Acceleration)**와 **마찰력(Friction)** 개념을 적용할 수 있습니다. 이 접근법은 캐릭터의 속도가 즉시 목표 값으로 수렴하는 대신, 시간의 흐름에 따라 점진적으로 증가하거나 [original] | `MoveVelocity`를 응용하면 크리에이터가 의도하는 게임의 콘셉트에 맞게 캐릭터의 움직임을 만들어낼 수 있습니다. 이번 예제에서는 눈과 얼음이 가득한 필드라는 콘셉트에 맞게 가속도와 마찰력 개념을 추가해 미끄러운 길을 걷는 듯한 움직임을 만들어보겠습니다. 1. MyDesk 아래에 새 스크립트 컴포넌트 CustomPlayerController를 만든 뒤, DefaultPlayer에 추가합니다. 2. CustomPlayerController를 연 뒤, 아래와 같이 프로퍼티를 추가합니다. ```lua [chunk_id] | Guides:759:2
[task] | diverse_qa [title] | 다양한 물리 joint 활용하기 [category] | Guides [rephrased] | 질문: WheelJoint는 연결된 엔티티의 동작을 어떻게 제한하나요? 답변: WheelJoint는 연결된 엔티티가 바퀴처럼 동작하도록 제한을 설정합니다. 질문: Motor를 사용하는 TargetEntityRef의 경우, MotorSpeed 값은 어떤 용도로 사용되나요? 답변: MotorSpeed 값은 목표 속도로 사용됩니다. 질문: WheelJoint의 MaxMotorTorque 프로퍼티의 역할은 무엇인가요? 답변: 목표 모터 속도에 도달하기 위한 Joint의 모터에 적용할 수 있는 최대 힘을 설정합니다. 질문: MotorE [original] | WheelJoint는 연결된 엔티티가 바퀴처럼 동작하도록 제한을 설정합니다. Motor를 사용한 TargetEntityRef는 MotorSpeed 값을 목표 속도로 사용합니다. | 주요 프로퍼티 | 설명 | | --- | --- | | **MaxMotorTorque** | 목표 모터 속도에 도달하기 위한 Joint의 모터에 적용할 수 있는 최대 힘을 설정합니다. | | **MotorEnable** | Motor를 사용할지 여부를 설정합니다. True일 경우 연결된 Entity가 LocalAxis 방향의 힘을 받습니다. | | * [chunk_id] | Guides:760:2
[task] | wikipedia [title] | 다양한 물리 joint 활용하기 [category] | Guides [rephrased] | # 물리 Joint 활용 가이드 이 문서는 메이플스토리 월드(mLua) 환경에서 엔티티 간의 물리적 연결과 운동 제약을 설정하기 위한 다양한 Joint 컴포넌트의 동작 원리 및 주요 속성에 대해 설명합니다. ## RevoluteJoint `RevoluteJoint`는 엔티티의 회전 운동과 관련된 제한을 설정하는 컴포넌트입니다. 이 Joint를 사용하면 엔티티가 특정 지점을 중심으로 회전하도록 물리적으로 구속할 수 있습니다. ### 회전 제한 설정 `UseLimits` 속성을 활성화하면 엔티티의 회전 각도를 제한할 수 있습니다 [original] | RevoluteJoint는 엔티티의 회전과 관련된 제한을 설정합니다. UseLimits를 활성화한 후, LowerAngle, UpperAngle를 활용해 회전 각도를 제한할 수 있습니다. 엔티티가 회전할 때는 LocalAnchorA와 B가 만나는 지점을 공통의 Anchor로 사용합니다. 또한 Motor를 사용하면 Anchor를 기준으로 회전하는 힘을 받을 수 있습니다. | 주요 프로퍼티 | 설명 | | --- | --- | |**UseLimits** | 상대적 각도에 제한을 설정할지 여부를 결정합니다. | |**LowerAn [chunk_id] | Guides:760:1
[task] | distill [title] | 엔티티에 물리 적용하기 [category] | Guides [rephrased] | # 충돌 엔티티에 물리 적용하기 `PhysicsRigidbodyComponent`를 추가하면 엔티티가 물리 엔진에 의해 제어됩니다. **물리 법칙을 따르는 다른 엔티티와 충돌하려면 `PhysicsRigidbodyComponent`와 `PhysicsColliderComponent`를 반드시 함께 추가**해야 합니다. ## 주요 프로퍼티 | 프로퍼티 | 설명 | | :--- | :--- | | `BodyType` | **Static**: 질량 무한대, Dynamic과 충돌 가능.<br>**Dynamic**: 물리 법칙 적용, 충돌 [original] | # 학습 과정 소개 물리 법칙을 엔티티에 적용하고 물리 엔티티끼리 충돌할 수 있게 만들어 봅시다. 월드에 물리를 만드는 방법은 [물리 사용하기](/docs?postId=757%7B%22target%22:%22_self%22%7D)를 참고하세요. # PhysicsRigidbodyComponent Entity에 PhysicsRigidbodyComponent를 추가하면 Entity가 물리 엔진에 의해 제어됩니다. 또한 엔티티의 저항 계수, 마찰 계수, 질량 등 물리 연산에 영향을 주는 값을 설정할 수 있습니다. Entity가 Phy [chunk_id] | Guides:761:0
[task] | knowledge_list [title] | 다양한 물리 joint 활용하기 [category] | Guides [rephrased] | 제시된 문서의 내용을 바탕으로 추출한 핵심 사실 목록입니다. 1. **LeftEntity**와 **LeftBar** 엔티티를 생성할 때 각각 `PhysicsRigidbodyComponent`와 `PhysicsColliderComponent`를 추가해야 하며, `LeftEntity`의 SpriteRUID는 `e75cac80f719471fa482195531ed57cc`, `LeftBar`의 SpriteRUID는 `0308ac89b10843fcab6384aa43f6ae22`로 설정됩니다. 2. 원형 모양 엔티티에 `RevoluteJoi [original] | 1. 새로운 **LeftEntity, LeftBar** 오브젝트 엔티티를 만들고, **PhysicsRigidbodyComponent, PhysicsColliderComponent**를 추가합니다. * LeftEntity SpriteRUID: **e75cac80f719471fa482195531ed57cc** * LeftBar SpriteRUID: **0308ac89b10843fcab6384aa43f6ae22** 2. 원형 모양 엔티티에 **RevoluteJointComponent**를 추가하고, **Joint**에 ** [chunk_id] | Guides:760:3
[task] | extract_knowledge [title] | SideViewRectTileMap에서 캐릭터 이동 제어 [category] | Guides [rephrased] | # SideViewRectTileMap 기반 캐릭터 이동 제어: 애니메이션, 시선, 및 점프 설정 본 절에서는 `SideViewRectTileMap` 환경에서 캐릭터의 동작(이동, 공중, 엎드림)에 따른 애니메이션 상태 변경, 좌우 시선 제어, 그리고 하강 점프 속도를 설정하는 방법을 다룹니다. ## 1. 개념 설명 2D 사이드뷰 게임에서 캐릭터의 시각적 표현은 현재 물리 상태와 입력 방향에 따라 달라져야 합니다. 이를 위해 다음 세 가지 로직이 프레임마다 갱신되어야 합니다. 1. **애니메이션 상태 제어**: 캐릭터가 지 [original] | 11. 캐릭터의 애니메이션을 제어하는 `UpdateAnimationState` 함수도 추가합니다. ```lua void UpdateAnimationState() { local body = self.Entity.SideviewbodyComponent local state = self.Entity.StateComponent if body:IsOnGround() then if self.InputDirection.x ~= 0 then [chunk_id] | Guides:759:5
[task] | knowledge_list [title] | 엔티티에 물리 적용하기 [category] | Guides [rephrased] | - `PhysicsRigidbodyComponent`를 `Entity`에 추가하면 해당 `Entity`가 물리 엔진에 의해 제어되며, `PhysicsRigidbodyComponent`와 `PhysicsColliderComponent`를 함께 포함해야만 물리 법칙을 따르는 다른 `Entity`와 충돌할 수 있습니다. - `PhysicsRigidbodyComponent`의 `BodyType` 프로퍼티는 `Static`(질량이 무한히 크고 `Dynamic` 타입과 충돌 가능), `Dynamic`(물리 법칙에 따라 동작하며 물리 충돌 가능 [original] | # 학습 과정 소개 물리 법칙을 엔티티에 적용하고 물리 엔티티끼리 충돌할 수 있게 만들어 봅시다. 월드에 물리를 만드는 방법은 [물리 사용하기](/docs?postId=757%7B%22target%22:%22_self%22%7D)를 참고하세요. # PhysicsRigidbodyComponent Entity에 PhysicsRigidbodyComponent를 추가하면 Entity가 물리 엔진에 의해 제어됩니다. 또한 엔티티의 저항 계수, 마찰 계수, 질량 등 물리 연산에 영향을 주는 값을 설정할 수 있습니다. Entity가 Phy [chunk_id] | Guides:761:0
[task] | diverse_qa [title] | 다양한 물리 joint 활용하기 [category] | Guides [rephrased] | 질문: 새로운 LeftEntity와 LeftBar 엔티티에 추가해야 하는 물리 컴포넌트는 무엇입니까? 답변: PhysicsRigidbodyComponent와 PhysicsColliderComponent를 추가해야 합니다. 질문: LeftEntity의 SpriteRUID 값은 무엇입니까? 답변: e75cac80f719471fa482195531ed57cc입니다. 질문: LeftBar의 SpriteRUID 값은 무엇입니까? 답변: 0308ac89b10843fcab6384aa43f6ae22입니다. 질문: 원형 모양 엔티티에 추가하는 [original] | 1. 새로운 **LeftEntity, LeftBar** 오브젝트 엔티티를 만들고, **PhysicsRigidbodyComponent, PhysicsColliderComponent**를 추가합니다. * LeftEntity SpriteRUID: **e75cac80f719471fa482195531ed57cc** * LeftBar SpriteRUID: **0308ac89b10843fcab6384aa43f6ae22** 2. 원형 모양 엔티티에 **RevoluteJointComponent**를 추가하고, **Joint**에 ** [chunk_id] | Guides:760:3
[task] | knowledge_list [title] | 엔티티에 물리 적용하기 [category] | Guides [rephrased] | ```lua -- 문서 기반 핵심 사실 정리 local facts = { "ApplyForce()와 ApplyTorque() 함수는 지속적인 힘을 가하는 데 사용되며, 매개 변수 force는 힘의 크기를 의미하고 해당 Entity의 물리 강체 질량 값에 영향을 받습니다.", "ApplyAngularImpulse()와 ApplyLinearImpulse() 함수는 일시적인 짧은 충격을 가하는 데 사용되며, 매개 변수 Impulse는 충격량을 의미하고 해당 Entity의 물리 강체 질량 값에 영향을 받습니다.", " [original] | #### 힘을 가하는 함수 `ApplyForce()`, `ApplyTorque()` 함수는 지속적인 힘을 가할 수 있습니다. 특정 Key를 눌러 지속적으로 특정 방향으로 힘 가하고 싶을 때가 해당됩니다. 매개 변수 force는 힘을 의미합니다. 해당 Entity에 대응하는 물리 강체의 질량 값에 영향을 받습니다. #### 충격량을 적용하는 함수 `ApplyAngularImpulse()`, `ApplyLinearImpulse()` 함수는 일시적으로 짧은 충격을 가할 수 있습니다. 대포 발파, 방망이 휘두르기 같은 짧은 충격을 주 [chunk_id] | Guides:761:1
[task] | extract_knowledge [title] | 다양한 물리 joint 활용하기 [category] | Guides [rephrased] | # WheelJoint 컴포넌트 활용 가이드 ## 1. 개념 설명 `WheelJoint`는 연결된 엔티티가 바퀴처럼 회전 및 이동하도록 물리적 제한을 설정하는 Joint 유형입니다. 이 Joint는 `TargetEntityRef`와 연결되며, Motor 설정을 통해 목표 속도를 유지하려는 동력을 적용합니다. ## 2. 주요 프로퍼티 (API) `WheelJoint` 컴포넌트에서 동작을 제어하는 주요 프로퍼티는 다음과 같습니다. * **MaxMotorTorque**: 목표 모터 속도(`MotorSpeed`)에 도달하기 위해 [original] | WheelJoint는 연결된 엔티티가 바퀴처럼 동작하도록 제한을 설정합니다. Motor를 사용한 TargetEntityRef는 MotorSpeed 값을 목표 속도로 사용합니다. | 주요 프로퍼티 | 설명 | | --- | --- | | **MaxMotorTorque** | 목표 모터 속도에 도달하기 위한 Joint의 모터에 적용할 수 있는 최대 힘을 설정합니다. | | **MotorEnable** | Motor를 사용할지 여부를 설정합니다. True일 경우 연결된 Entity가 LocalAxis 방향의 힘을 받습니다. | | * [chunk_id] | Guides:760:2
[task] | diverse_qa [title] | 엔티티에 물리 적용하기 [category] | Guides [rephrased] | 질문: Entity가 물리 법칙을 따르는 다른 엔티티와 충돌하려면 어떤 컴포넌트를 함께 포함해야 하나요? 답변: Entity가 PhysicsRigidbodyComponent와 PhysicsColliderComponent를 함께 포함하고 있어야 물리 법칙을 따르는 다른 엔티티와 충돌할 수 있습니다. 질문: PhysicsRigidbodyComponent의 BodyType 프로퍼티 중 'Dynamic' 타입의 특징은 무엇인가요? 답변: Dynamic 타입은 엔티티가 물리 법칙에 따라 동작하며, 물리 충돌이 가능한 다른 Entity와 충 [original] | # 학습 과정 소개 물리 법칙을 엔티티에 적용하고 물리 엔티티끼리 충돌할 수 있게 만들어 봅시다. 월드에 물리를 만드는 방법은 [물리 사용하기](/docs?postId=757%7B%22target%22:%22_self%22%7D)를 참고하세요. # PhysicsRigidbodyComponent Entity에 PhysicsRigidbodyComponent를 추가하면 Entity가 물리 엔진에 의해 제어됩니다. 또한 엔티티의 저항 계수, 마찰 계수, 질량 등 물리 연산에 영향을 주는 값을 설정할 수 있습니다. Entity가 Phy [chunk_id] | Guides:761:0
[task] | wikipedia [title] | 다양한 물리 joint 활용하기 [category] | Guides [rephrased] | # 충돌 다양한 물리 joint 활용하기 본 가이드는 메이플스토리 월드에서 `RevoluteJointComponent`를 활용해 회전 관절을 제어하는 방법을 설명합니다. 이 예제는 엔티티 간 물리적 연결을 설정하고, 플레이어의 입력에 따라 관절의 모터를 활성화하거나 비활성화하여 막대가 회전하도록 하는 로직을 구현합니다. ## 1. 엔티티 생성 및 물리 컴포넌트 설정 우측과 좌측에 배치될 막대 엔티티를 생성하고, 물리 시뮬레이션에 필요한 컴포넌트를 추가합니다. 1. **LeftEntity** 및 **LeftBar**라는 이름 [original] | 1. 새로운 **LeftEntity, LeftBar** 오브젝트 엔티티를 만들고, **PhysicsRigidbodyComponent, PhysicsColliderComponent**를 추가합니다. * LeftEntity SpriteRUID: **e75cac80f719471fa482195531ed57cc** * LeftBar SpriteRUID: **0308ac89b10843fcab6384aa43f6ae22** 2. 원형 모양 엔티티에 **RevoluteJointComponent**를 추가하고, **Joint**에 ** [chunk_id] | Guides:760:3
[task] | distill [title] | 엔티티에 물리 적용하기 [category] | Guides [rephrased] | **PhysicsRigidbodyComponent** 의 Property 와 Function 접근 권한은 **PhysicsColliderComponent** 의 `ClientOnly` 값에 따라 결정됩니다. * **ClientOnly: True** * 물리 강체는 Client에서만 생성되며, 연산은 각 Client에서 독립적으로 수행됩니다. * Client 간 동기화되지 않습니다. * 함수 호출 및 대부분의 Property 변경은 **Client** 에서만 가능합니다. * **ClientOn [original] | **PhysicsRigidbodyComponent**의 대부분의 Property와 Function은 **PhysicsColliderComponent**의 ClientOnly 프로퍼티의 값에 따라 사용, 접근 가능한 실행 공간이 나뉘게 됩니다. ClientOnly에 따라 각각의 물리 World에서 연산되며, 이에 따라 서로 충돌하거나 영향을 주지 않습니다. * **ClientOnly가 True일 때**: 해당 Entity의 물리 강체는 Client에서만 생성되고 물리 연산은 각각의 Client에서 계산됩니다. 다른 Client와 결 [chunk_id] | Guides:761:2
[task] | distill [title] | 루아 프로파일러를 활용하여 최적화하기 [category] | Guides [rephrased] | # 루아 프로파일러 활용 최적화 루아 프로파일러는 게임 스크립트에서 성능 병목(Bottleneck)을 식별하여 최적화하는 도구입니다. ## 실행 환경 및 방법 * **요구 사항**: Windows 7 이상, `.NET Core 3.1 Desktop Runtime` 이상 설치 필요. * **제작 중 실행**: `Window - Lua Profiler` 메뉴 실행 후, 플레이 상태에서 **[Recording]** 버튼 클릭 (이미 플레이 중이면 즉시 기록 시작). * **배포된 게임 실행**: 게임 설정 > 기타 탭 > **Lua [original] | # 학습 과정 소개 제작한 게임을 플레이하다 보면 다양한 상황에서 느려지는 것을 경험할 수 있습니다. 이처럼 게임의 처리 속도에서 부하가 걸리는 병목 지점(Bottleneck)을 찾아 수정하는 것을 최적화라고 합니다. 일부 병목 지점만 해결해도 게임의 전체적인 성능 향상을 기대할 수 있기 때문에 최적화는 상당히 중요한 작업입니다. 루아 프로파일러는 이러한 스크립트 최적화 작업을 더욱 손쉽게 진행할 수 있도록 도와줍니다. 이번 시간에는 **루아 프로파일러**가 무엇인지 알아보고 활용법을 살펴보도록 합시다. **더 알아보기** > [chunk_id] | Guides:762:0
[task] | diverse_qa [title] | 엔티티에 물리 적용하기 [category] | Guides [rephrased] | 질문: `ApplyForce()`와 `ApplyTorque()` 함수는 어떤 특징을 가진 힘 적용 함수인가요? 답변: `ApplyForce()`와 `ApplyTorque()` 함수는 지속적인 힘을 가할 수 있으며, 특정 Key를 눌러 지속적으로 특정 방향으로 힘을 가하고 싶을 때 사용됩니다. 이때 매개 변수 force는 힘을 의미하며, 해당 Entity에 대응하는 물리 강체의 질량 값에 영향을 받습니다. 질문: `ApplyAngularImpulse()`와 `ApplyLinearImpulse()` 함수는 주로 어떤 상황에 사용되나요 [original] | #### 힘을 가하는 함수 `ApplyForce()`, `ApplyTorque()` 함수는 지속적인 힘을 가할 수 있습니다. 특정 Key를 눌러 지속적으로 특정 방향으로 힘 가하고 싶을 때가 해당됩니다. 매개 변수 force는 힘을 의미합니다. 해당 Entity에 대응하는 물리 강체의 질량 값에 영향을 받습니다. #### 충격량을 적용하는 함수 `ApplyAngularImpulse()`, `ApplyLinearImpulse()` 함수는 일시적으로 짧은 충격을 가할 수 있습니다. 대포 발파, 방망이 휘두르기 같은 짧은 충격을 주 [chunk_id] | Guides:761:1
[task] | wikipedia [title] | 엔티티에 물리 적용하기 [category] | Guides [rephrased] | # 충돌 엔티티에 물리 적용하기 본 가이드에서는 엔티티(Entity)에 물리 법칙을 적용하여 물리 엔티티 간의 충돌을 처리하는 방법을 설명합니다. 월드 내에서 물리를 생성하고 사용하는 전반적인 절차에 대해서는 [물리 사용하기](/docs?postId=757%7B%22target%22:%22_self%22%7D) 문서를 참고하십시오. ## PhysicsRigidbodyComponent 엔티티에 `PhysicsRigidbodyComponent`를 추가하면 해당 엔티티는 물리 엔진의 제어 아래 놓이게 됩니다. 이 컴포넌트는 엔티티의 [original] | # 학습 과정 소개 물리 법칙을 엔티티에 적용하고 물리 엔티티끼리 충돌할 수 있게 만들어 봅시다. 월드에 물리를 만드는 방법은 [물리 사용하기](/docs?postId=757%7B%22target%22:%22_self%22%7D)를 참고하세요. # PhysicsRigidbodyComponent Entity에 PhysicsRigidbodyComponent를 추가하면 Entity가 물리 엔진에 의해 제어됩니다. 또한 엔티티의 저항 계수, 마찰 계수, 질량 등 물리 연산에 영향을 주는 값을 설정할 수 있습니다. Entity가 Phy [chunk_id] | Guides:761:0
[task] | knowledge_list [title] | 엔티티에 물리 적용하기 [category] | Guides [rephrased] | * `PhysicsRigidbodyComponent`의 대부분의 Property와 Function은 `PhysicsColliderComponent`의 `ClientOnly` 프로퍼티 값에 따라 사용 및 접근 가능한 실행 공간이 결정됩니다. * `PhysicsColliderComponent`의 `ClientOnly`가 `True`인 경우, 해당 Entity의 물리 강체는 Client에서만 생성되며 물리 연산은 각 Client에서 독립적으로 계산됩니다. * `PhysicsColliderComponent`의 `ClientOnly`가 `T [original] | **PhysicsRigidbodyComponent**의 대부분의 Property와 Function은 **PhysicsColliderComponent**의 ClientOnly 프로퍼티의 값에 따라 사용, 접근 가능한 실행 공간이 나뉘게 됩니다. ClientOnly에 따라 각각의 물리 World에서 연산되며, 이에 따라 서로 충돌하거나 영향을 주지 않습니다. * **ClientOnly가 True일 때**: 해당 Entity의 물리 강체는 Client에서만 생성되고 물리 연산은 각각의 Client에서 계산됩니다. 다른 Client와 결 [chunk_id] | Guides:761:2
[task] | wikipedia [title] | 엔티티에 물리 적용하기 [category] | Guides [rephrased] | # 충돌 엔티티에 물리 적용하기 mLua 스크립트에서는 물리 강체(Physics Rigidbody)에 힘을 가하거나 속도를 변경하는 다양한 함수를 제공합니다. 이러한 함수는 힘의 지속 시간과 물리적 특성에 따라主要分为으로 나뉩니다. ## 힘과 충격량 적용 함수 지속적인 힘을 가하기 위해서는 `ApplyForce()`와 `ApplyTorque()` 함수를 사용합니다. 이는 특정 키를 누르는 동안 일정한 방향으로 힘을 계속 적용해야 하는 상황에서 적합합니다. 이 함수들의 매개변수 `force`는 적용할 힘을 의미하며, 해당 엔티티 [original] | #### 힘을 가하는 함수 `ApplyForce()`, `ApplyTorque()` 함수는 지속적인 힘을 가할 수 있습니다. 특정 Key를 눌러 지속적으로 특정 방향으로 힘 가하고 싶을 때가 해당됩니다. 매개 변수 force는 힘을 의미합니다. 해당 Entity에 대응하는 물리 강체의 질량 값에 영향을 받습니다. #### 충격량을 적용하는 함수 `ApplyAngularImpulse()`, `ApplyLinearImpulse()` 함수는 일시적으로 짧은 충격을 가할 수 있습니다. 대포 발파, 방망이 휘두르기 같은 짧은 충격을 주 [chunk_id] | Guides:761:1
[task] | knowledge_list [title] | 루아 프로파일러를 활용하여 최적화하기 [category] | Guides [rephrased] | * 루아 프로파일러를 실행하기 위해선 윈도우 7 이상의 운영체제 및 `.NET Core 3.1 Desktop Runtime` 이상의 버전이 설치되어 있어야 합니다. * 게임 만들기 화면에서 `Window - Lua Profiler` 메뉴를 선택하면 루아 프로파일러 창이 실행되며, 플레이 상태에서 `[Recording]` 버튼을 누르거나 이미 플레이 테스트 중이라면 실행 즉시 프로파일링 기록이 시작됩니다. * 배포된 게임에서는 우측 상단 설정 버튼의 '기타' 탭에서 `Lua Profiler 사용` 옵션을 켜고 `Lua Pr [original] | # 학습 과정 소개 제작한 게임을 플레이하다 보면 다양한 상황에서 느려지는 것을 경험할 수 있습니다. 이처럼 게임의 처리 속도에서 부하가 걸리는 병목 지점(Bottleneck)을 찾아 수정하는 것을 최적화라고 합니다. 일부 병목 지점만 해결해도 게임의 전체적인 성능 향상을 기대할 수 있기 때문에 최적화는 상당히 중요한 작업입니다. 루아 프로파일러는 이러한 스크립트 최적화 작업을 더욱 손쉽게 진행할 수 있도록 도와줍니다. 이번 시간에는 **루아 프로파일러**가 무엇인지 알아보고 활용법을 살펴보도록 합시다. **더 알아보기** > [chunk_id] | Guides:762:0
[task] | diverse_qa [title] | 엔티티에 물리 적용하기 [category] | Guides [rephrased] | 질문: PhysicsRigidbodyComponent의 Property와 Function의 사용 가능 실행 공간은 어떤 값에 따라 결정됩니까? 답변: PhysicsColliderComponent의 ClientOnly 프로퍼티 값에 따라 결정됩니다. 질문: PhysicsColliderComponent의 ClientOnly가 True일 때, 물리 연산은 어디에서 계산되며 다른 Client와 결과가 동기화됩니까? 답변: 각각의 Client에서 계산되며, 다른 Client와 결과가 동기화되지 않습니다. 질문: PhysicsCollide [original] | **PhysicsRigidbodyComponent**의 대부분의 Property와 Function은 **PhysicsColliderComponent**의 ClientOnly 프로퍼티의 값에 따라 사용, 접근 가능한 실행 공간이 나뉘게 됩니다. ClientOnly에 따라 각각의 물리 World에서 연산되며, 이에 따라 서로 충돌하거나 영향을 주지 않습니다. * **ClientOnly가 True일 때**: 해당 Entity의 물리 강체는 Client에서만 생성되고 물리 연산은 각각의 Client에서 계산됩니다. 다른 Client와 결 [chunk_id] | Guides:761:2
[task] | extract_knowledge [title] | 다양한 물리 joint 활용하기 [category] | Guides [rephrased] | # RevoluteJointComponent 활용: 회전 조인트 제어 ## 1. 개념 설명 `RevoluteJointComponent`는 두 엔티티를 하나의 축을 중심으로 회전하도록 연결하는 물리 조인트입니다. 이 컴포넌트를 통해 막대나 팔과 같은 구조물이 특정 지점을 기준으로 회전하는 시뮬레이션을 구현할 수 있습니다. 주요 설정 항목은 다음과 같습니다. * **Joint**: 조인트의 유형을 지정하는 값입니다. `1`은 회전 조인트(Revolute)를 의미합니다. * **TargetEntityRef**: 조인트의 다른 [original] | 1. 새로운 **LeftEntity, LeftBar** 오브젝트 엔티티를 만들고, **PhysicsRigidbodyComponent, PhysicsColliderComponent**를 추가합니다. * LeftEntity SpriteRUID: **e75cac80f719471fa482195531ed57cc** * LeftBar SpriteRUID: **0308ac89b10843fcab6384aa43f6ae22** 2. 원형 모양 엔티티에 **RevoluteJointComponent**를 추가하고, **Joint**에 ** [chunk_id] | Guides:760:3
[task] | diverse_qa [title] | 루아 프로파일러를 활용하여 최적화하기 [category] | Guides [rephrased] | 질문: 루아 프로파일러를 사용하는데 필요한 최소 운영체제 및 런타임 요구사항은 무엇인가요? 답변: 최신 업데이트된 윈도우7 이상의 운영체제와 .NET Core 3.1 Desktop Runtime 이상의 버전이 필요합니다. 질문: 게임 만들기 화면에서 루아 프로파일러를 실행하는 메뉴 경로는 무엇인가요? 답변: Window - Lua Profiler 메뉴를 누르면 실행됩니다. 질문: 이미 플레이 테스트 중인 상태로 루아 프로파일러를 실행하면 어떤 일이 발생하나요? 답변: 실행 즉시 기록이 시작됩니다. 질문: 배포된 게임에서 루아 [original] | # 학습 과정 소개 제작한 게임을 플레이하다 보면 다양한 상황에서 느려지는 것을 경험할 수 있습니다. 이처럼 게임의 처리 속도에서 부하가 걸리는 병목 지점(Bottleneck)을 찾아 수정하는 것을 최적화라고 합니다. 일부 병목 지점만 해결해도 게임의 전체적인 성능 향상을 기대할 수 있기 때문에 최적화는 상당히 중요한 작업입니다. 루아 프로파일러는 이러한 스크립트 최적화 작업을 더욱 손쉽게 진행할 수 있도록 도와줍니다. 이번 시간에는 **루아 프로파일러**가 무엇인지 알아보고 활용법을 살펴보도록 합시다. **더 알아보기** > [chunk_id] | Guides:762:0
[task] | knowledge_list [title] | 루아 프로파일러를 활용하여 최적화하기 [category] | Guides [rephrased] | * 루아 프로파일러의 `File - Option` 메뉴에서 `Native Scope` 옵션을 체크하면 스크립트 실행을 제외한 Native에서 소요된 시간(Self Time)에 대한 세부 분석 데이터를 수집할 수 있습니다. * `Native Scope` 분석을 활성화하면 `Frame` 항목의 `Total Self Time` 점유율이 감소하고, `TriggerComponent`의 `OnUpdate`와 같은 Native Function이 차지하는 시간 점유율, 호출 횟수, Peak Time 정보가 상세히 표시됩니다. * 프로파 [original] | 샘플 데이터를 보면 Frame의 Total Self Time이 전체의 62% 이상을 차지하는 것을 알 수 있습니다. Frame에서의 Self Time은 스크립트 실행을 제외하고 Native에서 소요된 시간이므로 Native Scope의 세부 분석이 필요한 상황입니다. 루아 프로파일러의 **File - Option**에서 **Native Scope**에 체크한 후 다시 프로파일링해봅시다. 다시 수집한 데이터의 카테고리를 살펴보면 Native Scope 세부 분석이 이루어졌음을 알 수 있습니다. Frame의 Total Self T [chunk_id] | Guides:762:2
[task] | distill [title] | 루아 프로파일러를 활용하여 최적화하기 [category] | Guides [rephrased] | # 루아 프로파일러 활용 최적화 ## Native Scope 분석 `Frame`의 `Total Self Time`이 62% 이상을 차지하면 스크립트 외 Native 처리 시간이 높음을 의미합니다. 1. 프로파일러 **File - Option**에서 **Native Scope** 체크 후 재프로파일링. 2. `Frame` 시간 점유율이 감소하고, 특정 Native Function(예: `TriggerComponent.OnUpdate`)의 점유율(18% 이상), 호출 횟수, Peak Time이 증가하면 최적화 대상입니다. ## 주요 [original] | 샘플 데이터를 보면 Frame의 Total Self Time이 전체의 62% 이상을 차지하는 것을 알 수 있습니다. Frame에서의 Self Time은 스크립트 실행을 제외하고 Native에서 소요된 시간이므로 Native Scope의 세부 분석이 필요한 상황입니다. 루아 프로파일러의 **File - Option**에서 **Native Scope**에 체크한 후 다시 프로파일링해봅시다. 다시 수집한 데이터의 카테고리를 살펴보면 Native Scope 세부 분석이 이루어졌음을 알 수 있습니다. Frame의 Total Self T [chunk_id] | Guides:762:2
[task] | distill [title] | 루아 프로파일러를 활용하여 최적화하기 [category] | Guides [rephrased] | # [Guides] 루아 프로파일러를 활용한 최적화 ## 기본 개념 * **Context**: Core 실행 흐름을 의미하며, `Server`, `Client`, `Instance`, `Editor` 중 선택 가능합니다. 선택 시 차트(⑤) 및 프로파일링 결과(⑨)에서 해당 컨텍스트 데이터가 표시됩니다. ## 주요 기능 및 설정 ### ④ 그래프 선택 차트 영역(⑤)에 표시할 메트릭을 선택합니다. * **기본**: `Elapsed Time` * **Network**: `File > Option`에서 **Network** 체크 [original] | * Context는 Core에서의 실행 흐름을 뜻합니다. * Server, Client, Instance, Editor 등의 Context 중에서 선택할 수 있습니다. * Context를 선택하면 ⑤ 차트 영역과 ⑨ 프로파일링 결과 영역에서 데이터를 확인할 수 있습니다. ### ④ 그래프 선택 * **Elapsed Time, Network Send, Network Receive, Lua Memory** 중에서 어떤 그래프를 ⑤의 차트 영역에 표시할 것인지 선택합니다. * **File - Option**에서 **Network**를 [chunk_id] | Guides:762:1
[task] | extract_knowledge [title] | 엔티티에 물리 적용하기 [category] | Guides [rephrased] | # 충돌 엔티티에 물리 적용하기 ## 1. 개념 설명 mLua에서 물리 시뮬레이션은 주로 `PhysicsRigidbodyComponent`(물리 강체)와 `PhysicsColliderComponent`(충돌체)를 통해 제어됩니다. * **힘과 충격량**: 질량(Mass)에 영향을 받아 가속도를 생성합니다. * **힘(Force)**: 특정 방향에 지속적으로 힘을 가할 때 사용합니다. (예: 키 입력에 의한 이동) * **충격량(Impulse)**: 짧은 시간 동안 큰 힘을 가할 때 사용합니다. (예: [original] | #### 힘을 가하는 함수 `ApplyForce()`, `ApplyTorque()` 함수는 지속적인 힘을 가할 수 있습니다. 특정 Key를 눌러 지속적으로 특정 방향으로 힘 가하고 싶을 때가 해당됩니다. 매개 변수 force는 힘을 의미합니다. 해당 Entity에 대응하는 물리 강체의 질량 값에 영향을 받습니다. #### 충격량을 적용하는 함수 `ApplyAngularImpulse()`, `ApplyLinearImpulse()` 함수는 일시적으로 짧은 충격을 가할 수 있습니다. 대포 발파, 방망이 휘두르기 같은 짧은 충격을 주 [chunk_id] | Guides:761:1
[task] | distill [title] | 웹 브라우저 활용하기 [category] | Guides [rephrased] | # WebViewComponent 가이드 엔티티에 **WebViewComponent**를 추가하여 월드 내 특정 위치에 웹 브라우저를 배치합니다. ## 프로퍼티 | 프로퍼티 | 설명 | | :--- | :--- | | `ClickingEnabled` | 웹 뷰 내 클릭 허용 여부 | | `HoveringEnabled` | 마우스 호버 시 웹 요소 상호작용 허용 여부 | | `ScrollingEnabled` | 웹 뷰 내 스크롤 허용 여부 | | `DragMode` | 드래그 동작 모드:<br>- `DragToScroll`: 드 [original] | # 학습 과정 소개 **WebViewComponent**를 활용하면 웹 브라우저를 월드에 배치하고 탐색할 수 있습니다. 간단한 예제를 통해 월드에서 웹 브라우저를 활용하는 방법을 알아봅시다. ##### 참고 API Reference [WebViewComponent](/apiReference/Components/WebViewComponent) # WebViewComponent 소개 엔티티에 **WebViewComponent**를 추가하면 월드에 웹 브라우저를 배치할 수 있습니다. 먼저 **WebViewComponent**의 프 [chunk_id] | Guides:763:0
[task] | wikipedia [title] | 엔티티에 물리 적용하기 [category] | Guides [rephrased] | # 충돌 엔티티에 물리 적용하기 MapleStory Worlds에서 물리 법칙을 적용한 엔티티의 동작 방식과 충돌 처리를 이해하고 제어하는 방법에 대한 가이드입니다. 본 문서는 `PhysicsRigidbodyComponent`와 `PhysicsColliderComponent`의 핵심 프로퍼티, 충돌 그룹 설정 방법, 그리고 실제 코드 활용 예제를 다룹니다. ## 물리 실행 공간과 동기화 방식 `PhysicsRigidbodyComponent`의 대부분의 프로퍼티와 함수는 `PhysicsColliderComponent`의 `Cli [original] | **PhysicsRigidbodyComponent**의 대부분의 Property와 Function은 **PhysicsColliderComponent**의 ClientOnly 프로퍼티의 값에 따라 사용, 접근 가능한 실행 공간이 나뉘게 됩니다. ClientOnly에 따라 각각의 물리 World에서 연산되며, 이에 따라 서로 충돌하거나 영향을 주지 않습니다. * **ClientOnly가 True일 때**: 해당 Entity의 물리 강체는 Client에서만 생성되고 물리 연산은 각각의 Client에서 계산됩니다. 다른 Client와 결 [chunk_id] | Guides:761:2