← 목록

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

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

[task] | single_turn [pass] | ⏳ 미판정 [title] | 아바타 표정 바꾸기 [question] | AvatarRendererComponent의 PlayEmotion 메서드를 호출할 때 key 인자로 "Smile" 같은 문자열을 그대로 넘기면 되는지, 아니면 상수처럼 정의된 값을 사용해야 하는지 궁금합니다. [answer] | `AvatarRendererComponent`의 `PlayEmotion` 메서드를 호출할 때는 `"Smile"`과 같은 문자열을 그대로 넘기는 것이 아니라, 문서 예제에 나온 것처럼 `EmotionalType` 네임스페이스에 정의된 상수 값을 사용해야 합니다. 문서 예제에서 `PlayEmotion`의 첫 번째 인자로 `EmotionalType.Vomit`, `EmotionalType.Glitter` 등과 같이 `EmotionalType` 접두사가 붙은 값을 사용하도록 명시되어 있습니다. 따라서 '웃음(Smile)' 표정을 재생하려 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 AvatarRendererComponent의 `PlayEmotion`을 사용해 플레이어 아바타의 표정을 바꿀 수 있습니다. 특정 입력 키와 표정을 연결 지어 생동감 있게 감정을 표현할 수도 있고, 몬스터에게 맞았을 때 특정 표정을 재생시킬 수도 있습니다. 적극적으로 사용해 유저들끼리의 활발하고 쉬운 의사소통을 할 수 있게 도와주세요. # 표정 종류 총 22가지의 표정을 제공합니다. 표정은 얼굴마다 다르게 나타나므로 크리에이터가 설정한 얼굴에 따라 가이드의 표정과 다를 수 있습니다 | 표정 | key | 예

[task] | single_turn [pass] | ⏳ 미판정 [title] | 아바타의 외형 변경과 활용 [question] | CostumeManagerComponent에서 특정 부위, 예를 들어 머리나 신발만 다른 복장으로 바꾸려면 RUID를 어디에 어떻게 입력해야 하나요? [answer] | `CostumeManagerComponent`에서 머리(Hair)나 신발(Shoes)처럼 특정 부위만 변경하려면, 해당 부위에 대한 **`Custom{부위명}Equip`** 프로퍼티에 RUID 문자열을 직접 할당하면 됩니다. 참고 문서의 예제 코드에 따르면, `CustomCapEquip`, `CustomLongcoatEquip`, `CustomOneHandedWeaponEquip`와 같이 `Custom` 접두사 뒤에 부위 이름이 붙은 프로퍼티를 사용합니다. 따라서 머리(Hair)와 신발(Shoes)의 경우 각각 `CustomHai [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | **AvatarRendererComponent**와 **CostumeManagerComponent**를 활용해 새로운 아바타를 만들어 사용할 수 있습니다. 몬스터, 포탈, NPC 혹은 크리에이터만의 특별한 엔티티로 제작할 수 있습니다. 이때 **TransformComponent, AvatarRendererComponent, CostumeManagerComponent** 총 3가지는 필수 컴포넌트입니다. 필수 컴포넌트와 더불어 다른 네이티브 컴포넌트를 추가하거나, 크리에이터가 제작한 새로운 컴포넌트를 추가해 활용합니다. #### 아

[task] | two_turn [pass] | ⏳ 미판정 [title] | ActionSheet로 아바타 애니메이션 손쉽게 제어하기 [question] | 기본 애니메이션(예: ladder)을 삭제했을 때 아바타의 동작이 어떻게 변화하나요? [answer] | 기본 애니메이션 값 중 `ladder`를 삭제하면, 아바타가 사다리를 올라갈 때 사다리 오르기 애니메이션이 재생되지 않습니다. 대신 아바타는 걷기 애니메이션이 멈춘 상태 그대로 사다리를 올라가게 됩니다. [followup] | ladder 애니메이션을 삭제한 후 사다리를 오를 때 걷기 애니메이션이 멈춘 상태로 올라가는 현상을 스크립트로 재현하거나 방지할 수 있는 방법이 있나요? [followup_answer] | 참고 문서에는 `ladder` 애니메이션을 삭제했을 때 발생하는 현상(걷기 애니메이션이 멈춘 상태로 올라가는 것)에 대한 설명만 있을 뿐, 이 현상을 스크립트로 재현하거나 방지하기 위한 구체적인 방법, API, 또는 코드 예제는 제공되지 않습니다. 문서에서 다루는 스크립트 관련 내용은 주로 `StateComponent:ChangeState()`를 통해 아바타의 상태(예: "CROUCH", "JUMP")를 변경하는 방식이며, `AvatarStateAnimationComponent`의 `StateToAvatarBodyActionShe [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 **StateToAvatarBodyActionSheet**의 아바타 상태를 통해 애니메이션을 손쉽게 제어하는 방법을 소개합니다. # 아바타 애니메이션 아바타가 걸을 때, 앉을 때, 공격할 때, 점프할 때를 유저가 인지하려면 상태에 맞는 애니메이션이 필요합니다. [AvatarStateAnimationComponent](/apiReference/Components/AvatarStateAnimationComponent)의 **StateToAvatarBodyActionSheet**에 **Key**와 **Avatar

[task] | code [pass] | ⏳ 미판정 [title] | 인스턴스 맵 만들기 [question] | InstanceGameManager 스크립트 컴포넌트의 OnBeginPlay() 메서드에서 _UserService.UserEntities 를 활용해 현재 룸 내 모든 플레이어의 이름을 users 테이블에 수집하고, _TimerService:SetTimerOnce() 로 5초 후 _RoomService:MoveUsersToStaticRoom(users) 를 호출해 해당 유저들을 정적 룸으로 이동시키는 스크립트를 작성해줘 [answer] | 요청하신 동작을 수행하는 `InstanceGameManager` 스크립트 컴포넌트의 `OnBeginPlay()` 메서드代码如下입니다. ```lua Method: [server only] void OnBeginPlay() { local playFunc = function() local users = {} -- 현재 룸에 존재하는 플레이어들의 이름을 수집합니다. for k, v in pairs(_UserService.UserEntities) do users[#us [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | #### 정적 룸으로 이동시키기 게임이 끝난 맵의 유저는 `MoveUsersToStaticRoom()` 함수를 활용해 정적 룸으로 돌아가게 만듭니다. 돌아갈 정적 맵을 지정하지 않으면 시작 맵으로 돌아갑니다. * **InstanceGameManager 스크립트 컴포넌트**를 생성, 작성한 뒤 dungeon 맵에 스크립트 컴포넌트를 추가합니다. ```lua Method: [server only] void OnBeginPlay() { local playFunc = function()

[task] | instruction_following [pass] | ⏳ 미판정 [title] | MovementComponent를 활용한 엔티티의 이동 제어 [question] | Jump와 DownJump 함수를 각각 3초 간격으로 호출하는 OnUpdate 메서드 코드를, 주석으로만 설명을 달고 출력하세요. [answer] | ```lua Method: [server only] void OnUpdate(number delta) { -- 누적 시간 변수 초기화 if self._T.accTime == nil then self._T.accTime = 0 end -- 델타 타임 누적 self._T.accTime = self._T.accTime + delta -- 3초 간격으로 점프 및 다운 점프 실행 if self._T.accTime >= 3 then self.Entity.MovementComponent:Jump() sel [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | MovementComponent의 **Jump** 함수는 엔티티를 JumpForce에 입력한 힘만큼 점프시킵니다. boolean 타입으로 점프에 성공한 경우 true를 리턴합니다. 엔티티에 RigidbodyComponent가 함께 있어야 작동하며, RigidbodyComponent가 없으면 false를 리턴합니다. 동기화를 위해 일반적으로 server 공간에서 호출하는 것이 좋지만, 플레이어 엔티티의 경우에는 client에서 호출해야 합니다. ```lua [server only] void OnUpdate(number delta) {

[task] | code [pass] | ⏳ 미판정 [title] | 아바타의 외형 변경과 활용 [question] | AvatarRendererComponent, CostumeManagerComponent, TransformComponent를 가진 엔티티에 문서에 제시된 Body, Hair, Face 등 복장 RUID를 설정하여 크리에이터 아바타 외형을 초기화하는 스크립트를 작성해줘 [answer] | 문서에 제시된 RUID 값을 사용하여 엔티티의 `CostumeManagerComponent`에 복장을 설정하는 스크립트입니다. 참고로, `CostumeManagerComponent`의 복장 속성(`CustomCapEquip`, `CustomLongcoatEquip` 등)은 예제 코드에서 직접 할당하는 방식을 사용하지만, `SetEquip` 메서드도 존재합니다. 문서의 "아바타 모양 포탈 만들기" 섹션에서는 `CostumeManagerComponent`에 복장 정보 RUID를 입력한다고 했으며, 실제 mLua 예제 중 하나는 `co [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | **AvatarRendererComponent**와 **CostumeManagerComponent**를 활용해 새로운 아바타를 만들어 사용할 수 있습니다. 몬스터, 포탈, NPC 혹은 크리에이터만의 특별한 엔티티로 제작할 수 있습니다. 이때 **TransformComponent, AvatarRendererComponent, CostumeManagerComponent** 총 3가지는 필수 컴포넌트입니다. 필수 컴포넌트와 더불어 다른 네이티브 컴포넌트를 추가하거나, 크리에이터가 제작한 새로운 컴포넌트를 추가해 활용합니다. #### 아

[task] | code [pass] | ⏳ 미판정 [title] | 인스턴스 맵 만들기 [question] | InstanceGameManager 스크립트 컴포넌트의 OnBeginPlay() 메서드에서 _UserService.UserEntities 를 활용해 현재 룸 내 모든 플레이어의 이름을 users 테이블에 수집하고, _RoomService:MoveUsersToStaticRoom(users) 를 즉시 호출해 해당 유저들을 시작 맵으로 돌아가게 만드는 스크립트를 작성해줘 [answer] | 요청하신 기능을 구현하는 `InstanceGameManager` 스크립트 컴포넌트 코드는 다음과 같습니다. `OnBeginPlay()` 메서드에서 `_UserService.UserEntities`를 반복하며 현재 룸에 있는 플레이어들의 이름을 `users` 테이블에 수집한 뒤, `_RoomService:MoveUsersToStaticRoom(users)`를 호출하여 정적 룸(시작 맵)으로 이동시킵니다. ```lua Method: [server only] void OnBeginPlay() { local users = {} [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | #### 정적 룸으로 이동시키기 게임이 끝난 맵의 유저는 `MoveUsersToStaticRoom()` 함수를 활용해 정적 룸으로 돌아가게 만듭니다. 돌아갈 정적 맵을 지정하지 않으면 시작 맵으로 돌아갑니다. * **InstanceGameManager 스크립트 컴포넌트**를 생성, 작성한 뒤 dungeon 맵에 스크립트 컴포넌트를 추가합니다. ```lua Method: [server only] void OnBeginPlay() { local playFunc = function()

[task] | single_turn [pass] | ⏳ 미판정 [title] | 아바타 표정 바꾸기 [question] | 이 코드에서 키 입력 처리는 클라이언트에서만 수행되는데, 왜 Emote 함수의 실행 공간은 [server]로 설정되어 있어야 하나요? [answer] | 키 입력 처리가 클라이언트에서 이루어지더라도 `Emote` 함수의 실행 공간이 `[server]`로 설정되어야 하는 이유는 **아바타의 표정 변경은 서버에서 관리되어야 하는 상태 변경**이기 때문입니다. 메이플스토리 월드에서 아바타의 표정(`AvatarRendererComponent`)과 같은 시각적 상태는 모든 플레이어가 동일한 것을 보도록 하기 위해 서버가 통일된 기준으로 처리합니다. 만약 `Emote` 함수를 클라이언트(`[client]`)에서 실행하면, 키를 누른 플레이어 자신의 화면에서만 표정이 바뀌고 다른 플레이어에게는 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 키보드의 숫자키를 1부터 5까지 누르면 각각 다른 표정이 5초 동안 재생합니다. 1. MyDesk에서 새로운 컴포넌트를 만들고, 스크립트 작성 화면을 엽니다. 2. Function: 옆의 추가 를 눌러 **New**를 선택합니다. 3. 함수 이름을 Emote로 변경하고, 더 보기 를 선택해 **Add Parameter**를 두 번 추가해 매개 변수를 입력합니다. 5. `PlayEmotion`을 이용해 재생할 표정을 작성합니다. 6. Entity Event Handler에 `KeyDownEvent`를 추가하고, 표정 재생을

[task] | code [pass] | ⏳ 미판정 [title] | 인스턴스 맵 만들기 [question] | InstanceGameManager 스크립트 컴포넌트의 OnBeginPlay() 메서드에서 _UserService.UserEntities 를 활용해 현재 룸 내 모든 플레이어의 이름을 users 테이블에 수집하고, _TimerService:SetTimerOnce() 로 10초 후 _RoomService:MoveUsersToStaticRoom(users) 를 호출해 해당 유저들을 정적 룸으로 이동시키는 스크립트를 작성해줘 [answer] | 요청하신 기능은 `InstanceGameManager` 스크립트 컴포넌트의 `OnBeginPlay()` 메서드에서 구현합니다. 게임 시작 후 10초가 지나면 현재 룸에 있는 모든 플레이어의 이름을 수집하여 정적 룸으로 이동시키는 로직입니다. ```lua Method: [server only] void OnBeginPlay() { local playFunc = function() local users = {} -- 현재 룸에 존재하는 플레이어들을 가져옵니다. for k, v in p [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | #### 정적 룸으로 이동시키기 게임이 끝난 맵의 유저는 `MoveUsersToStaticRoom()` 함수를 활용해 정적 룸으로 돌아가게 만듭니다. 돌아갈 정적 맵을 지정하지 않으면 시작 맵으로 돌아갑니다. * **InstanceGameManager 스크립트 컴포넌트**를 생성, 작성한 뒤 dungeon 맵에 스크립트 컴포넌트를 추가합니다. ```lua Method: [server only] void OnBeginPlay() { local playFunc = function()

[task] | code [pass] | ⏳ 미판정 [title] | 인스턴스 맵 만들기 [question] | InstanceGameManager 스크립트 컴포넌트의 OnBeginPlay() 메서드에서 _UserService.UserEntities 를 활용해 현재 룸 내 모든 플레이어의 이름을 users 테이블에 수집하고, _TimerService:SetTimerOnce() 로 15초 후 _RoomService:MoveUsersToStaticRoom(users) 를 호출해 해당 유저들을 정적 룸으로 이동시키는 스크립트를 작성해줘 [answer] | 요청하신 조건에 맞춰 `InstanceGameManager` 스크립트 컴포넌트의 `OnBeginPlay()` 메서드 구현 코드는 다음과 같습니다. ```lua Method: [server only] void OnBeginPlay() { local moveUsersFunc = function() local users = {} -- 현재 룸에 존재하는 플레이어들의 이름을 users 테이블에 수집합니다. for k, v in pairs(_UserService.UserEn [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | #### 정적 룸으로 이동시키기 게임이 끝난 맵의 유저는 `MoveUsersToStaticRoom()` 함수를 활용해 정적 룸으로 돌아가게 만듭니다. 돌아갈 정적 맵을 지정하지 않으면 시작 맵으로 돌아갑니다. * **InstanceGameManager 스크립트 컴포넌트**를 생성, 작성한 뒤 dungeon 맵에 스크립트 컴포넌트를 추가합니다. ```lua Method: [server only] void OnBeginPlay() { local playFunc = function()

[task] | instruction_following [pass] | ⏳ 미판정 [title] | MovementComponent를 활용한 엔티티의 이동 제어 [question] | 플레이어 엔티티의 이동 제어 함수 호출 공간이 일반 엔티티와 다른 이유를 단계별 번호 목록으로 설명하세요. [answer] | 플레이어 엔티티와 일반 엔티티의 이동 제어 함수 호출 공간이 다른 이유는 다음과 같습니다. 1. **RigidbodyComponent의 동기화 방향 차이**: 일반 엔티티의 RigidbodyComponent는 서버에서 클라이언트로 동기화되므로, 서버 공간(`server only`)에서 제어하는 것이 적절합니다. 2. **플레이어 RigidbodyComponent의 특수성**: 플레이어 엔티티의 RigidbodyComponent는 다른 엔티티와 달리 서버에서 클라이언트로 동기화되지 않고, 클라이언트에서 서버로 동기화됩니다. 3. * [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | MovementComponent의 **Jump** 함수는 엔티티를 JumpForce에 입력한 힘만큼 점프시킵니다. boolean 타입으로 점프에 성공한 경우 true를 리턴합니다. 엔티티에 RigidbodyComponent가 함께 있어야 작동하며, RigidbodyComponent가 없으면 false를 리턴합니다. 동기화를 위해 일반적으로 server 공간에서 호출하는 것이 좋지만, 플레이어 엔티티의 경우에는 client에서 호출해야 합니다. ```lua [server only] void OnUpdate(number delta) {

[task] | two_turn [pass] | ⏳ 미판정 [title] | ActionSheet로 아바타 애니메이션 손쉽게 제어하기 [question] | AvatarStateAnimationComponent를 활용해 아바타 애니메이션을 제어하는 기본 원리와 기존 상태와의 충돌 방지 원리는 무엇인가요? [answer] | AvatarStateAnimationComponent를 활용한 아바타 애니메이션 제어의 기본 원리와 기존 상태와의 충돌 방지 원리는 다음과 같습니다. **1. 기본 원리** * **상태(Key) 추가 및 애니메이션 매핑:** `AvatarStateAnimationComponent`에서 새로운 `Key`(상태 이름)를 추가하고, 각 Key에 대응하는 `AvatarBodyActionStateName`(애니메이션 이름)을 지정합니다. * **스크립트를 통한 상태 관리:** 스크립트에서 `StateComponent`를 접근하여 ` [followup] | Size를 15로 변경하고 AddState로 NEW_ATTACK 등을 등록했을 때, 키 6을 누르면 attack 애니메이션이 재생되는 전체 코드 구성과 실행 흐름을 설명해 주세요. [followup_answer] | `AvatarStateAnimationComponent`의 `Size`를 15로 변경하고 `AddState()`로 새로운 상태를 등록한 뒤, 키 6을 누르면 `attack` 애니메이션이 재생되는 과정은 다음과 같습니다. ### 1. 전체 코드 구성 스크립트는 `Property`, `Method`, `Event Handler` 블록으로 구성되며, `StateComponent`를 통해 애니메이션 상태를 관리합니다. ```lua Property: [None] any stateComponent = nil Method: [client [scores] | [judge_reason] | [source_doc] | 새로운 상태(Key)를 추가하고, 애니메이션을 지정할 수 있습니다. 기존의 키를 삭제하지 않고 새로운 상태와 액션을 추가하면 두 상태 모두 동작합니다. 숫자 6, 7, 8, 9를 눌렀을 때 특정 애니메이션이 재생되게 만들어봅시다. 1. **Workspace - DefaultPlayer - AvatarStateAnimationComponent**의 **Size**를 **15**로 변경합니다. 2. 추가한 칸에 새로운 **Key**와 **AvatarBodyActionStateName**를 입력합니다. | Key |

[task] | single_turn [pass] | ⏳ 미판정 [title] | 아바타 표정 바꾸기 [question] | 플레이어 아바타의 표정을 바꾸려면 AvatarRendererComponent를 반드시 직접 참조해야 하는지, 아니면 엔티티 경로로만 접근해도 표정 재생이 가능한지 알고 싶습니다. [answer] | 제공된 참고 문서에 따르면, 플레이어 아바타의 표정을 바꾸기 위해 `AvatarRendererComponent`를 직접 참조해야 하는지, 아니면 다른 엔티티 경로(예: `self.Entity.AvatarGUIRendererComponent`)를 사용해도 되는지에 대한 명확한 지침이 없습니다. 문서에는 두 가지 서로 다른 컴포넌트 접근 방식이 예제로 등장하지만, 이 둘이 동일한 것인지, 또는 특정 조건에서만 사용 가능한지에 대한 설명은 포함되어 있지 않습니다. 1. **`AvatarGUIRendererComponent`**: 문 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 AvatarRendererComponent의 `PlayEmotion`을 사용해 플레이어 아바타의 표정을 바꿀 수 있습니다. 특정 입력 키와 표정을 연결 지어 생동감 있게 감정을 표현할 수도 있고, 몬스터에게 맞았을 때 특정 표정을 재생시킬 수도 있습니다. 적극적으로 사용해 유저들끼리의 활발하고 쉬운 의사소통을 할 수 있게 도와주세요. # 표정 종류 총 22가지의 표정을 제공합니다. 표정은 얼굴마다 다르게 나타나므로 크리에이터가 설정한 얼굴에 따라 가이드의 표정과 다를 수 있습니다 | 표정 | key | 예

[task] | two_turn [pass] | ⏳ 미판정 [title] | 아바타의 외형 변경과 활용 [question] | 아바타의 복장 정보를 변경하기 위해 CostumeManagerComponent에 입력해야 하는 RUID 정보는 어디서 확인하거나 입력하나요? [answer] | 아바타의 복장 정보를 변경하기 위해 `CostumeManagerComponent`에 입력하는 RUID 정보는 **CostumeManagerComponent 컴포넌트 자체의 인스펙터(Inspector) 또는 설정 화면**에서 직접 입력합니다. 참고 문서에 따르면, 새로운 모델에 `CostumeManagerComponent`를 추가한 후, 해당 컴포넌트에 **복장 정보 RUID를 입력**하여 크리에이터의 아바타와 다른 모습의 아바타를 만들 수 있습니다. 문서에는 특정 RUID 값(예: Body, Cape, Hair 등)이 표로 제시되 [followup] | Body, Hair, Face 등 특정 복장 부위의 RUID를 설정하여 아바타 외형을 변경하는 mLua 스크립트 코드를 작성해 주세요. [followup_answer] | 참고 문서에 제시된 RUID 값을 사용하여 Body, Hair, Face 부위의 아바타 외형을 변경하는 mLua 스크립트입니다. 문서의 예제 코드에서 `CostumeManagerComponent`의 프로퍼티(예: `CustomLongcoatEquip`)에 RUID 문자열을 직접 할당하거나, `SetEquip` 메서드를 사용하여 `MapleAvatarItemCategory`와 RUID를 전달하는 방식을 확인할 수 있습니다. 아래 코드는 문서에 명시된 `CustomCapEquip`와 유사한 프로퍼티 네이밍 규칙을 가정하여 Body, [scores] | [judge_reason] | [source_doc] | **AvatarRendererComponent**와 **CostumeManagerComponent**를 활용해 새로운 아바타를 만들어 사용할 수 있습니다. 몬스터, 포탈, NPC 혹은 크리에이터만의 특별한 엔티티로 제작할 수 있습니다. 이때 **TransformComponent, AvatarRendererComponent, CostumeManagerComponent** 총 3가지는 필수 컴포넌트입니다. 필수 컴포넌트와 더불어 다른 네이티브 컴포넌트를 추가하거나, 크리에이터가 제작한 새로운 컴포넌트를 추가해 활용합니다. #### 아

[task] | two_turn [pass] | ⏳ 미판정 [title] | 아바타의 외형 변경과 활용 [question] | 아바타 외형 변경에 사용되는 필수 컴포넌트와 모델 생성 방법은 어떻게 되나요? [answer] | 아바타 외형 변경과 활용을 위해 엔티티를 만들 때는 **TransformComponent**, **AvatarRendererComponent**, **CostumeManagerComponent** 총 3가지 컴포넌트를 필수로 포함해야 합니다. 이 필수 컴포넌트 외에 다른 네이티브 컴포넌트나 크리에이터가 제작한 컴포넌트를 추가로 사용할 수도 있습니다. 모델을 생성하고 아바타를 설정하는 절차는 다음과 같습니다. 1. **Workspace - MyDesk**의 콘텍스트 메뉴에서 **Create Model**을 선택하여 새로운 모델을 [followup] | 아바타 모양 포탈을 만들 때 CostumeManagerComponent에 복장 RUID를 설정하고 PortalComponent를 추가하는 스크립트 예시를 보여주세요. [followup_answer] | 아바타 모양 포탈을 만들 때 `CostumeManagerComponent`에 복장 RUID를 설정하고 `PortalComponent`를 추가하는 스크립트 예제는 다음과 같습니다. 참고로 아바타 모양 포탈을 제작하려면 **TransformComponent**, **AvatarRendererComponent**, **CostumeManagerComponent** 필수 3가지 컴포넌트 외에도 **PortalComponent**와 **NameTagComponent**를 모델에 추가해야 합니다. 아래 예제는 엔티티 생성 시(`OnBegi [scores] | [judge_reason] | [source_doc] | **AvatarRendererComponent**와 **CostumeManagerComponent**를 활용해 새로운 아바타를 만들어 사용할 수 있습니다. 몬스터, 포탈, NPC 혹은 크리에이터만의 특별한 엔티티로 제작할 수 있습니다. 이때 **TransformComponent, AvatarRendererComponent, CostumeManagerComponent** 총 3가지는 필수 컴포넌트입니다. 필수 컴포넌트와 더불어 다른 네이티브 컴포넌트를 추가하거나, 크리에이터가 제작한 새로운 컴포넌트를 추가해 활용합니다. #### 아

[task] | code [pass] | ⏳ 미판정 [title] | 아바타의 외형 변경과 활용 [question] | CostumeManagerComponent에 문서에 명시된 Glove, Shoes, EyeAccessory RUID를 입력하여 아바타의 세부 복장 변화를 처리하는 스크립트를 작성해줘 [answer] | CostumeManagerComponent에는 `SetEquip` 메서드와 `MapleAvatarItemCategory` 열거형 값을 활용하여 특정 부위의 복장 RUID를 설정할 수 있습니다. 요청하신 Glove, Shoes, EyeAccessory에 해당하는 RUID를 사용하여 엔티티에 적용하는 스크립트는 다음과 같습니다. 참고로 `MapleAvatarItemCategory`의 정확한 열거형 값 이름(Glove, Shoes, EyeAccessory 등)은 제공된 문서에 명시되어 있지 않으므로, 실제 개발 환경에서 해당 상수의 정 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | **AvatarRendererComponent**와 **CostumeManagerComponent**를 활용해 새로운 아바타를 만들어 사용할 수 있습니다. 몬스터, 포탈, NPC 혹은 크리에이터만의 특별한 엔티티로 제작할 수 있습니다. 이때 **TransformComponent, AvatarRendererComponent, CostumeManagerComponent** 총 3가지는 필수 컴포넌트입니다. 필수 컴포넌트와 더불어 다른 네이티브 컴포넌트를 추가하거나, 크리에이터가 제작한 새로운 컴포넌트를 추가해 활용합니다. #### 아

[task] | two_turn [pass] | ⏳ 미판정 [title] | MovementComponent를 활용한 엔티티의 이동 제어 [question] | MovementComponent의 SetPosition 함수가 TransformComponent와 RigidbodyComponent 중 어떤 기준으로 좌표를 설정하는지 궁금합니다 [answer] | `MovementComponent`의 `SetPosition` 함수는 엔티티에 **RigidbodyComponent**가 포함되어 있는지 여부에 따라 좌표를 설정하는 방식을 결정합니다. 1. **기본 동작**: 엔티티에 RigidbodyComponent가 **없을 경우**, `TransformComponent`의 `Position`을 설정합니다. 2. **RigidbodyComponent 존재 시**: 엔티티에 RigidbodyComponent가 **포함되어 있을 경우**, `RigidbodyComponent`를 통해 `Pos [followup] | RigidbodyComponent가 존재하는 경우와 없는 경우의 동작 차이와, SetPosition에 전달하는 Vector2 값이 실제 이동에 반영되기 전 처리 과정이 어떻게 다른지 구체적으로 설명해 주세요 [followup_answer] | 참고 문서에 따르면 `SetPosition` 함수의 동작 차이는 다음과 같습니다. **1. RigidbodyComponent 존재 여부별 동작 차이** * **RigidbodyComponent가 없는 경우:** * `TransformComponent`의 `Position` 값을 직접 설정합니다. * 이는 물리 엔진의 제약 없이 엔티티의 좌표를 즉시 변경하는 일반적 위치 설정 방식입니다. * **RigidbodyComponent가 존재하는 경우:** * `RigidbodyComponent`를 [scores] | [judge_reason] | [source_doc] | MovementComponent에서는 SetPosition 함수를 통해 엔티티의 좌표를 설정합니다. `SetPosition()`함수는 기본적으로 TransformComponent의 Position을 설정하지만, RigidbodyComponent가 엔티티에 포함되어 있을 경우 RigidbodyComponent를 통해 Position을 설정합니다. 매개 변수로 Vector2 값을 받으며, 이 값에 해당하는 좌표로 엔티티가 이동합니다. ```lua [server only] void OnUpdate(number delta) { l

[task] | single_turn [pass] | ⏳ 미판정 [title] | MovementComponent를 활용한 엔티티의 이동 제어 [question] | KinematicbodyComponent가 붙어 있는 객체를 MovementComponent를 이용해 강제로 점프시킬 수 있나요? [answer] | 네, 가능합니다. MovementComponent는 엔티티에 KinematicbodyComponent가 포함되었는지 여부를 자동으로 체크하며, 이를 포함하여 RigidbodyComponent나 KinematicbodyComponent가 있는 경우에도 해당 컴포넌트를 제어해 엔티티를 이동시키거나 강제로 점프시킬 수 있습니다. 따라서 제작자가 직접 컴포넌트 포함 여부를 확인하지 않아도 MovementComponent를 통해 이동을 제어할 수 있습니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 이번 과정에서는 점프, 플레이어 이동 및 엔티티 좌표 설정 등 MovementComponent가 제공하는 주요 기능들과 MovementComponent의 기본 작동 방식에 대해 알아봅니다. # MovementComponent 소개 **MovementComponent**는 캐릭터의 이동속도와 점프력 설정은 물론 RigidbodyComponent가 포함된 엔티티를 강제로 점프시키거나 이동 또는 정지시킬 수 있는 여러 기능을 제공합니다. 스크립트 컴포넌트를 통해 TransformComponent를 제어하여 동적으

[task] | code [pass] | ⏳ 미판정 [title] | ActionSheet로 아바타 애니메이션 손쉽게 제어하기 [question] | AvatarStateAnimationComponent 의 StateToAvatarBodyActionSheet 에서 ATTACK 키에 연결된 AvatarBodyActionStateName 을 "dead" 로 변경하는 스크립트를 작성해줘 [answer] | 참고 문서에 따르면, `AvatarStateAnimationComponent`의 `StateToAvatarBodyActionSheet`는 컴포넌트의 **프로퍼티**로 정의되어 있으며, UI에서 `[+]`, `[-]` 버튼을 통해 Key를 추가/삭제하거나 값을 직접 수정하는 방식으로 관리됩니다. 문서에 제공된 mLua 예제 코드들(`OnMapEnter`, `HandleKeyDownEvent` 등)은 `StateComponent`의 상태 변경(`ChangeState`)이나 입력 이벤트 처리를 보여주지만, **`StateToAvatar [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 **StateToAvatarBodyActionSheet**의 아바타 상태를 통해 애니메이션을 손쉽게 제어하는 방법을 소개합니다. # 아바타 애니메이션 아바타가 걸을 때, 앉을 때, 공격할 때, 점프할 때를 유저가 인지하려면 상태에 맞는 애니메이션이 필요합니다. [AvatarStateAnimationComponent](/apiReference/Components/AvatarStateAnimationComponent)의 **StateToAvatarBodyActionSheet**에 **Key**와 **Avatar

[task] | code [pass] | ⏳ 미판정 [title] | ActionSheet로 아바타 애니메이션 손쉽게 제어하기 [question] | AvatarStateAnimationComponent 의 StateToAvatarBodyActionSheet 에서 LADDER 키에 연결된 AvatarBodyActionStateName 을 비워두어 사다리 오를 때 애니메이션이 재생되지 않도록 하는 스크립트를 작성해줘 [answer] | 문서에 따르면, `StateToAvatarBodyActionSheet`의 `LADDER` 키에 연결된 `AvatarBodyActionStateName` 값을 비우면 아바타가 사다리를 올라갈 때 애니메이션이 재생되지 않습니다. 이를 스크립트로 구현하기 위해 `OnBeginPlay`에서 해당 값을 빈 문자열(`""`)으로 설정하는 코드를 작성할 수 있습니다. 참고로 `AvatarStateAnimationComponent`는 `Player` 모델의 기본 컴포넌트이며, `self.Entity`를 통해 접근할 수 있습니다. ```lua [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 **StateToAvatarBodyActionSheet**의 아바타 상태를 통해 애니메이션을 손쉽게 제어하는 방법을 소개합니다. # 아바타 애니메이션 아바타가 걸을 때, 앉을 때, 공격할 때, 점프할 때를 유저가 인지하려면 상태에 맞는 애니메이션이 필요합니다. [AvatarStateAnimationComponent](/apiReference/Components/AvatarStateAnimationComponent)의 **StateToAvatarBodyActionSheet**에 **Key**와 **Avatar

[task] | single_turn [pass] | ⏳ 미판정 [title] | ActionSheet로 아바타 애니메이션 손쉽게 제어하기 [question] | AvatarBodyActionStateName에 attack이나 dead 같은 값을 입력할 때, 이 값들은 어디서 확인하거나 선택할 수 있나요? [answer] | 제공된 참고 문서에는 `AvatarBodyActionStateName`에 사용할 수 있는 구체적인 값 목록(attack, dead, fall, crouch 등)을 어디서 조회하거나 선택할 수 있는지에 대한 정보가 포함되어 있지 않습니다. 문서에는 `Workspace - DefaultPlayer - AvatarStateAnimationComponent`의 `Size`를 늘려 `Key`와 `AvatarBodyActionStateName`을 직접 **입력**하는 절차만 설명되어 있으며, 해당 값들이 시스템에서 정의된 것인지, 아니면 임 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 새로운 상태(Key)를 추가하고, 애니메이션을 지정할 수 있습니다. 기존의 키를 삭제하지 않고 새로운 상태와 액션을 추가하면 두 상태 모두 동작합니다. 숫자 6, 7, 8, 9를 눌렀을 때 특정 애니메이션이 재생되게 만들어봅시다. 1. **Workspace - DefaultPlayer - AvatarStateAnimationComponent**의 **Size**를 **15**로 변경합니다. 2. 추가한 칸에 새로운 **Key**와 **AvatarBodyActionStateName**를 입력합니다. | Key |

[task] | single_turn [pass] | ⏳ 미판정 [title] | MovementComponent를 활용한 엔티티의 이동 제어 [question] | InputSpeed 프로퍼티를 변경해도 플레이어의 이동 속도가 변하지 않는다면 어떤 조건을 확인해야 하나요? [answer] | 참고 문서에 따르면, `InputSpeed` 프로퍼티는 **플레이어 엔티티에만 유효**합니다. 따라서 이동 속도가 변하지 않는다면 해당 엔티티가 실제로 플레이어 엔티티인지, 즉 `InputSpeed`가 적용 가능한 대상인지부터 확인해야 합니다. 또한 `InputSpeed`는 조작키(방향키)를 눌렀을 때 엔티티를 이동시키는 힘의 크기를 설정하는 값으로, 입력된 값이 크면 클수록 플레이어 엔티티의 이동 속도가 빨라집니다. 이 프로퍼티가 올바르게 설정되었는지, 그리고 해당 엔티티가 플레이어 제어 대상인지를 점검해야 합니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 이번 과정에서는 점프, 플레이어 이동 및 엔티티 좌표 설정 등 MovementComponent가 제공하는 주요 기능들과 MovementComponent의 기본 작동 방식에 대해 알아봅니다. # MovementComponent 소개 **MovementComponent**는 캐릭터의 이동속도와 점프력 설정은 물론 RigidbodyComponent가 포함된 엔티티를 강제로 점프시키거나 이동 또는 정지시킬 수 있는 여러 기능을 제공합니다. 스크립트 컴포넌트를 통해 TransformComponent를 제어하여 동적으

[task] | code [pass] | ⏳ 미판정 [title] | ActionSheet로 아바타 애니메이션 손쉽게 제어하기 [question] | AvatarStateAnimationComponent 의 StateToAvatarBodyActionSheet 에서 MOVE 키의 PlayRate 를 2.0 으로 변경하여 걷기 애니메이션 속도를 높이는 스크립트를 작성해줘 [answer] | `StateToAvatarBodyActionSheet`는 `AvatarStateAnimationComponent`의 프로퍼티이며, 스크립트에서 직접 접근하여 값을 변경하는 API(예: `SetPlayRate` 등)에 대한 설명이 제공된 문서에 없습니다. 따라서 `MOVE` 키의 `PlayRate`를 2.0으로 변경하는 **mLua 스크립트 코드를 작성할 수 없습니다.** 해당 값을 변경하려면 에디터의 **인스펙터(Inspector)** 창에서 직접 조작해야 합니다. ### 에디터에서 변경하는 방법 1. `DefaultPlayer [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 **StateToAvatarBodyActionSheet**의 아바타 상태를 통해 애니메이션을 손쉽게 제어하는 방법을 소개합니다. # 아바타 애니메이션 아바타가 걸을 때, 앉을 때, 공격할 때, 점프할 때를 유저가 인지하려면 상태에 맞는 애니메이션이 필요합니다. [AvatarStateAnimationComponent](/apiReference/Components/AvatarStateAnimationComponent)의 **StateToAvatarBodyActionSheet**에 **Key**와 **Avatar

[task] | single_turn [pass] | ⏳ 미판정 [title] | MovementComponent를 활용한 엔티티의 이동 제어 [question] | RigidbodyComponent가 있는 엔티티를 TransformComponent로 직접 이동시키려 했더니 의도한 대로 움직이지 않는 이유는 무엇인가요? [answer] | RigidbodyComponent가 포함된 엔티티는 물리 엔진에 의해 좌표가 제어됩니다. 이 경우 TransformComponent를 직접 조작하여 위치를 변경하더라도, 물리 엔진의 업데이트가 TransformComponent의 값을 다시 덮어쓰거나 충돌 처리 등의 물리 계산을 수행하기 때문에 의도한 대로 엔티티가 이동하지 않을 수 있습니다. 이 문제를 해결하기 위해 MovementComponent를 사용하면 됩니다. MovementComponent는 엔티티에 RigidbodyComponent가 포함되어 있는지 자동으로 확인하고, [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 이번 과정에서는 점프, 플레이어 이동 및 엔티티 좌표 설정 등 MovementComponent가 제공하는 주요 기능들과 MovementComponent의 기본 작동 방식에 대해 알아봅니다. # MovementComponent 소개 **MovementComponent**는 캐릭터의 이동속도와 점프력 설정은 물론 RigidbodyComponent가 포함된 엔티티를 강제로 점프시키거나 이동 또는 정지시킬 수 있는 여러 기능을 제공합니다. 스크립트 컴포넌트를 통해 TransformComponent를 제어하여 동적으

[task] | single_turn [pass] | ⏳ 미판정 [title] | MovementComponent를 활용한 엔티티의 이동 제어 [question] | IsClimbPaused 프로퍼티의 타입과 읽기/쓰기 권한은 어떻게 되며, 어떤 상황에서 true가 반환되나요? [answer] | `IsClimbPaused` 프로퍼티는 **boolean** 타입이며, **ReadOnly(읽기 전용)** 권한입니다. 따라서 값을 설정할 수는 없고 읽기만 가능합니다. 플레이어 엔티티가 **사다리 또는 로프 위에서 이동 중 멈춰있는 상태**일 때 `true`가 반환됩니다. 이 프로퍼티는 플레이어 엔티티에만 유효합니다. 아래는 `OnUpdate`에서 해당 값을 읽어오는 예시입니다. ```lua Method: [server only] void OnUpdate(number delta) { local isClimbPaused [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 이번 과정에서는 점프, 플레이어 이동 및 엔티티 좌표 설정 등 MovementComponent가 제공하는 주요 기능들과 MovementComponent의 기본 작동 방식에 대해 알아봅니다. # MovementComponent 소개 **MovementComponent**는 캐릭터의 이동속도와 점프력 설정은 물론 RigidbodyComponent가 포함된 엔티티를 강제로 점프시키거나 이동 또는 정지시킬 수 있는 여러 기능을 제공합니다. 스크립트 컴포넌트를 통해 TransformComponent를 제어하여 동적으

[task] | single_turn [pass] | ⏳ 미판정 [title] | ActionSheet로 아바타 애니메이션 손쉽게 제어하기 [question] | DefaultPlayer에 직접 스크립트를 붙여 사용하는 것과 MyDesk에서 컴포넌트를 생성한 후 추가하는 것의 차이점이 무엇이며, 왜 가이드에서는 후자를 권장하는 것인가요? [answer] | 제시된 참고 문서에는 **DefaultPlayer에 직접 스크립트를 붙이는 것과 MyDesk에서 컴포넌트를 생성하여 추가하는 것의 차이점**이나 **왜 후자를 권장하는지에 대한 기술적/설계적 이유**에 대한 설명이 **포함되어 있지 않습니다**. 참고 문서에 포함된 내용은 오직 다음과 같은 **구체적인 작업 절차**일 뿐입니다. 1. `Workspace - DefaultPlayer - AvatarStateAnimationComponent`의 `Size`를 15로 변경합니다. 2. 새로운 `Key`(NEW_ATTACK, NEW [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 새로운 상태(Key)를 추가하고, 애니메이션을 지정할 수 있습니다. 기존의 키를 삭제하지 않고 새로운 상태와 액션을 추가하면 두 상태 모두 동작합니다. 숫자 6, 7, 8, 9를 눌렀을 때 특정 애니메이션이 재생되게 만들어봅시다. 1. **Workspace - DefaultPlayer - AvatarStateAnimationComponent**의 **Size**를 **15**로 변경합니다. 2. 추가한 칸에 새로운 **Key**와 **AvatarBodyActionStateName**를 입력합니다. | Key |

[task] | two_turn [pass] | ⏳ 미판정 [title] | 아바타의 외형 변경과 활용 [question] | 아바타의 외형을 변경하는 기능(색상 변경, 의상 변경)을 활용하여 아바타를 다르게 활용하는 구체적인 시나리오나 추가 팁이 있나요? [answer] | 제공된 문서에는 아바타의 외형을 변경하는 기능(색상 변경, 의상 변경)에 대한 구체적인 시나리오나 추가 팁이 포함되어 있지 않습니다. 문서에 명시된 내용은 다음과 같은 **기본적인 구현 방법**에 한정되어 있습니다: 1. **색상 변경**: `TriggerComponent`를 확장하여 `OnEnterTriggerBody` 이벤트를 처리하고, `AvatarRendererComponent`의 `SetColor` 함수를 사용해 특정 색상(예: 빨간색)으로 변경하는 예제. 2. **의상 변경**: `TriggerComponent`를 [followup] | 아바타 색상을 빨간색으로 변경한 후 일정 시간이 지난 뒤 원래 색상으로 되돌리는 로직을 TimerService 등을 이용해 구현하려면 어떤 코드가 필요하며, 의상 변경 시 RUID가 잘못된 경우 에러 처리는 어떻게 하나요? [followup_answer] | 제공된 참고 문서에는 `TimerService`를 사용하여 색상 변경 후 원래 색상으로 되돌리는 로직에 대한 정보가 없으며, 의상 변경 시 RUID가 잘못된 경우의 에러 처리 방법도 명시되어 있지 않습니다. 문서에 포함된 정보는 다음과 같습니다: 1. **색상 변경**: `AvatarRendererComponent`의 `SetColor` 함수를 사용하여 특정 색상(예: 빨간색 `1.0, 0.0, 0.0, 1.0`)으로 변경하는 것만 설명하고 있으며, 원래 색상으로 되돌리는 방법이나 타이머 사용 예제는 없습니다. 2. **의상 [scores] | [judge_reason] | [source_doc] | **AvatarRendererComponent**의 `SetColor` 함수와 **확장한 TriggerComponent**를 사용해 특정 엔티티와 유저가 닿으면(충돌하면) 유저가 빨간색으로 변하게 합니다. 1. **BaseEnvironment - NativeScripts - Component - TriggerComponent**를 선택합니다. 2. **TriggerComponent**의 콘텍스트 메뉴를 열고 **Extend**를 클릭합니다. 3. 확장한 스크립트 이름을 변경하고, 아바타와 부딪힐 엔티티에 컴포넌트를 추가합니

[task] | code [pass] | ⏳ 미판정 [title] | 아바타 표정 바꾸기 [question] | `_UserService`와 `AvatarRendererComponent`의 `PlayEmotion` 메서드를 사용하여 숫자키 2를 누르면 `EmotionalType.Cry` 표정을 5초간 재생하는 스크립트를 작성해줘 [answer] | 요청하신 기능(숫자키 2 입력 시 `EmotionalType.Cry` 표정을 5초간 재생)을 수행하는 mLua 스크립트입니다. ```lua Method: [server] void Emote (number key, string userId) { local avatar = _UserService:GetUserEntityByUserId(userId).AvatarRendererComponent if key == 2 then avatar:PlayEmotion(EmotionalType.Cry, 5) en [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 키보드의 숫자키를 1부터 5까지 누르면 각각 다른 표정이 5초 동안 재생합니다. 1. MyDesk에서 새로운 컴포넌트를 만들고, 스크립트 작성 화면을 엽니다. 2. Function: 옆의 추가 를 눌러 **New**를 선택합니다. 3. 함수 이름을 Emote로 변경하고, 더 보기 를 선택해 **Add Parameter**를 두 번 추가해 매개 변수를 입력합니다. 5. `PlayEmotion`을 이용해 재생할 표정을 작성합니다. 6. Entity Event Handler에 `KeyDownEvent`를 추가하고, 표정 재생을

[task] | code [pass] | ⏳ 미판정 [title] | 아바타 표정 바꾸기 [question] | `_UserService`와 `AvatarRendererComponent`의 `PlayEmotion` 메서드를 사용하여 숫자키 3을 누르면 `EmotionalType.Chu` 표정을 5초간 재생하는 스크립트를 작성해줘 [answer] | `_UserService`를 통해 현재 로컬 플레이어의 ID를 조회하고, 해당 ID로 엔티티를 찾아 `AvatarRendererComponent`의 `PlayEmotion` 메서드를 호출하는 방식입니다. 입력 이벤트는 클라이언트 공간(`[Client Only]`)에서 처리되며, 실제 표정 재생 로직은 서버 공간(`[server]`)에서 실행되도록 구성해야 합니다. ```lua Method: [server] void PlayChuEmote(string userId) { local avatar = _UserService:Ge [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 키보드의 숫자키를 1부터 5까지 누르면 각각 다른 표정이 5초 동안 재생합니다. 1. MyDesk에서 새로운 컴포넌트를 만들고, 스크립트 작성 화면을 엽니다. 2. Function: 옆의 추가 를 눌러 **New**를 선택합니다. 3. 함수 이름을 Emote로 변경하고, 더 보기 를 선택해 **Add Parameter**를 두 번 추가해 매개 변수를 입력합니다. 5. `PlayEmotion`을 이용해 재생할 표정을 작성합니다. 6. Entity Event Handler에 `KeyDownEvent`를 추가하고, 표정 재생을

[task] | single_turn [pass] | ⏳ 미판정 [title] | MovementComponent를 활용한 엔티티의 이동 제어 [question] | IsFaceLeft 함수는 어떤 이벤트 핸들러에서 호출하는 것이 적절하며, 좌측 방향키 입력 시 어떻게 동작하나요? [answer] | `IsFaceLeft` 함수는 **InputService** 이벤트 핸들러에서 호출하는 것이 적절합니다. 특히 키 입력과 관련된 이벤트인 `HandleKeyUpEvent`에서 사용하는 것이 일반적입니다. 문서에 제시된 예시를 보면, 좌측 방향키(`KeyboardKey.LeftArrow`) 또는 우측 방향키(`KeyboardKey.RightArrow`)가 눌렸을 때(`KeyUpEvent`) `IsFaceLeft` 함수를 호출하여 플레이어가 좌측을 바라보고 있는지 확인하는 로직을 보여줍니다. 구체적으로 좌측 방향키 입력 시 동작은 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 이번 과정에서는 점프, 플레이어 이동 및 엔티티 좌표 설정 등 MovementComponent가 제공하는 주요 기능들과 MovementComponent의 기본 작동 방식에 대해 알아봅니다. # MovementComponent 소개 **MovementComponent**는 캐릭터의 이동속도와 점프력 설정은 물론 RigidbodyComponent가 포함된 엔티티를 강제로 점프시키거나 이동 또는 정지시킬 수 있는 여러 기능을 제공합니다. 스크립트 컴포넌트를 통해 TransformComponent를 제어하여 동적으

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