[task] | two_turn [pass] | ⏳ 미판정 [title] | TweenLogic을 활용해 엔티티 제어하기 [question] | EaseType이 엔티티의 이동 궤적에 미치는 영향과 Easing 함수의 x, y축 의미를 설명해 주세요. [answer] | **EaseType이 엔티티 이동 궤적에 미치는 영향** `EaseType`은 엔티티가 목적지까지 이동하는 동안 시간 대비 위치 변화가 어떻게 달라지는지, 즉 이동의 가속과 감속 패턴을 결정합니다. 동일한 시간과 동일한 시작·끝 지점이라도 `EaseType`에 따라 엔티티의 움직임이 크게 달라집니다. 예를 들어, 바닥으로 떨어지는 공처럼 통통 튀며 이동하는 효과나, 초반에 느리게 출발하다가 점점 가속되어 목적지에 도달하는 효과 등은 모두 `EaseType` 선택에 따라 구현할 수 있습니다. 따라서 여러 엔티티가 같은 경로와 시간 [followup] | `MoveTo` 함수를 사용하여 두 개의 엔티티가 같은 시간 동안 같은 위치로 이동하지만 서로 다른 EaseType을 적용했을 때 나타나는 구체적인 움직임 차이는 무엇인가요? [followup_answer] | `MoveTo` 함수를 사용하여 두 개의 엔티티가 같은 시간 동안 같은 위치로 이동하더라도, 적용한 `EaseType`이 다르면 엔티티의 이동 모습(가속·감속 패턴)이 달라집니다. 문서에 명시된 구체적인 움직임 차이는 다음과 같습니다. * **첫 번째 엔티티:** 바닥으로 떨어진 공처럼 통통 튀며 이동합니다. * **두 번째 엔티티:** 느리게 이동하다가 점점 빠르게 목적지에 도달합니다. 즉, `EaseType`에 따라 동일한 경로와 시간 설정에서도 엔티티의 가속 변화와 시각적 이동 궤적이 서로 다르게 나타납니다. [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 [TweenLogic](/apiReference?postId=700)을 사용해 엔티티를 확대, 축소, 회전, 이동시킬 수 있습니다. [Tweener](/apiReference?postId=714)를 함께 확인해보세요. # TweenLogic 개념 **TweenLogic**은 엔티티에 애니메이션 효과를 줄 수 있는 다양한 함수를 제공합니다. 여러 프레임에 걸쳐 Entity의 위치나 크기를 변화시키거나 회전시킬 수 있습니다. 다양한 함수를 사용해 엔티티를 Tween 시켜 애니메이션을 한 번의 함수 호출로 간단
[task] | two_turn [pass] | ⏳ 미판정 [title] | 메이플 타일맵 만들기 [question] | 메이플 타일맵에서 엔티티의 이동 방식을 정의하는 발판의 개념과 생성 규칙이 궁금합니다 [answer] | 메이플 타일맵에서 **발판**은 엔티티가 이동할 수 있는 영역을 정의하는 핵심 개념입니다. 지형 생성의 주된 목적은 엔티티가 움직일 수 있는 공간을 제공하는 것이며, 이 공간은 발판으로 구체화됩니다. 발판은 지형 생성 규칙에 따라 자동으로 만들어지며, 일반적으로 지형과 1:1로 직관적으로 매칭됩니다. 지형 편집 시 '발판 정보' 버튼을 활성화하면 지형 위에 빨간색 선으로 발판의 위치와 범위를 시각적으로 확인할 수 있습니다. 발판 위에서 엔티티의 이동 방식은 크게 두 가지로 나뉩니다. 1. **발판 위에서 이동**: 지형(발판)에 [followup] | 발판 밖에서 이동하는 경우와 발판 위에서 이동하는 경우의 차이점이나 예외 처리는 어떻게 되나요? [followup_answer] | 제공된 참고 문서에는 발판 위에서 이동하는 경우와 발판 밖에서 이동하는 경우의 구체적인 차이점이나 예외 처리 방식에 대한 기술적 설명이 포함되어 있지 않습니다. 문서에는 `RigidbodyComponent`의 이동 방식이 "1. 발판 위에서 이동"과 "2. 발판 밖에서 이동"으로 구분된다는 사실과, 발판이 지형 생성 규칙에 따라 만들어지며 직관적으로 1:1 매칭된다는 정보, 그리고 `CustomFootholdComponent`를 사용해 엔티티에도 발판을 추가할 수 있다는 정보만 명시되어 있습니다. 두 상태 간 전환 로직이나 물리 [scores] | [judge_reason] | [source_doc] | 지형을 생성하는 가장 큰 이유는 엔티티가 이동할 수 있는 공간이 필요하기 때문일 것입니다. 메이플 타일에서 이동할 수 있는 영역을 **발판**이라고 합니다. 메이플 타일과 쌍을 이루는 [RigidbodyComponent](/docs?postId=750)의 이동 방식은 두 가지가 있습니다. **1. 발판 위에서 이동 2. 발판 밖에서 이동** 발판은 지형 생성 규칙에 의해 만들어지며 대부분 직관적으로 지형과 1:1 매칭됩니다. 발판 정보 버튼을 누르면 지형 위에 빨간색 선으로 발판 정보가 나타납니다. > **더 알아보기**
[task] | instruction_following [pass] | ⏳ 미판정 [title] | 메이플 타일맵 만들기 [question] | 메이플 타일에서 이동할 수 있는 영역을 무엇이라고 부르며, 그 정보를 확인하는 버튼의 이름과 발판이 나타나는 색상을 포함해 3문장 이내로 답하세요. [answer] | 메이플 타일에서 이동할 수 있는 영역은 발판이라고 부릅니다. 발판 정보를 확인하는 버튼은 발판 정보 버튼이며, 클릭 시 지형 위에 발판 정보가 빨간색 선으로 나타납니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 지형을 생성하는 가장 큰 이유는 엔티티가 이동할 수 있는 공간이 필요하기 때문일 것입니다. 메이플 타일에서 이동할 수 있는 영역을 **발판**이라고 합니다. 메이플 타일과 쌍을 이루는 [RigidbodyComponent](/docs?postId=750)의 이동 방식은 두 가지가 있습니다. **1. 발판 위에서 이동 2. 발판 밖에서 이동** 발판은 지형 생성 규칙에 의해 만들어지며 대부분 직관적으로 지형과 1:1 매칭됩니다. 발판 정보 버튼을 누르면 지형 위에 빨간색 선으로 발판 정보가 나타납니다. > **더 알아보기**
[task] | two_turn [pass] | ⏳ 미판정 [title] | TweenLogic을 활용해 엔티티 제어하기 [question] | ScaleTo를 활용해 엔티티의 크기를 반복적으로 확대·축소하려면 어떤 파라미터를 지정해야 하나요? [answer] | `ScaleTo()`를 사용해 엔티티의 크기를 반복적으로 확대·축소하려면 아래 파라미터들을 지정해야 합니다. 1. **대상 엔티티**: 크기 변화를 주고 싶은 `self.Entity` 2. **목표 크기**: `Vector2(width, height)` 형식으로 입력 (예: `Vector2(2.5, 2.5)`) 3. **변화 시간**: 확대·축소까지 걸리는 시간 (초 단위, 예: `4`) 4. **이징 타입**: 변화의 가속/감속 방식 (예: `EaseType.QuadEaseInOut`) 반복 동작을 위해 추가적으로 설정 [followup] | EaseType.QuadEaseInOut 대신 다른 이징 타입을 적용하거나, 스케일 값이 0에 가까워질 때의 동작 방식을 코드와 함께 설명해 주세요. [followup_answer] | 참고 문서에 `EaseType.QuadEaseInOut` 외 다른 이징 타입에 대한 설명이나, 스케일 값이 0에 가까워질 때의 특수 동작 방식(예: 0 이하로 내려갔을 때의 처리, 클램프 등)에 대한 정보가 포함되어 있지 않습니다. 문서에 명시된 내용으로는 `ScaleTo()` 함수의 파라미터로 `EaseType`을 지정할 수 있으며, 예제에서는 `EaseType.QuadEaseInOut`가 사용되었을 뿐 다른 이징 타입의 사용 가능 여부나 구체적인 동작 방식은 확인할 수 없습니다. 또한 스케일 값이 0에 근접했을 때의 엔진 내부 [scores] | [judge_reason] | [source_doc] | `RotateTo()`를 활용해 엔티티를 회전시킬 수 있고, `TweenLogic:RotateAroundOffset()`를 활용해 특정 엔티티의 offset을 기준으로 따라다니게 회전시킬 수 있습니다. 1. 새로운 컴포넌트를 생성하고, 특정 엔티티에 추가합니다. 2. **angle**을 360도로 설정해 엔티티가 한 바퀴 돌 수 있게 작성합니다. ```lua Method: void OnBeginPlay() { self._T.tween = _TweenLogic:RotateTo(self.E
[task] | code [pass] | ⏳ 미판정 [title] | 메이플 타일맵 만들기 [question] | UserService 의 UserEnterEvent 를 처리하여 사용자가 맵에 진입할 때 로그를 출력하는 스크립트를 작성해줘 [answer] | 사용자가 맵에 진입할 때 `UserService`의 `UserEnterEvent`를 처리하여 로그를 출력하는 스크립트는 다음과 같습니다. ```lua Event Handler: [service: UserService] HandleUserEnterEvent(UserEnterEvent event) { -- Parameters local UserId = event.UserId -------------------------------------------------------- -- 입장 유저의 UserId를 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 메이플스토리 월드에서는 여러 가지 지형과 이동 방식을 제공하고 있습니다. 이번 시간에는 가장 기본이 되는 지형인 메이플스토리 형태의 타일 맵에 대해 알아보겠습니다. 메이플스토리 형태의 지형은 메이플스토리 형태의 이동과 매우 밀접한 연관이 있습니다. > **더 알아보기** > 메이플스토리 형태의 이동에 대해서는 [메이플 이동 개념 이해하기](/docs?postId=750)를 참고해주세요. # 메이플스토리 형태의 지형 메이플스토리 형태의 지형은 타일 에디터에서 MapleTile 모드를 선택한 후 만들 수
[task] | instruction_following [pass] | ⏳ 미판정 [title] | 메이플 타일맵 만들기 [question] | 메이플 타일과 쌍을 이루는 [RigidbodyComponent]의 두 가지 이동 방식을 표로 정리하세요. [answer] | 메이플 타일과 쌍을 이루는 `RigidbodyComponent`의 이동 방식은 다음과 같습니다. | 이동 방식 | 설명 | | :--- | :--- | | 1. 발판 위에서 이동 | 지형 생성 규칙에 의해 만들어지는 **발판** 영역 위에서 이동하는 방식입니다. | | 2. 발판 밖에서 이동 | 발판 영역 밖에서 이동하는 방식입니다. | 참고로, 발판은 엔티티의 `CustomFootholdComponent`를 통해서도 추가할 수 있습니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 지형을 생성하는 가장 큰 이유는 엔티티가 이동할 수 있는 공간이 필요하기 때문일 것입니다. 메이플 타일에서 이동할 수 있는 영역을 **발판**이라고 합니다. 메이플 타일과 쌍을 이루는 [RigidbodyComponent](/docs?postId=750)의 이동 방식은 두 가지가 있습니다. **1. 발판 위에서 이동 2. 발판 밖에서 이동** 발판은 지형 생성 규칙에 의해 만들어지며 대부분 직관적으로 지형과 1:1 매칭됩니다. 발판 정보 버튼을 누르면 지형 위에 빨간색 선으로 발판 정보가 나타납니다. > **더 알아보기**
[task] | code [pass] | ⏳ 미판정 [title] | 메이플 타일맵 만들기 [question] | EntityService 를 사용하여 "/maps/map01/obj" 경로의 엔티티를 조회하고 위치를 변경하는 스크립트를 작성해줘 [answer] | 요청하신 경로 `/maps/map01/obj` 의 엔티티를 조회하여 위치를 변경하는 스크립트는 다음과 같습니다. ```lua Method: [server only] void OnBeginPlay() { -- _EntityService 를 사용하여 경로를 기반으로 엔티티를 조회합니다. local targetEntity = _EntityService:GetEntityByPath("/maps/map01/obj") -- 엔티티가 존재하는지 확인 후 위치를 변경합니다. if targetEntity th [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 메이플스토리 월드에서는 여러 가지 지형과 이동 방식을 제공하고 있습니다. 이번 시간에는 가장 기본이 되는 지형인 메이플스토리 형태의 타일 맵에 대해 알아보겠습니다. 메이플스토리 형태의 지형은 메이플스토리 형태의 이동과 매우 밀접한 연관이 있습니다. > **더 알아보기** > 메이플스토리 형태의 이동에 대해서는 [메이플 이동 개념 이해하기](/docs?postId=750)를 참고해주세요. # 메이플스토리 형태의 지형 메이플스토리 형태의 지형은 타일 에디터에서 MapleTile 모드를 선택한 후 만들 수
[task] | single_turn [pass] | ⏳ 미판정 [title] | TweenLogic을 활용해 엔티티 제어하기 [question] | MakeTween()에서 Alpha 값을 0으로 설정해도 엔티티가 완전히 사라지지 않고 컴포넌트가 남아있는 이유는 무엇인가요? [answer] | `MakeTween()`으로 Alpha 값을 0으로 변경하는 것은 단순히 엔티티의 시각적 투명도를 0으로 만드는 행위일 뿐, 엔티티 자체나 그 위에 부착된 컴포넌트를 삭제하는 동작이 아닙니다. 참고된 예제 코드에서 확인되듯, `MakeTween`을 통해 `SpriteRendererComponent`의 `Color.a`를 0으로 tween 처리한 후, 엔티티에서 해당 렌더링 컴포넌트가 실제로 제거되려면 `_TimerService:SetTimerOnce`와 같은 타이머를 별도로 사용하여 `self.Entity:RemoveCompone [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | `MakeTween()`에서 **Alpha** 값을 조절해 특정 엔티티가 점점 옅어지게 만들 수 있습니다. 1. 새로운 컴포넌트를 생성하고, 특정 엔티티에 추가합니다. 2. `MakeTween()`의 startvalue를 SpriteRenderer의 a로 지정하고, endvalue를 0으로 지정해 엔티티가 투명해질 수 있도록 아래와 같이 작성합니다. ```lua Method: [server only] void OnBeginPlay() { local spriteRenderer
[task] | single_turn [pass] | ⏳ 미판정 [title] | TweenLogic을 활용해 엔티티 제어하기 [question] | _TweenLogic:MakeTween()의 인자 중 startvalue와 endvalue를 반대로 지정하거나, duration을 0으로 설정했을 때 어떤 결과가 나오며, EaseType을 Linear에서 다른 값으로 변경하면 Alpha 변화에 어떤 영향을 주나요? [answer] | 제공된 문서에는 `_TweenLogic:MakeTween()`의 인자(startvalue, endvalue, duration)를 반대로 지정하거나 0으로 설정했을 때의 구체적인 동작, 그리고 `EaseType`을 `Linear`에서 다른 값으로 변경했을 때 Alpha 변화에 미치는 정확한 수학적 영향에 대한 정보가 포함되어 있지 않습니다. 문서에서 확인할 수 있는 정보는 다음과 같습니다: 1. **기본 사용법**: `MakeTween()`에서 `startvalue`를 현재 Alpha 값(예: `spriteRenderer.Col [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | `MakeTween()`에서 **Alpha** 값을 조절해 특정 엔티티가 점점 옅어지게 만들 수 있습니다. 1. 새로운 컴포넌트를 생성하고, 특정 엔티티에 추가합니다. 2. `MakeTween()`의 startvalue를 SpriteRenderer의 a로 지정하고, endvalue를 0으로 지정해 엔티티가 투명해질 수 있도록 아래와 같이 작성합니다. ```lua Method: [server only] void OnBeginPlay() { local spriteRenderer
[task] | code [pass] | ⏳ 미판정 [title] | TweenLogic을 활용해 엔티티 제어하기 [question] | 엔티티의 SpriteRendererComponent Alpha 값을 0.5초 동안 0으로 부드럽게 변경해 투명하게 만드는 스크립트를 작성해줘. [answer] | `MakeTween()`을 사용해 SpriteRenderer의 Alpha 값을 0.5초 동안 0으로 변경하는 스크립트는 다음과 같습니다. ```lua Method: [server only] void OnBeginPlay() { local spriteRenderer = self.Entity.SpriteRendererComponent local tweenAlpha = function(tweenValue) if isvalid(spriteRenderer) == false then retu [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | `MakeTween()`에서 **Alpha** 값을 조절해 특정 엔티티가 점점 옅어지게 만들 수 있습니다. 1. 새로운 컴포넌트를 생성하고, 특정 엔티티에 추가합니다. 2. `MakeTween()`의 startvalue를 SpriteRenderer의 a로 지정하고, endvalue를 0으로 지정해 엔티티가 투명해질 수 있도록 아래와 같이 작성합니다. ```lua Method: [server only] void OnBeginPlay() { local spriteRenderer
[task] | code [pass] | ⏳ 미판정 [title] | TweenLogic을 활용해 엔티티 제어하기 [question] | OnBeginPlay에서 실행되며, SpriteRendererComponent가 유효하지 않을 경우 Tween을 즉시 Destroy하고, 유효할 경우 Linear 이징으로 Alpha를 0으로 변경하는 스크립트를 작성해줘. [answer] | OnBeginPlay에서 SpriteRendererComponent의 유효성을 확인하고, 유효하지 않을 경우 Tween을 즉시 파괴하며, 유효할 경우 Linear 이징으로 Alpha를 0으로 변경하는 스크립트는 다음과 같습니다. ```lua Method: [server only] void OnBeginPlay() { local spriteRenderer = self.Entity.SpriteRendererComponent local tween -- tweener를 할당할 변수 미리 선언 local tweenAl [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | `MakeTween()`에서 **Alpha** 값을 조절해 특정 엔티티가 점점 옅어지게 만들 수 있습니다. 1. 새로운 컴포넌트를 생성하고, 특정 엔티티에 추가합니다. 2. `MakeTween()`의 startvalue를 SpriteRenderer의 a로 지정하고, endvalue를 0으로 지정해 엔티티가 투명해질 수 있도록 아래와 같이 작성합니다. ```lua Method: [server only] void OnBeginPlay() { local spriteRenderer
[task] | code [pass] | ⏳ 미판정 [title] | TweenLogic을 활용해 엔티티 제어하기 [question] | Tweener 객체의 SetOnEndCallback 함수를 활용하여 이동이 완료된 시점에 엔티티의 회전값을 180도로 변경하는 스크립트를 작성해줘 [answer] | Tweener 객체의 `SetOnEndCallback` 함수를 사용하여 이동이 완료된 시점에 엔티티의 회전값을 180도로 변경하는 스크립트는 다음과 같습니다. 참고: 제공된 문서에는 `SetOnEndCallback`이 Tweener 객체에 포함된다는 사실과, `TweenLogic`을 통해 Tweener를 생성하거나 재생할 수 있다는 정보가 있습니다. 하지만 `MoveTo` 함수가 Tweener를 반환하는지, 또는 `PlayTween`이 Tweener를 반환하는지에 대한 명시적인 서명이 문서에 없습니다. 문서의 예제 코드를 보면 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 [TweenLogic](/apiReference?postId=700)을 사용해 엔티티를 확대, 축소, 회전, 이동시킬 수 있습니다. [Tweener](/apiReference?postId=714)를 함께 확인해보세요. # TweenLogic 개념 **TweenLogic**은 엔티티에 애니메이션 효과를 줄 수 있는 다양한 함수를 제공합니다. 여러 프레임에 걸쳐 Entity의 위치나 크기를 변화시키거나 회전시킬 수 있습니다. 다양한 함수를 사용해 엔티티를 Tween 시켜 애니메이션을 한 번의 함수 호출로 간단
[task] | two_turn [pass] | ⏳ 미판정 [title] | TweenLogic을 활용해 엔티티 제어하기 [question] | 엔티티가 특정 중심점을 따라 무한히 회전하도록 설정하려면 어떤 프로퍼티와 메서드를 사용해야 하나요? [answer] | 엔티티가 특정 중심점을 따라 무한히 회전하도록 설정하려면 `Entity` 타입의 `RotateCenter` 프로퍼티와 `_TweenLogic:RotateAroundOffset()` 메서드를 사용해야 합니다. 아래는 이를 구현하는 스크립트 예시입니다. ```lua Property: [Sync] Entity RotateCenter = nil Method: [server only] void OnBeginPlay() { if self.RotateCenter == nil then do return end e [followup] | RotateCenter가 nil일 때의 예외 처리 로직과 OnEndPlay에서 tween 소멸 시 주의할 점을 구체적으로 설명해 주세요. [followup_answer] | 참고 문서에 근거하여 `RotateCenter`가 `nil`일 때의 예외 처리 로직과 `OnEndPlay`에서 tween 소멸 시 주의할 점을 설명합니다. ### 1. `RotateCenter`가 nil일 때의 예외 처리 로직 `RotateCenter` 프로퍼티가 `nil`인 경우, 중심점 엔티티가 지정되지 않은 상태이므로 회전 계산에 필요한 `offset`을 구할 수 없습니다. 따라서 `OnBeginPlay` 메서드 시작 부분에 `nil` 검사를 수행하여 함수를 즉시 종료(`return`)하는 로직을 포함해야 합니다. 문서에 [scores] | [judge_reason] | [source_doc] | `RotateTo()`를 활용해 엔티티를 회전시킬 수 있고, `TweenLogic:RotateAroundOffset()`를 활용해 특정 엔티티의 offset을 기준으로 따라다니게 회전시킬 수 있습니다. 1. 새로운 컴포넌트를 생성하고, 특정 엔티티에 추가합니다. 2. **angle**을 360도로 설정해 엔티티가 한 바퀴 돌 수 있게 작성합니다. ```lua Method: void OnBeginPlay() { self._T.tween = _TweenLogic:RotateTo(self.E
[task] | single_turn [pass] | ⏳ 미판정 [title] | TweenLogic을 활용해 엔티티 제어하기 [question] | Vector2를 매개변수로 받는 PlayTween을 x와 y 조작용으로 각각 두 번 호출하면 정상 동작하지 않는 이유는 무엇인가요? [answer] | Vector2를 매개변수로 받는 `PlayTween`을 x축과 y축 조정을 위해 각각 두 번 호출하면 정상적으로 동작하지 않습니다. 그 이유는 **Vector2는 x와 y 값을 하나의 쌍(pair)으로 취급하기 때문**입니다. 두 개의 Tween이 동시에 실행될 때, 각 Tween의 반환 값(현재 위치)이 동일한 `Vector2` 타입의 프로퍼티(예: `self.Entity.TransformComponent.Position`)에 할당되려 합니다. 이 과정에서 두 Tween이 서로의 반환 값을 **덮어쓰기(overwrite)** 하 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 위의 예시에서 `PlayTween()`은 마지막 매개 변수로 Action <number> tweenFunction를 받고 있습니다. tweenFunction은 매 프레임 호출되고, 매개 변수로 Tween이 시작된 후부터 Ease 결괏값을 받습니다. 만약 Tween이 시작된 후 1.2초가 지났다면 Ease의 결괏값은 Ease(self.posY, yDestination, tweenDuration, EaseType.BounceEaseOut, 1.2)가 됩니다. 그러므로 `function(val) self.posX = val end`는 E
[task] | code [pass] | ⏳ 미판정 [title] | 메이플 타일맵 만들기 [question] | TimerService 를 사용하여 3초 후 특정 동작이 실행되도록 타이머를 설정하는 스크립트를 작성해줘 [answer] | `_TimerService:SetTimerOnce` 메서드를 사용하면 지정된 시간(초)이 지난 후 특정 함수를 한 번 실행할 수 있습니다. 아래 예제는 스크립트가 실행된 후 3초가 지나면 `DoSomething` 함수가 호출되도록 설정하는 코드입니다. ```lua Method: [server only] void OnBeginPlay() { -- 3초 후 실행될 함수 정의 local function DoSomething() log("3초 후 실행된 동작입니다.") -- 여기에 3초 후에 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 메이플스토리 월드에서는 여러 가지 지형과 이동 방식을 제공하고 있습니다. 이번 시간에는 가장 기본이 되는 지형인 메이플스토리 형태의 타일 맵에 대해 알아보겠습니다. 메이플스토리 형태의 지형은 메이플스토리 형태의 이동과 매우 밀접한 연관이 있습니다. > **더 알아보기** > 메이플스토리 형태의 이동에 대해서는 [메이플 이동 개념 이해하기](/docs?postId=750)를 참고해주세요. # 메이플스토리 형태의 지형 메이플스토리 형태의 지형은 타일 에디터에서 MapleTile 모드를 선택한 후 만들 수
[task] | code [pass] | ⏳ 미판정 [title] | TweenLogic을 활용해 엔티티 제어하기 [question] | _TweenLogic:PlayTween() 과 _UtilLogic:RandomIntegerRange() 를 활용하여 공이 랜덤한 거리만큼 CubicEaseOut 으로 이동하는 스크립트를 작성해줘 [answer] | 참고 문서에 제시된 `TweenLogic` 가이드의 예제를 바탕으로, `_TweenLogic:PlayTween()`과 `_UtilLogic:RandomIntegerRange()`를 활용하여 공이 랜덤한 거리만큼 `CubicEaseOut` 이징으로 이동하는 스크립트를 작성했습니다. `_TweenLogic:PlayTween()`은 시작 값과 끝 값을 받아서 보간된 값을 콜백 함수로 전달하므로, 이 값을 프로퍼티에 저장한 후 `OnUpdate`에서 엔티티의 위치(`TransformComponent.Position`)에 할당하는 방식으로 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 높은 곳에서 공을 던졌을 때 공이 앞으로 나아감과 동시에 통통 튀게 만들어 봅시다. 1. 새로운 Model_Ball 모델을 생성합니다. TransformComponent, SpriteRendererComponent를 추가하고, 아래의 Ruid를 사용합니다. * SpriteRuid: d4dddd1f07d445939433f70cd1aa82fa 2. 새로운 BallComponent 생성하고, Model Ball에 추가합니다. 3. 공이 돌면서 날아가게 만들기 위해 `PlayTween()`과 `RotateTo()`를
[task] | single_turn [pass] | ⏳ 미판정 [title] | TweenLogic을 활용해 엔티티 제어하기 [question] | tween.LoopCount를 -1로 설정하고 LoopType을 PingPong으로 지정하면 Alpha 값이 어떻게 변화하며, AutoDestroy가 false인 상태에서 엔티티를 제거하려면 어떤 추가 코드가 필요한가요? [answer] | `TweenLogic`의 `MakeTween()`을 사용할 때 `LoopCount`를 `-1`로 설정하면 무한 반복 루프가 실행됩니다. 이때 `LoopType`을 `TweenLoopType.PingPong`으로 지정하면 Alpha 값은 시작 값과 종료 값 사이를 왕복하며 변화합니다. 참고 문서의 예제에서는 시작 값(SpriteRenderer의 a)에서 0으로 변하는 시간을 0.5초로 설정했습니다. 따라서 `PingPong` 모드에서는 Alpha 값이 **시작 값 → 0 → 시작 값**으로 1초 주기로 계속 반복되어, 엔티티가 점점 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | `MakeTween()`에서 **Alpha** 값을 조절해 특정 엔티티가 점점 옅어지게 만들 수 있습니다. 1. 새로운 컴포넌트를 생성하고, 특정 엔티티에 추가합니다. 2. `MakeTween()`의 startvalue를 SpriteRenderer의 a로 지정하고, endvalue를 0으로 지정해 엔티티가 투명해질 수 있도록 아래와 같이 작성합니다. ```lua Method: [server only] void OnBeginPlay() { local spriteRenderer
[task] | single_turn [pass] | ⏳ 미판정 [title] | TweenLogic을 활용해 엔티티 제어하기 [question] | _SpawnService:SpawnByModelId를 사용하여 모델 ID로 객체를 소환할 때 부모 엔티티를 지정하지 않으면 어떤 문제가 발생할 수 있나요? [answer] | 제공된 참고 문서에는 `_SpawnService:SpawnByModelId`의 파라미터에 대한 설명은 있지만, **부모 엔티티를 지정하지 않았을 때 발생하는 구체적인 문제나 결과에 대한 정보는 포함되어 있지 않습니다.** 문서에는 공격 시 공을 소환하는 예제 코드에서 `parent` 변수를 전달하는 방식만 보여줄 뿐, `parent`를 생략했을 때의 동작 방식(예: 루트 엔티티에 연결되는지, 위치가 어떻게 계산되는지 등)에 대한 설명이 없습니다. 따라서 해당 질문에 대해 정확한 답변을 드리기 어렵습니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 위의 예시에서 `PlayTween()`은 마지막 매개 변수로 Action <number> tweenFunction를 받고 있습니다. tweenFunction은 매 프레임 호출되고, 매개 변수로 Tween이 시작된 후부터 Ease 결괏값을 받습니다. 만약 Tween이 시작된 후 1.2초가 지났다면 Ease의 결괏값은 Ease(self.posY, yDestination, tweenDuration, EaseType.BounceEaseOut, 1.2)가 됩니다. 그러므로 `function(val) self.posX = val end`는 E
[task] | code [pass] | ⏳ 미판정 [title] | TweenLogic을 활용해 엔티티 제어하기 [question] | _TweenLogic:MakeTween을 호출하여 LoopCount를 -1, LoopType을 TweenLoopType.PingPong, AutoDestroy를 false로 설정하고 Play하는 방식으로 엔티티의 투명도가 반복적으로 변하는 스크립트를 작성해줘. [answer] | `_TweenLogic:MakeTween`을 사용하여 엔티티의 투명도(Alpha)를 반복적으로 변경하는 스크립트입니다. 참고 문서에 제시된 코드 예제를 기반으로, `LoopCount = -1`, `LoopType = TweenLoopType.PingPong`, `AutoDestroy = false` 속성을 설정하고 `Play()`를 호출하는 방식으로 작성했습니다. ```lua Method: [server only] void OnBeginPlay() { local spriteRenderer = self.Entity.Spri [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | `MakeTween()`에서 **Alpha** 값을 조절해 특정 엔티티가 점점 옅어지게 만들 수 있습니다. 1. 새로운 컴포넌트를 생성하고, 특정 엔티티에 추가합니다. 2. `MakeTween()`의 startvalue를 SpriteRenderer의 a로 지정하고, endvalue를 0으로 지정해 엔티티가 투명해질 수 있도록 아래와 같이 작성합니다. ```lua Method: [server only] void OnBeginPlay() { local spriteRenderer
[task] | single_turn [pass] | ⏳ 미판정 [title] | 메이플 타일맵 만들기 [question] | 지우개 커서에서 전체 지우개를 사용하다가 다른 엔티티까지 삭제되는 문제가 발생했는데, 타일만 지우려면 어떤 옵션을 설정해야 하나요? [answer] | 전체 지우개 커서는 지형뿐만 아니라 다른 엔티티까지 삭제할 수 있기 때문에, 타일만 지우고 싶다면 지우개 커서 옵션을 **TileOnly**로 설정해야 합니다. 반대로 타일 외 다른 엔티티만 지우고 싶다면 **TileExceptOnly** 옵션을 사용합니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 메이플스토리 월드에서는 여러 가지 지형과 이동 방식을 제공하고 있습니다. 이번 시간에는 가장 기본이 되는 지형인 메이플스토리 형태의 타일 맵에 대해 알아보겠습니다. 메이플스토리 형태의 지형은 메이플스토리 형태의 이동과 매우 밀접한 연관이 있습니다. > **더 알아보기** > 메이플스토리 형태의 이동에 대해서는 [메이플 이동 개념 이해하기](/docs?postId=750)를 참고해주세요. # 메이플스토리 형태의 지형 메이플스토리 형태의 지형은 타일 에디터에서 MapleTile 모드를 선택한 후 만들 수
[task] | code [pass] | ⏳ 미판정 [title] | TweenLogic을 활용해 엔티티 제어하기 [question] | _TweenLogic:RotateTo() 와 _UtilLogic:RandomIntegerRange() 를 조합하여 공이 랜덤한 각도로 회전하며 날아가는 스크립트를 작성해줘 [answer] | 공이 랜덤한 각도로 회전하며 날아가도록 `_TweenLogic:RotateTo()`와 `_UtilLogic:RandomIntegerRange()`를 조합한 스크립트는 다음과 같습니다. ```lua Property: [None] number posX = 0 [None] number posY = 0 Method: [server only] void OnBeginPlay() { local transform = self.Entity.TransformComponent self.posX = transform.Position.x [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 높은 곳에서 공을 던졌을 때 공이 앞으로 나아감과 동시에 통통 튀게 만들어 봅시다. 1. 새로운 Model_Ball 모델을 생성합니다. TransformComponent, SpriteRendererComponent를 추가하고, 아래의 Ruid를 사용합니다. * SpriteRuid: d4dddd1f07d445939433f70cd1aa82fa 2. 새로운 BallComponent 생성하고, Model Ball에 추가합니다. 3. 공이 돌면서 날아가게 만들기 위해 `PlayTween()`과 `RotateTo()`를
[task] | code [pass] | ⏳ 미판정 [title] | TweenLogic을 활용해 엔티티 제어하기 [question] | _TweenLogic 서비스의 MakeTween 메서드를 활용해 엔티티가 5초 후 SpriteRendererComponent가 제거되도록 타이머를 설정하고, 그 사이에 Alpha가 1에서 0으로 PingPong 루프되며 변하는 스크립트를 작성해줘. [answer] | `_TweenLogic:MakeTween`을 사용하여 SpriteRenderer의 Alpha를 1에서 0으로 PingPong 루프하도록 설정하고, 5초 후 해당 컴포넌트를 제거하는 스크립트는 다음과 같습니다. ```lua Method: [server only] void OnBeginPlay() { local spriteRenderer = self.Entity.SpriteRendererComponent local tween -- tweener를 할당할 변수 미리 선언 local tweenAlpha = funct [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | `MakeTween()`에서 **Alpha** 값을 조절해 특정 엔티티가 점점 옅어지게 만들 수 있습니다. 1. 새로운 컴포넌트를 생성하고, 특정 엔티티에 추가합니다. 2. `MakeTween()`의 startvalue를 SpriteRenderer의 a로 지정하고, endvalue를 0으로 지정해 엔티티가 투명해질 수 있도록 아래와 같이 작성합니다. ```lua Method: [server only] void OnBeginPlay() { local spriteRenderer
[task] | code [pass] | ⏳ 미판정 [title] | TweenLogic을 활용해 엔티티 제어하기 [question] | OnUpdate() 에서 self.posX, self.posY 를 읽어 _TweenLogic 으로 계산된 값을 Entity.TransformComponent.Position 에 할당하는 스크립트를 작성해줘 [answer] | 제공된 문서의 예제를 기준으로, `_TweenLogic:PlayTween`을 통해 `self.posX`와 `self.posY`가 업데이트되고, `OnUpdate`에서 그 값을 `Entity.TransformComponent.Position`에 적용하는 스크립트는 다음과 같습니다. 문서에서 보여준 방식은 `OnBeginPlay`에서 Tween을 시작하여 콜백 함수를 통해 프로퍼티를 변경하고, `OnUpdate`에서 매 프레임마다 변경된 프로퍼티 값을 Transform에 할당하는 구조입니다. ```lua Property: [None [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 높은 곳에서 공을 던졌을 때 공이 앞으로 나아감과 동시에 통통 튀게 만들어 봅시다. 1. 새로운 Model_Ball 모델을 생성합니다. TransformComponent, SpriteRendererComponent를 추가하고, 아래의 Ruid를 사용합니다. * SpriteRuid: d4dddd1f07d445939433f70cd1aa82fa 2. 새로운 BallComponent 생성하고, Model Ball에 추가합니다. 3. 공이 돌면서 날아가게 만들기 위해 `PlayTween()`과 `RotateTo()`를
[task] | single_turn [pass] | ⏳ 미판정 [title] | 메이플 타일맵 만들기 [question] | 지형이 아닌 일반 엔티티에도 발판을 추가하고 싶다면 어떤 컴포넌트를 사용해야 하나요? [answer] | 지형이 아닌 일반 엔티티에도 발판을 추가하고 싶다면 `CustomFootholdComponent`를 사용해야 합니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 지형을 생성하는 가장 큰 이유는 엔티티가 이동할 수 있는 공간이 필요하기 때문일 것입니다. 메이플 타일에서 이동할 수 있는 영역을 **발판**이라고 합니다. 메이플 타일과 쌍을 이루는 [RigidbodyComponent](/docs?postId=750)의 이동 방식은 두 가지가 있습니다. **1. 발판 위에서 이동 2. 발판 밖에서 이동** 발판은 지형 생성 규칙에 의해 만들어지며 대부분 직관적으로 지형과 1:1 매칭됩니다. 발판 정보 버튼을 누르면 지형 위에 빨간색 선으로 발판 정보가 나타납니다. > **더 알아보기**
[task] | single_turn [pass] | ⏳ 미판정 [title] | 메이플 타일맵 만들기 [question] | 한 개의 맵에서 여러 가지 TileSet을 사용하고 싶을 때 Map Layer를 추가해야 하는 구체적인 이유는 무엇인가요? [answer] | 한 개의 맵에서 여러 가지 TileSet을 사용하려면 Map Layer를 추가해야 하는 구체적인 이유는 **하나의 Map Layer에서는 하나의 TileSet만 사용할 수 있기 때문**입니다. 문서에 따르면 하나의 Map Layer에 배치된 지형은 해당 레이어에 지정된 단일 TileSet으로만 생성됩니다. 따라서 다른 모양이나 스타일의 타일(다른 TileSet)을 같은 맵에서 함께 사용하려면, 각기 다른 TileSet을 설정할 수 있는 새로운 Map Layer를 추가해야 합니다. 이렇게 하면 레이어별로 다른 TileSet을 지정하 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 메이플스토리 월드에서는 여러 가지 지형과 이동 방식을 제공하고 있습니다. 이번 시간에는 가장 기본이 되는 지형인 메이플스토리 형태의 타일 맵에 대해 알아보겠습니다. 메이플스토리 형태의 지형은 메이플스토리 형태의 이동과 매우 밀접한 연관이 있습니다. > **더 알아보기** > 메이플스토리 형태의 이동에 대해서는 [메이플 이동 개념 이해하기](/docs?postId=750)를 참고해주세요. # 메이플스토리 형태의 지형 메이플스토리 형태의 지형은 타일 에디터에서 MapleTile 모드를 선택한 후 만들 수
[task] | single_turn [pass] | ⏳ 미판정 [title] | 메이플 타일맵 만들기 [question] | MapleTile 모드로 지형을 만들었는데 다른 타일 맵 모드로 변환하면 기존 지형이 초기화되는 이유와 방지 방법은 무엇인가요? [answer] | 하나의 맵에서는 하나의 타일 맵 모드만 사용할 수 있기 때문입니다. MapleTile 모드로 지형을 만든 상태에서 다른 타일 맵 모드로 변환하면 기존에 생성된 지형 데이터가 새 모드와 호환되지 않아 모두 초기화됩니다. 이 문제를 방지하기 위해서는 맵을 처음 생성할 때 사용할 타일 맵 모드를 확정하고, 이후 다른 타일 맵 모드로 변환하지 않는 것이 가장 확실한 방법입니다. 만약 다른 스타일의 지형이 필요하다면, 기존 맵을 그대로 두지 않고 새 맵을 생성하여 원하는 타일 맵 모드로 설정한 후 지형을 다시 제작해야 합니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 메이플스토리 월드에서는 여러 가지 지형과 이동 방식을 제공하고 있습니다. 이번 시간에는 가장 기본이 되는 지형인 메이플스토리 형태의 타일 맵에 대해 알아보겠습니다. 메이플스토리 형태의 지형은 메이플스토리 형태의 이동과 매우 밀접한 연관이 있습니다. > **더 알아보기** > 메이플스토리 형태의 이동에 대해서는 [메이플 이동 개념 이해하기](/docs?postId=750)를 참고해주세요. # 메이플스토리 형태의 지형 메이플스토리 형태의 지형은 타일 에디터에서 MapleTile 모드를 선택한 후 만들 수
[task] | single_turn [pass] | ⏳ 미판정 [title] | TweenLogic을 활용해 엔티티 제어하기 [question] | isvalid(spriteRenderer) 체크를 통해 tween:Destroy()를 호출하는 로직이 포함된 이유는 무엇이며, 이 부분이 누락될 경우 발생할 수 있는 오류는 무엇인가요? [answer] | `isvalid(spriteRenderer)` 체크를 통해 `tween:Destroy()`를 호출하는 로직이 포함된 이유는, **타겟이 되는 엔티티나 스프라이트 렌더러가 존재하지 않게 되었을 때(삭제되었을 때) 더 이상 유효하지 않은 대상에 접근하는 것을 방지하기 위함**입니다. Tween은 특정 시간(예: 0.5초) 동안 주기적으로 콜백 함수(`tweenAlpha`)를 실행합니다. 만약 이Tween이 실행되는 동안 엔티티가 삭제되거나 `SpriteRendererComponent`가 제거되면, `spriteRenderer` 변수는 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | `MakeTween()`에서 **Alpha** 값을 조절해 특정 엔티티가 점점 옅어지게 만들 수 있습니다. 1. 새로운 컴포넌트를 생성하고, 특정 엔티티에 추가합니다. 2. `MakeTween()`의 startvalue를 SpriteRenderer의 a로 지정하고, endvalue를 0으로 지정해 엔티티가 투명해질 수 있도록 아래와 같이 작성합니다. ```lua Method: [server only] void OnBeginPlay() { local spriteRenderer
[task] | single_turn [pass] | ⏳ 미판정 [title] | 메이플 타일맵 만들기 [question] | 지형과 발판이 항상 1:1로 매칭되는 것은 아닌데, 발판 정보 버튼을 눌러서 빨간색 선으로 확인하는 방법은 무엇인가요? [answer] | 문서에 따르면 발판은 지형 생성 규칙에 의해 만들어지며 대부분 지형과 1:1로 매칭되지만, 항상 그렇지는 않습니다. 발판의 실제 범위를 확인하려면 **발판 정보 버튼**을 누르면 됩니다. 버튼을 누르면 지형 위에 **빨간색 선**으로 발판 정보가 표시됩니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 지형을 생성하는 가장 큰 이유는 엔티티가 이동할 수 있는 공간이 필요하기 때문일 것입니다. 메이플 타일에서 이동할 수 있는 영역을 **발판**이라고 합니다. 메이플 타일과 쌍을 이루는 [RigidbodyComponent](/docs?postId=750)의 이동 방식은 두 가지가 있습니다. **1. 발판 위에서 이동 2. 발판 밖에서 이동** 발판은 지형 생성 규칙에 의해 만들어지며 대부분 직관적으로 지형과 1:1 매칭됩니다. 발판 정보 버튼을 누르면 지형 위에 빨간색 선으로 발판 정보가 나타납니다. > **더 알아보기**
[task] | instruction_following [pass] | ⏳ 미판정 [title] | RectTileMap에서 캐릭터 이동 제어 [question] | `HandleRectTileEnterEvent` 핸들러 내에서 캐릭터의 속도가 증가하기 위해 충족되어야 하는 두 가지 조건을 3문장 이내로 요약하세요. [answer] | `HandleRectTileEnterEvent` 핸들러 내에서 캐릭터의 속도가 증가하기 위해 충족되어야 하는 두 가지 조건은 다음과 같습니다. 첫째, 진입한 타일의 이름이 "Buff"여야 합니다. 둘째, 해당 캐릭터가 지면에 있어야 합니다(`Kinematicbody:IsOnGround()`). [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] | 선 칠하기 모드에서 보조선의 점, 선, 면을 클릭했을 때 각각 생성되는 지형의 모양 차이가 어떻게 다른가요? [answer] | 선 칠하기 모드에서 격자 형태의 보조선(그리드)을 클릭할 때, 클릭 위치에 따라 생성되는 지형의 모양은 다음과 같이 다릅니다. **1. 점을 클릭한 경우** * 보조선이 교차하는 **점**을 클릭하면, 해당 지점에 **작은 지형**이 생성됩니다. **2. 선을 클릭한 경우** * 보조선의 **선**을 클릭하면, 클릭한 선의 **양쪽 교차 지점까지 포함**하여 선 형태의 지형이 생성됩니다. **3. 면을 클릭한 경우** * 보조선으로 구분된 **면**을 클릭하면, 그 **면의 테두리 선을 포함**하는 지형이 생성됩니다 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 메이플스토리 월드에서는 여러 가지 지형과 이동 방식을 제공하고 있습니다. 이번 시간에는 가장 기본이 되는 지형인 메이플스토리 형태의 타일 맵에 대해 알아보겠습니다. 메이플스토리 형태의 지형은 메이플스토리 형태의 이동과 매우 밀접한 연관이 있습니다. > **더 알아보기** > 메이플스토리 형태의 이동에 대해서는 [메이플 이동 개념 이해하기](/docs?postId=750)를 참고해주세요. # 메이플스토리 형태의 지형 메이플스토리 형태의 지형은 타일 에디터에서 MapleTile 모드를 선택한 후 만들 수