← 목록

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

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

[task] | code [pass] | ⏳ 미판정 [title] | 충돌 그룹 만들기 [question] | PhysicsColliderComponent를 가진 엔티티의 CollisionGroup을 "Default"로 설정하고, OnUpdate 메서드에서 delta 값을 이용해 위치를 이동시키며 이동 중 충돌 발생 여부를 확인하는 스크립트를 작성해줘. [answer] | 사용자의 질문에는 "이동 중 충돌 발생 여부를 확인"하는 로직이 포함되어 있습니다. 하지만 제공된 참고 문서를 확인해 보면, `PhysicsColliderComponent`의 `CollisionGroup` 설정 방법과 `OnUpdate`에서 `delta`를 이용해 위치를 이동시키는 기본 구조는 설명되어 있지만, **스택립트 안에서 특정 엔티티와 물리 충돌(Physics Collision)이 발생했는지 여부를 실시간으로 확인하는 API나 이벤트 핸들러(예: `HandleCollisionEnterEvent` 등)에 대한 문서는 포함되어 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 충돌 그룹을 만들고, 엔티티끼리의 충돌 여부를 설정하는 방법을 알아봅시다. 충돌 그룹을 사용해 특정 그룹끼리만 충돌할 수 있거나, 충돌을 무시할 수 있게 만들 수 있습니다. # 충돌 그룹 기능 충돌 그룹은 메이플스토리 월드에 있는 여러 가지 충돌체를 특정 그룹 단위로 묶고, 그룹 간에 충돌 발생을 제어할 수 있는 기능입니다. 기본 충돌 그룹은 **Default, TriggerBox, HitBox**가 있으며 크리에이터가 만든 충돌 그룹을 포함해 **최대 15개**까지 만들 수 있습니다. * **Defa

[task] | code [pass] | ⏳ 미판정 [title] | SideViewRectTileMap에서 캐릭터 이동 제어 [question] | SideviewbodyComponent의 JumpSpeed를 500으로 설정하고 EnableDownJump를 false로 하는 스크립트를 작성해줘 [answer] | SideViewRectTile 맵에서 DefaultPlayer의 `SideviewbodyComponent`를 직접 참조하여 해당 프로퍼티를 설정하는 스크립트입니다. ```lua Property: [None] SideviewbodyComponent SideviewbodyComponent = nil Method: [server only] void OnBeginPlay() { self.SideviewbodyComponent = self.Entity.SideviewbodyComponent if self.Sidev [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 DefaultPlayer에는 RigidbodyComponent, KinematicbodyComponent, SideviewbodyComponent가 모두 포함되어 있기 때문에 맵이 제작된 모드에 따라 자동으로 이동 제어의 주체가 달라집니다. 그중 SideViewRectTile 모드로 제작된 맵에서는 SideviewbodyComponent로 캐릭터의 이동을 제어합니다. 이번 시간에는 SideviewbodyComponent에 대해 알아보고 간단한 예제를 통해 활용법을 살펴봅시다. ##### 참고 API Refe

[task] | single_turn [pass] | ⏳ 미판정 [title] | SideViewRectTileMap에서 캐릭터 이동 제어 [question] | SideviewbodyComponent에서 JumpDrag 값을 크게 설정하면 점프 중 캐릭터의 움직임에 어떤 변화가 생기나요? [answer] | SideviewbodyComponent의 `JumpDrag` 값은 **점프 속력 감소량**을 조절하는 프로퍼티입니다. 이 값을 크게 설정하면 **지면에 더 빨리 떨어집니다**. 즉, 점프를 한 후 중력이나 저항에 의해 속도가 감소하는 정도가 커져서 공중에서 더 빠르게 지면으로 낙하하게 됩니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 DefaultPlayer에는 RigidbodyComponent, KinematicbodyComponent, SideviewbodyComponent가 모두 포함되어 있기 때문에 맵이 제작된 모드에 따라 자동으로 이동 제어의 주체가 달라집니다. 그중 SideViewRectTile 모드로 제작된 맵에서는 SideviewbodyComponent로 캐릭터의 이동을 제어합니다. 이번 시간에는 SideviewbodyComponent에 대해 알아보고 간단한 예제를 통해 활용법을 살펴봅시다. ##### 참고 API Refe

[task] | code [pass] | ⏳ 미판정 [title] | SideViewRectTileMap에서 캐릭터 이동 제어 [question] | SideviewbodyComponent의 ApplyClimbableRotation을 true로 설정하여 사다리 회전 시 캐릭터 자세를 일치시키는 스크립트를 작성해줘 [answer] | SideviewbodyComponent의 `ApplyClimbableRotation` 프로퍼티는 true로 설정하면 회전하거나 기울어진 사다리를 탄 캐릭터가 사다리의 모습을 따르도록 합니다. 이 값을 변경하는 스크립트는 다음과 같습니다. ```lua Property: [None] SideviewbodyComponent SideviewbodyComponent = nil Method: [server only] void OnBeginPlay() { self.SideviewbodyComponent = self.Entity.Sid [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 DefaultPlayer에는 RigidbodyComponent, KinematicbodyComponent, SideviewbodyComponent가 모두 포함되어 있기 때문에 맵이 제작된 모드에 따라 자동으로 이동 제어의 주체가 달라집니다. 그중 SideViewRectTile 모드로 제작된 맵에서는 SideviewbodyComponent로 캐릭터의 이동을 제어합니다. 이번 시간에는 SideviewbodyComponent에 대해 알아보고 간단한 예제를 통해 활용법을 살펴봅시다. ##### 참고 API Refe

[task] | single_turn [pass] | ⏳ 미판정 [title] | SideViewRectTileMap에서 캐릭터 이동 제어 [question] | DefaultPlayer에 포함되어 있는 RigidbodyComponent, KinematicbodyComponent, SideviewbodyComponent 중 SideViewRectTile 모드의 맵에서는 어떤 컴포넌트가 캐릭터 이동 제어를 담당하나요? [answer] | SideViewRectTile 모드로 제작된 맵에서는 **SideviewbodyComponent**가 캐릭터의 이동을 제어합니다. DefaultPlayer에는 RigidbodyComponent, KinematicbodyComponent, SideviewbodyComponent가 모두 포함되어 있지만, 맵이 제작된 모드에 따라 이동 제어를 담당하는 컴포넌트가 자동으로 달라집니다. SideViewRectTile 모드의 경우 횡스크롤 방식의 캐릭터 이동을 제어하기 위해 SideviewbodyComponent가 사용되며, 해당 컴포넌트의 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 DefaultPlayer에는 RigidbodyComponent, KinematicbodyComponent, SideviewbodyComponent가 모두 포함되어 있기 때문에 맵이 제작된 모드에 따라 자동으로 이동 제어의 주체가 달라집니다. 그중 SideViewRectTile 모드로 제작된 맵에서는 SideviewbodyComponent로 캐릭터의 이동을 제어합니다. 이번 시간에는 SideviewbodyComponent에 대해 알아보고 간단한 예제를 통해 활용법을 살펴봅시다. ##### 참고 API Refe

[task] | instruction_following [pass] | ⏳ 미판정 [title] | 물리 사용하기 [question] | PhysicsSimulatorComponent의 Gravity 프로퍼티가 중력 방향에 미치는 영향을 x, y 값의 부호 조합별로 4가지 경우의 수를 표로 정리해서 설명하세요. [answer] | PhysicsSimulatorComponent의 Gravity 프로퍼티는 x, y 값의 부호(양수/음수/0)에 따라 맵의 중력 방향과 힘이 결정됩니다. 주어진 문서 정보에 따르면 x 값이 음수이면 중력이 왼쪽으로, y 값이 양수이면 중력이 위로 작용합니다. 이를 바탕으로 x, y 값의 부호 조합별 4가지 주요 경우의 수를 정리하면 다음과 같습니다. | x 값 부호 | y 값 부호 | 중력 방향 | 설명 | | :--- | :--- | :--- | :--- | | 음수 (-) | 음수 (-) | 왼쪽 아래 | x가 음수이므로 왼쪽 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 메이플스토리 월드의 맵과 엔티티에 물리 법칙 적용 방법을 알아봅시다. 물리 법칙을 활용해 엔티티가 서로 충돌해 튕기거나, 포물선 운동을 하며 날아가거나, 엔티티가 서로 연결되어 움직이게 하는 등 물리를 활용한 움직임을 다양하게 만들어낼 수 있습니다. [엔티티의 충돌](/docs?postId=175)과 [충돌 그룹 만들기](/docs?postId=754)를 함께 학습하길 권장합니다. # 맵에 물리 법칙 적용하기 기본 맵은 메이플스토리 맵 구성과 이동 원칙을 따르므로 물리 법칙은 기본 적용되어 있지 않습니다.

[task] | instruction_following [pass] | ⏳ 미판정 [title] | SideViewRectTileMap에서 캐릭터 이동 제어 [question] | 문서 예제에 등장하는 프로퍼티 3가지의 이름, 타입, 초기값을 단계별 번호 목록으로 나열하세요. [answer] | 문서 예제에 등장하는 프로퍼티 3가지는 다음과 같습니다. 1. `InputDirection` - 타입: `Vector2` - 초기값: `Vector2(0,0)` 2. `IsJumpKeyPressed` - 타입: `boolean` - 초기값: `false` 3. `IsCrouchKeyPressed` - 타입: `boolean` - 초기값: `false` [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | `MoveVelocity`를 응용하면 크리에이터가 의도하는 게임의 콘셉트에 맞게 캐릭터의 움직임을 만들어낼 수 있습니다. 이번 예제에서는 눈과 얼음이 가득한 필드라는 콘셉트에 맞게 가속도와 마찰력 개념을 추가해 미끄러운 길을 걷는 듯한 움직임을 만들어보겠습니다. 1. MyDesk 아래에 새 스크립트 컴포넌트 CustomPlayerController를 만든 뒤, DefaultPlayer에 추가합니다. 2. CustomPlayerController를 연 뒤, 아래와 같이 프로퍼티를 추가합니다. ```lua

[task] | code [pass] | ⏳ 미판정 [title] | 스크린샷 촬영 및 공유하기 [question] | UI 트리 경로가 /ui/DefaultGroup/FullScreenBtn인 Entity를 이벤트 센더로 설정하여 ButtonClickEvent를 수신하는 Event Handler 블록을 정의하고, 이벤트 인자 event.Entity를 로컬 변수로 추출하는 스크립트를 작성해줘 [answer] | ```lua Event Handler: [entity: FullScreenBtn(/ui/DefaultGroup/FullScreenBtn)] HandleButtonClickEvent(ButtonClickEvent event) { --------------- Native Event Sender Info ---------------- -- Sender: ButtonComponent -- Space: Client --------------------------------------------------------- -- Par [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 버튼을 눌러 전체 화면 스크린샷을 촬영해 봅시다. 1. UI 에디터에서 버튼을 눌러 새 버튼 **FullScreenBtn**을 만듭니다. 2. **FullScreenBtn**에 **TextComponent**를 추가하고 프로퍼티를 아래와 같이 설정합니다. | Property | Value | | :---: | :---: | | Text | Full Screen Capture | | FontColor | #ffffff | 3. **Workspace - MyDesk**의 콘텍스트 메뉴에서 *

[task] | code [pass] | ⏳ 미판정 [title] | 충돌 그룹 만들기 [question] | Coin 모델에 추가된 ItemComponent 에서 HandleTriggerEnterEvent 를 구현하여 event.TriggerBodyEntity 의 CollisionGroup 이 Item 이 아닌 경우에만 self.Entity:Destroy() 를 호출하지 않도록 방어적으로 작성하는 스크립트를 작성해줘 [answer] | CollisionGroup을 직접 확인하는 API는 제공되지 않습니다. 충돌 그룹 매트릭스(Matrix)를 통해 충돌 허용 여부를 설정하면, 허용되지 않은 충돌은 `HandleTriggerEnterEvent` 이벤트 자체가 발생하지 않습니다. 따라서 `event.TriggerBodyEntity`의 CollisionGroup을 직접 검사하는 코드를 작성할 수 없으며, 질문에서 요구한 "CollisionGroup이 Item이 아닌 경우에만"이라는 조건을 스크립트 내에서 구현하는 것은 불가능합니다. 대신, 충돌 그룹 설정 단계에서 * [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 충돌 그룹 매트릭스(Matrix)는 충돌 그룹끼리의 충돌을 허용할지 말지를 결정할 때 사용합니다. 충돌 그룹을 생성하면 매트릭스에 자동으로 새로운 충돌 그룹이 생성됩니다. 충돌 그룹끼리의 충돌 허용 여부는 체크 박스를 선택해서 간단하게 설정할 수 있습니다. 매트릭스에 적힌 충돌 그룹끼리의 관계를 확인하고 충돌을 허용하고 싶다면 체크 박스를 활성화합니다. 1. **Panels - Collision Groups - Matrix**를 선택합니다. 2. 가로 세로의 그룹명을 확인한 뒤 충돌을 허용하면 체크 박스를 활성화합니다.

[task] | single_turn [pass] | ⏳ 미판정 [title] | SideViewRectTileMap에서 캐릭터 이동 제어 [question] | 사다리를 타는 캐릭터의 회전 각도를 사다리 기울기에 맞추지 않으려면 SideviewbodyComponent의 어떤 프로퍼티를 어떻게 변경해야 하나요? [answer] | 사다리를 타는 캐릭터의 회전 각도를 사다리의 기울기에 맞추지 않으려면 `SideviewbodyComponent`의 `ApplyClimbableRotation` 프로퍼티를 `false`로 설정해야 합니다. 기본값이 `true`인 경우 캐릭터는 회전하거나 기울어진 사다리를 탈 때 사다리의 모습을 따라 회전하지만, 이 값을 `false`로 변경하면 캐릭터가 사다리의 기울기나 회전에 영향을 받지 않고 원래 자세를 유지하게 됩니다. ```lua Property: [None] SideviewbodyComponent SideviewbodyC [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 DefaultPlayer에는 RigidbodyComponent, KinematicbodyComponent, SideviewbodyComponent가 모두 포함되어 있기 때문에 맵이 제작된 모드에 따라 자동으로 이동 제어의 주체가 달라집니다. 그중 SideViewRectTile 모드로 제작된 맵에서는 SideviewbodyComponent로 캐릭터의 이동을 제어합니다. 이번 시간에는 SideviewbodyComponent에 대해 알아보고 간단한 예제를 통해 활용법을 살펴봅시다. ##### 참고 API Refe

[task] | instruction_following [pass] | ⏳ 미판정 [title] | SideViewRectTileMap에서 캐릭터 이동 제어 [question] | HandleKeyDownEvent에서 각 방향키와 점프/크로우치 키가 눌렸을 때의 상태 변경 로직을 표로 정리하세요. [answer] | `HandleKeyDownEvent`에서 처리되는 키 입력과 그에 따른 상태 변경 로직은 다음과 같습니다. | 키 (KeyboardKey) | 상태 변경 로직 | | :--- | :--- | | `RightArrow` | `self.InputDirection.x` 값을 1 증가시킵니다. | | `LeftArrow` | `self.InputDirection.x` 값을 1 감소시킵니다. | | `UpArrow` | `self.InputDirection.y` 값을 1 증가시킵니다. | | `DownArrow` | `self.InputD [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | `MoveVelocity`를 응용하면 크리에이터가 의도하는 게임의 콘셉트에 맞게 캐릭터의 움직임을 만들어낼 수 있습니다. 이번 예제에서는 눈과 얼음이 가득한 필드라는 콘셉트에 맞게 가속도와 마찰력 개념을 추가해 미끄러운 길을 걷는 듯한 움직임을 만들어보겠습니다. 1. MyDesk 아래에 새 스크립트 컴포넌트 CustomPlayerController를 만든 뒤, DefaultPlayer에 추가합니다. 2. CustomPlayerController를 연 뒤, 아래와 같이 프로퍼티를 추가합니다. ```lua

[task] | code [pass] | ⏳ 미판정 [title] | 스크린샷 촬영 및 공유하기 [question] | `_ScreenshotService:CaptureScreenRegionAsFileAndWait()`로 스크린샷을 파일로 저장한 후 `_MobileShareService`로 공유하는 스크립트를 작성해줘 [answer] | `_ScreenshotService:CaptureScreenRegionAsFileAndWait()`로 화면의 특정 영역을 파일로 저장한 후, 해당 파일 경로를 `_MobileShareService`에 전달하여 공유하는 스크립트입니다. 참고로 `CaptureScreenRegionAsFileAndWait()`는 `MobileShareService`와 연동하여 모바일에서 공유할 때 사용하는 함수이며, 저장된 파일의 실제 경로(예: `fileName_*.png`)를 공유 서비스에 전달해야 합니다. 아래 예제는 `CaptureScreenR [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 `ScreenshotService`를 통해 화면을 캡처하고 이미지 파일을 저장하는 방법을 살펴봅시다. 추가로 모바일에서 스크린샷을 저장한 뒤 공유하는 방법도 알아봅시다. ##### 참고 API Reference [ScreenshotService](/apiReference?postId=807) [MobileShareService](/apiReference/Services/MobileShareService) # ScreenshotService `ScreenshotService`를 활용하면 PC나 모바일에서 메

[task] | code [pass] | ⏳ 미판정 [title] | 스크린샷 촬영 및 공유하기 [question] | _ScreenshotService의 CaptureFullScreenToPhotoLibraryAndWait 메서드를 호출하여 전체 화면 스크린샷을 촬영하고, 성공 시 저장된 경로를 log로 출력하며 실패 시 _UIToast로 에러 메시지를 표시하는 ButtonClickEvent 핸들러를 포함하는 스크립트를 작성해줘 [answer] | _ScreenshotService의 CaptureFullScreenToPhotoLibraryAndWait 메서드와 _UIToast의 ShowMessage 메서드를 사용하여 요청하신 기능을 구현한 스크립트입니다. ```lua Event Handler: [entity: FullScreenBtn(/ui/DefaultGroup/FullScreenBtn)] HandleButtonClickEvent (ButtonClickEvent event) { --------------- Native Event Sender Info -------- [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 버튼을 눌러 전체 화면 스크린샷을 촬영해 봅시다. 1. UI 에디터에서 버튼을 눌러 새 버튼 **FullScreenBtn**을 만듭니다. 2. **FullScreenBtn**에 **TextComponent**를 추가하고 프로퍼티를 아래와 같이 설정합니다. | Property | Value | | :---: | :---: | | Text | Full Screen Capture | | FontColor | #ffffff | 3. **Workspace - MyDesk**의 콘텍스트 메뉴에서 *

[task] | code [pass] | ⏳ 미판정 [title] | SideViewRectTileMap에서 캐릭터 이동 제어 [question] | SideviewbodyComponent의 DownJumpSpeed를 800으로 설정하고 JumpDrag를 1.5로 조정하는 스크립트를 작성해줘 [answer] | SideviewbodyComponent는 SideViewRectTile 모드로 제작된 맵에서 횡스크롤 방식의 캐릭터 이동을 제어하기 위한 컴포넌트입니다. 요청하신 `DownJumpSpeed`를 800으로 설정하고 `JumpDrag`를 1.5로 조정하는 스크립트는 아래와 같이 작성할 수 있습니다. 이 스크립트는 `DefaultPlayer`에 붙여 적용하는 것을 권장합니다. ```lua Property: [None] SideviewbodyComponent SideviewbodyComponent = nil Method: [serve [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 DefaultPlayer에는 RigidbodyComponent, KinematicbodyComponent, SideviewbodyComponent가 모두 포함되어 있기 때문에 맵이 제작된 모드에 따라 자동으로 이동 제어의 주체가 달라집니다. 그중 SideViewRectTile 모드로 제작된 맵에서는 SideviewbodyComponent로 캐릭터의 이동을 제어합니다. 이번 시간에는 SideviewbodyComponent에 대해 알아보고 간단한 예제를 통해 활용법을 살펴봅시다. ##### 참고 API Refe

[task] | single_turn [pass] | ⏳ 미판정 [title] | SideViewRectTileMap에서 캐릭터 이동 제어 [question] | SideviewbodyComponent의 Enable 프로퍼티가 True일 때와 False일 때 캐릭터의 이동 제어 방식에 어떤 차이가 발생하나요? [answer] | SideviewbodyComponent의 `Enable` 프로퍼티는 SideviewRectTile 맵에서 횡스크롤 방식의 캐릭터 이동 제어를 활성화하거나 비활성화하는 역할을 합니다. * **`Enable`이 True인 경우**: SideviewbodyComponent가 활성화되어, SideViewRectTile 맵에서 캐릭터의 횡스크롤 이동을 제어합니다. 즉, 점프 속도(`JumpSpeed`), 점프 드래그(`JumpDrag`), 아래 점프(`EnableDownJump`, `DownJumpSpeed`) 등 Sideviewbod [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 DefaultPlayer에는 RigidbodyComponent, KinematicbodyComponent, SideviewbodyComponent가 모두 포함되어 있기 때문에 맵이 제작된 모드에 따라 자동으로 이동 제어의 주체가 달라집니다. 그중 SideViewRectTile 모드로 제작된 맵에서는 SideviewbodyComponent로 캐릭터의 이동을 제어합니다. 이번 시간에는 SideviewbodyComponent에 대해 알아보고 간단한 예제를 통해 활용법을 살펴봅시다. ##### 참고 API Refe

[task] | code [pass] | ⏳ 미판정 [title] | SideViewRectTileMap에서 캐릭터 이동 제어 [question] | SideviewbodyComponent의 Enable 프로퍼티를 false로 설정해 이동 기능을 비활성화하는 스크립트를 작성해줘 [answer] | SideviewRectTile 맵에서 캐릭터의 횡스크롤 이동을 제어하는 `SideviewbodyComponent`의 `Enable` 프로퍼티를 `false`로 설정하면 해당 컴포넌트의 기능이 비활성화되어 캐릭터가 이동할 수 없게 됩니다. `SideviewbodyComponent`는 `DefaultPlayer`에 기본으로 포함되어 있으므로, `DefaultPlayer`에 붙이는 스크립트에서 `self.Entity.SideviewbodyComponent`를 통해 접근하여 `Enable` 값을 변경할 수 있습니다. 아래는 `OnBeg [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 DefaultPlayer에는 RigidbodyComponent, KinematicbodyComponent, SideviewbodyComponent가 모두 포함되어 있기 때문에 맵이 제작된 모드에 따라 자동으로 이동 제어의 주체가 달라집니다. 그중 SideViewRectTile 모드로 제작된 맵에서는 SideviewbodyComponent로 캐릭터의 이동을 제어합니다. 이번 시간에는 SideviewbodyComponent에 대해 알아보고 간단한 예제를 통해 활용법을 살펴봅시다. ##### 참고 API Refe

[task] | code [pass] | ⏳ 미판정 [title] | 스크린샷 촬영 및 공유하기 [question] | 스크린샷 저장 성공 시 `log(error, path)`를 통해 에러 상태와 저장된 파일 경로를 콘솔에 출력하는 PartialScreenBtn 스크립트를 작성해줘 [answer] | 요청하신 `PartialScreenBtn`의 스크립트입니다. `_ScreenshotService:CaptureScreenRegionToPhotoLibraryAndWait`를 호출하여 일부 화면을 촬영하고, 그 결과로 반환된 `error` 상태와 `path` 경로를 `log`로 출력하도록 작성했습니다. ```lua Event Handler: [entity: PartialScreenBtn (/ui/DefaultGroup/PartialScreenBtn)] HandleButtonClickEvent (ButtonClickEvent even [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 버튼을 눌러 일부 화면 스크린샷을 촬영해 봅시다. 1. **FullScreenBtn** 버튼의 콘텍스트 메뉴에서 **Duplicate**를 클릭해 버튼을 복제한 뒤 적당한 위치로 옮깁니다. 2. 복제한 버튼의 이름을 **PartialScreenBtn**으로 변경합니다. **Text**에는 **Partial Screen Capture**를 입력합니다. 3. 스크립트 에디터에서 **ScreenshotServiceTest**를 열고 이벤트 핸들러에 `ButtonClickEvent`를 추가합니다. 이벤트 센

[task] | single_turn [pass] | ⏳ 미판정 [title] | SideViewRectTileMap에서 캐릭터 이동 제어 [question] | SideViewRectTile 맵에서 SideviewbodyComponent의 JumpSpeed와 DownJumpSpeed 값을 각각 어떻게 설정해야 점프 높이를 조절할 수 있나요? [answer] | SideViewRectTile 맵에서 캐릭터의 점프 높이를 조절하려면 `SideviewbodyComponent`의 `JumpSpeed`와 `DownJumpSpeed` 값을 변경하면 됩니다. * **JumpSpeed**: 캐릭터가 일반 점프를 할 때 위로 튀어 오르는 속력을 조절합니다. 이 값이 **클수록** 캐릭터는 더 높게 점프합니다. * **DownJumpSpeed**: 아래 점프(Down Jump) 기능을 활성화한 경우(`EnableDownJump`가 `true`), 아래로 점프할 때 위로 튀어 오르는 속력을 조절합니 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 DefaultPlayer에는 RigidbodyComponent, KinematicbodyComponent, SideviewbodyComponent가 모두 포함되어 있기 때문에 맵이 제작된 모드에 따라 자동으로 이동 제어의 주체가 달라집니다. 그중 SideViewRectTile 모드로 제작된 맵에서는 SideviewbodyComponent로 캐릭터의 이동을 제어합니다. 이번 시간에는 SideviewbodyComponent에 대해 알아보고 간단한 예제를 통해 활용법을 살펴봅시다. ##### 참고 API Refe

[task] | single_turn [pass] | ⏳ 미판정 [title] | SideViewRectTileMap에서 캐릭터 이동 제어 [question] | SideviewbodyComponent의 MoveVelocity 속성을 직접 수정해서 캐릭터를 이동시키려면 어떤 값을 넣어야 하나요? [answer] | 참고 문서에 따르면, `SideviewbodyComponent`의 `MoveVelocity` 속성을 직접 수정하여 캐릭터를 이동시킬 때 사용할 수 있는 구체적인 수치(예: 속도 값의 범위나 권장값)나 `MoveVelocity`에 대한 상세 설명이 제공되지 않습니다. 문서에서는 2단 점프 기능을 구현하는 예제로 `MoveVelocity`의 **Y축 값**을 `sb.JumpSpeed` 속성의 값으로 설정하는 방법만 보여줄 뿐, X축 이동이나 다른 이동 방법에 대한 `MoveVelocity`의 정확한 수치나 구조를 설명하고 있지 않습니 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 캐릭터의 이동은 `MoveVelocity`를 통해 제어합니다. `MoveVelocity`를 통해 간단한 2단 점프 기능을 만들어봅시다. 1. MyDesk 아래에 새 스크립트 컴포넌트 DoubleJump를 만든 뒤, DefaultPlayer에 추가합니다. 2. 아래와 같이 DoubleJump에 `IsDoubleJumping` 프로퍼티와 `TryDoubleJump` 함수를 추가합니다. ```lua Property: [None] boolean IsDoubleJumping = false

[task] | code [pass] | ⏳ 미판정 [title] | 물리 사용하기 [question] | PhysicsColliderComponent를 가진 두 엔티티가 충돌할 때 발생하는 이벤트 핸들러를 구현하여, 충돌 시 해당 엔티티의 TransformComponent.Position을 충돌 지점에서 튕겨 나오도록 속도를 변경하는 스크립트를 작성해줘 [answer] | 제공된 참고 문서에는 `PhysicsColliderComponent`를 가진 엔티티 간 충돌 시 발생하는 구체적인 이벤트 핸들러 이름(예: `HandleCollisionEnterEvent` 등)이나, 충돌 정보를 통해 속도를 변경하는 특정 메서드(예: `AddForce`, `Velocity` 프로퍼티 직접 조작 등)에 대한 설명이 없습니다. 문서에는 "두 컴포넌트를 추가한 엔티티는 충돌할 수 있고, 관련 Event를 발생시킬 수 있다"는 언급만 있으며, 실제 충돌 이벤트의 이름이나 파라미터 구조를 정의하지 않았습니다. 또한, `T [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 메이플스토리 월드의 맵과 엔티티에 물리 법칙 적용 방법을 알아봅시다. 물리 법칙을 활용해 엔티티가 서로 충돌해 튕기거나, 포물선 운동을 하며 날아가거나, 엔티티가 서로 연결되어 움직이게 하는 등 물리를 활용한 움직임을 다양하게 만들어낼 수 있습니다. [엔티티의 충돌](/docs?postId=175)과 [충돌 그룹 만들기](/docs?postId=754)를 함께 학습하길 권장합니다. # 맵에 물리 법칙 적용하기 기본 맵은 메이플스토리 맵 구성과 이동 원칙을 따르므로 물리 법칙은 기본 적용되어 있지 않습니다.

[task] | code [pass] | ⏳ 미판정 [title] | 스크린샷 촬영 및 공유하기 [question] | `_ScreenshotService:CaptureScreenRegionToPhotoLibraryAndWait` 호출 시 `error` 값이 `ScreenshotError.Success`가 아닌 경우, `_UIToast:ShowMessage`로 "Failed to save!"와 에러 코드, 그리고 `path`가 포함된 문자열을 출력하는 PartialScreenBtn 스크립트를 작성해줘 [answer] | `_ScreenshotService:CaptureScreenRegionToPhotoLibraryAndWait` 메서드를 호출한 후 반환되는 `error` 값이 `ScreenshotError.Success`가 아닌 경우, `_UIToast:ShowMessage`를 사용하여 실패 메시지, 에러 코드, 그리고 경로를 함께 출력하는 스크립트입니다. ```lua Event Handler: [entity: PartialScreenBtn (/ui/DefaultGroup/PartialScreenBtn)] HandleButtonClickEvent [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 버튼을 눌러 일부 화면 스크린샷을 촬영해 봅시다. 1. **FullScreenBtn** 버튼의 콘텍스트 메뉴에서 **Duplicate**를 클릭해 버튼을 복제한 뒤 적당한 위치로 옮깁니다. 2. 복제한 버튼의 이름을 **PartialScreenBtn**으로 변경합니다. **Text**에는 **Partial Screen Capture**를 입력합니다. 3. 스크립트 에디터에서 **ScreenshotServiceTest**를 열고 이벤트 핸들러에 `ButtonClickEvent`를 추가합니다. 이벤트 센

[task] | code [pass] | ⏳ 미판정 [title] | 스크린샷 촬영 및 공유하기 [question] | _ScreenshotService의 CaptureFullScreenToPhotoLibraryAndWait 메서드 호출 결과에서 ScreenshotError.Success가 반환되면 self._T.lastPath 프로퍼티에 경로 문자열을 저장하고, 그렇지 않으면 error와 path 값을 연결한 문자열로 _UIToast:ShowMessage를 호출하는 로직을 구현하는 스크립트를 작성해줘 [answer] | _ScreenshotService:CaptureFullScreenToPhotoLibraryAndWait를 호출하여 전체 화면 스크린샷을 촬영하고, 그 결과에 따라 성공 시 경로를 저장하거나 실패 시 토스트 메시지를 표시하는 로직은 다음과 같이 구현할 수 있습니다. 참고로 `self._T`는 mLua의 기본 컴포넌트 구조에 명시적으로 정의된 표준 프로퍼티가 아니며, 제공된 문서의 예제 코드에만 등장합니다. 따라서 아래 코드는 문서의 예제와 동일한 맥락(클라이언트에서 버튼 클릭 시 실행되는 로직)을 따르며, `self._T`에 접근할 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 버튼을 눌러 전체 화면 스크린샷을 촬영해 봅시다. 1. UI 에디터에서 버튼을 눌러 새 버튼 **FullScreenBtn**을 만듭니다. 2. **FullScreenBtn**에 **TextComponent**를 추가하고 프로퍼티를 아래와 같이 설정합니다. | Property | Value | | :---: | :---: | | Text | Full Screen Capture | | FontColor | #ffffff | 3. **Workspace - MyDesk**의 콘텍스트 메뉴에서 *

[task] | single_turn [pass] | ⏳ 미판정 [title] | 스크린샷 촬영 및 공유하기 [question] | `CaptureFullScreenToPhotoLibraryAndWait()`와 `CaptureFullScreenAsFileAndWait()`의 차이점이 무엇이며 왜 후자를 사용해야 하나요? [answer] | `CaptureFullScreenToPhotoLibraryAndWait()`와 `CaptureFullScreenAsFileAndWait()`의 핵심 차이점은 **스크린샷이 저장되는 위치**와 **그 결과로 얻는 값**입니다. 1. **`CaptureFullScreenToPhotoLibraryAndWait()`**: * 스크린샷을 기기의 **사진 갤러리(사진 라이브러리)**에 저장합니다. * 사용자가 나중에 사진 앱에서 직접 찾아서 공유해야 합니다. * 스크립트에서 파일 경로를 직접 다루지 않습니다 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 모바일에서 스크린샷 공유하는 방법을 살펴봅시다. 단, PC에서는 공유할 수 없습니다. 1. **FullScreenBtn** 버튼의 콘텍스트 메뉴에서 **Duplicate**를 클릭해 버튼을 복제한 뒤 적당한 위치로 옮깁니다. 2. 복제한 버튼의 이름을 **ShareBtn**으로 변경합니다. **Text**에는 **Share**를 입력합니다. 3. 스크립트 에디터에서 **ScreenshotServiceTest**를 열고 **FullScreenBtn**에 연결한 이벤트를 찾습니다. `CaptureFullScre

[task] | code [pass] | ⏳ 미판정 [title] | 스크린샷 촬영 및 공유하기 [question] | ScreenshotError.Success 상수를 사용하여 에러 상태를 판별하고, 성공 시 저장된 사진 경로를 로그에 남기며 실패 시 "Failed to save! " 접두사와 에러 코드, 경로를 문자열 연결로 조합해 토스트로 알리는 스크립트를 작성해줘 [answer] | `_ScreenshotService:CaptureFullScreenToPhotoLibraryAndWait` 메서드를 호출하여 전체 화면 스크린샷을 촬영하고, 반환된 `error` 값을 `ScreenshotError.Success` 상수와 비교하여 성공/실패를 판별합니다. 성공 시에는 저장된 경로를 로그에 기록하고, 실패 시에는 `"Failed to save! "` 문자열에 에러 코드와 경로를 연결하여 `_UIToast:ShowMessage`를 통해 사용자에게 알리는 로직입니다. ```lua Event Handler: [entity [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 버튼을 눌러 전체 화면 스크린샷을 촬영해 봅시다. 1. UI 에디터에서 버튼을 눌러 새 버튼 **FullScreenBtn**을 만듭니다. 2. **FullScreenBtn**에 **TextComponent**를 추가하고 프로퍼티를 아래와 같이 설정합니다. | Property | Value | | :---: | :---: | | Text | Full Screen Capture | | FontColor | #ffffff | 3. **Workspace - MyDesk**의 콘텍스트 메뉴에서 *

[task] | code [pass] | ⏳ 미판정 [title] | 스크린샷 촬영 및 공유하기 [question] | `_ScreenshotService:CaptureScreenRegionToPhotoLibraryAndWait` 메서드를 사용하여 `Vector2(100,100)`부터 `Vector2(500,500)`까지의 영역을 촬영하고, `ScreenshotError.Success`일 경우 `self._T.lastPath`에 경로를 저장하는 PartialScreenBtn 스크립트를 작성해줘 [answer] | 사용자가 요청한 `_ScreenshotService:CaptureScreenRegionToPhotoLibraryAndWait` 메서드 사용 예제와 `PartialScreenBtn`의 버튼 클릭 이벤트 처리 로직을 바탕으로 스크립트를 작성했습니다. 참고 문서에 따라 `Property` 블록에 `lastPath`를 포함하고, `Event Handler` 블록에서 버튼 클릭 시 해당 영역을 촬영하여 성공 시 `self._T.lastPath`에 경로를 저장하는 코드를 구성했습니다. ```lua Property: [None] string [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 버튼을 눌러 일부 화면 스크린샷을 촬영해 봅시다. 1. **FullScreenBtn** 버튼의 콘텍스트 메뉴에서 **Duplicate**를 클릭해 버튼을 복제한 뒤 적당한 위치로 옮깁니다. 2. 복제한 버튼의 이름을 **PartialScreenBtn**으로 변경합니다. **Text**에는 **Partial Screen Capture**를 입력합니다. 3. 스크립트 에디터에서 **ScreenshotServiceTest**를 열고 이벤트 핸들러에 `ButtonClickEvent`를 추가합니다. 이벤트 센

[task] | two_turn [pass] | ⏳ 미판정 [title] | SideViewRectTileMap에서 캐릭터 이동 제어 [question] | SideViewRectTile 맵에서 SideviewbodyComponent를 사용하여 캐릭터의 횡스크롤 이동 제어 원리 및 기본 프로퍼티는 어떻게 구성되나요? [answer] | SideViewRectTile 모드로 제작된 맵에서는 `DefaultPlayer`에 포함된 `SideviewbodyComponent`를 통해 캐릭터의 횡스크롤 이동을 제어합니다. `DefaultPlayer`에는 `RigidbodyComponent`, `KinematicbodyComponent`, `SideviewbodyComponent`가 모두 포함되어 있으며, 맵의 제작 모드에 따라 이동 제어의 주체가 자동으로 결정됩니다. ### SideviewbodyComponent 기본 프로퍼티 구성 `SideviewbodyComponen [followup] | 2단 점프를 구현할 때 JumpSpeed와 JumpDrag 프로퍼티 값을 어떻게 조합하여 조정해야 하며, EnableDownJump와 DownJumpSpeed는 어떤 상황에서 활용하나요? [followup_answer] | 제공된 참고 문서에는 2단 점프 구현을 위한 `JumpSpeed`와 `JumpDrag`의 구체적인 조합 값이나 수학적 관계, 그리고 `EnableDownJump`와 `DownJumpSpeed`의 구체적인 활용 상황(예: 특정 레벨 디자인 조건 등)에 대한 설명이 포함되어 있지 않습니다. 문서에서 확인할 수 있는 해당 프로퍼티들의 기능적 정의만으로는 2단 점프를 위한 최적의 값 조합이나 특정 상황에서의 활용 가이드를 제시할 수 없습니다. 따라서 제공된 문서 근거만으로 이 질문에 대한 구체적인 조정 방법이나 활용 상황을 설명하는 것은 [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 DefaultPlayer에는 RigidbodyComponent, KinematicbodyComponent, SideviewbodyComponent가 모두 포함되어 있기 때문에 맵이 제작된 모드에 따라 자동으로 이동 제어의 주체가 달라집니다. 그중 SideViewRectTile 모드로 제작된 맵에서는 SideviewbodyComponent로 캐릭터의 이동을 제어합니다. 이번 시간에는 SideviewbodyComponent에 대해 알아보고 간단한 예제를 통해 활용법을 살펴봅시다. ##### 참고 API Refe

[task] | single_turn [pass] | ⏳ 미판정 [title] | SideViewRectTileMap에서 캐릭터 이동 제어 [question] | SideViewRectTileMap 환경에서 캐릭터가 벽에 부딪혀 이동이 막히는 현상을 MoveVelocity만 조절해서 해결할 수 있나요? [answer] | 제공된 문서에는 `SideViewRectTileMap` 환경에서 캐릭터의 벽 충돌이나 이동 방해 현상을 `MoveVelocity` 조절로 해결하는 방법에 대한 정보가 포함되어 있지 않습니다. 문서에 명시된 `MoveVelocity`와 관련된 기능은 다음과 같습니다: 1. `SideviewbodyComponent`의 `MoveVelocity`를 통해 캐릭터의 이동 속도를 제어합니다. 2. `sb.MoveVelocity`의 Y축 값을 변경하여 2단 점프 기능을 구현하는 예제만 제시되어 있습니다. 벽 충돌 처리나 이동 경로 제어와 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 캐릭터의 이동은 `MoveVelocity`를 통해 제어합니다. `MoveVelocity`를 통해 간단한 2단 점프 기능을 만들어봅시다. 1. MyDesk 아래에 새 스크립트 컴포넌트 DoubleJump를 만든 뒤, DefaultPlayer에 추가합니다. 2. 아래와 같이 DoubleJump에 `IsDoubleJumping` 프로퍼티와 `TryDoubleJump` 함수를 추가합니다. ```lua Property: [None] boolean IsDoubleJumping = false

[task] | code [pass] | ⏳ 미판정 [title] | 스크린샷 촬영 및 공유하기 [question] | `HandleButtonClickEvent` 이벤트 핸들러 내에서 `event.Entity`를 `Entity` 로컬 변수로 선언하고, 이 변수를 `_ScreenshotService` 호출 시 사용되지 않는 불필요한 코드이지만 문서 예시처럼 매개변수로 받아두는 PartialScreenBtn 스크립트를 작성해줘 [answer] | 제공된 문서에는 `_ScreenshotService:CaptureScreenRegionToPhotoLibraryAndWait` 호출 시 `event.Entity` 또는 `Entity` 변수를 매개변수로 전달하는 내용이 없습니다. 해당 서비스 메서드는 "PartialScreen" (이름), startPixel, endPixel 만을 인자로 받습니다. 따라서 요청하신 대로 `event.Entity`를 `Entity` 로컬 변수로 선언하되, `_ScreenshotService` 호출에는 사용하지 않는 PartialScreenBtn 스크 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 버튼을 눌러 일부 화면 스크린샷을 촬영해 봅시다. 1. **FullScreenBtn** 버튼의 콘텍스트 메뉴에서 **Duplicate**를 클릭해 버튼을 복제한 뒤 적당한 위치로 옮깁니다. 2. 복제한 버튼의 이름을 **PartialScreenBtn**으로 변경합니다. **Text**에는 **Partial Screen Capture**를 입력합니다. 3. 스크립트 에디터에서 **ScreenshotServiceTest**를 열고 이벤트 핸들러에 `ButtonClickEvent`를 추가합니다. 이벤트 센

[task] | two_turn [pass] | ⏳ 미판정 [title] | SideViewRectTileMap에서 캐릭터 이동 제어 [question] | SideViewRectTileMap에서 MoveVelocity를 이용해 2단 점프 기능을 구현하는 방법을 알려주세요 [answer] | SideViewRectTileMap 환경에서 `SideviewbodyComponent`의 `MoveVelocity` 속성을 조작하여 2단 점프 기능을 구현할 수 있습니다. 이 기능은 캐릭터가 이미 한 번 점프한 상태(공중에 떠 있는 상태)에서 키를 입력하면 추가적으로 점프할 수 있도록 합니다. 구현을 위해 `IsDoubleJumping`이라는 상태 변수를 사용하여 2단 점프가 이미 사용되었는지 여부를 추적하고, 착지 시 이 값을 초기화하는 로직이 필요합니다. 아래는 `DoubleJump` 스크립트 컴포넌트 전체 코드입니다. 이 [followup] | 착지 시 IsDoubleJumping 상태를 초기화하는 OnUpdate 로직과 KeyDownEvent 처리 코드를 함께 작성해 주세요 [followup_answer] | 착지 시 `IsDoubleJumping` 상태를 초기화하는 `OnUpdate` 로직과 키 입력을 처리하는 `HandleKeyDownEvent` 코드는 다음과 같습니다. ```lua Method: [client only] void OnUpdate(number delta) { local sb = self.Entity.SideviewbodyComponent -- 캐릭터가 착지하면 IsDoubleJumping를 false로 변경합니다. if sb:IsOnGround() then self.IsDoubl [scores] | [judge_reason] | [source_doc] | 캐릭터의 이동은 `MoveVelocity`를 통해 제어합니다. `MoveVelocity`를 통해 간단한 2단 점프 기능을 만들어봅시다. 1. MyDesk 아래에 새 스크립트 컴포넌트 DoubleJump를 만든 뒤, DefaultPlayer에 추가합니다. 2. 아래와 같이 DoubleJump에 `IsDoubleJumping` 프로퍼티와 `TryDoubleJump` 함수를 추가합니다. ```lua Property: [None] boolean IsDoubleJumping = false

[task] | single_turn [pass] | ⏳ 미판정 [title] | 물리 사용하기 [question] | PhysicsRigidbodyComponent와 PhysicsColliderComponent를 함께 사용할 때, 충돌체의 모양과 크기를 조정하는 것은 어느 컴포넌트에서 담당하며 두 컴포넌트 모두 추가해야만 충돌 이벤트가 발생하나요? [answer] | 충돌체의 모양과 크기를 조정하는 것은 **PhysicsColliderComponent**에서 담당합니다. 두 컴포넌트 모두 추가해야만 충돌 이벤트가 발생합니다. **PhysicsRigidbodyComponent**를 엔티티에 추가하면 **PhysicsColliderComponent**가 함께 추가되며, 이 두 컴포넌트가 모두 존재해야 엔티티가 충돌할 수 있고 관련 이벤트를 발생시킬 수 있습니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 메이플스토리 월드의 맵과 엔티티에 물리 법칙 적용 방법을 알아봅시다. 물리 법칙을 활용해 엔티티가 서로 충돌해 튕기거나, 포물선 운동을 하며 날아가거나, 엔티티가 서로 연결되어 움직이게 하는 등 물리를 활용한 움직임을 다양하게 만들어낼 수 있습니다. [엔티티의 충돌](/docs?postId=175)과 [충돌 그룹 만들기](/docs?postId=754)를 함께 학습하길 권장합니다. # 맵에 물리 법칙 적용하기 기본 맵은 메이플스토리 맵 구성과 이동 원칙을 따르므로 물리 법칙은 기본 적용되어 있지 않습니다.

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