← 목록

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

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

[task] | code [pass] | ⏳ 미판정 [title] | 액션을 예약하고 실행하는 TimerService [question] | _ TimerService의 SetTimerOnce와 SetTimerRepeat을 조합하여 특정 시간 후 반복 동작을 자동 정지시키는 스크립트를 작성해줘 [answer] | `SetTimerRepeat`로 반복 동작을 예약한 후, `SetTimerOnce`로 특정 시간 뒤에 실행되는 취소 콜백을 등록하면 원하는 시점에 반복 동작을 자동으로 멈출 수 있습니다. 반복 예약을 시작할 때 반환되는 `timerId`를 변수에 저장하고, 이 ID를 `ClearTimer` 함수에 전달해야 예약이 정상적으로 취소됩니다. 예를 들어, 3초 간격으로 로그를 출력하는 반복 동작을 시작하고, 시작 후 10초가 지나면 이 동작을 자동으로 정지시키는 스크립트는 다음과 같습니다. ```lua Method: [server on [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | `SetTimerOnce()`와 `SetTimerRepeat()`는 예약한 액션을 취소할 수 있습니다. 예약한 액션을 취소할 때는 `ClearTimer()` 함수를 활용합니다. 아래의 예제처럼 10초 뒤 액션 실행을 취소할 수 있습니다. ```lua Method: [server only] void OnBeginPlay() { local callBack = function() log("CallBack! :"..tostring(os.date())) end log("SetTimer! :"

[task] | two_turn [pass] | ⏳ 미판정 [title] | 캐릭터 초기 속성 편집 [question] | 카메라가 플레이어 아바타를 따라갈 때 화면이 급격하게 흔들리지 않고 부드럽게 쫓아가려면 cameraDamping 값을 어떻게 설정해야 하나요? [answer] | 카메라가 플레이어 아바타를 따라갈 때 화면이 급격하게 흔들리지 않고 부드럽게 쫓아가려면 `cameraDamping` 값을 **크게** 설정해야 합니다. `cameraDamping`은 `CameraComponent`의 `Damping` 프로퍼티에 해당하며, 값이 클수록 움직이는 플레이어 아바타를 따라가는 카메라의 움직임이 더 자연스럽게 완화됩니다. 메이플스토리 월드에서 캐릭터의 초기 속성을 편집할 때 이 값을 조절하여 원하는 카메라 추적 부드러움을 설정할 수 있습니다. [followup] | cameraDamping 값이 클수록 부드럽게 따라간다고 하는데, DeadZone과 SoftZone 설정이 cameraDamping의 동작에 어떤 영향을 주나요? [followup_answer] | `cameraDamping`의 동작은 `cameraDeadZone`과 `cameraSoftZone` 설정과 밀접하게 연관되어 있습니다. **1. DeadZone의 영향** `cameraDeadZone`은 카메라가 고정되어 있는 범위를 결정합니다. * 플레이어 아바타가 `DeadZone` 범위 **안쪽**에 있을 때는 카메라가 움직이지 않습니다. * 플레이어 아바타가 `DeadZone`을 **벗어나** 이동할 때 비로소 카메라가 쫓아가기 시작하며, 이때 `cameraDamping` 값이 적용되어 카메라가 부드럽게 따라가도록 [scores] | [judge_reason] | [source_doc] | | 모델 프로퍼티 명 | 원 컴포넌트 원 프로퍼티 명 | 설명 | | --------- | ---------------- | --- | | speed | MovementComponent <ul><li>InputSpeed</li></ul> | 플레이어의 기본 이동 속도 값을 정합니다. 값이 클수록 빠르게 움직입니다. 기본값은 1.2입니다. | | jumpForce | MovementComponent<ul><li>JumpForce</li></ul> | 플레이어의 기본 점프 높이를 설정합니다. 값이 클수록 높이 점프합니다. 기본값은

[task] | instruction_following [pass] | ⏳ 미판정 [title] | Entity, Component, Property [question] | Entity와 Component의 관계를 피자의 비유를 사용하여 3문장 이내로 설명하세요. [answer] | 완성된 피자가 Entity라면, 피자를 구성하는 토마토나 도우, 소스 등이 각자의 기능을 담당하는 Component입니다. 이러한 Component는 재사용성이 높아 다양한 재료와 조리법을 조합하여 치즈 피자나 파인애플 피자 등 새로운 Entity를 쉽게 만들 수 있습니다. 따라서 Entity는 여러 Component의 집합체로 볼 수 있으며, 기능들이 잘 분리된 Component를 조합해 원하는 동작을 하는 객체를 제작할 수 있습니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 Entity와 Component 그리고 Property에 대해서 개념을 이해합니다. # Entity 엔티티는 메이플스토리 월드 내에서 존재하는 객체입니다. 아래의 그림에서 Entity는 어떤 것들일까요? 빨간색을 칠한 부분이 Entity입니다. 그뿐만 아니라 보이지는 않지만 돌아가고 있는 모든 것들이 Entity입니다. 메이플스토리 월드에서는 실제로 수많은 Entity가 배치되어 있고 실시간으로 생성, 변경, 삭제됩니다. Entity들이 실제 게임상에서 활동함으로써 시각적으로 보이며, 내부적으로 로직

[task] | instruction_following [pass] | ⏳ 미판정 [title] | 맵 레이어 [question] | 플레이어 아바타의 레이어 귀속 기준과 초록 타일 위 나무 오브젝트의 위치 관계를 3문장 이내로 설명하세요. [answer] | 플레이어 아바타는 현재 밟고 있는 엔티티의 레이어를 기준으로 귀속됩니다. 초록 타일은 Layer1에 배치되어 있어 아바타가 해당 타일 위에 있을 때 Layer1에 속하게 됩니다. 초록 타일 위 나무 오브젝트들은 Layer4에 배치되어 있으므로, Layer1에 있는 아바타는 나무 오브젝트 뒤로 지나가게 됩니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 초록 타일은 Layer1에, 연두 타일은 Layer2에 배치했습니다. 초록 타일을 밟고 있는 플레이어 아바타는 점프할 때까지는 Layer1에 머물러 있지만, 노란 타일에 착지하는 순간 Layer2에 있는 상태가 됩니다. #### 활용 예시 2 4개의 레이어에 각각 타일과 오브젝트를 배치했습니다.(OrderInLayer는 기본값입니다.) 플레이어 아바타는 밟고 있는 엔티티 레이어가 귀속 기준이므로 가장 아래 있는 layer1에서 움직이기 시작합니다. 초록 타일 위 나무 오브젝트들은 Layer4에 배치되어 있습니다. 그러므로 초록

[task] | code [pass] | ⏳ 미판정 [title] | 캐릭터 초기 속성 편집 [question] | 지시사항에서 "주어진 원문에 있는 정보만 사용하고, 없는 사실·API·코드 예제를 지어내지 않는다"고 명시되어 있으므로, 문서에 언급되지 않은 스크립트 API를 추측하여 코딩 과제를 생성할 수 없습니다. 따라서 요청하신 조건을 충족하는 mLua 코딩 과제는 작성할 수 없습니다. [answer] | 제공된 참고 문서에는 **Player 모델의 기본 속성(프로퍼티)을 메이커(Maker) UI에서 직접 편집하는 방법**에 대한 정보만 포함되어 있습니다. 구체적으로 문서에 명시된 내용은 다음과 같습니다: 1. **편집 위치**: `Workspace - BaseEnvironment - NativeModel - Player` 선택 2. **작업 내용**: Player 모델의 프로퍼티 값 변경 3. **확인 방법**: [시작] 버튼 눌러 확인 문서에는 스크립트를 통해 Player의 기본 속성(예: 이동 속도, 점프력, 체력 등 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 동시에 출발해 목표 지점까지 오르는 게임을 시작할 때 누군가는 한 번에 4칸을 오르고, 다른 누구는 2칸을 오른다면 함께 게임을 즐길 수 없을 것입니다. 게임을 처음 시작할 때 만큼은 동일한 환경에서 시작하는 게 중요합니다. 모델 프로퍼티를 이용해 속성을 편집하는 방법을 알아봅니다. # 플레이어 기본 속성 변경 **Player** 모델에서 기본 속성을 변경할 수 있습니다. 1. **Workspace - BaseEnvironment - NativeModel - Player**를 선택합니다. 2. **Play

[task] | single_turn [pass] | ⏳ 미판정 [title] | 액션을 예약하고 실행하는 TimerService [question] | SetTimer의 마지막 매개변수인 startDelaySeconds를 지정하면 최초 콜백 실행 시점이 어떻게 달라지는지, 1회 실행과 반복 실행 모두에서 동작 방식을 비교해 주세요. [answer] | `SetTimer`의 마지막 매개변수인 `startDelaySeconds`는 **`SetTimer()`가 호출된 후 콜백 함수가 *최초로* 실행되기까지의 대기 시간**을 지정합니다. 이 값이 지정되지 않았거나 0인 경우와 지정된 경우의 동작 방식은 다음과 같습니다. ### 1. 기본 동작 (startDelaySeconds 미지정 또는 0) * **1회 실행 (`isRepeat = false`)**: `SetTimer()` 호출 즉시 타이머가 시작되며, `intervalSeconds`만큼 기다린 후 콜백이 1회 실행됩니다. * [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | isRepeat을 true로 변경해 반복 실행하게 만듭니다. `SetTimer()`가 호출될 때 "SetTimer!"라는 문자열과 함께 해당 코드가 실행된 시간을 출력합니다. 예시 코드는 다음과 같습니다. 3초마다 `SetTimer()`로 넘긴 CallBack 함수가 호출될 때 "CallBack!"이라는 문자열과 함께 코드가 실행된 시간을 출력합니다. ```lua Method: [server only] void OnBeginPlay() { local callBack = function() log("Ca

[task] | instruction_following [pass] | ⏳ 미판정 [title] | Entity, Component, Property [question] | 재사용성을 높이기 위해 Component를 분리하는 이유와 구체적인 피자 조합 예시를 단계별 번호 목록으로 작성하세요. [answer] | 재사용성을 높이기 위해 Component를 분리하는 이유는 이미 만들어진 Component를 조합하여 다양한 형태의 Entity를 효율적으로 제작할 수 있기 때문입니다. 피자를 예로 들면, 아래와 같이 단계별 조합이 가능합니다. 1. 기본 피자 구성: 토마토, 도우, 소스, 조리법 Component로 완성된 기본 피자를 만듭니다. 2. 치즈 피자 제작: 도우 + 소스 + 치즈 + 오븐 조리 Component를 조합하여 치즈 피자를 만듭니다. 3. 파인애플 피자 제작: 도우 + 소스 + 치즈 + 파인애플 + 오븐 조리 Compon [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 Entity와 Component 그리고 Property에 대해서 개념을 이해합니다. # Entity 엔티티는 메이플스토리 월드 내에서 존재하는 객체입니다. 아래의 그림에서 Entity는 어떤 것들일까요? 빨간색을 칠한 부분이 Entity입니다. 그뿐만 아니라 보이지는 않지만 돌아가고 있는 모든 것들이 Entity입니다. 메이플스토리 월드에서는 실제로 수많은 Entity가 배치되어 있고 실시간으로 생성, 변경, 삭제됩니다. Entity들이 실제 게임상에서 활동함으로써 시각적으로 보이며, 내부적으로 로직

[task] | instruction_following [pass] | ⏳ 미판정 [title] | Entity, Component, Property [question] | 메이플스토리 월드에서 Entity, Component, Property의 개념적 차이를 3열 4행 표로 정리하세요. [answer] | | 구분 | 정의 | 역할 및 특징 | | :--- | :--- | :--- | | **Entity** | 메이플스토리 월드 내에서 존재하는 객체 | 실제 게임상에서 활동하며 시각적으로 보이고 내부 로직이 돌아가게 하는 단위. 실시간으로 생성, 변경, 삭제되며 수많은 Entity가 배치되어 있습니다. | | **Component** | Entity를 구성하는 요소의 집합 | 각각의 요소를 담당하며 특정 기능을 수행합니다. 재사용성이 높아 이미 만들어진 Component를 조합하여 다양한 Entity(예: 치즈 피자, 파인애플 피자) [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 Entity와 Component 그리고 Property에 대해서 개념을 이해합니다. # Entity 엔티티는 메이플스토리 월드 내에서 존재하는 객체입니다. 아래의 그림에서 Entity는 어떤 것들일까요? 빨간색을 칠한 부분이 Entity입니다. 그뿐만 아니라 보이지는 않지만 돌아가고 있는 모든 것들이 Entity입니다. 메이플스토리 월드에서는 실제로 수많은 Entity가 배치되어 있고 실시간으로 생성, 변경, 삭제됩니다. Entity들이 실제 게임상에서 활동함으로써 시각적으로 보이며, 내부적으로 로직

[task] | code [pass] | ⏳ 미판정 [title] | 엔티티에 이름표 붙이기 [question] | 여러 고양이 오브젝트 중 대장 NPC로 설정할 엔티티의 NameTagComponent.Name 을 "길을 잃은 고양이"로, FontColor 를 "f5e38b"로, NameTagRUID 를 "ac88638649c3479bbb754e4b34bb3eac"로 설정하는 스크립트를 작성해줘 [answer] | 고양이 대장 NPC로 설정할 특정 엔티티의 이름표 속성을 변경하는 스크립트입니다. 이 스크립트는 해당 엔티티에 직접 붙여 사용하는 것을 전제로 합니다. `self.Entity.NameTagComponent`를 통해 현재 엔티티의 이름표 컴포넌트에 접근하여 요청하신 값(`Name`, `FontColor`, `NameTagRUID`)을 설정합니다. 참고로 `FontColor`는 색상 값으로, 문서 예제에서는 `Color.green` 또는 16진수 문자열을 사용할 수 있음을 보여줍니다. 요청하신 `"f5e38b"`는 16진수 색상 코 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 사물을 구분하는 효과적인 방법은 이름을 붙이는 것입니다. 이름표를 이용해 오브젝트와 NPC를 구분하거나, 유저를 구분할 수 있습니다. NameTagComponent 사용 방법과 활용 예시를 소개합니다. # 이름표 붙이기 엔티티를 선택하고 **NameTagComponent**를 추가합니다. 프로퍼티 값을 변경해 원하는 이름표를 만듭니다. NameTagComponent 프로퍼티 구성은 다음과 같습니다. | 이름 | 설명 | | --- | --- | | FontColor | 글씨 색상을 변경합니다. 색상 변

[task] | code [pass] | ⏳ 미판정 [title] | 액션을 예약하고 실행하는 TimerService [question] | `_TimerService`의 `SetTimer` 메서드를 사용하여 1회만 실행되며, `SetTimer` 호출 후 3초 뒤에 CallBack 함수가 실행되어 "CallBack! : "와 현재 시각 문자열을 로그로 출력하는 스크립트를 작성해줘. [answer] | `_TimerService:SetTimer` 메서드의 `isRepeat` 매개변수를 `false`로 설정하면 타이머가 1회만 실행됩니다. `intervalSeconds`에 3을 지정하면 `SetTimer` 호출 후 3초 뒤에 콜백 함수가 실행됩니다. 요구사항에 맞춰 작성한 스크립트는 다음과 같습니다. ```lua Method: [server only] void OnBeginPlay() { local callBack = function() log("CallBack! : "..tostring(os.date()) [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | isRepeat을 true로 변경해 반복 실행하게 만듭니다. `SetTimer()`가 호출될 때 "SetTimer!"라는 문자열과 함께 해당 코드가 실행된 시간을 출력합니다. 예시 코드는 다음과 같습니다. 3초마다 `SetTimer()`로 넘긴 CallBack 함수가 호출될 때 "CallBack!"이라는 문자열과 함께 코드가 실행된 시간을 출력합니다. ```lua Method: [server only] void OnBeginPlay() { local callBack = function() log("Ca

[task] | single_turn [pass] | ⏳ 미판정 [title] | 액션을 예약하고 실행하는 TimerService [question] | 타이머 취소 로직을 구현했는데, 10초 뒤에 실행 예정이던 반복 로그가 끊기지 않고 계속 출력되는 원인이 무엇일까요? [answer] | `ClearTimer()` 호출 대상이 실제 예약된 타이머의 ID와 일치하지 않거나, 타이머 ID를 0으로 잘못 처리했을 때 이러한 현상이 발생합니다. `SetTimerOnce()`와 `SetTimerRepeat()`를 호출하면 반환된 `timerId`를 정확히 저장하고, 취소 시점에 동일한 `timerId`를 `ClearTimer()`에 전달해야 합니다. 특히 `SetTimerRepeat()`의 반환 값이 0인 경우 예약에 실패한 것이므로, 이 경우 `ClearTimer()`를 호출할 필요가 없습니다. 하지만 0이 아닌 유효한 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | `SetTimerOnce()`와 `SetTimerRepeat()`는 예약한 액션을 취소할 수 있습니다. 예약한 액션을 취소할 때는 `ClearTimer()` 함수를 활용합니다. 아래의 예제처럼 10초 뒤 액션 실행을 취소할 수 있습니다. ```lua Method: [server only] void OnBeginPlay() { local callBack = function() log("CallBack! :"..tostring(os.date())) end log("SetTimer! :"

[task] | code [pass] | ⏳ 미판정 [title] | 액션을 예약하고 실행하는 TimerService [question] | `_TimerService`의 `SetTimer` 메서드를 사용하여 3초 간격으로 반복 실행되며, 최초 실행은 `SetTimer` 호출 후 2초 뒤에 이루어지도록 설정하고, CallBack 함수에서 "CallBack! : "와 현재 시각 문자열을 연결하여 로그로 출력하는 스크립트를 작성해줘. [answer] | 요청하신 조건(3초 간격 반복, 최초 실행은 2초 후)을 만족하는 `_TimerService:SetTimer` 메서드 호출과 CallBack 함수를 포함하여 스크립트를 작성합니다. ```lua Method: [server only] void OnBeginPlay() { local callBack = function() log("CallBack! : "..tostring(os.date())) end -- 3초 간격(intervalSeconds)으로 반복(true) 실행하며, -- SetT [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | isRepeat을 true로 변경해 반복 실행하게 만듭니다. `SetTimer()`가 호출될 때 "SetTimer!"라는 문자열과 함께 해당 코드가 실행된 시간을 출력합니다. 예시 코드는 다음과 같습니다. 3초마다 `SetTimer()`로 넘긴 CallBack 함수가 호출될 때 "CallBack!"이라는 문자열과 함께 코드가 실행된 시간을 출력합니다. ```lua Method: [server only] void OnBeginPlay() { local callBack = function() log("Ca

[task] | single_turn [pass] | ⏳ 미판정 [title] | 맵 레이어 [question] | 단일 레이어 내에서 같은 분류의 엔티티를 여러 개 배치했을 때, 화면에서 가장 앞에 오는 엔티티는 어떤 조건을 만족하나요? [answer] | 단일 레이어 내에서 같은 분류의 엔티티를 여러 개 배치한 경우, **마지막에 배치한 엔티티**가 화면에서 가장 앞에 옵니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 맵 레이어를 사용해 더욱 입체적으로 게임 화면을 디자인할 수 있습니다. 맵 레이어 창 구성을 살펴보고 활용하는 방법을 알아봅니다. 레이어 순서를 이해하고 레이어를 크리에이터의 게임에 맞게 활용할 수 있습니다. # 맵 레이어 위치 맵 레이어 창은 기본 패널 설정 기준, 중앙 하단에 위치합니다. 작업 편의를 위해 탭을 닫은 후 다시 불러올 때는 **Panels - Map Layer**을 선택해 불러올 수 있습니다. | 메이커 화면 기본 위치 | Panels - Map Layer | | ------------

[task] | single_turn [pass] | ⏳ 미판정 [title] | 액션을 예약하고 실행하는 TimerService [question] | SetTimerOnce와 SetTimerRepeat으로 예약한 액션의 취소 메커니즘이 동일한지, 그리고 반환되는 timerId를 어떻게 활용해야 하는지 설명해 주세요. [answer] | `SetTimerOnce()`와 `SetTimerRepeat()`로 예약한 액션을 취소하는 메커니즘은 **동일합니다.** 두 함수 모두 예약에 성공하면 `timerId`를 반환하며, 이 `timerId`를 `_TimerService:ClearTimer(timerId)` 함수에 인자로 전달하여 예약된 액션을 취소할 수 있습니다. **timerId 활용 방법:** 1. **예약 시 반환값 저장:** `SetTimerOnce()` 또는 `SetTimerRepeat()` 호출 시 반환되는 값을 변수(예: `timerId` 또는 Prop [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | `SetTimerOnce()`와 `SetTimerRepeat()`는 예약한 액션을 취소할 수 있습니다. 예약한 액션을 취소할 때는 `ClearTimer()` 함수를 활용합니다. 아래의 예제처럼 10초 뒤 액션 실행을 취소할 수 있습니다. ```lua Method: [server only] void OnBeginPlay() { local callBack = function() log("CallBack! :"..tostring(os.date())) end log("SetTimer! :"

[task] | code [pass] | ⏳ 미판정 [title] | 스크립트 에디터 오리엔테이션 [question] | `OnBeginPlay()` 생명주기 메서드 내에서 `log` 함수를 호출하여 "Hello Maple World"라는 문자열을 콘솔에 출력하는 스크립트를 작성해줘 [answer] | ```lua [server only] void OnBeginPlay() { log("Hello Maple World") } ``` [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 메이플스토리 월드에서는 스크립트 에디터를 사용해 크리에이터가 원하는 컴포넌트나 로직을 만들 수 있습니다. 스크립트 문법은 **Lua Script**를 사용하며 다양한 **API**를 지원합니다. 월드를 만들다 보면, 메이플스토리 월드에서 제공하는 스크립트나 다른 크리에이터가 작성한 스크립트를 수정해야 할 일이 생깁니다. 스크립트를 수정하기 위해서라도 스크립트 에디터 기본 사용법을 익혀두는 것이 좋습니다. 이번 과정에서는 간단하게 스크립트로 로그를 출력하는 방법을 알아보고, 스크립트 에디터의 다양한 편의 기능도

[task] | code [pass] | ⏳ 미판정 [title] | 액션을 예약하고 실행하는 TimerService [question] | 스위치 토글 시 3초 후 문 개폐 예약을 등록하거나 취소하는 스크립트를 _TimerService:SetTimer와 _TimerService:ClearTimer를 이용해 작성해줘 [answer] | 사용자가 제시한 시나리오(스위치 On 시 3초 후 문 열기, Off 시 예약 취소)를 구현하기 위해 `SetTimer()`와 `ClearTimer()`를 사용하는 스크립트입니다. 문서의 예제와 규칙에 따라: 1. **Property** 블록에 타이머 ID를 저장할 변수와 스위치 상태를 관리할 변수를 선언합니다. 2. **Method** 블록에서 `OnBeginPlay()`는 초기화 로직이 없으므로 생략하거나 최소한의 로그만 남길 수 있으나, 주로 이벤트 핸들러에서 로직을 처리합니다. 3. **Event Handler** 블록 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | `SetTimer()`를 통해 특정 액션을 수행하도록 예약을 만들었지만, 특정 조건에 의해 해당 예약을 취소해야 하는 경우가 빈번히 발생합니다. 게임 내에서 스위치를 On 했을 때 3초 후 문이 열리는 장치를 만들었다고 가정해 봅시다. 유저가 스위치를 On 상태로 만들었을 때 3초 뒤에 문이 열리게 됩니다. 문이 열리는 액션을 `SetTimer()`를 이용해 예약했기 때문입니다. 그러나 유저가 문이 열리기 전에 스위치를 Off 상태로 만든다면 `SetTimer()`의 예약을 취소해 Off일 때 문이 열리지 않게 만들어야 합니다.

[task] | single_turn [pass] | ⏳ 미판정 [title] | 맵 레이어 [question] | 다른 일반 엔티티와 달리 플레이어 아바타의 맵 레이어 소속이 계속 바뀌는 이유는 무엇인가요? [answer] | 플레이어 아바타는 다른 일반 엔티티와 달리 현재 밟고 있는 엔티티(타일, 발판 등)의 맵 레이어로 소속이 계속 바뀌기 때문입니다. 반면, 다른 일반 엔티티는 움직임과 관계없이 처음 배치된 맵 레이어에만 속하게 됩니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 맵 레이어를 사용해 더욱 입체적으로 게임 화면을 디자인할 수 있습니다. 맵 레이어 창 구성을 살펴보고 활용하는 방법을 알아봅니다. 레이어 순서를 이해하고 레이어를 크리에이터의 게임에 맞게 활용할 수 있습니다. # 맵 레이어 위치 맵 레이어 창은 기본 패널 설정 기준, 중앙 하단에 위치합니다. 작업 편의를 위해 탭을 닫은 후 다시 불러올 때는 **Panels - Map Layer**을 선택해 불러올 수 있습니다. | 메이커 화면 기본 위치 | Panels - Map Layer | | ------------

[task] | single_turn [pass] | ⏳ 미판정 [title] | 맵 레이어 [question] | 맵 레이어 창에서 레이어를 비활성화했는데 테스트 실행 시에는 모든 엔티티가 다시 보이는 이유는 무엇인가요? [answer] | 맵 레이어의 비활성화 기능은 편집 상태(메이커)에서만 적용되는 편의 기능입니다. 레이어를 비활성화하면 해당 레이어에 배치된 엔티티가 숨겨져 보이지 않지만, 이는 제작 중 작업 편의를 위한 것입니다. 테스트 실행 또는 게임 출시 시에는 비활성화 상태인 레이어도 모두 활성화되어 엔티티가 다시 보이게 됩니다. 따라서 테스트 실행 시 모든 엔티티가 보이는 것은 정상적인 동작입니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 맵 레이어를 사용해 더욱 입체적으로 게임 화면을 디자인할 수 있습니다. 맵 레이어 창 구성을 살펴보고 활용하는 방법을 알아봅니다. 레이어 순서를 이해하고 레이어를 크리에이터의 게임에 맞게 활용할 수 있습니다. # 맵 레이어 위치 맵 레이어 창은 기본 패널 설정 기준, 중앙 하단에 위치합니다. 작업 편의를 위해 탭을 닫은 후 다시 불러올 때는 **Panels - Map Layer**을 선택해 불러올 수 있습니다. | 메이커 화면 기본 위치 | Panels - Map Layer | | ------------

[task] | instruction_following [pass] | ⏳ 미판정 [title] | Entity, Component, Property [question] | Property의 개념을 피자 비유를 활용해 3문장 이내로 설명하세요. [answer] | Component를 재사용하기 위해 세부 설정을 변경할 수 있게 해주는 값입니다. 피자에서 도우의 크기나 치즈 종류를 바꾸는 것처럼, 같은 Component를 사용하더라도 Property 값이 다르면 다른 동작을 합니다. 따라서 철수, 영희, 윤후 모두 동일한 도우와 치즈 Component를 쓰면서 각자의 선호에 맞는 피자를 만들 수 있습니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | Property는 각 Component의 세부사항을 설정합니다. Component에서 예시를 든 피자로 다시 돌아와 볼까요? 세 명의 아이가 페퍼로니 피자를 먹고 싶어 합니다. 철수는 페퍼로니가 2배들어 있는 피자를 원하고, 영희는 들어 있는 치즈가 체다가 아닌 모짜렐라 치즈를 원합니다. 윤후는 사이즈를 조금 더 크게 먹고 싶습니다. 기존에 도우 Component, 페퍼로니 Component, 치즈 Component 가 있습니다. 자, 어떻게 하면 될까요? 철수는 페퍼로니 2배 Component를 추가하고 영희는 모짜렐라 치즈

[task] | code [pass] | ⏳ 미판정 [title] | 액션을 예약하고 실행하는 TimerService [question] | `OnBeginPlay` 라이프사이클에서 실행되며, `_TimerService`의 `SetTimer`를 호출하기 직전에 "SetTimer! : "와 현재 시각 문자열을 로그로 출력하고, 이후 3초 간격으로 반복 실행되는 CallBack 함수에서 "CallBack! : "와 현재 시각 문자열을 로그로 출력하는 스크립트를 작성해줘. [answer] | 요청하신 스크립트는 `OnBeginPlay`에서 `SetTimer` 호출 직전에 로그를 출력하고, `isRepeat`을 `true`로 설정하여 3초 간격으로 반복 실행하는 형태로 작성할 수 있습니다. ```lua Method: [server only] void OnBeginPlay() { local callBack = function() log("CallBack! : "..tostring(os.date())) end log("SetTimer! : "..tostring(os.date() [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | isRepeat을 true로 변경해 반복 실행하게 만듭니다. `SetTimer()`가 호출될 때 "SetTimer!"라는 문자열과 함께 해당 코드가 실행된 시간을 출력합니다. 예시 코드는 다음과 같습니다. 3초마다 `SetTimer()`로 넘긴 CallBack 함수가 호출될 때 "CallBack!"이라는 문자열과 함께 코드가 실행된 시간을 출력합니다. ```lua Method: [server only] void OnBeginPlay() { local callBack = function() log("Ca

[task] | instruction_following [pass] | ⏳ 미판정 [title] | Entity, Component, Property [question] | ChatBalloonComponent의 Property인 BalloonScale과 FontSize를 표로 정리하세요. [answer] | ChatBalloonComponent의 BalloonScale과 FontSize Property는 다음과 같이 정리할 수 있습니다. | Property | 설명 | | :--- | :--- | | **BalloonScale** | 말풍선의 크기를 설정합니다. 값이 커질수록 말풍선의 크기도 커집니다. | | **FontSize** | 말풍선 텍스트의 크기를 설정합니다. 값이 커질수록 텍스트 크기도 커집니다. | [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | Property는 각 Component의 세부사항을 설정합니다. Component에서 예시를 든 피자로 다시 돌아와 볼까요? 세 명의 아이가 페퍼로니 피자를 먹고 싶어 합니다. 철수는 페퍼로니가 2배들어 있는 피자를 원하고, 영희는 들어 있는 치즈가 체다가 아닌 모짜렐라 치즈를 원합니다. 윤후는 사이즈를 조금 더 크게 먹고 싶습니다. 기존에 도우 Component, 페퍼로니 Component, 치즈 Component 가 있습니다. 자, 어떻게 하면 될까요? 철수는 페퍼로니 2배 Component를 추가하고 영희는 모짜렐라 치즈

[task] | single_turn [pass] | ⏳ 미판정 [title] | 맵 레이어 [question] | 맵 레이어의 우선순위 적용 규칙 중, SpriteRendererComponent의 OrderInLayer 프로퍼티보다 우선순위가 낮은 요소는 무엇인가요? [answer] | 맵 레이어의 우선순위 적용 규칙에서 `SpriteRendererComponent`의 `OrderInLayer` 프로퍼티보다 우선순위가 낮은(즉, 나중에 적용되는) 요소는 **`TransformComponent`의 `Position` Z값**입니다. 우선순위는 아래 순서대로 결정됩니다. 1. **Map Layer** (SpriteRendererComponent의 SortingLayer) 2. **SpriteRendererComponent의 OrderInLayer 프로퍼티** 3. **TransformComponent의 Positi [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 맵 레이어를 사용해 더욱 입체적으로 게임 화면을 디자인할 수 있습니다. 맵 레이어 창 구성을 살펴보고 활용하는 방법을 알아봅니다. 레이어 순서를 이해하고 레이어를 크리에이터의 게임에 맞게 활용할 수 있습니다. # 맵 레이어 위치 맵 레이어 창은 기본 패널 설정 기준, 중앙 하단에 위치합니다. 작업 편의를 위해 탭을 닫은 후 다시 불러올 때는 **Panels - Map Layer**을 선택해 불러올 수 있습니다. | 메이커 화면 기본 위치 | Panels - Map Layer | | ------------

[task] | two_turn [pass] | ⏳ 미판정 [title] | 캐릭터 초기 속성 편집 [question] | 메이커에서 플레이어 캐릭터의 이동 속도나 점프력 같은 기본 속성을 수정하려면 어떤 프로퍼티를 찾아야 하나요? [answer] | 메이커에서 플레이어 캐릭터의 이동 속도나 점프력 같은 기본 속성을 수정하려면 **모델 프로퍼티**를 찾아야 합니다. 주요 속성과 해당 원 컴포넌트 프로퍼티는 다음과 같습니다. 1. **이동 속도 (`speed`)** - **설명**: 플레이어의 기본 이동 속도 값을 정합니다. 값이 클수록 빠르게 움직입니다. - **원 컴포넌트 프로퍼티**: `MovementComponent`의 `InputSpeed` - **기본값**: 1.2 2. **점프력 (`jumpForce`)** - **설명**: 플레이어의 기본 점 [followup] | speed 프로퍼티의 기본값이 1.2인데, 이 값을 2.0으로 변경하면 실제로 MovementComponent의 어떤 원 프로퍼티가 영향을 받나요? [followup_answer] | `speed` 프로퍼티의 값을 2.0으로 변경하면, 원 컴포넌트인 `MovementComponent`의 `InputSpeed` 프로퍼티가 영향을 받습니다. `speed`는 `MovementComponent`의 `InputSpeed` 값을 직접 제어하며, 이 값이 증가하면 플레이어의 기본 이동 속도가 빨라집니다. [scores] | [judge_reason] | [source_doc] | | 모델 프로퍼티 명 | 원 컴포넌트 원 프로퍼티 명 | 설명 | | --------- | ---------------- | --- | | speed | MovementComponent <ul><li>InputSpeed</li></ul> | 플레이어의 기본 이동 속도 값을 정합니다. 값이 클수록 빠르게 움직입니다. 기본값은 1.2입니다. | | jumpForce | MovementComponent<ul><li>JumpForce</li></ul> | 플레이어의 기본 점프 높이를 설정합니다. 값이 클수록 높이 점프합니다. 기본값은

[task] | two_turn [pass] | ⏳ 미판정 [title] | 액션을 예약하고 실행하는 TimerService [question] | SetTimerRepeat()의 startDelaySeconds와 intervalSeconds가 0이거나 음수일 경우 어떤 오류나 동작이 발생하며, 이 경우 예약 취소 로직은 어떻게 구현해야 하나요? [answer] | 제공된 참고 문서에는 `SetTimerRepeat()`의 `startDelaySeconds`와 `intervalSeconds` 값이 0이거나 음수일 경우 발생하는 구체적인 오류 내용이나 동작 방식에 대한 설명이 없습니다. 다만, 문서에서 명시된 일반적인 예약 결과 처리 방식은 다음과 같습니다. 1. **예약 성공 시:** `integer` 타입의 타이머 ID를 반환합니다. 2. **예약 실패 시:** `0`을 반환합니다. 따라서 0 또는 음수 값이 입력되었을 때 예약이 실패하여 `0`이 반환되는지, 아니면 다른 예외가 발생하 [followup] | 예약 취소 시 반환된 id를 활용하여 타이머를 안전하게 해제하는 mLua 스크립트 코드를 작성해 주세요. [followup_answer] | 제공된 문서에 따르면, 타이머 예약 시 성공하면 `integer` 타입의 ID를, 실패하면 `0`을 반환합니다. 따라서 안전하게 타이머를 해제하려면 반환된 ID가 `0`인지 먼저 확인한 후, `0`이 아닌 경우에만 `_TimerService:ClearTimer(timerId)`를 호출해야 합니다. 아래는 `SetTimerRepeat()`으로 반복 타이머를 예약하고, 10초 후 해당 타이머를 안전하게 취소하는 mLua 스크립트 예시입니다. ```lua Method: [server only] void OnBeginPlay() { [scores] | [judge_reason] | [source_doc] | `SetTimerOnce()`는 `SetTimer()`의 isRepeat를 false로 설정한 것과 동일하게 작동합니다. 예약 성공 시 integer 타입의 타이머의 id를 반환하고, 예약 실패 시 0을 반환합니다. 매개 변수는 다음과 같습니다. | 타입 | 매개 변수 | 설명 | | --- | ------ | --- | | func | callback | 몇 초 뒤 수행할 액션을 CallBack 형태로 넘겨줍니다. | | float | delaySeconds | 액션을 예약한 뒤 몇 초 후에 액션을 실행할 것인지를 설정합니다.

[task] | instruction_following [pass] | ⏳ 미판정 [title] | 맵 레이어 [question] | 초록 타일(Layer1)과 연두 타일(Layer3) 위에서의 아바타와 오브젝트(Layer4, Layer2) 간 앞뒤 겹침 관계를 2행 3열의 표로 정리하세요. [answer] | 초록 타일(Layer1)과 연두 타일(Layer3) 위에서 아바타와 각각 배치된 오브젝트(Layer4, Layer2) 사이의 앞뒤 겹침 관계는 다음과 같습니다. | | 초록 타일 (Layer1) 위 | 연두 타일 (Layer3) 위 | |---|---|---| | **Layer4 오브젝트 (나무)** | 아바타가 오브젝트 **뒤로** 이동 | 아바타가 오브젝트 **앞으로** 이동 | | **Layer2 오브젝트 (장난감)** | 아바타가 오브젝트 **앞으로** 이동 | 아바타가 오브젝트 **앞으로** 이동 | **근거:** 1. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 초록 타일은 Layer1에, 연두 타일은 Layer2에 배치했습니다. 초록 타일을 밟고 있는 플레이어 아바타는 점프할 때까지는 Layer1에 머물러 있지만, 노란 타일에 착지하는 순간 Layer2에 있는 상태가 됩니다. #### 활용 예시 2 4개의 레이어에 각각 타일과 오브젝트를 배치했습니다.(OrderInLayer는 기본값입니다.) 플레이어 아바타는 밟고 있는 엔티티 레이어가 귀속 기준이므로 가장 아래 있는 layer1에서 움직이기 시작합니다. 초록 타일 위 나무 오브젝트들은 Layer4에 배치되어 있습니다. 그러므로 초록

[task] | two_turn [pass] | ⏳ 미판정 [title] | 맵 레이어 [question] | 맵 레이어에서 플레이어 아바타의 레이어 귀속 기준과 타일·오브젝트의 배치 관계는 어떻게 되나요? [answer] | 맵 레이어에서 플레이어 아바타의 레이어 귀속 기준은 **아바타가 밟고 있는 엔티티(타일)의 레이어**입니다. 아바타는 점프 중이거나 공중에 있을 때는 이전 레이어에 머물러 있지만, 특정 타일에 착지하는 순간 그 타일이 속해 있는 레이어로 이동합니다. 타일과 오브젝트의 배치 관계 및 시각적 효과는 다음과 같습니다: 1. **아바타와 타일의 관계**: * 아바타가 레이어 A의 타일을 밟고 있으면 아바타는 레이어 A에 속합니다. * 아바타가 레이어 B의 타일로 이동(착지)하면 아바타의 레이어 속성이 레이어 B로 [followup] | 초록 타일(Layer1) 위 Layer4의 나무 오브젝트와 연두 타일(Layer3) 위 Layer2의 장난감 오브젝트 상황에서 아바타의 앞뒤 관계가 어떻게 결정되는지 코드나 설정 예시를 주세요. [followup_answer] | 제공된 참고 문서에는 맵 레이어의 개념적 설명만 포함되어 있으며, 레이어를 설정하거나 변경하는 mLua 코드 API(예: `SetLayer`, `Layer` 프로퍼티 등)가 명시되어 있지 않습니다. 따라서 레이어 배치를 제어하는 구체적인 코드 예제는 작성할 수 없습니다. 다만, 문서에 근거하여 레이어 배치가 아바타의 앞뒤 관계(Z-Order)를 결정하는 원리는 다음과 같습니다. 1. **초록 타일(Layer1) 위 상황**: * 아바타는 초록 타일을 밟고 있으므로 **Layer1**에 속합니다. * 나무 [scores] | [judge_reason] | [source_doc] | 초록 타일은 Layer1에, 연두 타일은 Layer2에 배치했습니다. 초록 타일을 밟고 있는 플레이어 아바타는 점프할 때까지는 Layer1에 머물러 있지만, 노란 타일에 착지하는 순간 Layer2에 있는 상태가 됩니다. #### 활용 예시 2 4개의 레이어에 각각 타일과 오브젝트를 배치했습니다.(OrderInLayer는 기본값입니다.) 플레이어 아바타는 밟고 있는 엔티티 레이어가 귀속 기준이므로 가장 아래 있는 layer1에서 움직이기 시작합니다. 초록 타일 위 나무 오브젝트들은 Layer4에 배치되어 있습니다. 그러므로 초록

[task] | instruction_following [pass] | ⏳ 미판정 [title] | 모델 [question] | 모델의 정의와 엔티티 복제 시 모델화가 필요한 이유를 3문장 이내로 설명하세요. [answer] | 모델은 특정 엔티티의 컴포넌트와 프로퍼티 정보를 저장한 판본입니다. 수많은 엔티티를 일일이 생성하거나 수정하는 반복 작업을 피하기 위해 모델화가 필요합니다. 모델을 사용하면 동일한 구조의 엔티티를 효율적으로 배치하고 관리할 수 있습니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 자주 사용했던 모델의 개념을 정확히 이해합니다. # 원하는 Entity 만들기 원하는 엔티티를 만들려면, 엔티티에 컴포넌트를 추가하고 프로퍼티를 수정해야 합니다. 다음과 같은 나무를 만들어봅시다. 엔티티를 만들고 컴포넌트를 추가하고 프로퍼티를 알맞게 수정했습니다. 완성이군요! 이렇게 여러 개의 나무를 모아서 숲을 만들고 싶습니다. 어떻게 하면 될까요? 엔티티를 만들고 컴포넌트를 추가하고 프로퍼티를 4번 수정하면 되겠군요. 나무가 100개가 있다면 어떻게 하면 될까요? 그렇습니다. 100번을 해야

[task] | code [pass] | ⏳ 미판정 [title] | 맵 레이어 [question] | OnBeginPlay()에서 self.Entity.SpriteRendererComponent.SortingLayer를 "Default"로 초기화하는 스크립트를 작성해줘 [answer] | 요청하신 `OnBeginPlay()`에서 `self.Entity.SpriteRendererComponent.SortingLayer`를 "Default"로 설정하는 스크립트는 다음과 같습니다. 참고로 문서의 "레이어 우선순위 적용 규칙"에서 **Map Layer**가 `SpriteRendererComponent`의 `SortingLayer`와 연관되어 있다고 명시되어 있어 해당 컴포넌트 접근이 유효함을 알 수 있습니다. ```lua Method: [server only] void OnBeginPlay() { self.Ent [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 맵 레이어를 사용해 더욱 입체적으로 게임 화면을 디자인할 수 있습니다. 맵 레이어 창 구성을 살펴보고 활용하는 방법을 알아봅니다. 레이어 순서를 이해하고 레이어를 크리에이터의 게임에 맞게 활용할 수 있습니다. # 맵 레이어 위치 맵 레이어 창은 기본 패널 설정 기준, 중앙 하단에 위치합니다. 작업 편의를 위해 탭을 닫은 후 다시 불러올 때는 **Panels - Map Layer**을 선택해 불러올 수 있습니다. | 메이커 화면 기본 위치 | Panels - Map Layer | | ------------

[task] | instruction_following [pass] | ⏳ 미판정 [title] | 맵 레이어 [question] | 레이어 특성을 활용한 불구덩이 및 수풀 연출의 제작 원리를 단계별 번호 목록으로 작성하세요. [answer] | 제공된 문서에 따르면, 레이어 특성을 활용한 불구덩이 및 수풀 연출의 제작 원리는 다음과 같습니다. 1. **레이어 분리를 통한 배치**: 맵에 여러 개의 레이어(Layer1, Layer2 등)를 생성하고, 타일과 오브젝트를 각각 다른 레이어에 배치합니다. 2. **아바타의 레이어 귀속 원리 적용**: 플레이어 아바타는 현재 밟고 있는 엔티티(타일)의 레이어가 자신의 소속 레이어가 됩니다. 3. **O브젝트와 아바타의 레이어 순서 조절**: 아바타가 지나가야 하는 대상(예: 불구덩이, 수풀)을 아바타보다 낮은 레이어(아래쪽) [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 초록 타일은 Layer1에, 연두 타일은 Layer2에 배치했습니다. 초록 타일을 밟고 있는 플레이어 아바타는 점프할 때까지는 Layer1에 머물러 있지만, 노란 타일에 착지하는 순간 Layer2에 있는 상태가 됩니다. #### 활용 예시 2 4개의 레이어에 각각 타일과 오브젝트를 배치했습니다.(OrderInLayer는 기본값입니다.) 플레이어 아바타는 밟고 있는 엔티티 레이어가 귀속 기준이므로 가장 아래 있는 layer1에서 움직이기 시작합니다. 초록 타일 위 나무 오브젝트들은 Layer4에 배치되어 있습니다. 그러므로 초록

[task] | code [pass] | ⏳ 미판정 [title] | 캐릭터 초기 속성 편집 [question] | ChatBalloonComponent의 Message와 ChatModeEnaled 프로퍼티를 조작하여 말풍선 텍스트와 채팅 연동 기능을 관리하는 스크립트를 작성해줘 [answer] | 메이플스토리 월드의 메이커에서 캐릭터 초기 속성을 편집할 때 `ChatBalloonComponent`는 말풍선 텍스트(`Message`)와 채팅 연동 여부(`ChatModeEnaled`)를 제어하는 프로퍼티를 제공합니다. 요청하신 기능을 구현하기 위해 아래 스크립트를 작성했습니다. 1. **`OnBeginPlay`**: 게임 시작 시 초기 말풍선 텍스트를 설정하고, 채팅 연동 기능을 활성화합니다. 2. **`SetChatBalloonMessage`**: 메서드를 통해 말풍선 텍스트를 동적으로 변경할 수 있습니다. 3. **`Tog [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | | 모델 프로퍼티 명 | 원 컴포넌트 원 프로퍼티 명 | 설명 | | --------- | ---------------- | --- | | speed | MovementComponent <ul><li>InputSpeed</li></ul> | 플레이어의 기본 이동 속도 값을 정합니다. 값이 클수록 빠르게 움직입니다. 기본값은 1.2입니다. | | jumpForce | MovementComponent<ul><li>JumpForce</li></ul> | 플레이어의 기본 점프 높이를 설정합니다. 값이 클수록 높이 점프합니다. 기본값은

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