← 목록

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

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

[task] | code [pass] | ⏳ 미판정 [title] | 다양한 선 그리기 [question] | _UtilLogic:RandomDouble()을 호출하여 RGB 값을 생성하고, Vector2 좌표로 변환한 뒤 LinePoint 객체에 Color와 함께 담아 LineRendererComponent.Points에 추가하는 AddPoint 메서드를 작성해줘. [answer] | `AddPoint` 메서드는 주어진 `Vector3` 위치를 2D 좌표로 변환하고, `_UtilLogic:RandomDouble()`을 통해 0~1 사이의 무작위 RGB 값을 생성한 뒤 `Color` 객체를 만듭니다. 이후 이 좌표와 색상, 선 두께(1)를 인자로 받아 `LinePoint` 객체를 생성하고 `LineRendererComponent.Points`에 추가하는 로직으로 구성됩니다. ```lua void AddPoint(Vector3 pos) { local line = self.Entity.LineRendererC [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] | AddPoint에서 Vector2로 변환할 때 pos.y + 0.25를 더하는 이유는 무엇이며, 이 오프셋을 변경했을 때 선과 모델의 위치 관계가 어떻게 달라지나요? [answer] | `AddPoint` 메서드에서 `pos.y + 0.25`를 더하는 이유는 **모델(Trail)의 기준점(Origin)과 실제 선이 그려지는 지점 간의 시각적 정렬**을 위해서입니다. 메이플스토리 월드에서 `TransformComponent.WorldPosition`은 해당 엔티티의 로컬 원점(0,0,0) 위치를 나타냅니다. 많은 경우, 스프라이트나 모델의 시각적 중심(예: 캐릭터의 발끝 또는 몸통 중앙)이 원점과 정확히 일치하지 않거나, 선이 모델에 "겹쳐서" 보이지 않고 자연스럽게 "뒤를 따라가는" 효과를 주기 위해 미세한 Y축 [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] | TrailSpawner 스크립트에서 OnBeginPlay에 [client only] 실행 공간 속성이 붙어 있는 이유는 서버에서도 동일한 처리가 필요하지 않은가요? [answer] | TrailSpawner 스크립트에서 `OnBeginPlay`에 `[client only]` 실행 공간 속성이 붙어 있는 이유는, 해당 스크립트에서 사용하는 `_SpawnService:SpawnByModelId` 메서드가 클라이언트(플레이어 화면)에서만 동작하기 때문입니다. 참고 문서의 예제 코드를 보면, 선(Trail)을 스폰하는 로직이 클라이언트에서만 실행되도록 지정되어 있습니다. 이는 시각적 효과인 '선 그리기'가 서버에서 계산되는 물리 상태나 데이터 동기화 대상이 아니라, 각 플레이자의 클라이언트 화면에 직접 렌더링되어야 하 [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] | two_turn [pass] | ⏳ 미판정 [title] | RectTileMap에서 캐릭터 이동 제어 [question] | `Buff` 타일 외에 속도를 감소시키거나 특수 효과를 주는 `Trap` 타일을 추가하고 싶다면 `HandleRectTileEnterEvent`를 어떻게 수정해야 하나요? [answer] | `Trap` 타일은 이미 문서에서 `Buff`와 동일한 `Buff TileSet` 안에 추가하도록 안내되어 있으며, 타일 이름은 `Trap`으로 설정됩니다. 따라서 `HandleRectTileEnterEvent` 핸들러에서 `TileInfo.Name`이 `"Trap"`인 경우를 분기 처리하여 원하는 효과를 적용하면 됩니다. 문서에 따르면 `Trap` 타일에 적용할 구체적인 효과(속도 감소 등)를 정의하는 API나 로직은 제공되지 않습니다. 따라서 예제에서는 `Buff`와 대칭적으로 `SpeedFactor`를 감소시키는 방식을 제안 [followup] | `Trap` 타일을 밟았을 때 `SpeedFactor`를 초기값으로 되돌리거나 감소시키는 로직을 포함하여, `Buff`와 `Trap`을 동시에 처리하는 완성된 스크립트 코드를 작성해 주세요. [followup_answer] | 문서에 제공된 `IncreaseSpeedFactor` 메서드를 기반으로, `Trap` 타일에서 속도를 초기값으로 되돌리는 로직을 추가한 완성된 스크립트입니다. `SpeedFactor`의 초기값(기본값)은 문서에 명시되어 있지 않으므로, 일반적으로 1.0(기본 이동 속도 배율)을 초기값으로 가정하여 `Vector2(1, 1)`으로 리셋하는 방식을 적용했습니다. 만약 프로젝트에서 초기값이 다른 경우라면 해당 값으로 수정해야 합니다. ```lua Method: [server] void IncreaseSpeedFactor() { [scores] | [judge_reason] | [source_doc] | 밟으면 속도가 증가하는 타일을 만들어 봅시다. 1. 타일맵 모드를 RectTile로 설정합니다. 2. 타일 셋 팔레트 좌측 상단의 **[+]** 버튼을 누른 뒤, **Create TileSet From Template - BnB** 타일 셋을 선택합니다. 3. 타일 셋의 이름을 **BnB TileSet**으로 설정합니다. 4. 타일 셋 팔레트 우측 상단의 편집 버튼을 눌러 타일 속성 편집 모드로 들어갑니다. 5. 편집 대상에서 **이동 가능 여부**를

[task] | single_turn [pass] | ⏳ 미판정 [title] | 다양한 선 그리기 [question] | SpawnByModelId에서 사용된 Trail의 ID가 예시 코드와 다르면 어떤 문제가 발생하며, 올바른 ID는 어디서 확인해야 하나요? [answer] | `SpawnByModelId` 메서드의 첫 번째 인수로 전달되는 Trail ID가 실제 에디터에 존재하지 않거나 잘못된 값이라면, 해당 ID에 해당하는 모델을 찾을 수 없어 **Trail 엔티티가 정상적으로 스폰되지 않습니다.** 문서에서는 "예시의 ID를 사용하면 정상 동작하지 않으므로 주의해 작성하세요"라고 명시하고 있습니다. 즉, 코드에 있는 특정 UUID(`"8ae67c69-32ac-40e3-82b1-03d1409be467"`)는 단순히 형식을 보여주는 예시일 뿐이며, 이를 그대로 복사하여 사용하면 실행 시 오류나 비활성 [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] | two_turn [pass] | ⏳ 미판정 [title] | 다양한 선 그리기 [question] | 곡선으로 모양을 그리기 위해 Points 4개와 IsSmooth, Loop를 함께 사용하는 예시를 보여주며, 머티리얼을 사용해 선을 그리는 방법에 대해 자세히 설명해 주세요. [answer] | LineRendererComponent를 활용해 곡선으로 모양을 그리고 머티리얼(색상)을 사용해 선을 그리는 방법은 다음과 같습니다. ### 1. 곡선으로 모양 그리기 (Points 4개 + IsSmooth + Loop) 부드러운 곡선과 닫힌 형태를 만들려면 `IsSmooth`와 `Loop` 프로퍼티를 활성화해야 합니다. **설정 단계:** 1. `EmptyEntity`를 생성하고 `LineRendererComponent`를 추가합니다. 2. `Size`에 **4**를 입력하여 선을 구성할 점의 개수를 4개로 지정합니다. 3. [followup] | IsSmooth가 비활성화된 상태의 날카로운 꺾은 선과 활성화된 부드러운 곡선의 차이를 비교하고, 머티리얼 적용 시 기존 Color 프로퍼티와 어떻게 상호작용하는지 알려주세요. [followup_answer] | ### IsSmooth 프로퍼티에 따른 선의 형태 차이 `IsSmooth` 프로퍼티는 선이 어떻게 연결되는지를 결정합니다. * **비활성화 (날카로운 꺾은 선):** * `Points`에 지정된 각 `Position` 좌표를 지나는 직선 구간이 단순히 이어집니다. * 예를 들어, `(0,0)`, `(1,1)`, `(2,0)` 세 점을 지나는 선을 그릴 경우, `(0,0)`에서 `(1,1)`로 직선이 가고 `(1,1)`에서 `(2,0)`로 직선이 가는 형태가 됩니다. * 점과 점 사이가 곡선으로 [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 LineRendererComponent를 활용해 다양한 선을 월드에 자유롭게 그릴 수 있습니다. # LineRendererComponent LineRendererComponent는 점의 개수를 지정해 MapleTile, RectTile 위에서 원하는 직선, 곡선을 그릴 수 있습니다. LineRendererComponent 하나당 하나의 선을 그릴 수 있으므로, 여러 선을 표현하고 싶다면 여러 개의 LineRendererComponent가 포함된 엔티티를 사용해야 합니다. 주요 프로퍼티는 아래와 같습니다.

[task] | single_turn [pass] | ⏳ 미판정 [title] | 메이플 이동 개념 이해하기 [question] | Hierarchy에서 맵 레이어를 선택했을 때 프로퍼티 에디터에 표시되는 MapLayerName의 용도가 무엇인가요? [answer] | `MapLayerName`은 Hierarchy에서 맵 레이어를 선택했을 때 프로퍼티 에디터에 표시되며, 해당 레이어가 맵 내에서 어떤 이름(레이어 이름)으로 지정되어 있는지 나타내는 프로퍼티입니다. 참고 문서의 예시에서는 `MapleMapLayer_1`을 선택했을 때 `MapLayerName`이 "Layer2"로 설정되어 있었고, 이 레이어에 돌 타일이 배치되어 있었습니다. 즉, `MapLayerName`은 특정 맵 레이어를 식별하는 이름값을 제공하여, 스크립트나 설정에서 해당 레이어를 구분하고 참조하는 데 사용됩니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | #### 수직선 지형 지면 발판과 붙어있든, 떨어져 있든 점프로 수직 발판을 통과하지 못하게 만들고 싶다면 RigidbodyComponent의 **IsBlockvertialLine**을 활성화합니다. | IsBlockvertialLine활성화 | IsBlockvertialLine비활성화 | | --- | --- | || | ##### 특정 레이어의 수직선 지형만 막기 RigidbodyComponent의 **IsBlockvertialLine**를 활성화하면 맵 내부의 모든 수직 지형을 통과하지 못합니다. 만약 일부 맵 레이어에서

[task] | single_turn [pass] | ⏳ 미판정 [title] | 다양한 선 그리기 [question] | OnUpdate에서 dist < self.Threshold 조건을 걸지 않고 매 프레임마다 점을 추가하면 어떤 문제가 발생하며, 이 조건이 선의 매끄러움에 어떤 영향을 미치는지 설명해 주세요. [answer] | `OnUpdate`에서 `dist < self.Threshold` 조건을 걸지 않고 매 프레임마다 점을 추가하면 다음과 같은 문제가 발생하며, 이는 선의 매끄러움과 성능에 직접적인 영향을 줍니다. **1. 발생하는 문제** * **점의 과도한 밀집 (Aliasing/Noise):** 플레이어가 정지하거나 매우 느리게 움직이는 동안에도 매 프레임마다 `AddPoint`가 호출됩니다. 이는 `LineRendererComponent`의 `Points` 리스트에 거의 동일한 위치(`Vector2`)의 점이 연속적으로 쌓이는 [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] | code [pass] | ⏳ 미판정 [title] | 메이플 이동 개념 이해하기 [question] | 수직 발판이 바닥과 이어져 있는지 여부를 판단하여 이어진 경우 이동을 막고, 떨어져 있는 경우 통과할 수 있도록 RigidbodyComponent의 이동 충돌 처리를 제어하는 스크립트를 작성해줘 [answer] | 참고 문서에 따르면, 수직 발판(벽)이 바닥(가로 지형)과 이어져 있는지 여부에 따른 충돌 처리는 `RigidbodyComponent`와 `TileMapComponent`가 기본적으로 제공하는 내장 동작입니다. 구체적으로 문서에는 다음과 같이 명시되어 있습니다: 1. **바닥과 이어진 수직 발판**: 플레이어 캐릭터의 이동을 막습니다 (벽 역할). 2. **바닥과 떨어져 있는 수직 발판**: `RigidbodyComponent`가 통과할 수 있습니다. 이 동작은 메이플스토리식 물리 엔진의 기본 규칙이며, **mLua 스크립트를 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 월드 제작에 필수적인 이동 방식 중 메이플스토리 이동 방식을 따르는 RigidbodyComponent 특성을 알아봅시다. 이동은 [메이플 타일 맵 만들기](/docs?postId=747)와 함께 학습하기 권장합니다. # 메이플스토리 이동 방식 RigidbodyComponent는 메이플스토리 이동 방식처럼 이동하고자 할 때 사용합니다. 이동 방식은 지형 종류와 밀접한 연관이 있기에 TileMapComponent를 함께 사용해 메이플스토리식 이동 방식을 만들 수 있습니다. 이때 타일 위에서 이동은 Rigidbo

[task] | single_turn [pass] | ⏳ 미판정 [title] | 메이플 이동 개념 이해하기 [question] | RigidbodyComponent에서 WalkAcceleration 같은 속성이 지형의 이동 속성과도 연관된다는 설명이 있는데, 구체적으로 어떤 원리로 동작하나요? [answer] | 제공된 참고 문서에는 `WalkAcceleration` 같은 이동 속성 프로퍼티가 "RigidbodyComponent와 지형의 이동 속성 모두에게 관여하게 된다"는 사실만 언급되어 있을 뿐, 그 구체적인 동작 원리나 상호작용 방식에 대한 설명은 포함되어 있지 않습니다. 문서에 명시된 내용으로는 다음과 같은 사실만 알 수 있습니다: 1. 플레이어 캐릭터는 이동하는 동안 가속도 운동을 합니다. 2. `WalkAcceleration`, `WalkDrag`, `WalkSlant`와 같은 속성은 RigidbodyComponent의 이동 속 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 월드 제작에 필수적인 이동 방식 중 메이플스토리 이동 방식을 따르는 RigidbodyComponent 특성을 알아봅시다. 이동은 [메이플 타일 맵 만들기](/docs?postId=747)와 함께 학습하기 권장합니다. # 메이플스토리 이동 방식 RigidbodyComponent는 메이플스토리 이동 방식처럼 이동하고자 할 때 사용합니다. 이동 방식은 지형 종류와 밀접한 연관이 있기에 TileMapComponent를 함께 사용해 메이플스토리식 이동 방식을 만들 수 있습니다. 이때 타일 위에서 이동은 Rigidbo

[task] | instruction_following [pass] | ⏳ 미판정 [title] | 메이플 이동 개념 이해하기 [question] | 맵 바운더리를 무시하여 지형 밖 이동이 가능하도록 하려면 활성화해야 할 RigidbodyComponent의 프로퍼티 이름과, 이 프로퍼티가 비활성화 상태일 때의 기본 동작을 3문장 이내로 설명해 주세요. [answer] | 맵 바운더리를 무시하여 지형 밖 이동이 가능하도록 하려면 RigidbodyComponent의 `IgnoreMoveBoundary` 프로퍼티를 활성화해야 합니다. 이 프로퍼티가 비활성화 상태일 때의 기본 동작은 맵 바운더리가 적용되어 맵 지형 밖으로 이동할 수 없게 막히는 것입니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | #### 수직선 지형 지면 발판과 붙어있든, 떨어져 있든 점프로 수직 발판을 통과하지 못하게 만들고 싶다면 RigidbodyComponent의 **IsBlockvertialLine**을 활성화합니다. | IsBlockvertialLine활성화 | IsBlockvertialLine비활성화 | | --- | --- | || | ##### 특정 레이어의 수직선 지형만 막기 RigidbodyComponent의 **IsBlockvertialLine**를 활성화하면 맵 내부의 모든 수직 지형을 통과하지 못합니다. 만약 일부 맵 레이어에서

[task] | instruction_following [pass] | ⏳ 미판정 [title] | 메이플 이동 개념 이해하기 [question] | 맵 레이어별 수직선 지형 차단 설정을 적용하기 위해 Hierarchy에서 맵 레이어와 TileMap을 선택하여 프로퍼티를 변경하는 과정을 단계별 번호 목록으로 4단계 이내로 작성해 주세요. [answer] | 1. Hierarchy에서 대상 맵 레이어(예: `MapleMapLayer_1`)를 선택하여 프로퍼티 에디터에서 `MapLayerName`이 원하는 타일 레이어(예: `Layer2`)로 설정되어 있는지 확인합니다. 2. 해당 맵 레이어에 포함된 TileMap(예: `TileMap_1`)을 선택합니다. 3. `TileMapComponent`의 `IsVerticalLine` 프로퍼티를 활성화하여 수직 지형 차단을 설정합니다. 4. [시작] 버튼을 눌러 실행한 후, 해당 레이어의 타일에서 점프 시 수직 지형이 차단되는지 테스트합니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | #### 수직선 지형 지면 발판과 붙어있든, 떨어져 있든 점프로 수직 발판을 통과하지 못하게 만들고 싶다면 RigidbodyComponent의 **IsBlockvertialLine**을 활성화합니다. | IsBlockvertialLine활성화 | IsBlockvertialLine비활성화 | | --- | --- | || | ##### 특정 레이어의 수직선 지형만 막기 RigidbodyComponent의 **IsBlockvertialLine**를 활성화하면 맵 내부의 모든 수직 지형을 통과하지 못합니다. 만약 일부 맵 레이어에서

[task] | single_turn [pass] | ⏳ 미판정 [title] | 메이플 이동 개념 이해하기 [question] | 잔디 타일은 통과하지만 돌 타일만 점프 시 막히게 하려면 어떤 컴포넌트의 어떤 값을 어떻게 변경해야 하나요? [answer] | 돌 타일만 점프 시 수직 지형을 막고 싶다면, 해당 맵 레이어에 적용된 **TileMapComponent**의 **IsVerticalLine** 프로퍼티를 활성화해야 합니다. 구체적인 설정 방법은 다음과 같습니다. 1. **Hierarchy**에서 돌 타일이 포함된 맵 레이어(예: `MapleMapLayer_1`)를 선택합니다. 2. 프로퍼티 에디터에서 해당 레이어에 연결된 **TileMap** 컴포넌트(예: `TileMap_1`)를 선택합니다. 3. **TileMapComponent** 설정에서 **IsVerticalLi [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | #### 수직선 지형 지면 발판과 붙어있든, 떨어져 있든 점프로 수직 발판을 통과하지 못하게 만들고 싶다면 RigidbodyComponent의 **IsBlockvertialLine**을 활성화합니다. | IsBlockvertialLine활성화 | IsBlockvertialLine비활성화 | | --- | --- | || | ##### 특정 레이어의 수직선 지형만 막기 RigidbodyComponent의 **IsBlockvertialLine**를 활성화하면 맵 내부의 모든 수직 지형을 통과하지 못합니다. 만약 일부 맵 레이어에서

[task] | single_turn [pass] | ⏳ 미판정 [title] | 메이플 이동 개념 이해하기 [question] | 수직선 지형 설정 시 RigidbodyComponent의 IsBlockvertialLine과 TileMapComponent의 IsVerticalLine의 역할 차이가 무엇인가요? [answer] | RigidbodyComponent의 **IsBlockvertialLine**과 TileMapComponent의 **IsVerticalLine**은 적용 범위와 대상이 다릅니다. **RigidbodyComponent의 IsBlockvertialLine** * **역할**: 해당 RigidbodyComponent가 있는 엔티티(플레이어, 몬스터 등)가 맵 내의 **모든** 수직선 지형을 통과하지 못하도록 막습니다. * **적용 범위**: 맵 전체의 수직 지형에 적용됩니다. **TileMapComponent의 IsVertica [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | #### 수직선 지형 지면 발판과 붙어있든, 떨어져 있든 점프로 수직 발판을 통과하지 못하게 만들고 싶다면 RigidbodyComponent의 **IsBlockvertialLine**을 활성화합니다. | IsBlockvertialLine활성화 | IsBlockvertialLine비활성화 | | --- | --- | || | ##### 특정 레이어의 수직선 지형만 막기 RigidbodyComponent의 **IsBlockvertialLine**를 활성화하면 맵 내부의 모든 수직 지형을 통과하지 못합니다. 만약 일부 맵 레이어에서

[task] | instruction_following [pass] | ⏳ 미판정 [title] | 메이플 이동 개념 이해하기 [question] | RigidbodyComponent와 TileMapComponent의 수직선 지형 차단 설정 차이를 설명할 때, 두 컴포넌트 모두에서 활성화해야 할 프로퍼티 이름과 그 역할을 표로 정리해서 답변해 주세요. [answer] | RigidbodyComponent와 TileMapComponent의 수직선 지형 차단 설정은 적용 대상과 역할에 명확한 차이가 있습니다. 두 컴포넌트 모두에서 활성화해야 할 프로퍼티 이름과 역할은 다음과 같습니다. | 컴포넌트 | 프로퍼티 이름 | 역할 | | :--- | :--- | :--- | | RigidbodyComponent | **IsBlockvertialLine** | 활성화 시, 해당 엔티티(플레이어 등)가 맵 내부의 **모든** 수직 지형을 통과하지 못하게 막습니다. | | TileMapComponent | **I [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | #### 수직선 지형 지면 발판과 붙어있든, 떨어져 있든 점프로 수직 발판을 통과하지 못하게 만들고 싶다면 RigidbodyComponent의 **IsBlockvertialLine**을 활성화합니다. | IsBlockvertialLine활성화 | IsBlockvertialLine비활성화 | | --- | --- | || | ##### 특정 레이어의 수직선 지형만 막기 RigidbodyComponent의 **IsBlockvertialLine**를 활성화하면 맵 내부의 모든 수직 지형을 통과하지 못합니다. 만약 일부 맵 레이어에서

[task] | code [pass] | ⏳ 미판정 [title] | 메이플 이동 개념 이해하기 [question] | 발판과 떨어지는 순간 중력의 영향을 받아 하강하다가 새로운 발판을 만나면 착지하도록 RigidbodyComponent의 상태 변화를 관리하는 스크립트를 작성해줘 [answer] | 제공된 참고 문서에는 `RigidbodyComponent`의 물리적 이동 규칙(발판에서 떨어지면 중력으로 하강, 새 발판에서 착지)에 대한 **설명은** 있으나, 이 물리 과정을 직접 관리하기 위한 **상태 변화(State)를 코드 레벨에서 처리하는 구체적인 API(예: 착지 감지 이벤트, 상태 변경 메서드 등)는 문서에 명시되어 있지 않습니다.** 문서에 따르면 `RigidbodyComponent`는 타일 위에서 이동을 관리하며, 플레이어는 `WalkAcceleration`, `WalkDrag`, `WalkSlant` 같은 속성 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 월드 제작에 필수적인 이동 방식 중 메이플스토리 이동 방식을 따르는 RigidbodyComponent 특성을 알아봅시다. 이동은 [메이플 타일 맵 만들기](/docs?postId=747)와 함께 학습하기 권장합니다. # 메이플스토리 이동 방식 RigidbodyComponent는 메이플스토리 이동 방식처럼 이동하고자 할 때 사용합니다. 이동 방식은 지형 종류와 밀접한 연관이 있기에 TileMapComponent를 함께 사용해 메이플스토리식 이동 방식을 만들 수 있습니다. 이때 타일 위에서 이동은 Rigidbo

[task] | instruction_following [pass] | ⏳ 미판정 [title] | 충돌 그룹 만들기 [question] | 충돌 그룹 매트릭스에서 특정 그룹 간 충돌 허용 여부를 설정하는 방법을 3단계 이내의 번호 목록으로 정리하세요. [answer] | 충돌 그룹 매트릭스에서 특정 그룹 간 충돌 허용 여부를 설정하는 방법은 다음과 같습니다. 1. **Panels - Collision Groups - Matrix** 메뉴를 선택합니다. 2. 매트릭스에서 가로와 세로에 표시된 충돌 그룹 이름을 확인합니다. 3. 충돌을 허용하고자 하는 그룹끼리 교차하는 위치의 체크 박스를 활성화합니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 충돌 그룹 매트릭스(Matrix)는 충돌 그룹끼리의 충돌을 허용할지 말지를 결정할 때 사용합니다. 충돌 그룹을 생성하면 매트릭스에 자동으로 새로운 충돌 그룹이 생성됩니다. 충돌 그룹끼리의 충돌 허용 여부는 체크 박스를 선택해서 간단하게 설정할 수 있습니다. 매트릭스에 적힌 충돌 그룹끼리의 관계를 확인하고 충돌을 허용하고 싶다면 체크 박스를 활성화합니다. 1. **Panels - Collision Groups - Matrix**를 선택합니다. 2. 가로 세로의 그룹명을 확인한 뒤 충돌을 허용하면 체크 박스를 활성화합니다.

[task] | code [pass] | ⏳ 미판정 [title] | 메이플 이동 개념 이해하기 [question] | RigidbodyComponent의 WalkAcceleration과 WalkDrag 프로퍼티를 조정하여 가속도 운동이 적용되는 기본 발판 위 이동 로직을 구현하는 스크립트를 작성해줘 [answer] | 제공된 참고 문서에는 `RigidbodyComponent`의 `WalkAcceleration`과 `WalkDrag` 프로퍼티가 존재하며, 플레이어 캐릭터가 이동하는 동안 가속도 운동을 하므로 이 속성들이 이동에 관여한다는 사실만 명시되어 있습니다. 하지만 **이 프로퍼티들을 직접 조정(설정)하여 가속도 운동이 적용되는 "기본 발판 위 이동 로직"을 구현하는 구체적인 스크립트 예제나 API 호출 방식은 문서에 포함되어 있지 않습니다.** 문서에 따르면, `RigidbodyComponent`는 메이플스토리식 이동 방식을 따르며, 타 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 월드 제작에 필수적인 이동 방식 중 메이플스토리 이동 방식을 따르는 RigidbodyComponent 특성을 알아봅시다. 이동은 [메이플 타일 맵 만들기](/docs?postId=747)와 함께 학습하기 권장합니다. # 메이플스토리 이동 방식 RigidbodyComponent는 메이플스토리 이동 방식처럼 이동하고자 할 때 사용합니다. 이동 방식은 지형 종류와 밀접한 연관이 있기에 TileMapComponent를 함께 사용해 메이플스토리식 이동 방식을 만들 수 있습니다. 이때 타일 위에서 이동은 Rigidbo

[task] | two_turn [pass] | ⏳ 미판정 [title] | RectTileMap에서 캐릭터 이동 제어 [question] | RectTileMap에서 캐릭터가 특정 타일을 밟을 때 속도를 변경하는 스크립트를 작성하는 전체 프로세스를 알려주세요. [answer] | RectTileMap에서 캐릭터가 특정 타일을 밟을 때 속도를 변경하는 전체 프로세스는 맵 및 타일 셋 설정, 스크립트 컴포넌트 생성, 그리고 이벤트 핸들러 연동 단계로 구성됩니다. ### 1. 맵 및 타일 셋 설정 먼저 RectTile 모드에서 맵과 타일 셋을 구성해야 합니다. 1. **타일맵 모드 설정**: 타일맵 모드를 `RectTile`로 설정합니다. 2. **기본 타일 셋 생성**: * 타일 셋 팔레트 좌측 상단의 `[+]` 버튼을 눌러 `Create TileSet From Template - BnB`를 [followup] | `HandleRectTileEnterEvent` 이벤트 핸들러 내에서 `TileInfo.Name`으로 타일을 식별할 때, `Kinematicbody:IsOnGround()` 조건을 함께 확인해야 하는 이유는 무엇이며, 해당 조건이 없으면 어떤 문제가 발생할 수 있나요? [followup_answer] | 제공된 참고 문서에는 `Kinematicbody:IsOnGround()` 조건을 함께 확인해야 하는 **기술적 이유**나, 해당 조건이 없을 때 발생하는 **구체적인 문제**에 대한 설명이 포함되어 있지 않습니다. 문서에서는 단순히 `'Buff'` 타일을 밟을 때 `Kinematicbody:IsOnGround()`가 참인 경우에만 `IncreaseSpeedFactor()`를 호출하도록 코드가 작성되어 있을 뿐, 그 배경이나 의도에 대한 설명은 없습니다. 따라서 제공된 문서 범위 내에서는 "왜 그 조건이 필요한지" 또는 "없으면 [scores] | [judge_reason] | [source_doc] | 밟으면 속도가 증가하는 타일을 만들어 봅시다. 1. 타일맵 모드를 RectTile로 설정합니다. 2. 타일 셋 팔레트 좌측 상단의 **[+]** 버튼을 누른 뒤, **Create TileSet From Template - BnB** 타일 셋을 선택합니다. 3. 타일 셋의 이름을 **BnB TileSet**으로 설정합니다. 4. 타일 셋 팔레트 우측 상단의 편집 버튼을 눌러 타일 속성 편집 모드로 들어갑니다. 5. 편집 대상에서 **이동 가능 여부**를

[task] | instruction_following [pass] | ⏳ 미판정 [title] | 충돌 그룹 만들기 [question] | 플레이어와 몬스터, 아이템의 충돌 관계를 설정하는 예제에서 각 컴포넌트의 CollisionGroup 지정 내용을 표로 정리하세요. [answer] | 플레이어, 몬스터, 아이템의 충돌 관계를 설정하는 예제에서 각 엔티티에 포함된 컴포넌트의 `CollisionGroup` 지정 내용은 다음과 같습니다. | 대상 엔티티 | 컴포넌트 이름 | CollisionGroup 설정값 | | :--- | :--- | :--- | | **DefaultPlayer** | TriggerComponent | Player | | **DefaultPlayer** | PlayerHit | Player | | **Monster 모델** | TriggerComponent | Monster | | **Monst [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 충돌 그룹 매트릭스(Matrix)는 충돌 그룹끼리의 충돌을 허용할지 말지를 결정할 때 사용합니다. 충돌 그룹을 생성하면 매트릭스에 자동으로 새로운 충돌 그룹이 생성됩니다. 충돌 그룹끼리의 충돌 허용 여부는 체크 박스를 선택해서 간단하게 설정할 수 있습니다. 매트릭스에 적힌 충돌 그룹끼리의 관계를 확인하고 충돌을 허용하고 싶다면 체크 박스를 활성화합니다. 1. **Panels - Collision Groups - Matrix**를 선택합니다. 2. 가로 세로의 그룹명을 확인한 뒤 충돌을 허용하면 체크 박스를 활성화합니다.

[task] | code [pass] | ⏳ 미판정 [title] | 다양한 선 그리기 [question] | EraseTail 메서드에서 PointLives 테이블의 각 요소에 delta를 차감하고, 첫 번째 요소의 수명이 0 이하가 되면 RemovePointAt(1)을 호출하여 선의 끝 지점을 삭제하는 로직이 포함된 TrailDrawer 스크립트를 작성해줘. [answer] | 제공된 참고 문서에 포함된 로직을 바탕으로, `EraseTail` 메서드에서 수명 관리 및 지점 삭제 로직을 수행하는 `TrailDrawer` 스크립트를 작성했습니다. ```lua Property: [None] Vector3 PrevPos = Vector3(0,0,0) [None] number Threshold = 0.1 [None] number PointLife = 2 [None] SyncTable<number> PointLives [None] Entity Target = nil Method: [client only] void [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] | Player와 Monster가 서로 충돌하지 않도록 설정하려면 매트릭스의 어느 칸에 체크를 해제해야 하나요? [answer] | 충돌 그룹 매트릭스(Matrix)에서 Player와 Monster가 서로 충돌하지 않도록 하려면, **Player 행과 Monster 열이 만나는 칸** 또는 **Monster 행과 Player 열이 만나는 칸**에 있는 체크 박스를 해제해야 합니다. 메트릭스는 대칭 구조이므로 두 위치 중 어디를 해제하든 Player와 Monster 간의 충돌이 비활성화됩니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 충돌 그룹 매트릭스(Matrix)는 충돌 그룹끼리의 충돌을 허용할지 말지를 결정할 때 사용합니다. 충돌 그룹을 생성하면 매트릭스에 자동으로 새로운 충돌 그룹이 생성됩니다. 충돌 그룹끼리의 충돌 허용 여부는 체크 박스를 선택해서 간단하게 설정할 수 있습니다. 매트릭스에 적힌 충돌 그룹끼리의 관계를 확인하고 충돌을 허용하고 싶다면 체크 박스를 활성화합니다. 1. **Panels - Collision Groups - Matrix**를 선택합니다. 2. 가로 세로의 그룹명을 확인한 뒤 충돌을 허용하면 체크 박스를 활성화합니다.

[task] | code [pass] | ⏳ 미판정 [title] | 다양한 선 그리기 [question] | 대상 엔티티를 추적하여 LineRendererComponent로 선을 그리고 PointLives 테이블을 이용해 각 지점의 수명(2초)이 지나면 지점을 삭제하는 TrailDrawer 컴포넌트 스크립트를 작성해줘. [answer] | 대상 엔티티를 추적하여 `LineRendererComponent`로 선을 그리고, `PointLives` 테이블을 이용해 각 지점의 수명(2초)이 지나면 지점을 삭제하는 `TrailDrawer` 컴포넌트 스크립트입니다. ```lua Property: [None] Vector3 PrevPos = Vector3(0,0,0) [None] number Threshold = 0.1 [None] number PointLife = 2 [None] SyncTable<number> PointLives [None] Entity Target = ni [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] | ItemComponent 스크립트에서 트리거 진입 시 코인을 파괴하는 로직을 코드 블록으로만 출력하고 설명은 주석으로 작성하세요. [answer] | ```lua Event Handler: [server only] [self] HandleTriggerEnterEvent(TriggerEnterEvent event) { -- 트리거 진입 이벤트 핸들러 -- 충돌 그룹 설정에 따라 Player와 Item이 충돌할 때만 이 함수가 실행됩니다. -- (Monster와 Item은 충돌이 허용되지 않으므로 Monster가 들어와도 실행되지 않음) -- Parameters local TriggerBodyEntity = event.TriggerBodyEnti [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 충돌 그룹 매트릭스(Matrix)는 충돌 그룹끼리의 충돌을 허용할지 말지를 결정할 때 사용합니다. 충돌 그룹을 생성하면 매트릭스에 자동으로 새로운 충돌 그룹이 생성됩니다. 충돌 그룹끼리의 충돌 허용 여부는 체크 박스를 선택해서 간단하게 설정할 수 있습니다. 매트릭스에 적힌 충돌 그룹끼리의 관계를 확인하고 충돌을 허용하고 싶다면 체크 박스를 활성화합니다. 1. **Panels - Collision Groups - Matrix**를 선택합니다. 2. 가로 세로의 그룹명을 확인한 뒤 충돌을 허용하면 체크 박스를 활성화합니다.

[task] | code [pass] | ⏳ 미판정 [title] | 다양한 선 그리기 [question] | OnUpdate에서 Target의 WorldPosition과 PrevPos 사이의 Vector3.Distance가 Threshold(0.1) 미만일 경우 함수를 종료하고, 그 이상일 경우 PrevPos를 갱신하고 AddPoint를 호출하는 로직을 구현한 TrailDrawer 스크립트를 작성해줘. [answer] | 요청하신 로직(거리 확인 후 `PrevPos` 갱신 및 `AddPoint` 호출)은 `OnUpdate` 메서드 내에 구현됩니다. 제공된 문서의 `TrailDrawer` 컴포넌트 코드를 바탕으로, 해당 로직이 포함된 스크립트를 작성했습니다. ```lua Property: [None] Vector3 PrevPos = Vector3(0,0,0) [None] number Threshold = 0.1 [None] number PointLife = 2 [None] SyncTable<number> PointLives [None] Entity [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] | 지형 Layer가 서로 다르면 발판이 이어져 있지 않다고 하는데, 동일한 모양의 타일이라도 레이어가 바뀌면 이동에 어떤 차이가 생기나요? [answer] | 지형 Layer가 서로 다르면, 동일한 모양의 타일이라도 물리적으로 이어져 있는 발판으로 인식되지 않습니다. 각 레이어의 타일은 독립적인 발판으로 생성되므로, 레이어가 바뀌면 플레이어 캐릭터가 밟고 있는 발판 정보도 함께 변경됩니다. 이로 인해 이동에 다음과 같은 구체적인 차이가 생깁니다: 1. **수직 발판 통과 여부**: - 현재 레이어에서 다른 레이어로 넘어갈 때, **위쪽 레이어에서 아래쪽 레이어로 이동**(예: 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] | RigidbodyComponent의 IsBlockvertialLine을 켜도 맵의 특정 레이어에서만 수직 지형을 막고 다른 레이어는 통과하게 하려면 어떻게 설정해야 하나요? [answer] | 모든 수직 지형을 막기 위해 RigidbodyComponent의 **IsBlockvertialLine**을 활성화하면 맵 내부의 모든 수직 지형을 통과하지 못하게 됩니다. 특정 맵 레이어에서만 수직 지형을 막고 다른 레이어는 통과하게 하려면, 막고 싶은 특정 맵 레이어의 **TileMapComponent**에 있는 **IsBlockvertialLine**(또는 문서 예제에 따르면 **IsVerticalLine**) 프로퍼티를 활성화해야 합니다. 구체적인 설정 방법은 다음과 같습니다: 1. **Hierarchy**에서 막고 싶은 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | #### 수직선 지형 지면 발판과 붙어있든, 떨어져 있든 점프로 수직 발판을 통과하지 못하게 만들고 싶다면 RigidbodyComponent의 **IsBlockvertialLine**을 활성화합니다. | IsBlockvertialLine활성화 | IsBlockvertialLine비활성화 | | --- | --- | || | ##### 특정 레이어의 수직선 지형만 막기 RigidbodyComponent의 **IsBlockvertialLine**를 활성화하면 맵 내부의 모든 수직 지형을 통과하지 못합니다. 만약 일부 맵 레이어에서

[task] | instruction_following [pass] | ⏳ 미판정 [title] | 스크린샷 촬영 및 공유하기 [question] | `CaptureFullScreenToPhotoLibraryAndWait()`와 `CaptureFullScreenAsFileAndWait()`의 저장 경로 차이를 3문장 이내로 설명하세요. [answer] | `CaptureFullScreenToPhotoLibraryAndWait()`는 운영체제 기본 사진 보관함(Windows/macOS의 사진 폴더, 모바일의 갤러리 또는 사진 앱)에 이미지를 저장합니다. 반면 `CaptureFullScreenAsFileAndWait()`는 모바일 공유를 위해 지정된 내부 저장소 경로(모바일의 특정 데이터 폴더, PC의 사진 폴더)에 파일을 저장합니다. 따라서 전자는 사용자가 사진 앱에서 바로 볼 수 있도록 하고, 후자는 `MobileShareService`와 연동하여 파일을 공유하는 용도로 사용됩니다. [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] | 플레이어가 위로 점프할 때 위쪽의 발판을 통과할 수 있지만, 아래로 떨어질 때는 착지하는 비대칭적인 이동 규칙을 구현하려면 어떤 컴포넌트를 조합해야 하나요? [answer] | 메이플스토리 월드에서 플레이어의 기본 이동(위로는 통과, 아래로는 착지)을 구현하기 위해서는 **`RigidbodyComponent`**와 **`TileMapComponent`**를 조합해야 합니다. `RigidbodyComponent`는 메이플스토리 식의 물리 이동 방식을 담당하며, `TileMapComponent`로 생성된 지형(발판)과 상호작용하여 다음과 같은 비대칭적인 규칙을 자동으로 적용합니다. 1. **올라갈 때(점프)**: 캐릭터가 위로 올라가는 도중 다른 발판을 만나더라도 무시하고 통과합니다. 2. **내려갈 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 월드 제작에 필수적인 이동 방식 중 메이플스토리 이동 방식을 따르는 RigidbodyComponent 특성을 알아봅시다. 이동은 [메이플 타일 맵 만들기](/docs?postId=747)와 함께 학습하기 권장합니다. # 메이플스토리 이동 방식 RigidbodyComponent는 메이플스토리 이동 방식처럼 이동하고자 할 때 사용합니다. 이동 방식은 지형 종류와 밀접한 연관이 있기에 TileMapComponent를 함께 사용해 메이플스토리식 이동 방식을 만들 수 있습니다. 이때 타일 위에서 이동은 Rigidbo

[task] | single_turn [pass] | ⏳ 미판정 [title] | 메이플 이동 개념 이해하기 [question] | RigidbodyComponent가 붙은 엔티티의 SortingLayer가 자동으로 변경되어 보이는 순서가 뒤죽박죽이 될 수 있다는데, 이 문제를 방지하거나 제어할 수 있는 방법이 있나요? [answer] | 참고 문서에 따르면, `RigidbodyComponent`가 붙은 엔티티(예: 플레이어 캐릭터)의 `SortingLayer`는 현재 밟고 있는 `TileMap`의 `MapLayer`를 따라 자동으로 변경됩니다. 이는 겹쳐진 타일 레이어 사이를 이동할 때, 캐릭터가 특정 오브젝트(예: 수풀)의 앞이나 뒤에 자연스럽게 보이도록 하기 위한 설계입니다. 문서에 제시된 정보 범위 내에서는 이 자동 변경 동작을 **직접적으로 방지하거나 수동으로 제어하는 API나 프로퍼티는 언급되어 있지 않습니다.** 대신, 문서에서 제공되는 관련 정보와 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 월드 제작에 필수적인 이동 방식 중 메이플스토리 이동 방식을 따르는 RigidbodyComponent 특성을 알아봅시다. 이동은 [메이플 타일 맵 만들기](/docs?postId=747)와 함께 학습하기 권장합니다. # 메이플스토리 이동 방식 RigidbodyComponent는 메이플스토리 이동 방식처럼 이동하고자 할 때 사용합니다. 이동 방식은 지형 종류와 밀접한 연관이 있기에 TileMapComponent를 함께 사용해 메이플스토리식 이동 방식을 만들 수 있습니다. 이때 타일 위에서 이동은 Rigidbo

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