← 목록

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

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

[task] | code [pass] | ⏳ 미판정 [title] | 메이플 이동 개념 이해하기 [question] | RigidbodyComponent의 IgnoreMoveBoundary 프로퍼티를 활성화하여 맵 바운더리를 무시하고 이동하게 하는 스크립트를 작성해줘 [answer] | 메이플스토리 월드에서 맵 바운더리를 무시하고 맵 지형 밖에서도 이동하게 하려면 해당 엔티티에 부착된 `RigidbodyComponent`의 `IgnoreMoveBoundary` 프로퍼티를 `true`로 설정하면 됩니다. 아래는 스크립트가 실행되는 시점(`OnBeginPlay`)에 이 설정을 적용하는 예시입니다. ```lua Method: [server only] void OnBeginPlay() { self.Entity.RigidbodyComponent.IgnoreMoveBoundary = true } ``` **참고사 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | #### 수직선 지형 지면 발판과 붙어있든, 떨어져 있든 점프로 수직 발판을 통과하지 못하게 만들고 싶다면 RigidbodyComponent의 **IsBlockvertialLine**을 활성화합니다. | IsBlockvertialLine활성화 | IsBlockvertialLine비활성화 | | --- | --- | || | ##### 특정 레이어의 수직선 지형만 막기 RigidbodyComponent의 **IsBlockvertialLine**를 활성화하면 맵 내부의 모든 수직 지형을 통과하지 못합니다. 만약 일부 맵 레이어에서

[task] | single_turn [pass] | ⏳ 미판정 [title] | 메이플 이동 개념 이해하기 [question] | 발판이 겹쳐 있는 곳에서 캐릭터가 다른 레이어의 발판으로 자연스럽게 넘어가지 않고 멈추는 현상은 무엇 때문에 발생하는 걸까요? [answer] | 발판이 겹쳐 있는 곳에서 캐릭터가 다른 레이어의 발판으로 자연스럽게 넘어가지 못하고 멈추거나 이동 규칙이 달라 보이는 현상은 **지형 Layer(레이어)의 차이** 때문입니다. 메이플스토리 월드에서 TileMapComponent는 최대 10개의 Map Layer를 가지며, 각 레이어에는 고유한 타일이 사용됩니다. 겹쳐 보인다고 하더라도 **Layer가 다른 타일은 서로 다른 발판**으로 생성됩니다. 즉, 물리적으로 이어져 있지 않기 때문에 Layer 1의 발판 위에 서 있을 때는 Layer 2의 발판 존재를 인식하지 못합니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 월드 제작에 필수적인 이동 방식 중 메이플스토리 이동 방식을 따르는 RigidbodyComponent 특성을 알아봅시다. 이동은 [메이플 타일 맵 만들기](/docs?postId=747)와 함께 학습하기 권장합니다. # 메이플스토리 이동 방식 RigidbodyComponent는 메이플스토리 이동 방식처럼 이동하고자 할 때 사용합니다. 이동 방식은 지형 종류와 밀접한 연관이 있기에 TileMapComponent를 함께 사용해 메이플스토리식 이동 방식을 만들 수 있습니다. 이때 타일 위에서 이동은 Rigidbo

[task] | single_turn [pass] | ⏳ 미판정 [title] | 충돌 그룹 만들기 [question] | 충돌 그룹을 생성했는데 매트릭스에 자동으로 표시되지 않으면 어떤 단계를 다시 확인해야 하나요? [answer] | 충돌 그룹을 생성하면 매트릭스(Matrix)에 자동으로 새로운 충돌 그룹이 생성되어야 합니다. 자동으로 표시되지 않는다면 아래 단계를 다시 확인해야 합니다. 1. **충돌 그룹 생성 여부 확인**: `Panels - Collision Groups` 탭에서 해당 충돌 그룹이 실제로 생성되었는지 확인합니다. 2. **매트릭스 뷰 확인**: `Panels - Collision Groups - Matrix` 섹션으로 이동하여 가로와 세로에 새로 생성한 충돌 그룹 이름이 목록에 표시되는지 확인합니다. 3. **충돌 허용 설정**: 가 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 충돌 그룹 매트릭스(Matrix)는 충돌 그룹끼리의 충돌을 허용할지 말지를 결정할 때 사용합니다. 충돌 그룹을 생성하면 매트릭스에 자동으로 새로운 충돌 그룹이 생성됩니다. 충돌 그룹끼리의 충돌 허용 여부는 체크 박스를 선택해서 간단하게 설정할 수 있습니다. 매트릭스에 적힌 충돌 그룹끼리의 관계를 확인하고 충돌을 허용하고 싶다면 체크 박스를 활성화합니다. 1. **Panels - Collision Groups - Matrix**를 선택합니다. 2. 가로 세로의 그룹명을 확인한 뒤 충돌을 허용하면 체크 박스를 활성화합니다.

[task] | single_turn [pass] | ⏳ 미판정 [title] | 메이플 이동 개념 이해하기 [question] | 아바타가 발판을 밟고 있을 때와 사다리를 타고 있을 때 AvatarRendererComponent의 SortingLayer가 각각 어떤 기준값을 참조하게 되나요? [answer] | `RigidbodyComponent`의 `LayerSettingType`이 `All`로 설정되어 메이플스토리 기본 이동 방식을 따르는 경우, 아바타의 상태에 따라 `AvatarRendererComponent`의 `SortingLayer`가 참조하는 기준값은 다음과 같습니다. 1. **발판을 밟고 있을 때**: 아바타가 밟고 있는 **발판의 SortingLayer** 값을 따라갑니다. 2. **사다리/로프를 타고 있을 때**: 아바타가 타고 있는 **사다리(또는 로프)의 SortingLayer** 값을 따라갑니다. 이 설정은 아바 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | **RigidbodyComponent의 LayerSettingType** 타입을 변경해 메이플스토리 이동을 따르게 설정합니다. 혹은 사다리/로프/발판의 SortingLayer와 RigidbodyComponent를 가진 Entity의 SortingLayer들과의 관계를 변경해 메이플스토리 이동과 다르게 설정할 수 있습니다. 아래와 같이 Layer1에 타일을 그리고, Layer1,2,3,4에 각각 사다리를 배치했을 때 각 타입에 따라 아바타와 사다리의 관계가 어떻게 변하는지 살펴보겠습니다. DefaultPlayer에는 Rigidbod

[task] | single_turn [pass] | ⏳ 미판정 [title] | 충돌 그룹 만들기 [question] | 스크립트에서 매번 엔티티 타입을 확인하는 로직 없이 충돌 감지를 최적화하려면 어떤 기능을 활용해야 하나요? [answer] | 스크립트에서 매번 엔티티 타입을 확인하는 로직 없이 충돌 감지를 최적화하려면 **충돌 그룹(Collision Group)** 기능을 활용해야 합니다. ### 왜 충돌 그룹이 필요한가? 기본적으로 `TriggerEnterEvent` 등을 사용할 때, 특정 엔티티(예: 플레이어)가 트리거에 진입했는지 확인하기 위해 스크립트에서 매번 컴포넌트 존재 여부(예: `if not TriggerBodyEntity.PlayerComponent then return end`)를 체크하는 로직이 필요합니다. 충돌 그룹을 사용하면, **엔티티마다 다 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 충돌 그룹을 만들고, 엔티티끼리의 충돌 여부를 설정하는 방법을 알아봅시다. 충돌 그룹을 사용해 특정 그룹끼리만 충돌할 수 있거나, 충돌을 무시할 수 있게 만들 수 있습니다. # 충돌 그룹 기능 충돌 그룹은 메이플스토리 월드에 있는 여러 가지 충돌체를 특정 그룹 단위로 묶고, 그룹 간에 충돌 발생을 제어할 수 있는 기능입니다. 기본 충돌 그룹은 **Default, TriggerBox, HitBox**가 있으며 크리에이터가 만든 충돌 그룹을 포함해 **최대 15개**까지 만들 수 있습니다. * **Defa

[task] | instruction_following [pass] | ⏳ 미판정 [title] | 스크린샷 촬영 및 공유하기 [question] | `ScreenshotService`의 4가지 함수를 '함수명', '용도', '저장 경로(플랫폼별)' 항목으로 구성된 표로 정리하세요. [answer] | `ScreenshotService`의 4가지 함수를 용도와 플랫폼별 저장 경로 기준으로 정리하면 다음과 같습니다. | 함수명 | 용도 | 저장 경로 (플랫폼별) | | :--- | :--- | :--- | | `CaptureFullScreenToPhotoLibraryAndWait()`<br>`CaptureScreenRegionToPhotoLibraryAndWait()` | 사진 보관함에 스크린샷 저장 | **Windows**: 내 PC > 사진 > MapleStory Worlds > 월드 ID > fileName.png<br>** [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 `ScreenshotService`를 통해 화면을 캡처하고 이미지 파일을 저장하는 방법을 살펴봅시다. 추가로 모바일에서 스크린샷을 저장한 뒤 공유하는 방법도 알아봅시다. ##### 참고 API Reference [ScreenshotService](/apiReference?postId=807) [MobileShareService](/apiReference/Services/MobileShareService) # ScreenshotService `ScreenshotService`를 활용하면 PC나 모바일에서 메

[task] | instruction_following [pass] | ⏳ 미판정 [title] | 스크린샷 촬영 및 공유하기 [question] | 모바일 공유용 스크린샷을 촬영하고 `MobileShareService`와 연동하는 과정을 단계별 번호 목록으로 나열하세요. [answer] | 모바일에서 스크린샷을 촬영하여 `MobileShareService`와 연동하여 공유하는 과정은 다음과 같습니다. 1. **전체 화면 또는 영역 촬영**: `ScreenshotService`의 `CaptureFullScreenAsFileAndWait()` 또는 `CaptureScreenRegionAsFileAndWait()` 함수를 호출하여 스크린샷을 파일로 저장합니다. 이 함수들은 모바일 공유를 위해 `MobileShareService`와 연동하여 사용됩니다. 2. **저장 경로 확인**: 촬영된 스크린샷은 운영체제에 따라 특 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 `ScreenshotService`를 통해 화면을 캡처하고 이미지 파일을 저장하는 방법을 살펴봅시다. 추가로 모바일에서 스크린샷을 저장한 뒤 공유하는 방법도 알아봅시다. ##### 참고 API Reference [ScreenshotService](/apiReference?postId=807) [MobileShareService](/apiReference/Services/MobileShareService) # ScreenshotService `ScreenshotService`를 활용하면 PC나 모바일에서 메

[task] | single_turn [pass] | ⏳ 미판정 [title] | 충돌 그룹 만들기 [question] | 코인이 Player와만 반응하도록 하려면 ItemComponent의 HandleTriggerEnterEvent에서 어떤 조건을 추가해야 하는지 예제 코드에 나와 있나요? [answer] | 네, 예제 코드에 해당 조건이 포함되어 있습니다. 문서에 제시된 `ItemComponent`의 `HandleTriggerEnterEvent` 코드를 보면, 단순히 트리거가 들어왔을 때만 코인을 없애는 것이 아니라, **충돌한 대상(`TriggerBodyEntity`)의 이름이 "PlayerComponent"인지 확인하는 조건**이 있어야 합니다. 아래는 문서의 활용 예제 6번에 설명된 로직을 반영한 정확한 mLua 코드입니다. ```lua Event Handler: [server only] [self] HandleTrigger [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 충돌 그룹 매트릭스(Matrix)는 충돌 그룹끼리의 충돌을 허용할지 말지를 결정할 때 사용합니다. 충돌 그룹을 생성하면 매트릭스에 자동으로 새로운 충돌 그룹이 생성됩니다. 충돌 그룹끼리의 충돌 허용 여부는 체크 박스를 선택해서 간단하게 설정할 수 있습니다. 매트릭스에 적힌 충돌 그룹끼리의 관계를 확인하고 충돌을 허용하고 싶다면 체크 박스를 활성화합니다. 1. **Panels - Collision Groups - Matrix**를 선택합니다. 2. 가로 세로의 그룹명을 확인한 뒤 충돌을 허용하면 체크 박스를 활성화합니다.

[task] | single_turn [pass] | ⏳ 미판정 [title] | 메이플 이동 개념 이해하기 [question] | RigidbodyComponent의 LayerSettingType을 All로 설정했는데, 사다리를 내려온 후 발판을 밟았을 때 아바타가 왜 여전히 사다리 레이어를 따라가는지 궁금합니다. [answer] | 문서의 설명에 따르면, `RigidbodyComponent`의 `LayerSettingType`을 **All**로 설정했을 때 아바타는 메이플스토리 기본 이동 방식을 따릅니다. 이 모드에서는 아바타가 **발판을 밟고 있을 때 발판의 SortingLayer**를, **사다리/로프를 타고 있을 때 탄 사다리의 SortingLayer**를 각각 따라갑니다. 따라서 질문하신 상황인 "사다리를 내려온 후 발판을 밟았을 때" 아바타는 **발판의 SortingLayer**를 따라가야 합니다. 아바타가 여전히 사다리 레이어를 따라가는 것처럼 보 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | **RigidbodyComponent의 LayerSettingType** 타입을 변경해 메이플스토리 이동을 따르게 설정합니다. 혹은 사다리/로프/발판의 SortingLayer와 RigidbodyComponent를 가진 Entity의 SortingLayer들과의 관계를 변경해 메이플스토리 이동과 다르게 설정할 수 있습니다. 아래와 같이 Layer1에 타일을 그리고, Layer1,2,3,4에 각각 사다리를 배치했을 때 각 타입에 따라 아바타와 사다리의 관계가 어떻게 변하는지 살펴보겠습니다. DefaultPlayer에는 Rigidbod

[task] | code [pass] | ⏳ 미판정 [title] | 메이플 이동 개념 이해하기 [question] | _MapComponent 또는 _EntityService를 활용해 특정 Entity의 RigidbodyComponent와 AvatarRendererComponent를 접근하여 현재 LayerSettingType 값을 로그로 출력하는 스크립트를 작성해줘 [answer] | 제시된 참고 문서에는 `RigidbodyComponent`와 `AvatarRendererComponent`를 접근하는 구체적인 API 시그니처(예: `GetComponent` 또는 직접 프로퍼티 접근 방식)가 명시되어 있지 않습니다. 또한, `LayerSettingType`의 현재 값을 읽기 위한 getter 메서드나 프로퍼티가 문서에 포함되어 있지 않습니다. 따라서 **참고 문서에 있는 정보만 사용하여** 특정 Entity의 `RigidbodyComponent`와 `AvatarRendererComponent`를 접근하여 `Lay [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | **RigidbodyComponent의 LayerSettingType** 타입을 변경해 메이플스토리 이동을 따르게 설정합니다. 혹은 사다리/로프/발판의 SortingLayer와 RigidbodyComponent를 가진 Entity의 SortingLayer들과의 관계를 변경해 메이플스토리 이동과 다르게 설정할 수 있습니다. 아래와 같이 Layer1에 타일을 그리고, Layer1,2,3,4에 각각 사다리를 배치했을 때 각 타입에 따라 아바타와 사다리의 관계가 어떻게 변하는지 살펴보겠습니다. DefaultPlayer에는 Rigidbod

[task] | single_turn [pass] | ⏳ 미판정 [title] | 충돌 그룹 만들기 [question] | 충돌 그룹 매트릭스에서 체크 박스를 활성화해야 하는 경우와 비활성화해야 하는 경우의 구체적인 차이점이 무엇인가요? [answer] | 충돌 그룹 매트릭스(Collision Groups Matrix)에서 체크 박스의 활성화와 비활성화는 해당 충돌 그룹끼리의 물리적 상호작용(충돌)을 허용할지 차단할지를 결정합니다. 구체적인 차이점은 다음과 같습니다. **1. 체크 박스 활성화 (충돌 허용)** * **의미:** 두 충돌 그룹 간의 충돌을 **허용**합니다. * **결과:** 서로 다른 두 충돌 그룹에 속한 오브젝트가 만나면 물리적으로 부딪히고, `HandleTriggerEnterEvent`와 같은 충돌 이벤트가 발생합니다. * **활용 예:** 플레이어 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 충돌 그룹 매트릭스(Matrix)는 충돌 그룹끼리의 충돌을 허용할지 말지를 결정할 때 사용합니다. 충돌 그룹을 생성하면 매트릭스에 자동으로 새로운 충돌 그룹이 생성됩니다. 충돌 그룹끼리의 충돌 허용 여부는 체크 박스를 선택해서 간단하게 설정할 수 있습니다. 매트릭스에 적힌 충돌 그룹끼리의 관계를 확인하고 충돌을 허용하고 싶다면 체크 박스를 활성화합니다. 1. **Panels - Collision Groups - Matrix**를 선택합니다. 2. 가로 세로의 그룹명을 확인한 뒤 충돌을 허용하면 체크 박스를 활성화합니다.

[task] | single_turn [pass] | ⏳ 미판정 [title] | 충돌 그룹 만들기 [question] | DefaultPlayer의 TriggerComponent와 PlayerHit의 CollisionGroup을 Player로 지정하는 것이 왜 필요한가요? [answer] | 충돌 그룹 매트릭스(Matrix)는 특정 충돌 그룹끼리 물리적 충돌이 발생할지 여부를 제어하는 도구입니다. `DefaultPlayer`의 `TriggerComponent`와 `PlayerHit`의 `CollisionGroup`을 `Player`로 지정하는 이유는, **충돌 매트릭스에서 `Player` 그룹과 다른 그룹(예: `Item`, `Monster`) 간의 충돌 허용 여부를 명시적으로 설정하기 위해서**입니다. 구체적인 과정은 다음과 같습니다. 1. **매트릭스 설정의 전제 조건:** 충돌 그룹을 생성하면 매트릭스에 자동 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 충돌 그룹 매트릭스(Matrix)는 충돌 그룹끼리의 충돌을 허용할지 말지를 결정할 때 사용합니다. 충돌 그룹을 생성하면 매트릭스에 자동으로 새로운 충돌 그룹이 생성됩니다. 충돌 그룹끼리의 충돌 허용 여부는 체크 박스를 선택해서 간단하게 설정할 수 있습니다. 매트릭스에 적힌 충돌 그룹끼리의 관계를 확인하고 충돌을 허용하고 싶다면 체크 박스를 활성화합니다. 1. **Panels - Collision Groups - Matrix**를 선택합니다. 2. 가로 세로의 그룹명을 확인한 뒤 충돌을 허용하면 체크 박스를 활성화합니다.

[task] | two_turn [pass] | ⏳ 미판정 [title] | 다양한 선 그리기 [question] | Points의 Size 값을 설정하고 각 Position 좌표를 지정하여 직선과 삼각형을 그리는 구체적인 설정 과정을 코드나 단계별로 보여주세요. [answer] | LineRendererComponent를 이용해 직선과 삼각형을 그리는 구체적인 설정 과정은 다음과 같습니다. ### 1. 직선 그리기 직선을 그리려면 최소 2개의 Point(정점)가 필요합니다. **설정 단계:** 1. **EmptyEntity**를 생성하고 **LineRendererComponent**를 추가합니다. 2. `Points` 속성의 **Size**에 `2`를 입력합니다. (Size는 선을 구성하는 점의 개수를 의미하며, 0부터 시작하지만 직선은 최소 2점이 필요합니다. 참고 문서의 직선 예시에서는 Size 3 [followup] | 선의 색상(Color)이 Size마다 다르게 지정되었을 때 색이 교차하는 지점에서의 혼합 효과와, 최소 2개의 Position이 필요한 이유를 설명해 주세요. [followup_answer] | LineRendererComponent에서 색상(Color)과 위치(Position) 설정에 대한 설명은 다음과 같습니다. ### 1. 색상(Color)의 교차 지점 혼합 효과 LineRendererComponent의 `Points` 속성에서 각 점(Size마다)에 다른 색을 지정할 수 있습니다. 이 경우, **색이 교차하는 지점에서는 색이 자연스럽게 섞여 보입니다.** 즉, 두 점 사이의 선은 양 끝점의 색상이 그라데이션처럼 자연스럽게 혼합되어 연결되는 효과를 나타냅니다. ### 2. 최소 2개의 Position이 필요한 이유 [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 LineRendererComponent를 활용해 다양한 선을 월드에 자유롭게 그릴 수 있습니다. # LineRendererComponent LineRendererComponent는 점의 개수를 지정해 MapleTile, RectTile 위에서 원하는 직선, 곡선을 그릴 수 있습니다. LineRendererComponent 하나당 하나의 선을 그릴 수 있으므로, 여러 선을 표현하고 싶다면 여러 개의 LineRendererComponent가 포함된 엔티티를 사용해야 합니다. 주요 프로퍼티는 아래와 같습니다.

[task] | code [pass] | ⏳ 미판정 [title] | 메이플 이동 개념 이해하기 [question] | TileMapComponent의 IsVerticalLine 프로퍼티를 활성화하여 특정 맵 레이어의 수직 지형만 막는 스크립트를 작성해줘 [answer] | TileMapComponent의 `IsVerticalLine` 프로퍼티는 맵 레이어를 구성하는 타일 맵 컴포넌트의 설정 값입니다. 특정 맵 레이어의 수직 지형만 통과하지 못하게 막기 위해서는 해당 맵 레이어에 부착된 `TileMapComponent`의 `IsVerticalLine`을 `true`로 설정해야 합니다. 참고 문서의 예제와 mLua 규칙에 따라, 대상 맵 레이어의 경로를 확인한 뒤 해당 엔티티의 `TileMapComponent.IsVerticalLine`을 활성화하는 스크립트는 다음과 같습니다. ```lua Prope [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | #### 수직선 지형 지면 발판과 붙어있든, 떨어져 있든 점프로 수직 발판을 통과하지 못하게 만들고 싶다면 RigidbodyComponent의 **IsBlockvertialLine**을 활성화합니다. | IsBlockvertialLine활성화 | IsBlockvertialLine비활성화 | | --- | --- | || | ##### 특정 레이어의 수직선 지형만 막기 RigidbodyComponent의 **IsBlockvertialLine**를 활성화하면 맵 내부의 모든 수직 지형을 통과하지 못합니다. 만약 일부 맵 레이어에서

[task] | single_turn [pass] | ⏳ 미판정 [title] | 메이플 이동 개념 이해하기 [question] | Climbable 타입과 None 타입의 가장 큰 차이점이 무엇이며, 아바타가 사다리를 완전히 내려온 시점에 SortingLayer 값이 언제 바뀝니다? [answer] | `Climbable` 타입과 `None` 타입의 가장 큰 차이점은 **아바타가 사다리에서 내려온 후 SortingLayer 값이 어떻게 유지되는지**에 있습니다. 1. **Climbable**: 아바타가 마지막으로 탔던 **사다리/로프의 SortingLayer** 값을 기준으로 설정됩니다. 아바타가 사다리에서 내려와서 발판을 밟고 이동하더라도, 그 사다리의 SortingLayer 값을 계속 따릅니다. 2. **None**: 크리에이터가 직접 설정한 **RigidbodyComponent를 가진 Entity의 SortingLaye [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | **RigidbodyComponent의 LayerSettingType** 타입을 변경해 메이플스토리 이동을 따르게 설정합니다. 혹은 사다리/로프/발판의 SortingLayer와 RigidbodyComponent를 가진 Entity의 SortingLayer들과의 관계를 변경해 메이플스토리 이동과 다르게 설정할 수 있습니다. 아래와 같이 Layer1에 타일을 그리고, Layer1,2,3,4에 각각 사다리를 배치했을 때 각 타입에 따라 아바타와 사다리의 관계가 어떻게 변하는지 살펴보겠습니다. DefaultPlayer에는 Rigidbod

[task] | single_turn [pass] | ⏳ 미판정 [title] | 메이플 이동 개념 이해하기 [question] | LayerSettingType을 None으로 변경했는데도 아바타의 SortingLayer가 제 설정값이 아닌 Default로 고정되어 유지되는 이유는 무엇일까요? [answer] | `LayerSettingType`을 `None`으로 설정했을 때 아바타의 `SortingLayer`가 크리에이터가 원하는 값이 아닌 `Default`로 고정되는 이유는, **`None` 모드가 `AvatarRendererComponent`에 직접 설정된 `SortingLayer` 값이 아니라, `RigidbodyComponent`를 가진 Entity의 `SortingLayer` 값을 따르기 때문**입니다. 문서에서 설명한 `None` 타입의 동작 방식을 보면 다음과 같습니다. > **None**: 크리에이터가 설정한 **Rigid [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | **RigidbodyComponent의 LayerSettingType** 타입을 변경해 메이플스토리 이동을 따르게 설정합니다. 혹은 사다리/로프/발판의 SortingLayer와 RigidbodyComponent를 가진 Entity의 SortingLayer들과의 관계를 변경해 메이플스토리 이동과 다르게 설정할 수 있습니다. 아래와 같이 Layer1에 타일을 그리고, Layer1,2,3,4에 각각 사다리를 배치했을 때 각 타입에 따라 아바타와 사다리의 관계가 어떻게 변하는지 살펴보겠습니다. DefaultPlayer에는 Rigidbod

[task] | single_turn [pass] | ⏳ 미판정 [title] | 스크린샷 촬영 및 공유하기 [question] | iOS에서 CaptureScreenRegionAsFileAndWait를 호출했을 때 파일이 저장되는 위치는 어디인가요? [answer] | iOS에서 `CaptureScreenRegionAsFileAndWait` 함수를 호출하면 스크린샷 파일은 **내 파일 > 나의 iPhone > MapleStory Worlds > Screenshots > 월드 ID** 폴더 안에 `fileName_*.png` 형식으로 저장됩니다. [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] | RigidbodyComponent의 IsBlockvertialLine 프로퍼티를 활성화하여 수직 지형을 통과하지 못하게 하는 스크립트를 작성해줘 [answer] | `RigidbodyComponent`의 `IsBlockvertialLine` 프로퍼티는 Lua 코드로 직접 조작하는 것이 아니라, 에디터의 프로퍼티 패널에서 활성화(체크)하는 것을 권장합니다. 해당 프로퍼티가 활성화된 상태라면, 해당 엔티티는 맵 내부의 모든 수직 지형을 통과하지 못하게 됩니다. 만약 특정 조건(예: 트리거 영역 진입 시)에 따라 이 값을 런타임에 변경해야 한다면, `self.Entity.RigidbodyComponent.IsBlockvertialLine`에 직접 할당하는 방식으로 코드를 작성할 수 있습니다. 아 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | #### 수직선 지형 지면 발판과 붙어있든, 떨어져 있든 점프로 수직 발판을 통과하지 못하게 만들고 싶다면 RigidbodyComponent의 **IsBlockvertialLine**을 활성화합니다. | IsBlockvertialLine활성화 | IsBlockvertialLine비활성화 | | --- | --- | || | ##### 특정 레이어의 수직선 지형만 막기 RigidbodyComponent의 **IsBlockvertialLine**를 활성화하면 맵 내부의 모든 수직 지형을 통과하지 못합니다. 만약 일부 맵 레이어에서

[task] | two_turn [pass] | ⏳ 미판정 [title] | 다양한 선 그리기 [question] | OnUpdate 함수에서 Threshold 변수를 사용하여 선의 생성 빈도를 조절하는 방식의 장단점은 무엇이며, 이 값이 너무 크거나 작을 때 발생하는 시각적 문제는 어떻게 해결할 수 있나요? [answer] | 제시된 문서 내용을 바탕으로 `Threshold` 변수의 역할과 그에 따른 시각적 문제, 해결 방법을 설명합니다. ### 1. Threshold 기반 선 생성 방식의 장단점 **장점:** * **불필요한 객체 생성 방지:** `OnUpdate`는 매 프레임마다 호출되지만, `Threshold` 값보다 이동 거리가 짧으면 `AddPoint`가 실행되지 않습니다. 이를 통해 선이 지나치게 촘촘하게 생성되는 것을 막아 메모리 및 연산 자원을 절약할 수 있습니다. * **일정한 선 간격 유지:** 이동 속도나 프레임 레이트에 관 [followup] | Vector3.Distance 계산 결과를 활용하여 점 생성을 스킵하는 조건문을 최적화하는 구체적인 코드 수정 예시를 보여주세요. [followup_answer] | 제시된 참고 문서의 `OnUpdate` 함수에서 `Vector3.Distance` 계산 결과를 활용하여 점 생성을 스킵하는 조건문은 이미 최적화된 형태로 구현되어 있습니다. 문서에 따르면, 매 프레임마다 `Vector3.Distance`를 호출하여 계산된 거리(`dist`)가 `Threshold`보다 작으면 함수를 즉시 종료(`return`)하는 방식입니다. 이는 불필요한 `AddPoint` 호출을 막아 성능을 최적화하는 핵심 로직입니다. 참고 문서에 포함된 `TrailDrawer` 컴포넌트의 `OnUpdate` 및 관련 메서드 [scores] | [judge_reason] | [source_doc] | 플레이어를 따라 다니는 모델을 만들어, 플레이어의 움직임을 따라 선이 그려지고, 사라지게 만들어봅시다. 1. Trail 모델을 생성하고, TransformComponent와 LineRendererComponent를 추가합니다. 2. 새로운 TrailDrawer 컴포넌트를 생성하고, Trail 모델에 추가합니다. ```lua [None] Vector3 PrevPos = Vector3(0,0,0) [None] number Threshold = 0.1 [None] number P

[task] | single_turn [pass] | ⏳ 미판정 [title] | 스크린샷 촬영 및 공유하기 [question] | Windows 환경에서 스크린샷이 저장되는 정확한 폴더 경로는 어디인가요? [answer] | Windows 환경에서 스크린샷이 저장되는 정확한 폴더 경로는 **내 PC > 사진 > MapleStory Worlds > 월드 ID** 폴더이며, 파일명은 `fileName.png` 형식으로 저장됩니다. 이는 `ScreenshotService`의 `CaptureFullScreenToPhotoLibraryAndWait()` 또는 `CaptureScreenRegionToPhotoLibraryAndWait()` 함수를 사용하여 사진 보관함에 저장할 때 적용되는 경로입니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 `ScreenshotService`를 통해 화면을 캡처하고 이미지 파일을 저장하는 방법을 살펴봅시다. 추가로 모바일에서 스크린샷을 저장한 뒤 공유하는 방법도 알아봅시다. ##### 참고 API Reference [ScreenshotService](/apiReference?postId=807) [MobileShareService](/apiReference/Services/MobileShareService) # ScreenshotService `ScreenshotService`를 활용하면 PC나 모바일에서 메

[task] | instruction_following [pass] | ⏳ 미판정 [title] | 스크린샷 촬영 및 공유하기 [question] | 스크린샷 파일 저장이 불가능한 상황과 제한 사항을 1문장 이내로 설명하세요. [answer] | 모바일에서만 지원되며, 스크린샷 파일 저장은 1초에 1번만 가능합니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 모바일에서 스크린샷 공유하는 방법을 살펴봅시다. 단, PC에서는 공유할 수 없습니다. 1. **FullScreenBtn** 버튼의 콘텍스트 메뉴에서 **Duplicate**를 클릭해 버튼을 복제한 뒤 적당한 위치로 옮깁니다. 2. 복제한 버튼의 이름을 **ShareBtn**으로 변경합니다. **Text**에는 **Share**를 입력합니다. 3. 스크립트 에디터에서 **ScreenshotServiceTest**를 열고 **FullScreenBtn**에 연결한 이벤트를 찾습니다. `CaptureFullScre

[task] | two_turn [pass] | ⏳ 미판정 [title] | 메이플 이동 개념 이해하기 [question] | RigidbodyComponent가 있는 엔티티의 SortingLayer는 현재 밟고 있는 TileMap Layer에 따라 자동으로 변경된다고 하는데, 이 동작을 스크립트로 직접 제어하거나 변경하는 방법은 있나요? [answer] | 제공된 참고 문서에는 RigidbodyComponent가 있는 엔티티의 SortingLayer가 현재 밟고 있는 TileMap Layer를 따라 자동으로 변경된다는 사실만 명시되어 있습니다. 문서에는 "대부분의 SortingLayer는 크리에이터가 스크립트에서 변경하지 않는 이상 자동으로 변경되어..."라는 표현이 포함되어 있어, 스크립트를 통해 변경할 수 있는 가능성이 암시되지만, **SortingLayer를 직접 제어하거나 변경하는 구체적인 API, 메서드, 또는 프로퍼티 이름은 문서에记载되어 있지 않습니다.** 따라서 현재 [followup] | 만약 스크립트로 SortingLayer를 수동으로 고정하거나 변경하려면 어떤 코드 구조나 메서드 호출이 필요한지 예시를 보여주세요. [followup_answer] | 제공된 참고 문서에는 RigidbodyComponent가 있는 엔티티의 SortingLayer가 현재 밟고 있는 TileMap Layer를 따라 **자동으로** 변경된다는 동작 원리만 설명되어 있습니다. 문서에는 "크리에이터가 스크립트에서 변경하지 않는 이상 자동으로 변경되어..."라는 문장이 포함되어 있어 스크립트 기반 변경의 가능성이 언급되긴 하지만, **SortingLayer를 수동으로 고정하거나 변경하기 위해 실제로 호출해야 하는 구체적인 API, 메서드 이름, 프로퍼티, 또는 코드 구조는 문서에 존재하지 않습니다.** [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 월드 제작에 필수적인 이동 방식 중 메이플스토리 이동 방식을 따르는 RigidbodyComponent 특성을 알아봅시다. 이동은 [메이플 타일 맵 만들기](/docs?postId=747)와 함께 학습하기 권장합니다. # 메이플스토리 이동 방식 RigidbodyComponent는 메이플스토리 이동 방식처럼 이동하고자 할 때 사용합니다. 이동 방식은 지형 종류와 밀접한 연관이 있기에 TileMapComponent를 함께 사용해 메이플스토리식 이동 방식을 만들 수 있습니다. 이때 타일 위에서 이동은 Rigidbo

[task] | two_turn [pass] | ⏳ 미판정 [title] | 메이플 이동 개념 이해하기 [question] | RigidbodyComponent의 LayerSettingType을 All, Climbable, None으로 설정할 때 아바타와 사다리의 SortingLayer 관계는 어떻게 달라지나요? [answer] | RigidbodyComponent의 `LayerSettingType` 값을 변경하면 아바타의 `AvatarRendererComponent` SortingLayer가 사다리나 발판과 어떻게 상호작용하는지가 달라집니다. 각 설정별 동작은 다음과 같습니다. 1. **All** - 메이플스토리 기본 이동 방식을 따릅니다. - 아바타가 **발판**을 밟고 있을 경우: `RigidbodyComponent`가 밟고 있는 발판의 SortingLayer 값을 따라갑니다. - 아바타가 **사다리/로프**를 타고 있을 경우: 탄 사다 [followup] | LayerSettingType을 Climbable로 설정했을 때, 아바타가 사다리에서 내려와 발판을 밟은 후 다시 다른 사다리를 타면 SortingLayer 값은 어떻게 처리되는지 확인하고 싶습니다. [followup_answer] | `LayerSettingType`을 `Climbable`으로 설정한 경우, 아바타의 `AvatarRendererComponent` SortingLayer는 **마지막으로 탄 사다리/로프의 SortingLayer**를 기준으로 결정됩니다. 따라서 질문하신 시나리오의 처리 과정은 다음과 같습니다. 1. **첫 번째 사다리 탑승**: 첫 번째 사다리의 SortingLayer 값으로 아바타의 SortingLayer가 변경됩니다. 2. **사다리에서 내려와 발판 밟기**: 아바타가 사다리에서 내려와 발판을 밟더라도, `Climbable` [scores] | [judge_reason] | [source_doc] | **RigidbodyComponent의 LayerSettingType** 타입을 변경해 메이플스토리 이동을 따르게 설정합니다. 혹은 사다리/로프/발판의 SortingLayer와 RigidbodyComponent를 가진 Entity의 SortingLayer들과의 관계를 변경해 메이플스토리 이동과 다르게 설정할 수 있습니다. 아래와 같이 Layer1에 타일을 그리고, Layer1,2,3,4에 각각 사다리를 배치했을 때 각 타입에 따라 아바타와 사다리의 관계가 어떻게 변하는지 살펴보겠습니다. DefaultPlayer에는 Rigidbod

[task] | instruction_following [pass] | ⏳ 미판정 [title] | 스크린샷 촬영 및 공유하기 [question] | `ScreenshotServiceTest` 스크립트에서 `_ScreenshotService:CaptureFullScreenToPhotoLibraryAndWait` 호출 시 전달되는 인자값과 성공 시 저장되는 변수를 3문장 이내로 설명하세요. [answer] | `_ScreenshotService:CaptureFullScreenToPhotoLibraryAndWait` 함수에는 파일 이름 "FullScreen"과 `true`라는 두 개의 인자가 전달됩니다. 호출 후 반환되는 `error` 변수가 `ScreenshotError.Success`와 같을 경우에만 성공으로 판단됩니다. 성공 시 두 번째 반환값인 `path` 값이 `self._T.lastPath` 변수에 저장됩니다. [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] | RigidbodyComponent의 LayerSettingType을 'All'로 설정하여 아바타가 발판이나 사다리를 이용할 때 해당 오브젝트의 SortingLayer를 자동으로 따르게 하는 스크립트를 작성해줘 [answer] | RigidbodyComponent의 `LayerSettingType`은 컴포넌트 자체의 설정 값이며, 스크립트에서 런타임에 직접 값을 변경하거나 'All' 모드의 동작(발판/사다리 SortingLayer 자동 추종)을 코드 로직으로 재현하는 API가 문서에 명시되어 있지 않습니다. 문서에 따르면, `LayerSettingType`을 **All**로 설정하면 게임 엔진 레벨에서 자동으로 다음과 같은 동작을 수행합니다: 1. **발판(Moving Platform) 밟을 때**: 발판의 SortingLayer를 아바타의 AvatarR [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | **RigidbodyComponent의 LayerSettingType** 타입을 변경해 메이플스토리 이동을 따르게 설정합니다. 혹은 사다리/로프/발판의 SortingLayer와 RigidbodyComponent를 가진 Entity의 SortingLayer들과의 관계를 변경해 메이플스토리 이동과 다르게 설정할 수 있습니다. 아래와 같이 Layer1에 타일을 그리고, Layer1,2,3,4에 각각 사다리를 배치했을 때 각 타입에 따라 아바타와 사다리의 관계가 어떻게 변하는지 살펴보겠습니다. DefaultPlayer에는 Rigidbod

[task] | code [pass] | ⏳ 미판정 [title] | 메이플 이동 개념 이해하기 [question] | Hierarchy에서 선택된 엔티티의 MapLayerName 프로퍼티를 확인하여 "Layer2"인 경우에만 TileMapComponent의 IsVerticalLine을 활성화하는 스크립트를 작성해줘 [answer] | 제공된 문서에는 `MapLayerName` 프로퍼티에 대한 직접적인 접근 방법이나 `TileMapComponent`의 `IsVerticalLine` 프로퍼티를 mLua 코드로 설정하는 API가 명시되어 있지 않습니다. 문서에는 다음과 같은 정보만 포함되어 있습니다: 1. **UI 조작 설명**: Hierarchy에서 `MapleMapLayer_1`을 선택하면 프로퍼티 에디터에 `MapLayerName`이 `Layer2`로 설정되어 있다고 설명합니다. 2. **UI 조작 설명**: `TileMap_1`을 선택한 뒤 `TileMa [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | #### 수직선 지형 지면 발판과 붙어있든, 떨어져 있든 점프로 수직 발판을 통과하지 못하게 만들고 싶다면 RigidbodyComponent의 **IsBlockvertialLine**을 활성화합니다. | IsBlockvertialLine활성화 | IsBlockvertialLine비활성화 | | --- | --- | || | ##### 특정 레이어의 수직선 지형만 막기 RigidbodyComponent의 **IsBlockvertialLine**를 활성화하면 맵 내부의 모든 수직 지형을 통과하지 못합니다. 만약 일부 맵 레이어에서

[task] | two_turn [pass] | ⏳ 미판정 [title] | 메이플 이동 개념 이해하기 [question] | 지형 Layer가 다른 발판들 사이에서 이동할 때, 수직 발판에 의한 이동 제한은 어떻게 달라지나요? [answer] | 지형 Layer가 다른 발판들 사이에서 이동할 때 수직 발판에 의한 이동 제한은 캐릭터가 현재 밟고 있는 Layer와 목표 발판의 Layer 관계에 따라 달라집니다. 기본적으로 바닥과 이어진 수직 발판은 같은 Layer 내에서는 플레이어 캐릭터의 이동을 막는 벽으로 작용합니다. 하지만 다른 Layer의 발판으로 이동할 때는 다음과 같은 규칙이 적용됩니다. 1. **낮은 Layer에서 높은 Layer로 이동할 때**: 현재 밟고 있는 Layer(예: Layer 1)에서 다른 Layer(예: Layer 2)로 이동하는 과정에서, 목 [followup] | Layer 1에서 Layer 2로 이동할 때와 Layer 2에서 Layer 1로 이동할 때의 수직 발판 통과 여부 차이를 설명하고, 이 동작을 제어하는 핵심 로직이나 프로퍼티가 있다면 알려주세요. [followup_answer] | Layer 1에서 Layer 2로 이동할 때와 Layer 2에서 Layer 1로 이동할 때의 수직 발판 통과 여부 차이는 다음과 같습니다. **1. 이동 방향에 따른 수직 발판 통과 여부 차이** * **Layer 1에서 Layer 2로 이동할 때 (통과 가능)** * 플레이어 캐릭터가 Layer 1에 속해 있을 때, Layer 2에 속한 수직선 발판은 무시됩니다. * 따라서 Layer 2의 수직 발판에 막히지 않고 통과하여 Layer 2의 발판으로 이동할 수 있습니다. * **Layer 2에서 La [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 월드 제작에 필수적인 이동 방식 중 메이플스토리 이동 방식을 따르는 RigidbodyComponent 특성을 알아봅시다. 이동은 [메이플 타일 맵 만들기](/docs?postId=747)와 함께 학습하기 권장합니다. # 메이플스토리 이동 방식 RigidbodyComponent는 메이플스토리 이동 방식처럼 이동하고자 할 때 사용합니다. 이동 방식은 지형 종류와 밀접한 연관이 있기에 TileMapComponent를 함께 사용해 메이플스토리식 이동 방식을 만들 수 있습니다. 이때 타일 위에서 이동은 Rigidbo

[task] | instruction_following [pass] | ⏳ 미판정 [title] | 스크린샷 촬영 및 공유하기 [question] | 성공 시와 실패 시 처리 로직을 포함하는 `HandleButtonClickEvent` 함수 본문만 출력하고, 모든 설명은 `--` 주석으로 작성하세요. [answer] | ```lua local error, path = _ScreenshotService:CaptureFullScreenToPhotoLibraryAndWait("FullScreen", true) log(error, path) if error == ScreenshotError.Success then -- 성공 시: 저장된 이미지 경로를 self._T.lastPath에 저장합니다. self._T.lastPath = path else -- 실패 시: 에러 코드와 경로를 포함한 실패 메시지를 토스트로 표시합니다. _UIToast:Show [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] | two_turn [pass] | ⏳ 미판정 [title] | 다양한 선 그리기 [question] | AddPoint 메서드에서 _UtilLogic:RandomDouble()을 사용하여 점의 색상을 랜덤하게 설정하는 방식은 어떤 시각적 효과를 주며, 특정 테마 색상에 맞춰 색상을 제한하거나 변경하려면 코드를 어떻게 수정해야 하나요? [answer] | `AddPoint` 메서드에서 `_UtilLogic:RandomDouble()`을 사용하여 RGB 값을 각각 0~1 사이의 랜덤 값으로 설정하면, 매 프레임마다 **무작위적인 색상의 선**이 그려집니다. 이 방식은 색상이 매 순간 변화하는 레인보우(무지개) 효과나, 예측 불가능한 시각적 노이즈(Noise) 효과를 만들어냅니다. 특정 테마 색상에 맞춰 색상을 제한하거나 변경하려면, 랜덤 값을 생성하는 부분을 고정된 값으로 대체하거나, 특정 범위 내에서만 값을 생성하도록 수정해야 합니다. ### 1. 고정된 테마 색상 사용 특정 색 [followup] | Color 객체의 인자(R, G, B)를 고정값이나 범위로 제한하여 통일된 색상의 트레일을 생성하는 코드 예시를 작성해 주세요. [followup_answer] | 참고 문서의 `TrailDrawer` 컴포넌트 코드에서 `AddPoint` 메서드를 수정하여 통일된 색상 트레일을 생성하는 예시를 아래에 제시합니다. ### 1. 고정된 단일 색상 사용 특정 색상의 RGB 값을 고정하여 모든 트레일 점을 동일한 색상으로 그리려면 `_UtilLogic:RandomDouble()` 호출을 제거하고 원하는 수치를 직접 대입합니다. ```lua Property: [None] Vector3 PrevPos = Vector3(0,0,0) [None] number Threshold = 0.1 [None] nu [scores] | [judge_reason] | [source_doc] | 플레이어를 따라 다니는 모델을 만들어, 플레이어의 움직임을 따라 선이 그려지고, 사라지게 만들어봅시다. 1. Trail 모델을 생성하고, TransformComponent와 LineRendererComponent를 추가합니다. 2. 새로운 TrailDrawer 컴포넌트를 생성하고, Trail 모델에 추가합니다. ```lua [None] Vector3 PrevPos = Vector3(0,0,0) [None] number Threshold = 0.1 [None] number P

[task] | two_turn [pass] | ⏳ 미판정 [title] | 스크린샷 촬영 및 공유하기 [question] | _ScreenshotService:CaptureScreenRegionToPhotoLibraryAndWait의 매개변수 Vector2 좌표가 유저의 스크린 해상도에 따라 촬영 위치가 달라지는 문제를 어떻게 해결할 수 있나요? [answer] | 참고 문서에는 `_ScreenshotService:CaptureScreenRegionToPhotoLibraryAndWait` 메서드의 매개변수 `startPixel`과 `endPixel`이 픽셀 단위의 절대 좌표임을 명시하고 있습니다. 또한, 일부 화면 촬영 시에는 유저의 스크린 해상도에 따라 촬영되는 화면의 위치가 달라질 수 있으므로 이 점을 유의해야 한다고 경고하고 있습니다. 하지만 참고 문서에는 해상도 차이에 따른 촬영 위치 변동 문제를 해결하기 위한 구체적인 방법이나 대체 API(예: 비율 기반 좌표, 화면 크기 조회 AP [followup] | 특정 해상도 기준으로 화면의 비율(%)을 계산하여 startPixel과 endPixel을 동적으로 설정하는 코드 예시를 작성해 주세요. [followup_answer] | 참고 문서에는 `_ScreenshotService:CaptureScreenRegionToPhotoLibraryAndWait` 메서드의 사용법과 픽셀 좌표(`Vector2`)를 전달하는 방식은 나와 있으나, 현재 화면의 해상도나 크기를 조회하는 API(예: `Screen.width`, `GetScreenSize()` 등)나 비율을 픽셀로 변환하는 유틸리티 함수에 대한 정보는 포함되어 있지 않습니다. mLua API 문서에 없는 함수나 프로퍼티를 지어내지 않는 원칙에 따라, 화면 해상도를 동적으로 가져와 비율로 계산하는 코드를 작성할 [scores] | [judge_reason] | [source_doc] | 버튼을 눌러 일부 화면 스크린샷을 촬영해 봅시다. 1. **FullScreenBtn** 버튼의 콘텍스트 메뉴에서 **Duplicate**를 클릭해 버튼을 복제한 뒤 적당한 위치로 옮깁니다. 2. 복제한 버튼의 이름을 **PartialScreenBtn**으로 변경합니다. **Text**에는 **Partial Screen Capture**를 입력합니다. 3. 스크립트 에디터에서 **ScreenshotServiceTest**를 열고 이벤트 핸들러에 `ButtonClickEvent`를 추가합니다. 이벤트 센

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