← 목록

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

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

[task] | instruction_following [pass] | ⏳ 미판정 [title] | RectTileMap에서 캐릭터 이동 제어 [question] | RectTileEnterEvent 핸들러에서 TileInfo.Name을 self.CurrentTileName에 할당하는 과정과 OnUpdate에서 이를 활용하여 Trap 타일 밟았을 때 사망 처리하는 로직의 흐름을 단계별 번호 목록으로 설명하세요. [answer] | RectTileEnterEvent 핸들러와 OnUpdate를 통해 Trap 타일 밟았을 때 사망 처리하는 로직의 흐름은 다음과 같습니다. 1. **RectTileEnterEvent 발생 및 타일 정보 저장** * 캐릭터가 타일을 밟으면 `HandleRectTileEnterEvent` 이벤트 핸들러가 실행됩니다. * 이벤트 객체(`event`)에서 `TileInfo`를 추출합니다. * `TileInfo.Name` 속성을 읽어서 현재 밟고 있는 타일의 이름을 `self.CurrentTileName` [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | ## 장애물 타일 피하기 점프로만 넘어갈 수 있는 장애물을 만들고, 장애물을 밟으면 캐릭터가 죽도록 설정해 봅시다. 1. 맵에 Trap 타일을 배치합니다. 2. **MyDesk** 아래에 새 스크립트 컴포넌트 **CheckTrapTile**를 만든 뒤, **DefaultPlayer**에 추가합니다. 3. 아래와 같이 **CheckTrapTile**을 작성합니다. ```lua Property: [None] string CurrentTileName = "" Met

[task] | single_turn [pass] | ⏳ 미판정 [title] | 다양한 선 그리기 [question] | SpritePattern 셰이더를 사용하려고 하는데, 랩 모드를 Repeat로 설정하지 않으면 어떤 현상이 발생하나요? [answer] | 제공된 문서에는 SpritePattern 셰이더를 사용할 때 랩 모드를 Repeat로 설정하지 않으면 정확히 어떤 현상이 발생하는지에 대한 기술적 설명이나 오류 메시지에 대한 정보가 포함되어 있지 않습니다. 문서에서는 단순히 "유저 리소스와 복제한 MSW 리소스 모두 랩 모드를 Repeat로 설정해야 합니다"라고만 권장사항(Tip)으로 명시하고 있을 뿐, 설정하지 않았을 때의 구체적인 결과(예: 선이 끊어짐, 반복되지 않음, 오류 발생 등)를 설명하고 있지 않습니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 머티리얼의 SpritePattern 셰이더를 활용해 선을 그릴 수 있습니다. 머티리얼 활용 방법은 [머티리얼 활용하기](docs/?postId=828)를 참고하세요. LineRendererComponent에 활용하는 스프라이트로는 유저 리소스와 복제한 MSW 리소스를 사용할 수 있습니다. MSW 리소스 복제 방법은 [리소스 관리](docs/?postId=690)를 참고하세요. 1. **Workspace - MyDesk - Create Material**을 선택해 새로운 Material을 만듭니다. 2. 생성한 머티리얼의 프로퍼티

[task] | instruction_following [pass] | ⏳ 미판정 [title] | 다양한 선 그리기 [question] | TrailSpawner 컴포넌트에서 TrailEntity 생성 및 초기화 로직을 포함하는 Lua 코드만 출력하고 설명은 주석으로 작성하세요. [answer] | ```lua Property: [None] Entity TrailEntity = nil Method: [client only] void OnBeginPlay () { -- Trail 엔티티를 스폰합니다. -- 주의: 실제 프로젝트에서 사용할 Trail 모델의 ID로 교체해야 합니다. self.TrailEntity = _SpawnService:SpawnByModelId("8ae67c69-32ac-40e3-82b1-03d1409be467", "Trail", Vector3.zero, nil) -- [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 3. 새로운 TrailSpawner 컴포넌트를 생성하고, DefaultPlayer에 추가합니다. 4. TrailSpawner 컴포넌트에 움직임에 따라 선이 스폰되도록 `SpawnService`를 활용해 아래와 같이 작성합니다. SpawnByModelId에는 Trail의 ID를 입력해야합니다. 예시의 ID를 사용하면 정상 동작하지 않으므로 주의해 작성하세요. ```lua Property: [None] Entity TrailEntity = nil Method: [client

[task] | single_turn [pass] | ⏳ 미판정 [title] | RectTileMap에서 캐릭터 이동 제어 [question] | HandleRectTileEnterEvent의 파라미터로 Kinematicbody를 직접 받아 IsOnGround()를 확인하는데, 이 이벤트가 서버에서 실행되도록 [server]으로 변경하면 정상적으로 동작할까요? [answer] | 참고 문서에 제시된 `CheckSpeedBuffTile` 스크립트 예제에서 `HandleRectTileEnterEvent`는 `[client only]`로 선언되어 있습니다. 질문하신 대로 이벤트 핸들러의 실행 공간을 `[server]`으로 변경할 경우, **정상적으로 동작하지 않습니다.** 그 이유는 다음과 같습니다: 1. **이벤트 발생 공간 불일치**: `HandleRectTileEnterEvent`는 기본적으로 클라이언트 공간에서 발생하는 이벤트입니다. 문서의 예제에서도 이 핸들러가 `[client only]`로 지정 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 밟으면 속도가 증가하는 타일을 만들어 봅시다. 1. 타일맵 모드를 RectTile로 설정합니다. 2. 타일 셋 팔레트 좌측 상단의 **[+]** 버튼을 누른 뒤, **Create TileSet From Template - BnB** 타일 셋을 선택합니다. 3. 타일 셋의 이름을 **BnB TileSet**으로 설정합니다. 4. 타일 셋 팔레트 우측 상단의 편집 버튼을 눌러 타일 속성 편집 모드로 들어갑니다. 5. 편집 대상에서 **이동 가능 여부**를

[task] | single_turn [pass] | ⏳ 미판정 [title] | RectTileMap에서 캐릭터 이동 제어 [question] | KinematicbodyComponent의 IsOnGround() 메서드가 true를 반환하지 않는 경우 Trap 타일 충돌이 감지되지 않는 원인은 무엇일까요? [answer] | KinematicbodyComponent의 `IsOnGround()` 메서드가 `false`를 반환하여 Trap 타일 충돌이 감지되지 않는 주된 원인은 **타일 충돌(Tile Collision)이 비활성화되어 있기 때문**입니다. 제시된 `CheckTrapTile` 스크립트 로직을 살펴보면, `OnUpdate` 함수 내에서 다음과 같은 순서로 동작합니다. 1. `kb.EnableTileCollision = kb:IsOnGround()` 2. `if self.CurrentTileName == "Trap" and kb:IsOnG [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | ## 장애물 타일 피하기 점프로만 넘어갈 수 있는 장애물을 만들고, 장애물을 밟으면 캐릭터가 죽도록 설정해 봅시다. 1. 맵에 Trap 타일을 배치합니다. 2. **MyDesk** 아래에 새 스크립트 컴포넌트 **CheckTrapTile**를 만든 뒤, **DefaultPlayer**에 추가합니다. 3. 아래와 같이 **CheckTrapTile**을 작성합니다. ```lua Property: [None] string CurrentTileName = "" Met

[task] | two_turn [pass] | ⏳ 미판정 [title] | TweenLogic을 활용해 엔티티 제어하기 [question] | `RotateTo` 메서드를 사용할 때 회전 각도(`-1800 * _UtilLogic:RandomIntegerRange(95, 105)/100`)가 음수인 이유는 무엇이며, 이 값이 엔티티의 회전 방향에 미치는 영향은 어떻게 되나요? [answer] | `RotateTo` 메서드의 회전 각도 값이 음수인 이유는 **엔티티를 시계 반대 방향(반시계 방향)으로 회전시키기 위해서**입니다. 메이플스토리 월드의 mLua 환경에서 각도 값은 일반적으로 시계 방향을 양수(+)로, 시계 반대 방향을 음수(-)로 정의합니다. 따라서 코드에 있는 `-1800 * ...` 식은 엔티티가 시계 반대 방향으로 회전하도록 지시합니다. **엔티티의 회전 방향에 미치는 영향:** 1. **회전 방향:** 음수 값은 엔티티가 **시계 반대 방향**으로 회전하게 만듭니다. 만약 양수 값이었다면 시계 방향으 [followup] | `RotateTo`의 두 번째 인자인 목표 각도를 양수 값으로 변경했을 때 회전 방향이 어떻게 바뀌는지, 그리고 `EaseType.QuartEaseOut`을 `CubicEaseOut`으로 변경했을 때 회전 속도의 변화가 시각적으로 어떻게 나타나는지 비교해 주세요. [followup_answer] | `RotateTo` 메서드의 두 번째 인자인 목표 각도를 양수 값으로 변경하면 엔티티의 회전 방향이 **시계 방향**으로 바뀝니다. 기존에 음수 값으로 시계 반대 방향으로 회전하던 것과 정반대로, 엔티티가 시계 바늘이 도는 방향(오른쪽으로 도는 방향)으로 회전하게 됩니다. `EaseType.QuartEaseOut`을 `CubicEaseOut`으로 변경했을 때 회전 속도의 시각적 변화는 다음과 같습니다. 1. **초반 속도:** `QuartEaseOut`은 `CubicEaseOut`보다 곡률이 더 가파릅니다. 따라서 시작 시점( [scores] | [judge_reason] | [source_doc] | 높은 곳에서 공을 던졌을 때 공이 앞으로 나아감과 동시에 통통 튀게 만들어 봅시다. 1. 새로운 Model_Ball 모델을 생성합니다. TransformComponent, SpriteRendererComponent를 추가하고, 아래의 Ruid를 사용합니다. * SpriteRuid: d4dddd1f07d445939433f70cd1aa82fa 2. 새로운 BallComponent 생성하고, Model Ball에 추가합니다. 3. 공이 돌면서 날아가게 만들기 위해 `PlayTween()`과 `RotateTo()`를

[task] | code [pass] | ⏳ 미판정 [title] | RectTileMap에서 캐릭터 이동 제어 [question] | RectTileEnterEvent와 PlayerComponent를 사용하여 Trap 타일에 닿으면 ProcessDead를 호출하고, 지면 상태에서만 충돌을 활성화하는 로직을 구현하는 스크립트를 작성해줘 [answer] | RectTileEnterEvent와 PlayerComponent를 사용하여 Trap 타일에 닿으면 ProcessDead를 호출하고, 지면 상태에서만 충돌을 활성화하는 로직은 다음과 같이 구현할 수 있습니다. ```lua Property: [None] string CurrentTileName = "" Method: [client only] void OnUpdate(number delta) { local kb = self.Entity.KinematicbodyComponent -- 지면에 있을 때만 타일과 충돌합니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | ## 장애물 타일 피하기 점프로만 넘어갈 수 있는 장애물을 만들고, 장애물을 밟으면 캐릭터가 죽도록 설정해 봅시다. 1. 맵에 Trap 타일을 배치합니다. 2. **MyDesk** 아래에 새 스크립트 컴포넌트 **CheckTrapTile**를 만든 뒤, **DefaultPlayer**에 추가합니다. 3. 아래와 같이 **CheckTrapTile**을 작성합니다. ```lua Property: [None] string CurrentTileName = "" Met

[task] | single_turn [pass] | ⏳ 미판정 [title] | RectTileMap에서 캐릭터 이동 제어 [question] | RectTileEnterEvent 핸들러에서 타일 이름이 "Buff"인지 확인하고 있는데도 이벤트가 발화되지 않는 원인은 무엇일까요? [answer] | `RectTileEnterEvent`가 발화되지 않는 가장 흔한 원인은 **타일 셋(TileSet)에 해당 타일의 "이동 가능 여부"가 체크되어 있지 않기 때문**입니다. 문서에서 설명하는 바와 같이, `RectTileEnterEvent`는 캐릭터가 실제로 이동할 수 있는 타일(이동 가능 타일)에 진입할 때만 발생합니다. 타일 셋 편집 모드에서 해당 타일이 빨간색 화살표(이동 불가)로 설정되어 있다면, 캐릭터가 그 위에 서 있어도 물리적으로 타일 진입 이벤트가 트리거되지 않습니다. ### 해결 방법 1. **타일 셋 편집 모 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 밟으면 속도가 증가하는 타일을 만들어 봅시다. 1. 타일맵 모드를 RectTile로 설정합니다. 2. 타일 셋 팔레트 좌측 상단의 **[+]** 버튼을 누른 뒤, **Create TileSet From Template - BnB** 타일 셋을 선택합니다. 3. 타일 셋의 이름을 **BnB TileSet**으로 설정합니다. 4. 타일 셋 팔레트 우측 상단의 편집 버튼을 눌러 타일 속성 편집 모드로 들어갑니다. 5. 편집 대상에서 **이동 가능 여부**를

[task] | single_turn [pass] | ⏳ 미판정 [title] | 다양한 선 그리기 [question] | Points의 Color를 각 인덱스별로 다르게 지정하면 색이 자연스럽게 섞인다고 하는데, 이 '교차 지점'이 정확히 어떤 위치를 의미하나요? [answer] | LineRendererComponent의 Points 프로퍼티에서 각 점(인덱스)마다 다른 색상을 지정할 경우, 색이 자연스럽게 섞여 보이는 '교차 지점'은 **인접한 두 점(정점) 사이의 선 분절 구간**을 의미합니다. 구체적으로 설명하면 다음과 같습니다. 1. **선 분절 단위:** LineRendererComponent는 `Points`에 등록된 정점들을 순서대로 연결하여 선을 그립니다. 즉, 1번 점과 2번 점 사이, 2번 점과 3번 점 사이 각각이 하나의 선 분절이 됩니다. 2. **색상 혼합:** 1번 점에 빨간색 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 LineRendererComponent를 활용해 다양한 선을 월드에 자유롭게 그릴 수 있습니다. # LineRendererComponent LineRendererComponent는 점의 개수를 지정해 MapleTile, RectTile 위에서 원하는 직선, 곡선을 그릴 수 있습니다. LineRendererComponent 하나당 하나의 선을 그릴 수 있으므로, 여러 선을 표현하고 싶다면 여러 개의 LineRendererComponent가 포함된 엔티티를 사용해야 합니다. 주요 프로퍼티는 아래와 같습니다.

[task] | single_turn [pass] | ⏳ 미판정 [title] | 다양한 선 그리기 [question] | IsSmooth를 활성화했을 때 선이 매끄럽게 그려지지만, 2,000개 이상의 점 데이터를 넣으면 선이 끊겨 보이는 이유는 무엇인가요? [answer] | IsSmooth를 활성화했을 때 2,000개 이상의 점 데이터를 넣으면 선이 끊겨 보이는 이유는 LinePoints의 총 개수 제한 때문입니다. IsSmooth 옵션을 사용하게 되면 LineRendererComponent가 처리할 수 있는 LinePoints의 총 개수가 약 1,000개로 감소합니다. 따라서 2,000개 이상의 점 데이터를 입력하면 이 한도를 초과하여 일부 점들이 렌더링되지 않게 되고, 결과적으로 선이 끊어져 보이는 현상이 발생합니다. 이를 해결하기 위해서는 LinePoints의 개수를 약 1,000개 이내로 줄 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 머티리얼의 SpritePattern 셰이더를 활용해 선을 그릴 수 있습니다. 머티리얼 활용 방법은 [머티리얼 활용하기](docs/?postId=828)를 참고하세요. LineRendererComponent에 활용하는 스프라이트로는 유저 리소스와 복제한 MSW 리소스를 사용할 수 있습니다. MSW 리소스 복제 방법은 [리소스 관리](docs/?postId=690)를 참고하세요. 1. **Workspace - MyDesk - Create Material**을 선택해 새로운 Material을 만듭니다. 2. 생성한 머티리얼의 프로퍼티

[task] | code [pass] | ⏳ 미판정 [title] | RectTileMap에서 캐릭터 이동 제어 [question] | DefaultPlayer에 적용되는 CheckTrapTile 컴포넌트에서, RectTileEnterEvent 이벤트 핸들러를 통해 CurrentTileName 프로퍼티를 업데이트하고 이를 기반으로 점프 중이 아닐 때 사망을 판단하는 스크립트를 작성해줘 [answer] | 요청하신 `CheckTrapTile` 컴포넌트 스크립트는 `RectTileEnterEvent`를 통해 밟은 타일의 이름을 `CurrentTileName`에 저장하고, `OnUpdate`에서 지면에 있는 상태(`IsOnGround`)에서 `Trap` 타일인지 확인하여 사망 처리를 수행합니다. ```lua Property: [None] string CurrentTileName = "" Method: [client only] void OnUpdate(number delta) { local kb = self.Entity.Kine [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | ## 장애물 타일 피하기 점프로만 넘어갈 수 있는 장애물을 만들고, 장애물을 밟으면 캐릭터가 죽도록 설정해 봅시다. 1. 맵에 Trap 타일을 배치합니다. 2. **MyDesk** 아래에 새 스크립트 컴포넌트 **CheckTrapTile**를 만든 뒤, **DefaultPlayer**에 추가합니다. 3. 아래와 같이 **CheckTrapTile**을 작성합니다. ```lua Property: [None] string CurrentTileName = "" Met

[task] | code [pass] | ⏳ 미판정 [title] | 다양한 선 그리기 [question] | Entity의 TransformComponent.Position 값을 추적하며 LineRendererComponent에 실시간으로 좌표를 추가해 이동 경로가 선으로 표시되도록 하는 스크립트를 작성해줘 [answer] | 제공된 참고 문서에는 `LineRendererComponent`의 프로퍼티 이름, 좌표를 추가하는 메서드, 또는 좌표 배열을 조작하는 API에 대한 정보가 포함되어 있지 않습니다. 문서에는 `Size`, `Position`, `MaterialId`, `SpriteRUID`, `LinePoints`, `IsSmooth` 같은 용어가 언급되었을 뿐, 스크립트를 통해 좌표를 실시간으로 추가하는 구체적인 코딩 방법은 설명되어 있지 않습니다. 따라서 요청하신 기능(이동 경로 실시간 선 그리기)을 구현하는 정확한 mLua 코드를 작성할 수 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 머티리얼의 SpritePattern 셰이더를 활용해 선을 그릴 수 있습니다. 머티리얼 활용 방법은 [머티리얼 활용하기](docs/?postId=828)를 참고하세요. LineRendererComponent에 활용하는 스프라이트로는 유저 리소스와 복제한 MSW 리소스를 사용할 수 있습니다. MSW 리소스 복제 방법은 [리소스 관리](docs/?postId=690)를 참고하세요. 1. **Workspace - MyDesk - Create Material**을 선택해 새로운 Material을 만듭니다. 2. 생성한 머티리얼의 프로퍼티

[task] | single_turn [pass] | ⏳ 미판정 [title] | TweenLogic을 활용해 엔티티 제어하기 [question] | _TweenLogic:PlayTween()의 콜백 함수에서 self.posX를 직접 수정하는 방식과, TransformComponent.Position을 바로 변경하는 방식 중 어떤 것이 더 안정적이며 그 이유는 무엇인가요? [answer] | 참고 문서에 제시된 `TweenLogic` 활용 예제와 실제 mLua 코드 패턴을 분석하면, **콜백 함수에서 `self.posX`와 같은 로컬 프로퍼티를 수정하고, `OnUpdate`에서 `TransformComponent.Position`에 할당하는 방식**이 더 안정적입니다. 그 이유는 다음과 같습니다. ### 1. 프레임 동기화 및 일관성 유지 * **콜백의 비동기적 특성:** `_TweenLogic:PlayTween()`의 콜백 함수는 내부적으로 틴(tween) 처리가 이루어지는 시점에 호출됩니다. 만약 이 콜백 안 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 높은 곳에서 공을 던졌을 때 공이 앞으로 나아감과 동시에 통통 튀게 만들어 봅시다. 1. 새로운 Model_Ball 모델을 생성합니다. TransformComponent, SpriteRendererComponent를 추가하고, 아래의 Ruid를 사용합니다. * SpriteRuid: d4dddd1f07d445939433f70cd1aa82fa 2. 새로운 BallComponent 생성하고, Model Ball에 추가합니다. 3. 공이 돌면서 날아가게 만들기 위해 `PlayTween()`과 `RotateTo()`를

[task] | two_turn [pass] | ⏳ 미판정 [title] | RectTileMap에서 캐릭터 이동 제어 [question] | RectTileMap에서 사각형 타일맵과 캐릭터의 충돌을 제어하는 EnableTileCollision 프로퍼티가 True일 때, 캐릭터가 벽이나 바닥과 상호작용하는 충돌 처리 로직은 어떻게 동작하나요? [answer] | RectTileMap 환경에서 `KinematicbodyComponent`의 `EnableTileCollision` 프로퍼티가 `True`로 설정되면, 해당 컴포넌트는 사각형 타일맵(RectTileMap)과의 충돌을 활성화합니다. 문서에 제공된 정보에 따르면, 이 프로퍼티가 `True`일 때의 구체적인 내부 충돌 처리 로직(예: 충돌 감지 방식, 충돌 시 속도 변경 계산식, 벽면 슬라이딩 상세 알고리즘 등)은 명시되어 있지 않습니다. 문서에서는 해당 프로퍼티의 역할이 "사각형 타일맵과 충돌한다"는 사실과, `Kinematicbod [followup] | EnableTileCollision이 True인 상태에서 KinematicbodyComponent의 Enable 프로퍼티만 False로 변경하면 캐릭터의 물리적 충돌이 즉시 해제되는지, 아니면 다른 컴포넌트나 스크립트 로직에 의해 영향을 받을 수 있는지 구체적으로 설명해 주세요. [followup_answer] | 제공된 문서에는 `KinematicbodyComponent`의 `Enable` 프로퍼티가 `False`로 설정되었을 때 `EnableTileCollision`과 같은 다른 프로퍼티의 충돌 처리가 즉시 해제되는지, 혹은 다른 컴포넌트나 스크립트 로직에 의해 어떻게 영향을 받는지에 대한 구체적인 동작 원리나 상호작용 정보가 포함되어 있지 않습니다. 문서에서는 `Enable` 프로퍼티에 대해 "True면 KinematicbodyComponent를 활성화합니다"라고만 설명하고 있으며, `False` 상태에서의 세부적인 물리적 동작(충돌 [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 RectTileMap에서는 KinematicbodyComponent로 캐릭터의 이동을 제어합니다. 크리에이터는 KinematicbodyComponent를 통해 캐릭터를 2차원 평면에서 자유롭게 움직이고 점프하게 할 수 있습니다. 또한 그림자를 그릴 수도 있습니다. 이번 시간에는 KinematicbodyComponent에 대해 알아보고 간단한 예제를 통해 활용법을 살펴봅시다. ##### 참고 API Reference [KinematicbodyComponent](/apiReference/Components/Ki

[task] | single_turn [pass] | ⏳ 미판정 [title] | 다양한 선 그리기 [question] | LineRendererComponent에 유저 리소스를 적용할 때, 머티리얼의 SpriteRUID 값은 어떻게 지정해야 하나요? [answer] | LineRendererComponent에 유저 리소스를 적용할 때, 머티리얼의 `SpriteRUID` 값은 다음과 같은 절차에 따라 지정해야 합니다. 1. **머티리얼 생성 및 셰이더 선택**: Workspace에서 `MyDesk` > `Create Material`을 선택해 새로운 머티리얼을 생성합니다. 생성한 머티리얼의 프로퍼티 창에서 **Shader**를 **LineRenderer - SpritePattern**으로 설정합니다. 2. **SpriteRUID 지정**: 머티리얼 프로퍼티의 **SpriteRUID** 항목에서 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 머티리얼의 SpritePattern 셰이더를 활용해 선을 그릴 수 있습니다. 머티리얼 활용 방법은 [머티리얼 활용하기](docs/?postId=828)를 참고하세요. LineRendererComponent에 활용하는 스프라이트로는 유저 리소스와 복제한 MSW 리소스를 사용할 수 있습니다. MSW 리소스 복제 방법은 [리소스 관리](docs/?postId=690)를 참고하세요. 1. **Workspace - MyDesk - Create Material**을 선택해 새로운 Material을 만듭니다. 2. 생성한 머티리얼의 프로퍼티

[task] | two_turn [pass] | ⏳ 미판정 [title] | 다양한 선 그리기 [question] | TrailSpawner 컴포넌트에서 SpawnService를 활용해 움직임에 따라 선을 스폰하는 기본 원리는 무엇인가요? [answer] | TrailSpawner 컴포넌트에서 움직임에 따라 선(Trail)을 스폰하는 기본 원리는 다음과 같습니다. 1. **Trail 엔티티 생성**: `OnBeginPlay` 시점에 `_SpawnService:SpawnByModelId`를 호출하여 사전에 정의된 Trail 모델 ID를 가진 엔티티를 생성합니다. 이때 생성된 엔티티는 `self.TrailEntity` 프로퍼티에 저장됩니다. 2. **대상 엔티티 연결 (Init)**: 생성된 Trail 엔티티에 포함된 `TrailDrawer` 컴포넌트의 `Init` 메서드를 호출합니다 [followup] | 예제 코드의 TrailDrawer:Init(self.Entity) 호출이 왜 필요하며, SpawnByModelId의 첫 번째 인자로 사용할 Trail ID가 올바르지 않을 경우 어떤 문제가 발생하나요? [followup_answer] | **TrailDrawer:Init(self.Entity) 호출의 필요성** `TrailDrawer:Init(self.Entity)` 호출은 생성된 Trail 엔티티가 **어떤 객체의 움직임을 따라야 하는지**를 지정하기 위해 필요합니다. `SpawnByModelId`로 생성된 Trail 엔티티 자체는 단순히 모델이 스폰된 상태일 뿐이며, `TrailDrawer` 컴포넌트의 `Init` 메서드에 `self.Entity`(즉, TrailSpawner 컴포넌트가 붙어 있는 플레이어 엔티티)를 인자로 전달해야만 해당 엔티티의 위치 변화를 [scores] | [judge_reason] | [source_doc] | 3. 새로운 TrailSpawner 컴포넌트를 생성하고, DefaultPlayer에 추가합니다. 4. TrailSpawner 컴포넌트에 움직임에 따라 선이 스폰되도록 `SpawnService`를 활용해 아래와 같이 작성합니다. SpawnByModelId에는 Trail의 ID를 입력해야합니다. 예시의 ID를 사용하면 정상 동작하지 않으므로 주의해 작성하세요. ```lua Property: [None] Entity TrailEntity = nil Method: [client

[task] | code [pass] | ⏳ 미판정 [title] | 다양한 선 그리기 [question] | DefaultPlayer에 추가할 TrailSpawner 컴포넌트를 작성하되, Property 블록에 [None] Entity TrailEntity = nil을 선언하고, Method 블록의 [client only] OnBeginPlay()에서 _SpawnService:SpawnByModelId로 지정된 Trail ID를 사용해 엔티티를 생성한 뒤 self.TrailEntity.TrailDrawer:Init(self.Entity)를 호출하며, OnEndPlay()에서 self.TrailEntity가 nil이 아니면 Destroy() [answer] | DefaultPlayer에 추가할 TrailSpawner 컴포넌트 스크립트입니다. ```lua Property: [None] Entity TrailEntity = nil Method: [client only] void OnBeginPlay() { self.TrailEntity = _SpawnService:SpawnByModelId("8ae67c69-32ac-40e3-82b1-03d1409be467", "Trail", Vector3.zero, nil) self.TrailEntity.TrailDrawer:Init(se [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 3. 새로운 TrailSpawner 컴포넌트를 생성하고, DefaultPlayer에 추가합니다. 4. TrailSpawner 컴포넌트에 움직임에 따라 선이 스폰되도록 `SpawnService`를 활용해 아래와 같이 작성합니다. SpawnByModelId에는 Trail의 ID를 입력해야합니다. 예시의 ID를 사용하면 정상 동작하지 않으므로 주의해 작성하세요. ```lua Property: [None] Entity TrailEntity = nil Method: [client

[task] | code [pass] | ⏳ 미판정 [title] | RectTileMap에서 캐릭터 이동 제어 [question] | KinematicbodyComponent와 RectTileEnterEvent를 활용하여 특정 타일 이름을 밟으면 즉시 사망 처리하는 CheckTrapTile 스크립트를 작성해줘 [answer] | KinematicbodyComponent와 RectTileEnterEvent를 활용하여 특정 타일 이름을 밟으면 즉시 사망 처리하는 CheckTrapTile 스크립트는 다음과 같습니다. 1. **MyDesk** 아래에 **CheckTrapTile** 스크립트 컴포넌트를 생성합니다. 2. **DefaultPlayer**에 해당 컴포넌트를 추가합니다. 3. 아래 코드를 **CheckTrapTile**에 입력합니다. ```lua Property: [None] string CurrentTileName = "" Method: [clie [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | ## 장애물 타일 피하기 점프로만 넘어갈 수 있는 장애물을 만들고, 장애물을 밟으면 캐릭터가 죽도록 설정해 봅시다. 1. 맵에 Trap 타일을 배치합니다. 2. **MyDesk** 아래에 새 스크립트 컴포넌트 **CheckTrapTile**를 만든 뒤, **DefaultPlayer**에 추가합니다. 3. 아래와 같이 **CheckTrapTile**을 작성합니다. ```lua Property: [None] string CurrentTileName = "" Met

[task] | code [pass] | ⏳ 미판정 [title] | RectTileMap에서 캐릭터 이동 제어 [question] | KinematicbodyComponent의 IsOnGround 메서드와 RectTileEnterEvent의 TileInfo.Name을 조합해, 현재 밟고 있는 타일 이름이 'Trap'일 때만 사망을 처리하는 OnUpdate 로직을 작성해줘 [answer] | 요청하신 로직은 `KinematicbodyComponent`의 `IsOnGround()` 메서드와 `RectTileEnterEvent`에서 전달되는 `TileInfo.Name`을 조합하여 구현합니다. 1. **Property**: 현재 밟고 있는 타일의 이름을 저장하기 위한 `string` 타입의 프로퍼티 `CurrentTileName`을 선언합니다. 2. **Event Handler**: `HandleRectTileEnterEvent`를 통해 캐릭터가 타일에 진입할 때마다 `event.TileInfo.Name`을 `self. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | ## 장애물 타일 피하기 점프로만 넘어갈 수 있는 장애물을 만들고, 장애물을 밟으면 캐릭터가 죽도록 설정해 봅시다. 1. 맵에 Trap 타일을 배치합니다. 2. **MyDesk** 아래에 새 스크립트 컴포넌트 **CheckTrapTile**를 만든 뒤, **DefaultPlayer**에 추가합니다. 3. 아래와 같이 **CheckTrapTile**을 작성합니다. ```lua Property: [None] string CurrentTileName = "" Met

[task] | code [pass] | ⏳ 미판정 [title] | 다양한 선 그리기 [question] | _LineRendererComponent_의 LinePoints 배열 길이를 모니터링하여 10,000개 제한에 도달하면 가장 오래된 점을 제거하고 새 점을 추가하는 로직을 구현하는 스크립트를 작성해줘 [answer] | LineRendererComponent의 LinePoints 배열 길이와 직접적인 조작(추가/제거)에 대한 mLua API 명세(예: `AddPoint`, `RemovePoint`, `LinePoints` 배열의 직접 인덱스 접근 등)가 제공된 문서에 포함되어 있지 않습니다. 문서에는 **LinePoints 수가 10,000개를 넘으면 그 이후의 점들은 선이 그려지지 않는다**는 제한 사항만 명시되어 있을 뿐, 스크립트를 통해 `LinePoints` 배열의 크기를 조회하거나 요소를 수정하는 구체적인 메서드나 프로퍼티 접근 방식에 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 머티리얼의 SpritePattern 셰이더를 활용해 선을 그릴 수 있습니다. 머티리얼 활용 방법은 [머티리얼 활용하기](docs/?postId=828)를 참고하세요. LineRendererComponent에 활용하는 스프라이트로는 유저 리소스와 복제한 MSW 리소스를 사용할 수 있습니다. MSW 리소스 복제 방법은 [리소스 관리](docs/?postId=690)를 참고하세요. 1. **Workspace - MyDesk - Create Material**을 선택해 새로운 Material을 만듭니다. 2. 생성한 머티리얼의 프로퍼티

[task] | two_turn [pass] | ⏳ 미판정 [title] | TweenLogic을 활용해 엔티티 제어하기 [question] | `BounceEaseOut` 이징을 적용할 때 공이 바닥에 닿고 튀는 효과를 위해 `yDestination` 값을 어떻게 설정해야 하며, 이 값이 0.3인 경우의 동작은 어떻게 되나요? [answer] | `BounceEaseOut` 이징을 적용할 때 `yDestination` 값은 공이 최종적으로 도달해야 할 Y 좌표(바닥 높이)를 지정하는 데 사용됩니다. 이 값이 0.3인 경우의 동작은 다음과 같습니다. 1. **초기 위치**: `OnBeginPlay()`에서 `self.posY`는 엔티티의 현재 `TransformComponent.Position.y` 값으로 초기화됩니다. 2. **타겟 위치**: `yDestination`이 0.3으로 설정되어 있으므로, 투인(Tween)은 `self.posY` 값을 현재 위치에서 0.3으 [followup] | `yDestination`을 0.3으로 고정했을 때, 공이 최종적으로 0.3 높이에서 정지하는지 아니면 0.3까지 내려왔다가 다시 튀어 오르는지, 그리고 `OnUpdate`에서 Z 좌표를 `transform.Position.z`로 유지하는 이유에 대한 설명을 해주세요. [followup_answer] | `yDestination`을 0.3으로 고정했을 때의 동작과 `OnUpdate`에서 Z 좌표를 유지하는 이유는 다음과 같습니다. **1. `yDestination = 0.3`인 경우의 최종 동작** `EaseType.BounceEaseOut` 이징은 "아웃(Out)" 계열이므로, 시작점(높은 곳)에서 끝점(0.3)으로 이동할 때 초반에는 빠르게 이동하다가 **끝점(0.3)에 가까워질수록 여러 번 튀어 오르는(Bounce) 효과를 내며 최종적으로 0.3에서 정지**합니다. 즉, 공은 0.3까지 내려왔다가 다시 튀어 올랐다가 다시 0 [scores] | [judge_reason] | [source_doc] | 높은 곳에서 공을 던졌을 때 공이 앞으로 나아감과 동시에 통통 튀게 만들어 봅시다. 1. 새로운 Model_Ball 모델을 생성합니다. TransformComponent, SpriteRendererComponent를 추가하고, 아래의 Ruid를 사용합니다. * SpriteRuid: d4dddd1f07d445939433f70cd1aa82fa 2. 새로운 BallComponent 생성하고, Model Ball에 추가합니다. 3. 공이 돌면서 날아가게 만들기 위해 `PlayTween()`과 `RotateTo()`를

[task] | code [pass] | ⏳ 미판정 [title] | RectTileMap에서 캐릭터 이동 제어 [question] | HandleRectTileEnterEvent 이벤트에서 TileInfo.Name이 "Buff"일 때만 log()로 "Buff applied"를 출력하고, "Trap"일 경우 "Trap hit"를 출력하는 TileEventLogger 스크립트를 작성해줘 [answer] | `HandleRectTileEnterEvent` 이벤트 핸들러는 `[client only]` 실행 공간에서만 사용할 수 있습니다. 요청하신 `TileEventLogger` 스크립트는 `TileInfo.Name` 값을 확인하여 각각 "Buff applied" 또는 "Trap hit"를 `log()`로 출력하도록 작성합니다. ```lua Event Handler: [client only] HandleRectTileEnterEvent(RectTileEnterEvent event) { -- Parameters local K [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 밟으면 속도가 증가하는 타일을 만들어 봅시다. 1. 타일맵 모드를 RectTile로 설정합니다. 2. 타일 셋 팔레트 좌측 상단의 **[+]** 버튼을 누른 뒤, **Create TileSet From Template - BnB** 타일 셋을 선택합니다. 3. 타일 셋의 이름을 **BnB TileSet**으로 설정합니다. 4. 타일 셋 팔레트 우측 상단의 편집 버튼을 눌러 타일 속성 편집 모드로 들어갑니다. 5. 편집 대상에서 **이동 가능 여부**를

[task] | two_turn [pass] | ⏳ 미판정 [title] | RectTileMap에서 캐릭터 이동 제어 [question] | 문서에 제시된 `CheckSpeedBuffTile` 스크립트에서 `IncreaseSpeedFactor` 메서드가 `[server]`로 선언되어 있지만, 이벤트 핸들러가 `[client only]`로 선언된 이유는 무엇인가요? [answer] | 참고 문서에 제시된 `CheckSpeedBuffTile` 스크립트에서 이벤트 핸들러가 `[client only]`로 선언된 이유는 **문서에 명시되지 않았습니다.** 문서에는 해당 스크립트의 코드만 제시되어 있을 뿐, `HandleRectTileEnterEvent` 이벤트 핸들러가 `[client only]`로 설정된 구체적인 이유나 설계 의도에 대한 설명은 포함되어 있지 않습니다. 또한, `[client only]` 공간에서 실행되는 이벤트 핸들러가 `[server]` 공간의 메서드(`IncreaseSpeedFactor`)를 호 [followup] | `[server]` 메서드를 `[client only]` 이벤트 핸들러에서 직접 호출할 수 있는지, 아니면 다른 방식으로 서버에 요청을 보내야 하는지 구체적인 코드 수정 예시를 보여주세요. [followup_answer] | 참고 문서에는 `[client only]` 이벤트 핸들러에서 `[server]` 메서드를 직접 호출할 수 있는지 여부에 대한 설명이 없으며, 서버에 요청을 보내는 다른 방식(예: RPC, 서비스 메서드 등)에 대한 코드 예제도 포함되어 있지 않습니다. 문서에 제시된 `CheckSpeedBuffTile` 스크립트에서는 `[client only]`로 선언된 `HandleRectTileEnterEvent` 이벤트 핸들러 내부에서 `[server]`로 선언된 `self:IncreaseSpeedFactor()`를 직접 호출하는 코드가 그대 [scores] | [judge_reason] | [source_doc] | 밟으면 속도가 증가하는 타일을 만들어 봅시다. 1. 타일맵 모드를 RectTile로 설정합니다. 2. 타일 셋 팔레트 좌측 상단의 **[+]** 버튼을 누른 뒤, **Create TileSet From Template - BnB** 타일 셋을 선택합니다. 3. 타일 셋의 이름을 **BnB TileSet**으로 설정합니다. 4. 타일 셋 팔레트 우측 상단의 편집 버튼을 눌러 타일 속성 편집 모드로 들어갑니다. 5. 편집 대상에서 **이동 가능 여부**를

[task] | code [pass] | ⏳ 미판정 [title] | RectTileMap에서 캐릭터 이동 제어 [question] | RectTileEnterEvent 이벤트 핸들러를 사용하여 TileInfo.Name이 "Trap"인 타일을 밟으면 KinematicbodyComponent의 SpeedFactor를 1 감소시키는 CheckSpeedTrapTile 스크립트를 작성해줘 [answer] | RectTileEnterEvent 이벤트 핸들러에서 타일 이름이 "Trap"인지 확인하고, 캐릭터가 지면에 있는 경우에만 `KinematicbodyComponent`의 `SpeedFactor`를 감소시키는 로직을 구현할 수 있습니다. 참고 문서의 `CheckSpeedBuffTile` 예제와 동일한 구조를 따르되, 타일 이름 조건을 "Trap"으로 변경하고 `SpeedFactor` 값을 1 감소시키는 메서드를 추가하는 방식으로 작성합니다. ```lua Method: [server] void DecreaseSpeedFactor() [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 밟으면 속도가 증가하는 타일을 만들어 봅시다. 1. 타일맵 모드를 RectTile로 설정합니다. 2. 타일 셋 팔레트 좌측 상단의 **[+]** 버튼을 누른 뒤, **Create TileSet From Template - BnB** 타일 셋을 선택합니다. 3. 타일 셋의 이름을 **BnB TileSet**으로 설정합니다. 4. 타일 셋 팔레트 우측 상단의 편집 버튼을 눌러 타일 속성 편집 모드로 들어갑니다. 5. 편집 대상에서 **이동 가능 여부**를

[task] | two_turn [pass] | ⏳ 미판정 [title] | RectTileMap에서 캐릭터 이동 제어 [question] | 점프 동작 시 JumpSpeed와 JumpDrag 프로퍼티가 각각 캐릭터의 어떤 물리 동작에 영향을 주며, 이 두 값을 조합하여 높은 점프와 빠른 착지를 동시에 구현하기 위한 설정 방향은 어떻게 되나요? [answer] | RectTileMap에서 `KinematicbodyComponent`의 점프 동작은 `JumpSpeed`와 `JumpDrag` 프로퍼티에 의해 결정됩니다. **1. 프로퍼티별 영향** * **JumpSpeed**: 캐릭터가 점프를 시작할 때 수직 방향으로 튀어 오르는 초기 속력을 조절합니다. 이 값이 클수록 캐릭터는 더 높은 위치까지 점프합니다. * **JumpDrag**: 점프 중이나 낙하 시 캐릭터의 수직 속력이 감소하는 정도(감쇠량)를 조절합니다. 이 값이 클수록 중력 가속 효과가 강해져 지면에 더 빨리 떨어집니다. [followup] | EnableJump가 False로 설정된 상태에서 JumpSpeed 값을 변경했을 때 발생하는 예외 상황이나 에러가 있는지, 그리고 점프 기능 비활성화 시 관련 프로퍼티들이 무시되는지 확인해 주세요. [followup_answer] | 제공된 참고 문서에는 `EnableJump`가 `False`로 설정된 상태에서 `JumpSpeed` 등 다른 점프 관련 프로퍼티를 변경했을 때 발생하는 구체적인 예외 상황이나 에러, 그리고 해당 프로퍼티들이 무시되는지에 대한 기술이 없습니다. 문서에는 각 프로퍼티의 기본 기능 설명만 포함되어 있으며, 프로퍼티 간 의존성이나 비활성화 상태에서의 동작 방식에 대한 정보는 없습니다. [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 RectTileMap에서는 KinematicbodyComponent로 캐릭터의 이동을 제어합니다. 크리에이터는 KinematicbodyComponent를 통해 캐릭터를 2차원 평면에서 자유롭게 움직이고 점프하게 할 수 있습니다. 또한 그림자를 그릴 수도 있습니다. 이번 시간에는 KinematicbodyComponent에 대해 알아보고 간단한 예제를 통해 활용법을 살펴봅시다. ##### 참고 API Reference [KinematicbodyComponent](/apiReference/Components/Ki

[task] | single_turn [pass] | ⏳ 미판정 [title] | 다양한 선 그리기 [question] | SyncTable 타입인 PointLives에서 데이터를 삭제할 때, LineRendererComponent의 Points와 항상 같은 인덱스로 삭제해야 하는 이유와 동기화 원리가 궁금합니다. [answer] | 제시된 참고 문서에는 `SyncTable<number> PointLives`와 `LineRendererComponent.Points`의 인덱스 동기화 메커니즘이나 그 이유에 대한 기술적 설명이 포함되어 있지 않습니다. 문서에서는 단순히 `RemovePointAt` 메서드 내에서 `table.remove(self.PointLives, idx)`와 `self.Entity.LineRendererComponent.Points:RemoveAt(idx)`를 동일한 인덱스(`idx`)로 호출하는 코드 예제만 제시하고 있을 뿐, 이 두 데이터 [followup] | [followup_answer] | [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] | LineRendererComponent 하나당 선 하나만 그릴 수 있다는데, 여러 선을 동시에 표현하려면 엔티티 구조를 어떻게 짜야 하나요? [answer] | LineRendererComponent는 하나의 인스턴스당 하나의 선만 표현할 수 있습니다. 따라서 여러 개의 선을 동시에 그리고 싶다면, 각 선을 담당할 LineRendererComponent가 각각 포함된 엔티티를 생성해야 합니다. 가장 일반적인 구조는 하나의 부모 엔티티(EmptyEntity)를 만들고, 자식으로 LineRendererComponent가 달린 여러 개의 자식 엔티티를 배치하는 방식입니다. 1. **부모 엔티티 생성**: 모든 선을 묶어 관리하기 위해 `EmptyEntity`를 하나 생성합니다. 2. **자식 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 LineRendererComponent를 활용해 다양한 선을 월드에 자유롭게 그릴 수 있습니다. # LineRendererComponent LineRendererComponent는 점의 개수를 지정해 MapleTile, RectTile 위에서 원하는 직선, 곡선을 그릴 수 있습니다. LineRendererComponent 하나당 하나의 선을 그릴 수 있으므로, 여러 선을 표현하고 싶다면 여러 개의 LineRendererComponent가 포함된 엔티티를 사용해야 합니다. 주요 프로퍼티는 아래와 같습니다.

[task] | single_turn [pass] | ⏳ 미판정 [title] | 다양한 선 그리기 [question] | LineRendererComponent의 Points를 직접 관리할 때, 선이 그려지는 방향이나 연결 순서가 어떻게 결정되는지 알고 싶습니다. [answer] | 제공된 참고 문서에는 `LineRendererComponent`의 `Points`를 직접 관리할 때 선이 그려지는 방향이나 연결 순서를 결정하는 구체적인 규칙(예: "0번 지점부터 1번 지점으로 연결한다" 또는 "추가 순서대로 연결된다"는 명시적 설명)이 포함되어 있지 않습니다. 문서에는 `AddPoint` 메서드에서 `line.Points:Add(LinePoint(...))`를 호출하여 지점을 추가하고, `RemovePointAt` 메서드에서 `Points:RemoveAt(idx)`를 호출하여 지점을 삭제하는 코드 예시만 제시되 [followup] | [followup_answer] | [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] | instruction_following [pass] | ⏳ 미판정 [title] | 메이플 이동 개념 이해하기 [question] | RigidbodyComponent에서 WalkAcceleration, WalkDrag, WalkSlant 프로퍼티가 플레이어 캐릭터의 이동에 어떻게 관여하는지 3문장 이내로 설명해 주세요. [answer] | RigidbodyComponent의 WalkAcceleration, WalkDrag, WalkSlant는 플레이어 캐릭터가 이동하는 동안 가속도 운동을 수행할 때 관여하는 이동 속성 프로퍼티입니다. 이 프로퍼티들은 RigidbodyComponent 자체와 지형의 이동 속성 모두에 영향을 미칩니다. 따라서 플레이어의 이동 거동은 이 두 요소가 함께 작용하여 결정됩니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 월드 제작에 필수적인 이동 방식 중 메이플스토리 이동 방식을 따르는 RigidbodyComponent 특성을 알아봅시다. 이동은 [메이플 타일 맵 만들기](/docs?postId=747)와 함께 학습하기 권장합니다. # 메이플스토리 이동 방식 RigidbodyComponent는 메이플스토리 이동 방식처럼 이동하고자 할 때 사용합니다. 이동 방식은 지형 종류와 밀접한 연관이 있기에 TileMapComponent를 함께 사용해 메이플스토리식 이동 방식을 만들 수 있습니다. 이때 타일 위에서 이동은 Rigidbo

[task] | code [pass] | ⏳ 미판정 [title] | RectTileMap에서 캐릭터 이동 제어 [question] | OnBeginPlay()에서 self.Entity.KinematicbodyComponent의 SpeedFactor를 초기화하고, RectTileEnterEvent를 통해 "Buff" 타일을 밟을 때마다 SpeedFactor의 x, y 값을 각각 0.5씩 증가시키되 최대 5를 넘지 않도록 제한하는 CappedSpeedBuff 스크립트를 작성해줘 [answer] | 요청하신 `CappedSpeedBuff` 스크립트는 `OnBeginPlay()`에서 `SpeedFactor`를 초기화하고, `RectTileEnterEvent`에서 "Buff" 타일을 밟을 때 `SpeedFactor`의 x, y 값을 각각 0.5씩 증가시키되 5를 초과하지 않도록 제한하는 로직으로 구성됩니다. ```lua Method: [server only] void OnBeginPlay() { -- SpeedFactor 초기화 (예: 기본값 1, 1) local kb = self.Entity.Kinematicbo [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 밟으면 속도가 증가하는 타일을 만들어 봅시다. 1. 타일맵 모드를 RectTile로 설정합니다. 2. 타일 셋 팔레트 좌측 상단의 **[+]** 버튼을 누른 뒤, **Create TileSet From Template - BnB** 타일 셋을 선택합니다. 3. 타일 셋의 이름을 **BnB TileSet**으로 설정합니다. 4. 타일 셋 팔레트 우측 상단의 편집 버튼을 눌러 타일 속성 편집 모드로 들어갑니다. 5. 편집 대상에서 **이동 가능 여부**를

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