[task] | diverse_qa [title] | ActionSheet로 아바타 애니메이션 손쉽게 제어하기 [category] | Guides [rephrased] | 질문: 아바타의 ActionSheet에서 새로운 상태(Key)와 애니메이션을 추가할 때, 기존의 키를 삭제해야 하나요? 답변: 아니요, 기존의 키를 삭제하지 않고 새로운 상태와 액션을 추가하면 두 상태 모두 동작합니다. 질문: Workspace - DefaultPlayer - AvatarStateAnimationComponent의 Size를 15로 변경하는 이유는 무엇인가요? 답변: 숫자 6, 7, 8, 9에 대응하는 새로운 애니메이션 상태를 추가하기 위해 공간을 확보하기 위함입니다. 질문: 문서에 제시된 예시에서 Key 'NE [original] | 새로운 상태(Key)를 추가하고, 애니메이션을 지정할 수 있습니다. 기존의 키를 삭제하지 않고 새로운 상태와 액션을 추가하면 두 상태 모두 동작합니다. 숫자 6, 7, 8, 9를 눌렀을 때 특정 애니메이션이 재생되게 만들어봅시다. 1. **Workspace - DefaultPlayer - AvatarStateAnimationComponent**의 **Size**를 **15**로 변경합니다. 2. 추가한 칸에 새로운 **Key**와 **AvatarBodyActionStateName**를 입력합니다. | Key | [chunk_id] | Guides:545:1
[task] | wikipedia [title] | MovementComponent를 활용한 엔티티의 이동 제어 [category] | Guides [rephrased] | MovementComponent는 엔티티의 좌표를 설정하기 위해 `SetPosition` 함수를 제공합니다. 이 함수는 기본적으로 엔티티의 `TransformComponent`에 속한 `Position` 값을 수정합니다. 다만, 해당 엔티티에 `RigidbodyComponent`가 존재하는 경우 `RigidbodyComponent`를 통해 `Position`을 설정하도록 동작이 달라집니다. `SetPosition` 함수는 `Vector2` 타입의 값을 매개변수로 받아, 전달된 좌표로 엔티티를 이동시킵니다. 아래 코드 예제는 서버 [original] | MovementComponent에서는 SetPosition 함수를 통해 엔티티의 좌표를 설정합니다. `SetPosition()`함수는 기본적으로 TransformComponent의 Position을 설정하지만, RigidbodyComponent가 엔티티에 포함되어 있을 경우 RigidbodyComponent를 통해 Position을 설정합니다. 매개 변수로 Vector2 값을 받으며, 이 값에 해당하는 좌표로 엔티티가 이동합니다. ```lua [server only] void OnUpdate(number delta) { l [chunk_id] | Guides:546:2
[task] | diverse_qa [title] | ActionSheet로 아바타 애니메이션 손쉽게 제어하기 [category] | Guides [rephrased] | 질문: StateToAvatarBodyActionSheet의 주요 구성 요소인 Key와 AvatarBodyActionStateName의 역할은 무엇인가요? 답변: Key는 아바타가 특정 상태가 되었을 때 동작 재생을 요청하는 역할을 하고, AvatarBodyActionStateName에는 해당 Key가 활성화될 때 재생할 애니메이션 이름이 정의되어 있습니다. 질문: StateToAvatarBodyActionSheet에 Key를 입력하지 않고 AvatarBodyActionStateName만 입력하면 어떻게 되나요? 답변: 연결된 상 [original] | # 학습 과정 소개 **StateToAvatarBodyActionSheet**의 아바타 상태를 통해 애니메이션을 손쉽게 제어하는 방법을 소개합니다. # 아바타 애니메이션 아바타가 걸을 때, 앉을 때, 공격할 때, 점프할 때를 유저가 인지하려면 상태에 맞는 애니메이션이 필요합니다. [AvatarStateAnimationComponent](/apiReference/Components/AvatarStateAnimationComponent)의 **StateToAvatarBodyActionSheet**에 **Key**와 **Avatar [chunk_id] | Guides:545:0
[task] | knowledge_list [title] | MovementComponent를 활용한 엔티티의 이동 제어 [category] | Guides [rephrased] | MovementComponent의 `SetPosition` 함수는 매개변수로 `Vector2` 타입의 좌표 값을 받아 해당 위치로 엔티티를 이동시키며, 반환 타입은 `void`입니다. `SetPosition` 함수는 기본적으로 엔티티의 `TransformComponent`의 `Position`을 설정하는 방식으로 동작합니다. 엔티티에 `RigidbodyComponent`가 포함된 경우, `SetPosition` 함수는 `TransformComponent` 대신 `RigidbodyComponent`를 통해 `Position`을 설정합 [original] | MovementComponent에서는 SetPosition 함수를 통해 엔티티의 좌표를 설정합니다. `SetPosition()`함수는 기본적으로 TransformComponent의 Position을 설정하지만, RigidbodyComponent가 엔티티에 포함되어 있을 경우 RigidbodyComponent를 통해 Position을 설정합니다. 매개 변수로 Vector2 값을 받으며, 이 값에 해당하는 좌표로 엔티티가 이동합니다. ```lua [server only] void OnUpdate(number delta) { l [chunk_id] | Guides:546:2
[task] | wikipedia [title] | ActionSheet로 아바타 애니메이션 손쉽게 제어하기 [category] | Guides [rephrased] | # 아바타 ActionSheet로 아바타 애니메이션 손쉽게 제어하기 이 가이드는 `AvatarStateAnimationComponent`의 `StateToAvatarBodyActionSheet` 프로퍼티를 활용하여 아바타의 상태 변화에 따른 애니메이션을 효율적으로 관리하는 방법을 설명합니다. ## 아바타 애니메이션의 원리 아바타가 걷기, 앉기, 공격, 점프 등의 행동을 수행할 때 유저가 이를 명확하게 인지하려면 해당 상태에 부합하는 애니메이션이 필수적입니다. `AvatarStateAnimationComponent`의 `Stat [original] | # 학습 과정 소개 **StateToAvatarBodyActionSheet**의 아바타 상태를 통해 애니메이션을 손쉽게 제어하는 방법을 소개합니다. # 아바타 애니메이션 아바타가 걸을 때, 앉을 때, 공격할 때, 점프할 때를 유저가 인지하려면 상태에 맞는 애니메이션이 필요합니다. [AvatarStateAnimationComponent](/apiReference/Components/AvatarStateAnimationComponent)의 **StateToAvatarBodyActionSheet**에 **Key**와 **Avatar [chunk_id] | Guides:545:0
[task] | distill [title] | MovementComponent를 활용한 엔티티의 이동 제어 [category] | Guides [rephrased] | ### MovementComponent: 점프 및 다운 점프 **요구 조건**: `RigidbodyComponent`가 반드시 함께 존재해야 합니다. 없으면 함수가 무시되거나 `false`를 반환합니다. **호출 공간**: 일반 엔티티는 `[server only]` 권장, **플레이어 엔티티는 `[client]` 또는 `[client only]`**에서 호출해야 합니다. (플레이어의 `RigidbodyComponent`는 Client → Server 동기화 구조이므로) #### 1. Jump `JumpForce` 값만큼 점프를 [original] | MovementComponent의 **Jump** 함수는 엔티티를 JumpForce에 입력한 힘만큼 점프시킵니다. boolean 타입으로 점프에 성공한 경우 true를 리턴합니다. 엔티티에 RigidbodyComponent가 함께 있어야 작동하며, RigidbodyComponent가 없으면 false를 리턴합니다. 동기화를 위해 일반적으로 server 공간에서 호출하는 것이 좋지만, 플레이어 엔티티의 경우에는 client에서 호출해야 합니다. ```lua [server only] void OnUpdate(number delta) { [chunk_id] | Guides:546:1
[task] | knowledge_list [title] | MovementComponent를 활용한 엔티티의 이동 제어 [category] | Guides [rephrased] | MovementComponent의 `Jump` 함수는 엔티티를 `JumpForce` 값만큼 점프시키며, 성공 시 `true`, 실패 시 `false`를 `boolean` 타입으로 반환합니다. `Jump` 함수는 엔티티에 `RigidbodyComponent`가 함께 존재할 때만 작동하며, `RigidbodyComponent`가 없으면 `false`를 반환합니다. `Jump` 함수의 동기화를 위해 일반적으로 `[server only]` 공간에서 호출하는 것이 권장되지만, 플레이어 엔티티의 경우 `[client]` 또는 `[client [original] | MovementComponent의 **Jump** 함수는 엔티티를 JumpForce에 입력한 힘만큼 점프시킵니다. boolean 타입으로 점프에 성공한 경우 true를 리턴합니다. 엔티티에 RigidbodyComponent가 함께 있어야 작동하며, RigidbodyComponent가 없으면 false를 리턴합니다. 동기화를 위해 일반적으로 server 공간에서 호출하는 것이 좋지만, 플레이어 엔티티의 경우에는 client에서 호출해야 합니다. ```lua [server only] void OnUpdate(number delta) { [chunk_id] | Guides:546:1
[task] | diverse_qa [title] | 아바타 표정 바꾸기 [category] | Guides [rephrased] | 질문: 키보드의 숫자키 1부터 5를 눌렀을 때 어떤 일이 발생하나요? 답변: 각각 다른 표정이 5초 동안 재생됩니다. 질문: 컴포넌트에서 새로운 함수를 만들 때 Function 옆의 어떤 버튼을 눌러야 하는가요? 답변: 추가 버튼을 눌러 New를 선택합니다. 질문: 작성할 함수의 이름은 무엇으로 변경해야 하나요? 답변: Emote로 변경합니다. 질문: 매개 변수를 두 개 추가하기 위해 더 보기 메뉴에서 무엇을 선택해야 하나요? 답변: Add Parameter를 선택합니다. 질문: 표정을 재생하기 위해 사용해야 하는 메서드 이 [original] | 키보드의 숫자키를 1부터 5까지 누르면 각각 다른 표정이 5초 동안 재생합니다. 1. MyDesk에서 새로운 컴포넌트를 만들고, 스크립트 작성 화면을 엽니다. 2. Function: 옆의 추가 를 눌러 **New**를 선택합니다. 3. 함수 이름을 Emote로 변경하고, 더 보기 를 선택해 **Add Parameter**를 두 번 추가해 매개 변수를 입력합니다. 5. `PlayEmotion`을 이용해 재생할 표정을 작성합니다. 6. Entity Event Handler에 `KeyDownEvent`를 추가하고, 표정 재생을 [chunk_id] | Guides:544:1
[task] | diverse_qa [title] | MovementComponent를 활용한 엔티티의 이동 제어 [category] | Guides [rephrased] | 질문: MovementComponent의 주요 역할은 무엇인가요? 답변: MovementComponent는 캐릭터의 이동속도와 점프력 설정은 물론, RigidbodyComponent가 포함된 엔티티를 강제로 점프시키거나 이동 및 정지시킬 수 있는 기능을 제공하며, 엔티티에 RigidbodyComponent 포함 여부를 자동으로 체크하여 TransformComponent 또는 RigidbodyComponent를 제어합니다. 질문: 스크립트 컴포넌트로 TransformComponent를 직접 제어할 때 발생할 수 있는 문제는 무엇인가 [original] | # 학습 과정 소개 이번 과정에서는 점프, 플레이어 이동 및 엔티티 좌표 설정 등 MovementComponent가 제공하는 주요 기능들과 MovementComponent의 기본 작동 방식에 대해 알아봅니다. # MovementComponent 소개 **MovementComponent**는 캐릭터의 이동속도와 점프력 설정은 물론 RigidbodyComponent가 포함된 엔티티를 강제로 점프시키거나 이동 또는 정지시킬 수 있는 여러 기능을 제공합니다. 스크립트 컴포넌트를 통해 TransformComponent를 제어하여 동적으 [chunk_id] | Guides:546:0
[task] | extract_knowledge [title] | ActionSheet로 아바타 애니메이션 손쉽게 제어하기 [category] | Guides [rephrased] | # StateToAvatarBodyActionSheet를 이용한 아바타 애니메이션 제어 ## 1. 개념 설명 `AvatarStateAnimationComponent`는 `Player` 모델에 기본적으로 포함된 컴포넌트로, 아바타의 현재 상태(`Key`)에 따라 특정 애니메이션(`AvatarBodyActionStateName`)을 재생하는 역할을 수행합니다. `StateToAvatarBodyActionSheet` 프로퍼티는 상태 키와 애니메이션 이름의 매핑 테이블을 정의합니다. * **Key**: 아바타가 진입한 상태(예: ` [original] | # 학습 과정 소개 **StateToAvatarBodyActionSheet**의 아바타 상태를 통해 애니메이션을 손쉽게 제어하는 방법을 소개합니다. # 아바타 애니메이션 아바타가 걸을 때, 앉을 때, 공격할 때, 점프할 때를 유저가 인지하려면 상태에 맞는 애니메이션이 필요합니다. [AvatarStateAnimationComponent](/apiReference/Components/AvatarStateAnimationComponent)의 **StateToAvatarBodyActionSheet**에 **Key**와 **Avatar [chunk_id] | Guides:545:0
[task] | wikipedia [title] | ActionSheet로 아바타 애니메이션 손쉽게 제어하기 [category] | Guides [rephrased] | # ActionSheet를 활용한 아바타 애니메이션 제어 이 섹션에서는 `ActionSheet` 컴포넌트를 사용하여 아바타의 애니메이션을 제어하는 방법을 설명합니다. `ActionSheet`는 새로운 상태(Key)를 추가하고 해당 상태에 애니메이션을 지정할 수 있는 기능을 제공합니다. 기존의 키를 삭제하지 않은 채 새로운 상태와 액션을 추가하면, 기존 상태와 새로운 상태가 모두 정상적으로 동작합니다. 본 예제에서는 숫자 키 6, 7, 8, 9를 눌렀을 때 특정 애니메이션이 재생되도록 설정하는 과정을 다룹니다. ## 설정 절차 [original] | 새로운 상태(Key)를 추가하고, 애니메이션을 지정할 수 있습니다. 기존의 키를 삭제하지 않고 새로운 상태와 액션을 추가하면 두 상태 모두 동작합니다. 숫자 6, 7, 8, 9를 눌렀을 때 특정 애니메이션이 재생되게 만들어봅시다. 1. **Workspace - DefaultPlayer - AvatarStateAnimationComponent**의 **Size**를 **15**로 변경합니다. 2. 추가한 칸에 새로운 **Key**와 **AvatarBodyActionStateName**를 입력합니다. | Key | [chunk_id] | Guides:545:1
[task] | extract_knowledge [title] | 아바타 표정 바꾸기 [category] | Guides [rephrased] | # 아바타 표정 재생: 키보드 입력 연동 ## 개념 설명 mLua에서는 `AvatarRendererComponent`의 `PlayEmotion` 메서드를 통해 특정 사용자의 아바타에 표정을 부여할 수 있습니다. 이 표정은 지정된 시간(초) 동안 재생됩니다. 클라이언트에서 키보드 입력(`KeyDownEvent`)을 감지하여 서버에 해당 이벤트를 전달하고, 서버에서 특정 사용자의 아바타에 표정 재생을 지시하는 구조로 구현할 수 있습니다. ## API 사용법 1. **`_UserService`**: * `GetUserEn [original] | 키보드의 숫자키를 1부터 5까지 누르면 각각 다른 표정이 5초 동안 재생합니다. 1. MyDesk에서 새로운 컴포넌트를 만들고, 스크립트 작성 화면을 엽니다. 2. Function: 옆의 추가 를 눌러 **New**를 선택합니다. 3. 함수 이름을 Emote로 변경하고, 더 보기 를 선택해 **Add Parameter**를 두 번 추가해 매개 변수를 입력합니다. 5. `PlayEmotion`을 이용해 재생할 표정을 작성합니다. 6. Entity Event Handler에 `KeyDownEvent`를 추가하고, 표정 재생을 [chunk_id] | Guides:544:1
[task] | wikipedia [title] | MovementComponent를 활용한 엔티티의 이동 제어 [category] | Guides [rephrased] | # MovementComponent를 활용한 엔티티의 이동 제어 본 문서는 메이플스토리 월드(MapleStory Worlds)의 스크립트 컴포넌트 `MovementComponent`가 제공하는 주요 기능과 작동 방식에 대해 설명합니다. 이 컴포넌트는 캐릭터의 이동 속도와 점프력 설정, 그리고 `RigidbodyComponent`가 포함된 엔티티를 강제로 점프시키거나 이동 및 정지시키는 기능을 포함합니다. ## MovementComponent 소개 `MovementComponent`는 엔티티의 물리 상태를 고려하여 이동을 제어하 [original] | # 학습 과정 소개 이번 과정에서는 점프, 플레이어 이동 및 엔티티 좌표 설정 등 MovementComponent가 제공하는 주요 기능들과 MovementComponent의 기본 작동 방식에 대해 알아봅니다. # MovementComponent 소개 **MovementComponent**는 캐릭터의 이동속도와 점프력 설정은 물론 RigidbodyComponent가 포함된 엔티티를 강제로 점프시키거나 이동 또는 정지시킬 수 있는 여러 기능을 제공합니다. 스크립트 컴포넌트를 통해 TransformComponent를 제어하여 동적으 [chunk_id] | Guides:546:0
[task] | extract_knowledge [title] | MovementComponent를 활용한 엔티티의 이동 제어 [category] | Guides [rephrased] | # MovementComponent를 활용한 엔티티 이동 제어 ## 개념 설명 `MovementComponent`는 엔티티의 위치를 제어하는 데 사용됩니다. 위치 설정은 `SetPosition` 메서드를 통해 수행됩니다. `SetPosition` 메서드의 동작 방식은 엔티티에 존재하는 컴포넌트에 따라 달라집니다. * 기본적으로 `TransformComponent`의 `Position` 값을 설정합니다. * 엔티티에 `RigidbodyComponent`가 포함되어 있을 경우, `RigidbodyComponent`를 통해 ` [original] | MovementComponent에서는 SetPosition 함수를 통해 엔티티의 좌표를 설정합니다. `SetPosition()`함수는 기본적으로 TransformComponent의 Position을 설정하지만, RigidbodyComponent가 엔티티에 포함되어 있을 경우 RigidbodyComponent를 통해 Position을 설정합니다. 매개 변수로 Vector2 값을 받으며, 이 값에 해당하는 좌표로 엔티티가 이동합니다. ```lua [server only] void OnUpdate(number delta) { l [chunk_id] | Guides:546:2
[task] | distill [title] | 플레이어 설정과 제어 [category] | Guides [rephrased] | # PlayerComponent **PlayerComponent**는 플레이어 전용 컴포넌트로, 없는 경우 해당 엔티티는 플레이어로 인식되지 않습니다. 플레이어 식별 및 제어(사망, 텔레포트 등)에 사용됩니다. ### 주요 프로퍼티 | 프로퍼티 | 설명 | | :--- | :--- | | `MaxHp` | 최대 체력. 기본값 `1000`. UI 상태 창 HP와 연동됩니다. | | `PVPMode` | 활성화 시 플레이어 간 타격 허용. | | `RespawnDuration` | 사망 후 리스폰 대기 시간. 기본값 `5`초. | [original] | # 학습 과정 소개 Player 모델에는 캐릭터의 초기 속성을 만들 때도 유용하게 사용하지만, 캐릭터를 이동시키거나, 상태를 제어할 때 유용하게 사용할 수 있습니다. PlayerComponent와 PlayerControllerComponent의 개념을 알아보고, 액션과 상태 애니메이션의 관계를 파악해 크리에이터의 의도에 따라 플레이어가 동작할 수 있게 만들어봅시다. # PlayerComponent 개념 **PlayerComponent**는 다른 엔티티와 다르게 플레이어만이 가지고 있는 특성을 모아 놓은 컴포넌트입니다. 대표적으 [chunk_id] | Guides:547:0
[task] | diverse_qa [title] | MovementComponent를 활용한 엔티티의 이동 제어 [category] | Guides [rephrased] | 질문: MovementComponent에서 엔티티의 좌표를 설정하는 함수의 이름은 무엇인가요? 답변: SetPosition 함수입니다. 질문: SetPosition 함수는 기본적으로 어떤 컴포넌트의 속성을 설정하나요? 답변: 기본적으로 TransformComponent의 Position을 설정합니다. 질문: 엔티티에 RigidbodyComponent가 포함되어 있을 경우 SetPosition 함수는 어떤 방식으로 Position을 설정하나요? 답변: RigidbodyComponent를 통해 Position을 설정합니다. 질문: [original] | MovementComponent에서는 SetPosition 함수를 통해 엔티티의 좌표를 설정합니다. `SetPosition()`함수는 기본적으로 TransformComponent의 Position을 설정하지만, RigidbodyComponent가 엔티티에 포함되어 있을 경우 RigidbodyComponent를 통해 Position을 설정합니다. 매개 변수로 Vector2 값을 받으며, 이 값에 해당하는 좌표로 엔티티가 이동합니다. ```lua [server only] void OnUpdate(number delta) { l [chunk_id] | Guides:546:2
[task] | knowledge_list [title] | 플레이어 설정과 제어 [category] | Guides [rephrased] | **PlayerComponent**는 플레이어 엔티티에만 존재하며, 이 컴포넌트가 없으면 해당 엔티티는 플레이어로 인식되지 않아 식별 및 제어의 기준이 됩니다. **PlayerComponent**의 `MaxHp` 프로퍼티는 플레이어의 최대 체력을 설정하며 기본값은 1000이고, 이 값은 UI 상태 창 모델의 HP와 연동되어 변경 시 UI에 반영됩니다. **PlayerComponent**의 `PVPMode` 프로퍼티를 활성화하면 플레이어 간 상호 타격이 가능해집니다. **PlayerComponent**의 `RespawnDuration [original] | # 학습 과정 소개 Player 모델에는 캐릭터의 초기 속성을 만들 때도 유용하게 사용하지만, 캐릭터를 이동시키거나, 상태를 제어할 때 유용하게 사용할 수 있습니다. PlayerComponent와 PlayerControllerComponent의 개념을 알아보고, 액션과 상태 애니메이션의 관계를 파악해 크리에이터의 의도에 따라 플레이어가 동작할 수 있게 만들어봅시다. # PlayerComponent 개념 **PlayerComponent**는 다른 엔티티와 다르게 플레이어만이 가지고 있는 특성을 모아 놓은 컴포넌트입니다. 대표적으 [chunk_id] | Guides:547:0
[task] | extract_knowledge [title] | ActionSheet로 아바타 애니메이션 손쉽게 제어하기 [category] | Guides [rephrased] | # 아바타 ActionSheet를 이용한 애니메이션 제어 ## 개념 설명 `AvatarStateAnimationComponent`는 아바타의 애니메이션 상태를 키(Key)와 액션 이름(`AvatarBodyActionStateName`)의 매핑을 통해 관리합니다. 기존의 상태를 삭제하지 않고 새로운 상태(Key)와 액션을 추가하면, 기존 상태와 신규 상태가 동시에 동작합니다. 이 방식은 특정 입력(예: 숫자 키)에 반응하여 특정 애니메이션을 재생하기 위해 `StateComponent`의 상태 등록 및 변경 기능을 활용합니다. ## [original] | 새로운 상태(Key)를 추가하고, 애니메이션을 지정할 수 있습니다. 기존의 키를 삭제하지 않고 새로운 상태와 액션을 추가하면 두 상태 모두 동작합니다. 숫자 6, 7, 8, 9를 눌렀을 때 특정 애니메이션이 재생되게 만들어봅시다. 1. **Workspace - DefaultPlayer - AvatarStateAnimationComponent**의 **Size**를 **15**로 변경합니다. 2. 추가한 칸에 새로운 **Key**와 **AvatarBodyActionStateName**를 입력합니다. | Key | [chunk_id] | Guides:545:1
[task] | wikipedia [title] | MovementComponent를 활용한 엔티티의 이동 제어 [category] | Guides [rephrased] | # 이동 ## MovementComponent를 활용한 엔티티의 이동 제어 `MovementComponent`는 엔티티의 이동 동작을 제어하는 컴포넌트입니다. 이 섹션에서는 점프 및 다운 점프와 같은 특정 이동 동작을 제어하는 함수와 프로퍼티에 대해 설명합니다. ### 점프 (Jump) `Jump` 함수는 엔티티를 `JumpForce`에 설정된 힘만큼 점프시킵니다. 이 함수는 boolean 타입을 리턴하며, 점프가 성공적으로 실행된 경우 `true`를 반환합니다. `Jump` 함수의 정상적인 작동을 위해 엔티티에는 `Rigi [original] | MovementComponent의 **Jump** 함수는 엔티티를 JumpForce에 입력한 힘만큼 점프시킵니다. boolean 타입으로 점프에 성공한 경우 true를 리턴합니다. 엔티티에 RigidbodyComponent가 함께 있어야 작동하며, RigidbodyComponent가 없으면 false를 리턴합니다. 동기화를 위해 일반적으로 server 공간에서 호출하는 것이 좋지만, 플레이어 엔티티의 경우에는 client에서 호출해야 합니다. ```lua [server only] void OnUpdate(number delta) { [chunk_id] | Guides:546:1
[task] | diverse_qa [title] | MovementComponent를 활용한 엔티티의 이동 제어 [category] | Guides [rephrased] | 질문: MovementComponent의 Jump 함수는 어떤 기능을 수행하나요? 답변: Jump 함수는 엔티티를 JumpForce에 입력한 힘만큼 점프시키는 기능을 수행합니다. 질문: MovementComponent의 Jump 함수는 어떤 타입의 값을 리턴하며, 성공 시에는 어떤 값을 반환하나요? 답변: Jump 함수는 boolean 타입으로 리턴하며, 점프에 성공한 경우 true를 리턴합니다. 질문: MovementComponent의 Jump 함수가 정상적으로 작동하려면 어떤 다른 컴포넌트가 반드시 존재해야 하나요? 답변: [original] | MovementComponent의 **Jump** 함수는 엔티티를 JumpForce에 입력한 힘만큼 점프시킵니다. boolean 타입으로 점프에 성공한 경우 true를 리턴합니다. 엔티티에 RigidbodyComponent가 함께 있어야 작동하며, RigidbodyComponent가 없으면 false를 리턴합니다. 동기화를 위해 일반적으로 server 공간에서 호출하는 것이 좋지만, 플레이어 엔티티의 경우에는 client에서 호출해야 합니다. ```lua [server only] void OnUpdate(number delta) { [chunk_id] | Guides:546:1
[task] | extract_knowledge [title] | MovementComponent를 활용한 엔티티의 이동 제어 [category] | Guides [rephrased] | # MovementComponent를 활용한 엔티티의 이동 제어 ## 1. 개념 설명 `MovementComponent`는 캐릭터의 이동 속도와 점프력을 설정하고, `RigidbodyComponent`가 포함된 엔티티를 강제로 점프시키거나 이동 및 정지시키는 기능을 제공합니다. 일반적으로 스크립트 컴포넌트를 통해 `TransformComponent`를 제어하여 엔티티를 이동시킬 수 있습니다. 그러나 엔티티에 `RigidbodyComponent`가 포함되어 있는 경우, `RigidbodyComponent` 역시 `Transfor [original] | # 학습 과정 소개 이번 과정에서는 점프, 플레이어 이동 및 엔티티 좌표 설정 등 MovementComponent가 제공하는 주요 기능들과 MovementComponent의 기본 작동 방식에 대해 알아봅니다. # MovementComponent 소개 **MovementComponent**는 캐릭터의 이동속도와 점프력 설정은 물론 RigidbodyComponent가 포함된 엔티티를 강제로 점프시키거나 이동 또는 정지시킬 수 있는 여러 기능을 제공합니다. 스크립트 컴포넌트를 통해 TransformComponent를 제어하여 동적으 [chunk_id] | Guides:546:0
[task] | wikipedia [title] | 플레이어 설정과 제어 [category] | Guides [rephrased] | # 학습 과정 개요 Player 모델은 캐릭터의 초기 속성을 설정할 때뿐만 아니라, 캐릭터의 이동을 제어하거나 상태를 관리하는 데에도 활용됩니다. 본 섹션에서는 PlayerComponent와 PlayerControllerComponent의 개념을 살펴보고, 액션(Action)과 상태(State) 애니메이션 간의 관계를 파악하여 크리에이터의 의도에 따라 플레이어가 동작하도록 만드는 방법을 다룹니다. # PlayerComponent 개념 **PlayerComponent**는 다른 엔티티와 달리 플레이어(Entity)에만 존재하는 [original] | # 학습 과정 소개 Player 모델에는 캐릭터의 초기 속성을 만들 때도 유용하게 사용하지만, 캐릭터를 이동시키거나, 상태를 제어할 때 유용하게 사용할 수 있습니다. PlayerComponent와 PlayerControllerComponent의 개념을 알아보고, 액션과 상태 애니메이션의 관계를 파악해 크리에이터의 의도에 따라 플레이어가 동작할 수 있게 만들어봅시다. # PlayerComponent 개념 **PlayerComponent**는 다른 엔티티와 다르게 플레이어만이 가지고 있는 특성을 모아 놓은 컴포넌트입니다. 대표적으 [chunk_id] | Guides:547:0
[task] | distill [title] | 플레이어 설정과 제어 [category] | Guides [rephrased] | # 플레이어 설정과 제어 `PlayerSetting` 컴포넌트를 `DefaultPlayer`에 추가하여 플레이어의 기본 속성(공격, 점프 등) 발동 조건을 제어하거나 조작키를 재정의할 수 있습니다. ### 1. 행동 제약 조건 추가 `AddCondition()`으로 특정 액션 실행 전 조건을 검사합니다. 조건이 `false`를 반환하면 해당 액션이 실행되지 않습니다. ```lua Method: [client only] void OnBeginPlay() { local playerController = self.Entity [original] | 플레이어의 기본 속성에 발동할 수 있게 하는 조건을 추가할 수 있습니다. `AddCondition()` 함수를 사용해 플레이어의 행동을 제약하기 위한 조건을 추가할 수 있습니다. 기본적으로 사용 가능한 공격, 점프 등을 일시적으로 특정 조건을 만족할 때 기능 발동을 제한하거나, 추가 발동 조건을 추가해 색다른 재미를 선사할 수 있습니다. 1. **MyDesk**에 PlayerSetting 컴포넌트를 생성하고, DefaultPlayer에 추가합니다. 2. Jump 액션이 실행되는 조건을 작성합니다. 10 이상은 Jump가 실 [chunk_id] | Guides:547:3
[task] | diverse_qa [title] | 플레이어 설정과 제어 [category] | Guides [rephrased] | 질문: PlayerComponent는 어떤 엔티티에만 존재합니까? 답변: PlayerComponent는 다른 엔티티와 다르게 플레이어만이 가지고 있는 특성을 모아 놓은 컴포넌트입니다. 질문: Player 모델에 PlayerComponent가 포함되어 있지 않으면 어떻게 인식됩니까? 답변: Player 모델에 PlayerComponent가 포함되어 있지 않으면, 플레이어로 인식하지 못합니다. 질문: PlayerComponent의 MaxHp 프로퍼티의 기본값은 얼마입니까? 답변: MaxHp 프로퍼티의 기본 값은 1000입니다. 질 [original] | # 학습 과정 소개 Player 모델에는 캐릭터의 초기 속성을 만들 때도 유용하게 사용하지만, 캐릭터를 이동시키거나, 상태를 제어할 때 유용하게 사용할 수 있습니다. PlayerComponent와 PlayerControllerComponent의 개념을 알아보고, 액션과 상태 애니메이션의 관계를 파악해 크리에이터의 의도에 따라 플레이어가 동작할 수 있게 만들어봅시다. # PlayerComponent 개념 **PlayerComponent**는 다른 엔티티와 다르게 플레이어만이 가지고 있는 특성을 모아 놓은 컴포넌트입니다. 대표적으 [chunk_id] | Guides:547:0
[task] | distill [title] | 카드 짝 맞추기 [category] | Guides [rephrased] | ```lua -- [Guides] 응용 제작 가이드: 카드 짝 맞추기 -- 게임 규칙 -- 1. 정해진 시간 동안 진행 -- 2. 한 판에 30개 카드 전개 -- 3. 짝 성공 시 10점 증가 -- 4. 시간 0초 도달 시 게임 UI 종료 -- 5. '게임 시작하기' 버튼으로 재시작 -- 사전 준비 (월드 리메이크) -- 1. 메이플스토리 월드 로그인 -- 2. '카드 짝 맞추기' 검색 -- 3. MSWStarter 제공 월드의 '리메이크' 버튼 클릭 -- 4. 메이플스토리 월드 실행 후 '만들기' 탭 이동 -- 5. '이어서 [original] | 카드 짝 맞추기 응용 가이드를 따라 해보며 UI 에디터를 활용 방법을 익혀봅시다. 간단한 규칙을 정해 게임을 만들어봅시다. 이번에 만들어 볼 게임의 기본 규칙은 다음과 같습니다. * 정해진 시간동안 게임 진행합니다. * 한 판에 30개의 카드가 펼쳐집니다. * 짝을 맞출 때마다 10점씩 증가합니다. * 0초가 되면 게임 UI가 종료됩니다. * 게임 시작하기 버튼을 누르면 다시 게임을 할 수 있습니다. 가이드는 총 8단계로 진행됩니다. 월드를 제작하는 동안 크리에이터의 취향에 맞게 UI를 수정해 색다르게 꾸밀 수도 있습니다. [chunk_id] | Guides:550:0
[task] | knowledge_list [title] | 플레이어 설정과 제어 [category] | Guides [rephrased] | * **PlayerControllerComponent**는 입력에 따라 액션을 수행하고 특정 조건을 처리하며, 예를 들어 공격 키 입력 시 애니메이션 재생 액션을 연결하되, 사다리에 매달려 있을 때 공격 애니메이션이 재생되지 않도록 조건을 설정할 수 있습니다. * 기본 Player 모델에는 **PlayerControllerComponent**와 **StateComponent**가 모두 기본으로 포함되어 있으며, **PlayerControllerComponent**가 **StateComponent**를 참조하므로 이 중 하나를 [original] | **PlayerControllerComponent**는 입력에 따라 액션을 수행하고, 특정 조건을 처리합니다.예를 들어, 공격 키를 눌렀을 때 특정 애니메이션을 재생하는 액션을 연결하면 공격 키가 입력되었을 때마다 작동합니다. 그러나 사다리에 매달려 있을 때는 사다리에 매달린 애니메이션이 재생되는 중이므로 공격 애니메이션은 재생되지 않게 해야 오르는 동작이 어색하지 않습니다. 그러므로 사다리에 플레이어가 매달려 있을 때, '공격 키를 눌러도 공격 액션이 재생되지 않는다'란 조건을 추가할 수 있습니다. 기본 Player 모델에는 [chunk_id] | Guides:547:1
[task] | knowledge_list [title] | 플레이어 설정과 제어 [category] | Guides [rephrased] | 제시된 문서 내용만을 기반으로 추출한 핵심 사실 목록입니다. **1. 플레이어 위치 이동** `PlayerComponent:MoveToMapPosition(mapName, position)` 메서드는 `[server only]` 실행 공간에서 호출되며, 매개변수로 맵 이름(`string`)과 위치(`Vector2`)를 받아 해당 플레이어를 지정된 맵의 특정 위치로 이동시킵니다. **2. 전체 유저 동시 이동** `_TimerService:SetTimerOnce(callback, delay)` 서비스 메서드를 사용하여 지연 시간( [original] | `MoveToMapPosition()`를 이용해 플레이어를 특정 위치로 이동시킬 수 있습니다. 이 기능을 활용해 여러 맵으로 모든 유저를 한 번에 옮겨 새로운 맵에서 새로운 게임을 할 수 있게 합니다. 1. **MyDesk**에 새로운 PlayerManagement 컴포넌트를 생성하고, DefaultPlayer에 추가합니다. 2. `TimerService`를 이용해 10초를 셀 수 있게 만들고, 10초 뒤 이동할 map의 이름과 그 맵의 위치를 입력합니다. 맵의 이름은 Hierarchy의 이름과 동일해야 합니다. >** [chunk_id] | Guides:547:2
[task] | wikipedia [title] | 플레이어 설정과 제어 [category] | Guides [rephrased] | # PlayerControllerComponent **PlayerControllerComponent**는 플레이어의 입력을 감지하여 정의된 액션을 실행하고, 특정 조건을 충족할 때만 액션을 허용하도록 제어하는 컴포넌트입니다. 예를 들어, 공격 키 입력 시 특정 애니메이션을 재생하도록 액션을 연결할 수 있습니다. 그러나 사다리에 매달려 있는 상태에서는 사다리 오르기 애니메이션이 재생 중이므로, 공격 애니메이션이 동시에 재생되면 동작이 어색해집니다. 이를 방지하기 위해 '플레이어가 사다리에 매달려 있을 경우 공격 액션을 재생하지 않는 [original] | **PlayerControllerComponent**는 입력에 따라 액션을 수행하고, 특정 조건을 처리합니다.예를 들어, 공격 키를 눌렀을 때 특정 애니메이션을 재생하는 액션을 연결하면 공격 키가 입력되었을 때마다 작동합니다. 그러나 사다리에 매달려 있을 때는 사다리에 매달린 애니메이션이 재생되는 중이므로 공격 애니메이션은 재생되지 않게 해야 오르는 동작이 어색하지 않습니다. 그러므로 사다리에 플레이어가 매달려 있을 때, '공격 키를 눌러도 공격 액션이 재생되지 않는다'란 조건을 추가할 수 있습니다. 기본 Player 모델에는 [chunk_id] | Guides:547:1
[task] | extract_knowledge [title] | 플레이어 설정과 제어 [category] | Guides [rephrased] | # 플레이어 설정과 제어: PlayerComponent ## 1. 개념 설명 `PlayerComponent`는 플레이어 엔티티에만 존재하는 고유 컴포넌트로, 플레이어의 상태와 동작을 제어하는 핵심 역할을 수행합니다. 다른 일반 엔티티와 구별하여 플레이어를 식별할 때 `PlayerComponent`의 유무 기준으로 삼을 수 있습니다. 주요 기능 및 특징: * **식별자 역할**: `PlayerComponent`가 포함된 엔티티만 게임 시스템에 의해 '플레이어'로 인식됩니다. * **상태 제어**: 플레이어의 죽음 처리, [original] | # 학습 과정 소개 Player 모델에는 캐릭터의 초기 속성을 만들 때도 유용하게 사용하지만, 캐릭터를 이동시키거나, 상태를 제어할 때 유용하게 사용할 수 있습니다. PlayerComponent와 PlayerControllerComponent의 개념을 알아보고, 액션과 상태 애니메이션의 관계를 파악해 크리에이터의 의도에 따라 플레이어가 동작할 수 있게 만들어봅시다. # PlayerComponent 개념 **PlayerComponent**는 다른 엔티티와 다르게 플레이어만이 가지고 있는 특성을 모아 놓은 컴포넌트입니다. 대표적으 [chunk_id] | Guides:547:0
[task] | knowledge_list [title] | 플레이어 설정과 제어 [category] | Guides [rephrased] | 1. `AddCondition()` 함수는 `PlayerControllerComponent`에서 호출되며, 첫 번째 매개변수로 액션 이름(예: "Jump")과 두 번째 매개변수로 조건을 반환하는 함수를 받아 해당 액션의 실행을 제약하는 조건을 추가합니다. 2. `AddCondition()` 함수는 `[client only]` 실행 공간에서 동작하며, 조건 함수가 `false`를 반환하면 해당 액션이 실행되지 않고 `true`를 반환하면 액션이 정상적으로 실행됩니다. 3. `RemoveActionKey` 함수는 `PlayerContr [original] | 플레이어의 기본 속성에 발동할 수 있게 하는 조건을 추가할 수 있습니다. `AddCondition()` 함수를 사용해 플레이어의 행동을 제약하기 위한 조건을 추가할 수 있습니다. 기본적으로 사용 가능한 공격, 점프 등을 일시적으로 특정 조건을 만족할 때 기능 발동을 제한하거나, 추가 발동 조건을 추가해 색다른 재미를 선사할 수 있습니다. 1. **MyDesk**에 PlayerSetting 컴포넌트를 생성하고, DefaultPlayer에 추가합니다. 2. Jump 액션이 실행되는 조건을 작성합니다. 10 이상은 Jump가 실 [chunk_id] | Guides:547:3