← 목록

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

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

[task] | single_turn [pass] | ⏳ 미판정 [title] | TweenLogic을 활용해 엔티티 제어하기 [question] | Ease 함수를 호출했는데 엔티티가 자동으로 움직이지 않고 멈춰 있는데, 왜 그런 건가요? [answer] | Ease 함수는 Tweener 객체를 생성하지 않으며, 프레임마다 자동으로 업데이트되지 않기 때문입니다. 문서에 따르면, `Ease()` 함수는 특정 진행률에서의 반환 값(숫자)만 계산하여 돌려주는 함수일 뿐, 엔티티의 위치나 크기를 직접 변경하지 않습니다. 또한 이 함수는 호출한 즉시 한 번만 값을 반환하고, 이후 프레임에서는 자동으로 다시 계산되지 않습니다. 따라서 엔티티가 자동으로 움직이지 않고 멈춰 보이는 현상은 정상적인 동작이며, 움직임을 원한다면 크리에이터가 `OnUpdate`와 같은 매 프레임 실행되는 함수 안에서 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 [TweenLogic](/apiReference?postId=700)을 사용해 엔티티를 확대, 축소, 회전, 이동시킬 수 있습니다. [Tweener](/apiReference?postId=714)를 함께 확인해보세요. # TweenLogic 개념 **TweenLogic**은 엔티티에 애니메이션 효과를 줄 수 있는 다양한 함수를 제공합니다. 여러 프레임에 걸쳐 Entity의 위치나 크기를 변화시키거나 회전시킬 수 있습니다. 다양한 함수를 사용해 엔티티를 Tween 시켜 애니메이션을 한 번의 함수 호출로 간단

[task] | code [pass] | ⏳ 미판정 [title] | 기본 UI 컴포넌트 [question] | ButtonComponent 의 ButtonClickEvent 를 감지하여 TextComponent 의 Font 를 Default, Maple, Bazzi, Football 순서로 순환 변경하는 스크립트를 작성해줘 [answer] | ButtonComponent의 ButtonClickEvent를 감지하여 TextComponent의 Font를 순환 변경하는 스크립트는 다음과 같습니다. 참고 문서에 제공된 API 및 프로퍼티 정의에 기반하여, 버튼 클릭 시 텍스트 폰트를 `Default`, `Maple`, `Bazzi`, `Football` 순서로 변경하는 로직을 구현했습니다. ```lua Property: [None] string currentFont = "Default" Method: [client only] void OnBeginPlay() { - [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | [TextComponent](/apiReference/Components/TextComponent)는 UI에 텍스트를 표시하는 컴포넌트입니다. **SpriteGUIRendererComponent**와 같이 사용할 경우 **SpriteGUIRendererComponent**보다 **TextComponent**를 위에 그립니다. UI 엔티티에 **TextComponent**가 포함되어 있으면 엔티티를 더블클릭하여 손쉽게 텍스트를 편집할 수 있습니다. 주요 프로퍼티는 다음과 같습니다. | 번호 | 항목 | 설명 | | :---: |

[task] | single_turn [pass] | ⏳ 미판정 [title] | Callback [question] | SetAsync 메서드의 콜백에서 self:function() 형태로 작성하면 왜 동작하지 않는지, 올바른 호출 문법이 무엇인지 궁금합니다. [answer] | mLua에서 `SetAsync`와 같은 비동기 처리의 콜백 함수 내부에서 컴포넌트의 메서드를 호출할 때 `self:function()` 형식을 사용하면 동작하지 않습니다. 이는 콜백 함수가 컴포넌트 객체(`self`)와 직접적으로 연결되지 않은 독립된 함수(클로저)로 실행되기 때문입니다. Lua에서 `self:function()` 문법은 해당 함수가 `self` 객체의 메서드인 것처럼 `self`를 함수의 첫 번째 인자로 자동 전달해 주는 콜론 콜론(:) 문법입니다. 그러나 비동기 콜백은 컴포넌트 메서드 호출 스택이 아닌 별도 컨 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 처리가 완료되었을 때 Callback 함수를 실행하는 예시입니다. ```lua Property: [Sync] number Power = 0 Method: [server only] void OnBeginPlay () { local data = _DataStorageService:GetGlobalDataStorage("data") self.Power = 20 local callBack = function (errorcode, key) log("Power is saved")

[task] | single_turn [pass] | ⏳ 미판정 [title] | TweenLogic을 활용해 엔티티 제어하기 [question] | MoveTo() 호출 후 반환되는 Tweener 객체의 AutoDestroy를 false로 설정했는데, 왜 월드가 무거워지는지 걱정되는 건가요? [answer] | `AutoDestroy`를 `false`로 설정하면 트윈이 완료된 후에도 Tweener 객체가 자동으로 제거되지 않고 메모리에 남아 있게 됩니다. 이 경우 `LoopCount`를 `-1`로 설정하거나 지연 시간 등을 조정해 트윈이 계속 실행되도록 하는 경우, 의도치 않게 더 이상 작동하지 않는 Tweener 객체가 계속 쌓일 수 있습니다. 이러한 불필요한 Tweener 객체가 지나치게 많아지면 월드에 성능 하락(무거워짐)이 생길 수 있습니다. 따라서 컴포넌트의 `OnEndPlay` 시점이나 트윈을 시킬 대상 엔티티가 파괴되는 시 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | `MoveTo()`를 활용해 엔티티를 이동시킬 수 있습니다. 1. 새로운 컴포넌트를 생성하고, 특정 엔티티에 추가합니다. 2. 엔티티가 이동할 목적지, 시간, EaseType을 작성합니다. 3. 반환하는 Tweener의 지연 시간, 반복 타입, 횟수, 자동 파괴 여부 처리를 함께 작성합니다. 자동 파괴를 false로 하거나 LoopCount를 -1로 설정해 트윈이 계속 실행되도록 하는 경우 의도치 않게 더 이상 작동하지 않는 Tweener 객체가 쌓일 수도 있습니다. 이러한 Tweener 객체가 지나치게 많아지면 월드에 성능 하

[task] | single_turn [pass] | ⏳ 미판정 [title] | TweenLogic을 활용해 엔티티 제어하기 [question] | RotateAroundOffset에서 offset을 Vector2로 변환하기 위해 ToVector2()를 호출하는데, 이 offset은 어떤 두 엔티티의 위치 차이를 의미하나요? [answer] | `RotateAroundOffset`에서 사용하는 `offset`은 **중심 엔티티(`RotateCenter`)의 위치**와 **회전할 대상 엔티티(`self.Entity`)의 위치** 사이의 차이를 의미합니다. 코드에서는 다음과 같이 계산됩니다: ```lua local offset = self.RotateCenter.TransformComponent.Position - self.Entity.TransformComponent.Position ``` 즉, 대상 엔티티가 중심 엔티티를 기준으로 얼마나 떨어져 있는지를 나타내는 벡터이 [followup] | [followup_answer] | [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] | LoopCount를 -1로 지정해서 무한 반복 트윈을 돌릴 때, 성능 저하를 방지하기 위해 반드시 지켜야 할 처리 방법은 무엇인가요? [answer] | LoopCount를 -1로 지정하여 무한 반복 트윈을 실행할 때, 의도치 않게 작동하지 않는 Tweener 객체가 누적되어 월드의 성능이 저하될 수 있습니다. 이를 방지하기 위해 적절한 시점에 Tweener를 반드시 파괴해야 합니다. 권장하는 처리 방법은 다음과 같습니다. 1. **AutoDestroy 설정**: 트윈 생성 시 `AutoDestroy` 속성을 `false`로 설정합니다. 2. **명시적 파괴**: 컴포넌트의 `OnEndPlay()` 생명주기 메서드 또는 Tween을 적용할 대상 엔티티가 파괴되는 시점에 Twe [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | `MoveTo()`를 활용해 엔티티를 이동시킬 수 있습니다. 1. 새로운 컴포넌트를 생성하고, 특정 엔티티에 추가합니다. 2. 엔티티가 이동할 목적지, 시간, EaseType을 작성합니다. 3. 반환하는 Tweener의 지연 시간, 반복 타입, 횟수, 자동 파괴 여부 처리를 함께 작성합니다. 자동 파괴를 false로 하거나 LoopCount를 -1로 설정해 트윈이 계속 실행되도록 하는 경우 의도치 않게 더 이상 작동하지 않는 Tweener 객체가 쌓일 수도 있습니다. 이러한 Tweener 객체가 지나치게 많아지면 월드에 성능 하

[task] | single_turn [pass] | ⏳ 미판정 [title] | TweenLogic을 활용해 엔티티 제어하기 [question] | Tweener 객체를 반환하는 함수와 그렇지 않은 함수의 차이가 무엇이며, SetOnEndCallback을 사용하려면 어떤 방식으로 생성해야 하나요? [answer] | Tweener 객체를 반환하는 함수와 그렇지 않은 함수의 차이는 **자동 업데이트 여부**와 **추가 기능 지원 여부**입니다. 1. **Tweener 객체를 반환하는 함수 (`MakeTween`, `PlayTween`)**: * 호출 시 **Tweener 객체**를 반환합니다. * `PlayTween`으로 생성된 객체는 자동으로 재생되며, `MakeTween`으로 생성된 객체는 `Play()` 함수가 호출되어야 재생됩니다. * TweenLogic에 의해 **매 프레임 자동으로 업데이트**됩니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 [TweenLogic](/apiReference?postId=700)을 사용해 엔티티를 확대, 축소, 회전, 이동시킬 수 있습니다. [Tweener](/apiReference?postId=714)를 함께 확인해보세요. # TweenLogic 개념 **TweenLogic**은 엔티티에 애니메이션 효과를 줄 수 있는 다양한 함수를 제공합니다. 여러 프레임에 걸쳐 Entity의 위치나 크기를 변화시키거나 회전시킬 수 있습니다. 다양한 함수를 사용해 엔티티를 Tween 시켜 애니메이션을 한 번의 함수 호출로 간단

[task] | single_turn [pass] | ⏳ 미판정 [title] | TweenLogic을 활용해 엔티티 제어하기 [question] | RotateAroundOffset의 파라미터 중 offset:ToVector2() 뒤에 true 값을 전달하는 것은 어떤 동작을 의미하나요? [answer] | 제공된 문서에는 `RotateAroundOffset()` 메서드의 파라미터 목록이나 각 파라미터의 구체적인 의미(특히 `true` 값이 전달되는 파라미터의 역할)에 대한 설명이 포함되어 있지 않습니다. 문서에는 `_TweenLogic:RotateAroundOffset(self.Entity, 360, offset:ToVector2(), true, 5, EaseType.Linear)`라는 코드 예제만 제시되어 있으며, 해당 `true` 값이 어떤 동작(예: 시계 방향/반시계 방향, 또는 다른 특정 옵션)을 의미하는지에 대한 정의나 설 [followup] | [followup_answer] | [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] | instruction_following [pass] | ⏳ 미판정 [title] | TweenLogic을 활용해 엔티티 제어하기 [question] | 코드만 출력하고 설명은 주석으로 작성하여, BounceEaseOut을 사용해 Y축 위치를 0.3으로 이동시키는 Tween 로직을 구현하세요. [answer] | ```lua Property: [None] number posY = 0 Method: [server only] void OnBeginPlay() { -- 현재 Y축 위치를 프로퍼티에 저장 self.posY = self.Entity.TransformComponent.Position.y -- 목표 Y축 위치(0.3)와 Tween 지속 시간 설정 local yDestination = 0.3 local tweenDuration = 3 -- BounceEaseOut 이징을 사용하 [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] | ScaleTo를 사용할 때 크기가 커졌다 작아지는 왕복 운동 효과를 주고 싶다면 LoopType을 어떻게 설정해야 하나요? [answer] | `ScaleTo()`를 사용하면서 크기가 커졌다 작아지는 왕복 운동(Ping Pong) 효과를 주고 싶다면, Tween 객체의 `LoopType` 프로퍼티를 `TweenLoopType.PingPong`으로 설정해야 합니다. 아래는 `ScaleTo`를 이용해 엔티티 크기를 2.5배로 확대하고, 다시 원래 크기로 축소하는 왕복 운동을 무한히 반복하는 예시입니다. ```lua Method: [server only] void OnBeginPlay() { local tween = _TweenLogic:ScaleTo(self.Ent [followup] | [followup_answer] | [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] | TweenLogic을 활용해 엔티티 제어하기 [question] | TweenLogic의 Ease 함수를 직접 매 프레임 호출하여 특정 진행률에 따른 값을 계산해 엔티티의 투명도를 변경하는 스크립트를 작성해줘 [answer] | ## TweenLogic Ease 함수를 활용한 엔티티 투명도 변경 `TweenLogic`의 `Ease` 함수는 `Tweener` 객체를 생성하지 않고, 크리에이터가 직접 매 프레임 호출하여 특정 진행률(0~1)에 따른 값을 계산하는 함수입니다. 이 함수의 반환 값을 엔티티의 투명도(`Opacity`)에 적용하여, 원하는 이징(Easing) 곡선에 따라 부드럽게 투명도를 변화시킬 수 있습니다. ### 핵심 포인트 1. **`_TweenLogic:Ease` 호출**: `OnUpdate`에서 매 프레임 `elapsedTime`을 업 [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] | Ease 함수가 Tweener 객체 생성 및 자동 업데이트와 어떻게 다른가요? [answer] | **Ease 함수**와 **Tweener 객체(자동 업데이트)**의 주요 차이점은 다음과 같습니다. 1. **Tweener 객체 생성 여부**: * **Ease 함수**: Tweener 객체를 생성하지 않습니다. * **Tweener 객체**: `MakeTween()`이나 `PlayTween()` 등을 통해 Tweener 객체가 생성됩니다. 2. **자동 업데이트 여부**: * **Ease 함수**: 프레임마다 자동으로 업데이트되지 않습니다. 움직임이 필요할 경우 크리에이터가 직접 매 프레임 [followup] | `Ease()` 함수를 직접 매 프레임 호출해야 하는 상황에서의 코드 작성 예시와, `PlayTween()`으로 자동 재생되는 경우와의 차이점을 알려주세요. [followup_answer] | `Ease()` 함수를 직접 매 프레임 호출하는 방식과 `PlayTween()`으로 자동 재생되는 방식의 차이와 코드 예시는 다음과 같습니다. ### 1. `PlayTween()`으로 자동 재생되는 경우 `PlayTween()`은 호출 시 Tweener 객체를 생성하고 자동으로 재생되며, TweenLogic에 의해 매 프레임 자동으로 업데이트됩니다. 크리에이터가 매 프레임마다 값을 계산할 필요 없이 한 번의 함수 호출로 애니메이션이 진행됩니다. ```lua Method: [server only] void OnBeginPlay ( [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 [TweenLogic](/apiReference?postId=700)을 사용해 엔티티를 확대, 축소, 회전, 이동시킬 수 있습니다. [Tweener](/apiReference?postId=714)를 함께 확인해보세요. # TweenLogic 개념 **TweenLogic**은 엔티티에 애니메이션 효과를 줄 수 있는 다양한 함수를 제공합니다. 여러 프레임에 걸쳐 Entity의 위치나 크기를 변화시키거나 회전시킬 수 있습니다. 다양한 함수를 사용해 엔티티를 Tween 시켜 애니메이션을 한 번의 함수 호출로 간단

[task] | code [pass] | ⏳ 미판정 [title] | Callback [question] | _DataStorageService의 SetAsync 메서드와 콜백 함수를 활용하여 OnBeginPlay에서 캐릭터의 파워 값(20)을 글로벌 데이터 저장소에 저장하고, 저장 완료 시 "Power is saved" 로그를 출력하는 스크립트를 작성해줘 [answer] | 요청하신 `_DataStorageService:SetAsync` 메서드와 콜백 함수를 사용하여 파워 값을 저장하는 스크립트는 다음과 같습니다. ```lua Property: [Sync] number Power = 0 Method: [server only] void OnBeginPlay() { local data = _DataStorageService:GetGlobalDataStorage("data") self.Power = 20 local callBack = function (errorco [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 처리가 완료되었을 때 Callback 함수를 실행하는 예시입니다. ```lua Property: [Sync] number Power = 0 Method: [server only] void OnBeginPlay () { local data = _DataStorageService:GetGlobalDataStorage("data") self.Power = 20 local callBack = function (errorcode, key) log("Power is saved")

[task] | single_turn [pass] | ⏳ 미판정 [title] | TweenLogic을 활용해 엔티티 제어하기 [question] | RotateTo와 RotateAroundOffset 중 특정 엔티티를 기준으로 다른 엔티티가 회전하려면 어떤 함수를 사용해야 하나요? [answer] | 특정 엔티티를 기준으로 다른 엔티티가 회전하려면 `TweenLogic:RotateAroundOffset()` 함수를 사용해야 합니다. `RotateTo()`는 엔티티 자체를 회전시키는 용도이며, `RotateAroundOffset()`는 특정 엔티티의 offset(중심점)을 기준으로 따라다니게 회전시킬 때 사용합니다. 중심 엔티티를 따라 돌게 하는 mLua 스크립트 예제는 다음과 같습니다. ```lua Property: [Sync] Entity RotateCenter = nil Method: [server only] [followup] | [followup_answer] | [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] | Callback [question] | _DataStorageService:GetGlobalDataStorage("data")로 저장소를 얻어 SetAsync로 Power 값을 문자열 변환하여 저장하고, 콜백 함수에서 errorcode와 key 인자를 받아 로그를 기록하는 OnBeginPlay 구현 스크립트를 작성해줘 [answer] | 요청하신 기능을 구현한 mLua 스크립트입니다. ```lua Property: [Sync] number Power = 0 Method: [server only] void OnBeginPlay() { local data = _DataStorageService:GetGlobalDataStorage("data") self.Power = 20 local callBack = function(errorcode, key) log("Power is saved") end [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 처리가 완료되었을 때 Callback 함수를 실행하는 예시입니다. ```lua Property: [Sync] number Power = 0 Method: [server only] void OnBeginPlay () { local data = _DataStorageService:GetGlobalDataStorage("data") self.Power = 20 local callBack = function (errorcode, key) log("Power is saved")

[task] | two_turn [pass] | ⏳ 미판정 [title] | TweenLogic을 활용해 엔티티 제어하기 [question] | PlayTween의 tweenFunction 매개변수에서 Ease 결괏값이 어떻게 계산되고 적용되는지 설명해 주세요. [answer] | `PlayTween`의 마지막 매개변수로 전달되는 `tweenFunction`은 Tween이 진행되는 동안 매 프레임마다 호출되는 함수입니다. 이 함수는 Tween 시작 시점부터 현재까지 경과한 시간 동안의 `Ease` 계산 결과를 매개변수로 받아옵니다. 구체적인 계산과 적용 과정은 다음과 같습니다. 1. **Ease 결괏값 계산**: Tween이 시작된 후 특정 시간(예: 1.2초)이 지났다면, `tweenFunction`에 전달되는 값은 `Ease(시작값, 목표값, Tween 지속시간, Ease 유형, 경과시간)` 함수 [followup] | Vector2를 매개변수로 받는 PlayTween을 x, y 조작용으로 두 번 호출했을 때 정상 동작하지 않는 이유와 그 예시 코드를 알려주세요. [followup_answer] | `Vector2`를 매개변수로 받는 `PlayTween`을 X축과 Y축을 각각 조작하기 위해 두 번 호출하면 정상적으로 동작하지 않습니다. 그 이유는 `Vector2`가 x, y 값을 하나의 쌍으로 묶어 사용하기 때문입니다. 두 개의 Tween이 동시에 실행될 때, 각각의 Tween은 `tweenFunction`을 통해 전체 `Vector2` 값을 반환합니다. 이 과정에서 두 번째 Tween의 반환 값이 첫 번째 Tween이 설정한 값을 덮어쓰기(Overwrite) 때문에, 의도한 대로 X축과 Y축이 독립적으로 보간되지 않습니다. [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] | instruction_following [pass] | ⏳ 미판정 [title] | 메이플 타일맵 만들기 [question] | 타일 맵 모드 변경 시 기존 지형이 초기화되는 이유와 하나의 맵에서 가능한 타일 맵 모드 수를 3문장 이내로 설명하세요. [answer] | 하나의 맵에서는 하나의 타일 맵 모드만 사용할 수 있습니다. 다른 타일 맵 모드로 변환하면 기존에 생성된 지형이 모두 초기화됩니다. 이 때문에 모드 변경 전 기존 지형이 사라지는 점을 주의해야 합니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 메이플스토리 월드에서는 여러 가지 지형과 이동 방식을 제공하고 있습니다. 이번 시간에는 가장 기본이 되는 지형인 메이플스토리 형태의 타일 맵에 대해 알아보겠습니다. 메이플스토리 형태의 지형은 메이플스토리 형태의 이동과 매우 밀접한 연관이 있습니다. > **더 알아보기** > 메이플스토리 형태의 이동에 대해서는 [메이플 이동 개념 이해하기](/docs?postId=750)를 참고해주세요. # 메이플스토리 형태의 지형 메이플스토리 형태의 지형은 타일 에디터에서 MapleTile 모드를 선택한 후 만들 수

[task] | instruction_following [pass] | ⏳ 미판정 [title] | 메이플 타일맵 만들기 [question] | 지우개 커서에서 타일만 지우거나 타일 외 다른 엔티티만 지우기 위한 옵션 이름을 코드만 출력하고 설명은 주석으로 작성하세요. [answer] | ```lua -- TileOnly: 타일만 지우기 TileOnly -- TileExceptOnly: 타일 외 다른 엔티티만 지우기 TileExceptOnly ``` [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 메이플스토리 월드에서는 여러 가지 지형과 이동 방식을 제공하고 있습니다. 이번 시간에는 가장 기본이 되는 지형인 메이플스토리 형태의 타일 맵에 대해 알아보겠습니다. 메이플스토리 형태의 지형은 메이플스토리 형태의 이동과 매우 밀접한 연관이 있습니다. > **더 알아보기** > 메이플스토리 형태의 이동에 대해서는 [메이플 이동 개념 이해하기](/docs?postId=750)를 참고해주세요. # 메이플스토리 형태의 지형 메이플스토리 형태의 지형은 타일 에디터에서 MapleTile 모드를 선택한 후 만들 수

[task] | instruction_following [pass] | ⏳ 미판정 [title] | TweenLogic을 활용해 엔티티 제어하기 [question] | PlayTween의 tweenFunction 매개 변수가 매 프레임 호출될 때 Ease 함수의 결괏값을 어떻게 처리하는지 3문장 이내로 설명하세요. [answer] | `PlayTween`의 마지막 매개 변수인 `tweenFunction`은 매 프레임마다 호출되며, Tween 시작 시점부터 경과한 시간만큼의 Ease 결괏값을 매개 변수로 전달받습니다. 이 함수 내부에서는 전달된 Ease 결괏값을 받아 해당 값으로 엔티티의 위치 등 프로퍼티를 직접 할당하여 값을 갱신합니다. 예를 들어 `function(val) self.posY = val end`와 같이 작성하면, 계산된 Ease 결괏값 `val`이 `self.posY`에 저장되어 애니메이션이 진행됩니다. [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] | Callback [question] | self.function() 콜백 문법을 적용하여 _DataStorageService의 SetAsync 처리 완료 시점에 self의 Power 프로퍼티를 20으로 설정하고 로그를 출력하는 OnBeginPlay 메서드를 포함하는 스크립트를 작성해줘 [answer] | 요청하신 조건에 따라 `_DataStorageService`의 `SetAsync` 콜백에서 `self.function()` 문법을 사용해 `Power`를 20으로 설정하고 로그를 출력하는 스크립트입니다. 참고 문서의 Tip에 명시된 대로, Component의 Function을 Callback으로 사용할 때는 `self:function()`이 아닌 `self.function()`을 사용해야 합니다. ```lua Property: [Sync] number Power = 0 Method: [server only] void OnBeg [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 처리가 완료되었을 때 Callback 함수를 실행하는 예시입니다. ```lua Property: [Sync] number Power = 0 Method: [server only] void OnBeginPlay () { local data = _DataStorageService:GetGlobalDataStorage("data") self.Power = 20 local callBack = function (errorcode, key) log("Power is saved")

[task] | instruction_following [pass] | ⏳ 미판정 [title] | RectTileMap에서 캐릭터 이동 제어 [question] | KinematicbodyComponent에서 속도 조절에 사용되는 프로퍼티와 그 역할을 2줄 이내로 설명하세요. [answer] | 이동 속력에 곱해지는 가중치인 `SpeedFactor`는 값이 클수록 이동 속력이 빨라집니다. 점프 속력 감소량을 조절하는 `JumpDrag`는 값이 클수록 지면에 더 빨리 떨어집니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 RectTileMap에서는 KinematicbodyComponent로 캐릭터의 이동을 제어합니다. 크리에이터는 KinematicbodyComponent를 통해 캐릭터를 2차원 평면에서 자유롭게 움직이고 점프하게 할 수 있습니다. 또한 그림자를 그릴 수도 있습니다. 이번 시간에는 KinematicbodyComponent에 대해 알아보고 간단한 예제를 통해 활용법을 살펴봅시다. ##### 참고 API Reference [KinematicbodyComponent](/apiReference/Components/Ki

[task] | instruction_following [pass] | ⏳ 미판정 [title] | TweenLogic을 활용해 엔티티 제어하기 [question] | Vector2를 매개 변수로 받는 PlayTween을 두 번 호출했을 때 정상 동작하지 않는 원인을 표로 정리해서 답변하세요. [answer] | Vector2를 매개 변수로 받는 `PlayTween`을 두 번 호출했을 때 정상 동작하지 않는 원인은 다음과 같습니다. | 구분 | 설명 | | :--- | :--- | | **핵심 원인** | `Vector2`는 x, y 값을 하나의 쌍(pair)으로 취급하여 처리합니다. | | **동작 원리** | 첫 번째 `PlayTween`이 반환한 값이 두 번째 `PlayTween`이 반환한 값에 의해 덮어쓰기(overwrite)됩니다. | | **결과** | x축과 y축을 각각 독립적으로 조작하려는 의도와 달리, 두 Tween의 반환 [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] | instruction_following [pass] | ⏳ 미판정 [title] | RectTileMap에서 캐릭터 이동 제어 [question] | EnableJump와 JumpSpeed 프로퍼티가 False일 때와 True일 때의 동작 차이를 3문장 이내로 정리하세요. [answer] | EnableJump가 False이면 점프 기능이 비활성화되어 점프 동작이 수행되지 않습니다. 반면 EnableJump가 True이면 점프 기능이 활성화되어 JumpSpeed 값에 따라 지정된 속력으로 점프합니다. JumpSpeed 값이 클수록 더 높은 높이로 점프하게 됩니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 RectTileMap에서는 KinematicbodyComponent로 캐릭터의 이동을 제어합니다. 크리에이터는 KinematicbodyComponent를 통해 캐릭터를 2차원 평면에서 자유롭게 움직이고 점프하게 할 수 있습니다. 또한 그림자를 그릴 수도 있습니다. 이번 시간에는 KinematicbodyComponent에 대해 알아보고 간단한 예제를 통해 활용법을 살펴봅시다. ##### 참고 API Reference [KinematicbodyComponent](/apiReference/Components/Ki

[task] | two_turn [pass] | ⏳ 미판정 [title] | TweenLogic을 활용해 엔티티 제어하기 [question] | TweenLogic의 TweenComponent와 차이점 및 각각의 사용 권장 시나리오가 무엇인가요? [answer] | **TweenLogic**과 **TweenComponent**는 엔티티에 애니메이션을 부여한다는 공통점이 있지만, 구현 방식과 최적화 구조가 다르므로 제작 계획에 따라 선택해야 합니다. ### 1. 차이점 | 구분 | TweenComponent (TweenLine, TweenCircular, TweenFloating) | TweenLogic | | :--- | :--- | :--- | | **구현 방식** | 스크립트 작성 없이 엔티티에 컴포넌트를 부착하여 사용 | 스크립트 내 함수 호출을 통해 사용 | | **동적 제어** | [followup] | 멀티플레이 환경에서 다수의 엔티티를 동시에 트윈할 때 TweenLineComponent 등 컴포넌트 사용 시 기대할 수 있는 성능 최적화 이점은 무엇인가요? [followup_answer] | 멀티플레이 환경에서 다수의 엔티티를 동시에 트윈할 때 `TweenLineComponent`와 같은 컴포넌트를 사용하면 **네트워크 최적화** 덕분에 성능 향상을 기대할 수 있습니다. 이는 스크립트를 통해 매 프레임마다 위치를 계산하고 동기화하는 방식(TweenLogic)과 달리, 컴포넌트 자체가 네트워크 전송 및 처리에 최적화되어 있어 다수 엔티티가 동시에 애니메이션을 수행할 때 발생할 수 있는 부하를 줄여주는 이점 때문입니다. [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 [TweenLogic](/apiReference?postId=700)을 사용해 엔티티를 확대, 축소, 회전, 이동시킬 수 있습니다. [Tweener](/apiReference?postId=714)를 함께 확인해보세요. # TweenLogic 개념 **TweenLogic**은 엔티티에 애니메이션 효과를 줄 수 있는 다양한 함수를 제공합니다. 여러 프레임에 걸쳐 Entity의 위치나 크기를 변화시키거나 회전시킬 수 있습니다. 다양한 함수를 사용해 엔티티를 Tween 시켜 애니메이션을 한 번의 함수 호출로 간단

[task] | two_turn [pass] | ⏳ 미판정 [title] | TweenLogic을 활용해 엔티티 제어하기 [question] | `MakeTween()`을 사용해 엔티티의 Alpha를 조절하는 기본 원리와 `SpriteRenderer` 적용 방법을 설명해 주세요. [answer] | `MakeTween()`은 시작 값과 끝 값을 지정하여 특정 프로퍼티를 시간의 흐름에 따라 부드럽게 변경하는 데 사용됩니다. 엔티티의 투명도(Alpha)를 조절하려면 `SpriteRenderer`의 `Color.a` 값을 타겟으로 삼아 Tween을 적용합니다. 기본 원리와 적용 방법은 다음과 같습니다. 1. **SpriteRenderer 접근**: `self.Entity.SpriteRendererComponent`를 통해 엔티티의 스프렌더러 컴포넌트를 가져옵니다. 2. **콜백 함수 정의**: Tween 값이 변경될 때마다 [followup] | `tweenAlpha` 함수 내부에서 `isvalid(spriteRenderer)` 체크 후 `tween:Destroy()`를 호출하는 이유와, `LoopCount = -1` 및 `PingPong` 설정 시 엔티티가 어떻게 반복적으로 투명-불투명 사이를 오가는지 구체적으로 설명해 주세요. [followup_answer] | `isvalid(spriteRenderer)` 체크 후 `tween:Destroy()`를 호출하는 이유는 **메모리 누수 방지와 런타임 오류 예방**입니다. Tween이 실행되는 동안 엔티티가 삭제되거나 `SpriteRenderer` 컴포넌트가 제거될 수 있습니다. 만약 `spriteRenderer`가 더 이상 유효하지 않은 상태(예: 엔티티 제거)인데도 Tween이 계속 실행되어 `spriteRenderer.Color.a`에 값을 대입하려고 하면, 무효한 참조를 사용하여 스크립트 오류가 발생하거나 게임이 불안정해질 수 있습니다. [scores] | [judge_reason] | [source_doc] | `MakeTween()`에서 **Alpha** 값을 조절해 특정 엔티티가 점점 옅어지게 만들 수 있습니다. 1. 새로운 컴포넌트를 생성하고, 특정 엔티티에 추가합니다. 2. `MakeTween()`의 startvalue를 SpriteRenderer의 a로 지정하고, endvalue를 0으로 지정해 엔티티가 투명해질 수 있도록 아래와 같이 작성합니다. ```lua Method: [server only] void OnBeginPlay() { local spriteRenderer

[task] | instruction_following [pass] | ⏳ 미판정 [title] | 메이플 타일맵 만들기 [question] | 선 칠하기 모드에서 보조선의 점, 선, 면을 클릭했을 때 생성되는 지형의 차이점을 표로 정리해서 나열하세요. [answer] | 선 칠하기 모드에서 격자 형태의 보조선의 특정 위치를 클릭할 때 생성되는 지형의 차이는 다음과 같습니다. | 클릭 위치 | 생성되는 지형 특징 | 설명 | | :---: | :--- | :--- | | **점** | 작은 지형 | 보조선이 교차하는 점을 클릭하면 그 지점에 작은 지형이 생성됩니다. | | **선** | 선을 포함한 지형 | 선을 클릭하면 양쪽 교차 지점을 포함한 선까지 지형이 생성됩니다. | | **면** | 테두리 선 포함 지형 / 대각선 지형 | 면을 클릭하면 면의 테두리 선을 포함하는 지형이 생성됩니다. 또한 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 메이플스토리 월드에서는 여러 가지 지형과 이동 방식을 제공하고 있습니다. 이번 시간에는 가장 기본이 되는 지형인 메이플스토리 형태의 타일 맵에 대해 알아보겠습니다. 메이플스토리 형태의 지형은 메이플스토리 형태의 이동과 매우 밀접한 연관이 있습니다. > **더 알아보기** > 메이플스토리 형태의 이동에 대해서는 [메이플 이동 개념 이해하기](/docs?postId=750)를 참고해주세요. # 메이플스토리 형태의 지형 메이플스토리 형태의 지형은 타일 에디터에서 MapleTile 모드를 선택한 후 만들 수

[task] | instruction_following [pass] | ⏳ 미판정 [title] | TweenLogic을 활용해 엔티티 제어하기 [question] | SpawnBallOnAttack 컴포넌트에서 플레이어가 공격 시 공을 소환하는 코드만 출력하고 설명은 주석으로 작성하세요. [answer] | ```lua Event Handler: [server only] [self] HandlePlayerActionEvent(PlayerActionEvent event) { -- Parameters local ActionName = event.ActionName local PlayerEntity = event.PlayerEntity -------------------------------------------------------- -- 플레이어의 액션이 "Attack"인 경우에만 처리합니다. [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의 MoveTo 함수와 EaseType을 사용해 엔티티가 지정한 위치로 2초 동안 이동하도록 하는 스크립트를 작성해줘 [answer] | 참고 문서에 제시된 `TweenLogic` API 목록과 예제 코드에는 `MoveTo` 함수의 구체적인 서명이나 사용 예가 포함되어 있지 않습니다. 문서에는 `MoveTo(Entity entity, Vector2 destination, number duration, EaseType type)`이라는 함수명이 본문 설명 중 한 번 언급되어 있긴 하지만, 이를 실제로 호출하는 mLua 코드 예제나 `TweenLogic` 서비스의 정확한 메서드 목록은 제공되지 않았습니다. 따라서 문서에 근거하여 `MoveTo` 함수를 직접 호출하는 정 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 [TweenLogic](/apiReference?postId=700)을 사용해 엔티티를 확대, 축소, 회전, 이동시킬 수 있습니다. [Tweener](/apiReference?postId=714)를 함께 확인해보세요. # TweenLogic 개념 **TweenLogic**은 엔티티에 애니메이션 효과를 줄 수 있는 다양한 함수를 제공합니다. 여러 프레임에 걸쳐 Entity의 위치나 크기를 변화시키거나 회전시킬 수 있습니다. 다양한 함수를 사용해 엔티티를 Tween 시켜 애니메이션을 한 번의 함수 호출로 간단

[task] | instruction_following [pass] | ⏳ 미판정 [title] | 메이플 타일맵 만들기 [question] | 발판이 지형 생성 규칙 외에 어떤 컴포넌트를 통해 엔티티에도 추가될 수 있는지 컴포넌트 이름만 코드 블록으로 출력하세요. [answer] | ```lua CustomFootholdComponent ``` [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 지형을 생성하는 가장 큰 이유는 엔티티가 이동할 수 있는 공간이 필요하기 때문일 것입니다. 메이플 타일에서 이동할 수 있는 영역을 **발판**이라고 합니다. 메이플 타일과 쌍을 이루는 [RigidbodyComponent](/docs?postId=750)의 이동 방식은 두 가지가 있습니다. **1. 발판 위에서 이동 2. 발판 밖에서 이동** 발판은 지형 생성 규칙에 의해 만들어지며 대부분 직관적으로 지형과 1:1 매칭됩니다. 발판 정보 버튼을 누르면 지형 위에 빨간색 선으로 발판 정보가 나타납니다. > **더 알아보기**

[task] | instruction_following [pass] | ⏳ 미판정 [title] | RectTileMap에서 캐릭터 이동 제어 [question] | RectTileMap에서 캐릭터 이동 제어 시 그림자 관련 프로퍼티 3가지를 표 형태로 나열하세요. [answer] | RectTileMap에서 캐릭터 이동 제어 시 그림자 관련 프로퍼티 3가지는 다음과 같습니다. | 프로퍼티 | 설명 | | :--- | :--- | | ShadowColor | 그림자의 색상입니다. | | ShadowOffset | 그림자의 위치입니다. | | ShadowSize | 그림자의 크기입니다. | [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 RectTileMap에서는 KinematicbodyComponent로 캐릭터의 이동을 제어합니다. 크리에이터는 KinematicbodyComponent를 통해 캐릭터를 2차원 평면에서 자유롭게 움직이고 점프하게 할 수 있습니다. 또한 그림자를 그릴 수도 있습니다. 이번 시간에는 KinematicbodyComponent에 대해 알아보고 간단한 예제를 통해 활용법을 살펴봅시다. ##### 참고 API Reference [KinematicbodyComponent](/apiReference/Components/Ki

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