[task] | instruction_following [pass] | ⏳ 미판정 [title] | 모델 [question] | 나무 모델에 ChatBalloonComponent 를 추가한 후 이를 모델로 변환하는 과정을 단계별 번호 목록으로 정리하세요. [answer] | 참고 문서에 따르면, 나무 모델에 `ChatBalloonComponent`를 추가하고 이를 모델로 변환하는 과정은 다음과 같습니다. 1. 기존 나무 엔티티에 `ChatBalloonComponent` 컴포넌트를 추가합니다. 2. 해당 엔티티(나무)의 컨텍스트 메뉴를 엽니다. 3. 컨텍스트 메뉴에서 **Create Model From Entity**를 클릭하여 엔티티를 모델로 변환합니다. 4. 생성된 모델은 **Workspace - MyDesk**에서 확인할 수 있습니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 자주 사용했던 모델의 개념을 정확히 이해합니다. # 원하는 Entity 만들기 원하는 엔티티를 만들려면, 엔티티에 컴포넌트를 추가하고 프로퍼티를 수정해야 합니다. 다음과 같은 나무를 만들어봅시다. 엔티티를 만들고 컴포넌트를 추가하고 프로퍼티를 알맞게 수정했습니다. 완성이군요! 이렇게 여러 개의 나무를 모아서 숲을 만들고 싶습니다. 어떻게 하면 될까요? 엔티티를 만들고 컴포넌트를 추가하고 프로퍼티를 4번 수정하면 되겠군요. 나무가 100개가 있다면 어떻게 하면 될까요? 그렇습니다. 100번을 해야
[task] | code [pass] | ⏳ 미판정 [title] | 액션을 예약하고 실행하는 TimerService [question] | `_TimerService`의 `SetTimer` 메서드를 사용하여 반복 실행(isRepeat=true) 설정 시 `SetTimer` 호출과 CallBack 함수의 최초 실행 시간이 동일하게 되도록 설정하고, 3초 간격으로 "CallBack! : "와 현재 시각 문자열을 로그로 출력하는 스크립트를 작성해줘. [answer] | `_TimerService:SetTimer` 메서드에서 반복 실행(`isRepeat`을 `true`)으로 설정하면, `SetTimer`가 호출된 시점에 CallBack 함수가 즉시 실행됩니다. 이후에는 지정된 간격(`intervalSeconds`)마다 CallBack 함수가 다시 실행됩니다. 요구사항에 따라 `SetTimer` 호출과 CallBack 함수의 최초 실행 시간이 동일하도록 하고, 3초 간격으로 로그를 출력하는 스크립트는 다음과 같습니다. ```lua Method: [server only] void OnBeginPla [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] | 모델의 OrderInLayer 값을 3 이상으로 임의로 변경하면 플레이 시 어떤 문제가 발생할 수 있나요? [answer] | 모델의 `OrderInLayer` 값을 3 이상으로 임의로 변경하면 플레이 중 아바타가 가려지는 문제가 발생할 수 있습니다. 기본적으로 모델 유형별 `OrderInLayer` 값은 다음과 같이 정해져 있으며, 플레이어 아바타는 4, 타 이용자의 아바타는 3으로 설정되어 있습니다. | OrderInLayer 값 | 모델 유형 | | --- | --- | | 0 | 오브젝트 | | 1 | 타일 | | 2 | 몬스터, NPC, 발판, 사다리, 로프, 포탈, 트랩, 아이템 | | 3 | 타 이용자의 아바타 | | 4 | 나의 아바타 | [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 맵 레이어를 사용해 더욱 입체적으로 게임 화면을 디자인할 수 있습니다. 맵 레이어 창 구성을 살펴보고 활용하는 방법을 알아봅니다. 레이어 순서를 이해하고 레이어를 크리에이터의 게임에 맞게 활용할 수 있습니다. # 맵 레이어 위치 맵 레이어 창은 기본 패널 설정 기준, 중앙 하단에 위치합니다. 작업 편의를 위해 탭을 닫은 후 다시 불러올 때는 **Panels - Map Layer**을 선택해 불러올 수 있습니다. | 메이커 화면 기본 위치 | Panels - Map Layer | | ------------
[task] | instruction_following [pass] | ⏳ 미판정 [title] | 모델 [question] | 모델 생성 후 해당 모델을 확인 및 관리할 수 있는 위치를 표로 정리하세요. [answer] | 모델을 생성한 후 해당 모델을 확인하고 관리할 수 있는 위치는 **Workspace - MyDesk**입니다. | 구분 | 내용 | | :--- | :--- | | **확인 및 관리 위치** | **Workspace - MyDesk** | | **모델 생성 방법** | 엔티티의 콘텍스트 메뉴에서 **Create Model From Entity** 클릭 | | **설명** | 엔티티를 모델로 변환(모델화)한 후, 만든 모델을 Workspace의 MyDesk 폴더에서 확인할 수 있습니다. | [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 자주 사용했던 모델의 개념을 정확히 이해합니다. # 원하는 Entity 만들기 원하는 엔티티를 만들려면, 엔티티에 컴포넌트를 추가하고 프로퍼티를 수정해야 합니다. 다음과 같은 나무를 만들어봅시다. 엔티티를 만들고 컴포넌트를 추가하고 프로퍼티를 알맞게 수정했습니다. 완성이군요! 이렇게 여러 개의 나무를 모아서 숲을 만들고 싶습니다. 어떻게 하면 될까요? 엔티티를 만들고 컴포넌트를 추가하고 프로퍼티를 4번 수정하면 되겠군요. 나무가 100개가 있다면 어떻게 하면 될까요? 그렇습니다. 100번을 해야
[task] | two_turn [pass] | ⏳ 미판정 [title] | 맵 레이어 [question] | 맵 레이어의 순서와 우선순위 규칙에 따라 엔티티의 화면 배치 순서가 어떻게 결정되는지 설명해 주세요 [answer] | 메이플스토리 월드에서 엔티티의 화면 배치 순서(앞뒤 관계)는 다음과 같은 3단계 우선순위 규칙에 따라 결정됩니다. 1. **Map Layer (맵 레이어 순서)** * `SpriteRendererComponent`의 `SortingLayer`에 해당합니다. * 맵 레이어 창에서 가장 아래에 있는 레이어는 화면에서 가장 뒤에 위치하고, 맨 위에 있는 레이어는 가장 앞에 위치합니다. * 특정 레이어의 엔티티들은 그 레이어의 순서에 따라 일괄적으로 앞뒤 순서가 결정됩니다. 2. **SpriteRenderer [followup] | SpriteRendererComponent의 OrderInLayer 값이 3 이상으로 설정되었을 때 발생할 수 있는 문제점과, 이를 방지하기 위한 권장 설정 값은 무엇인가요? [followup_answer] | `SpriteRendererComponent`의 `OrderInLayer` 값을 3 이상으로 임의로 설정했을 때 발생할 수 있는 문제는 **월드를 플레이할 때 아바타가 다른 엔티티에 의해 가려지는 현상**입니다. 이는 모델 유형별 기본값 체계에서 3과 4가 각각 '타 이용자의 아바타'와 '나의 아바타'에 할당되어 있기 때문입니다. 일반 게임 오브젝트나 몬스터 등을 3 이상의 값으로 설정하면, 플레이어의 시야에 중요한 아바타가 뒤로 밀려나 보일 수 있어 게임 플레이에 혼란을 줄 수 있습니다. 따라서 이를 방지하기 위한 권장 사항은 [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 맵 레이어를 사용해 더욱 입체적으로 게임 화면을 디자인할 수 있습니다. 맵 레이어 창 구성을 살펴보고 활용하는 방법을 알아봅니다. 레이어 순서를 이해하고 레이어를 크리에이터의 게임에 맞게 활용할 수 있습니다. # 맵 레이어 위치 맵 레이어 창은 기본 패널 설정 기준, 중앙 하단에 위치합니다. 작업 편의를 위해 탭을 닫은 후 다시 불러올 때는 **Panels - Map Layer**을 선택해 불러올 수 있습니다. | 메이커 화면 기본 위치 | Panels - Map Layer | | ------------
[task] | code [pass] | ⏳ 미판정 [title] | 캐릭터 초기 속성 편집 [question] | CameraComponent의 DeadZone, SoftZone, Damping 프로퍼티를 설정하여 카메라 추적 동작 방식을 제어하는 스크립트를 작성해줘 [answer] | 메이플스토리 월드에서 캐릭터의 카메라 추적 동작을 제어하기 위해서는 `CameraComponent`의 `DeadZone`, `SoftZone`, `Damping` 프로퍼티 값을 수정하면 됩니다. * **DeadZone**: 이 영역 내에서 플레이어 아바타가 움직여도 카메라는 고정됩니다. * **SoftZone**: 대상이 이 영역에 들어오면 카메라가 방향을 바꾸어 DeadZone으로 되돌리려는 동작을 수행합니다. * **Damping**: DeadZone을 벗어났을 때 카메라가 플레이어 아바타를 쫓아갈 때의 부드러움을 [followup] | [followup_answer] | [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] | 스크립트 에디터 오리엔테이션 [question] | 스크립트 에디터에서 확대/축소를 조절하는 방법과 배율 설정 범위를 2문장 이내로 설명해 주세요. [answer] | 편집 중인 스크립트에서 Ctrl(L) 키를 누른 채 마우스 휠을 위로 올리면 확대되고, 아래로 내리면 축소됩니다. 왼쪽 하단에서 20~400% 범위 내에서 원하는 배율을 직접 선택하거나 입력할 수도 있습니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 메이플스토리 월드에서는 스크립트 에디터를 사용해 크리에이터가 원하는 컴포넌트나 로직을 만들 수 있습니다. 스크립트 문법은 **Lua Script**를 사용하며 다양한 **API**를 지원합니다. 월드를 만들다 보면, 메이플스토리 월드에서 제공하는 스크립트나 다른 크리에이터가 작성한 스크립트를 수정해야 할 일이 생깁니다. 스크립트를 수정하기 위해서라도 스크립트 에디터 기본 사용법을 익혀두는 것이 좋습니다. 이번 과정에서는 간단하게 스크립트로 로그를 출력하는 방법을 알아보고, 스크립트 에디터의 다양한 편의 기능도
[task] | single_turn [pass] | ⏳ 미판정 [title] | 맵 레이어 [question] | 같은 레이어 안에 있는 타일과 오브젝트의 앞뒤 순서(OrderInLayer)가 겹칠 때 어떤 기준으로 렌더링되나요? [answer] | 제공된 참고 문서에는 같은 레이어 안에 있는 타일과 오브젝트의 앞뒤 순서(`OrderInLayer`)가 겹칠 때의 렌더링 기준에 대한 설명이 포함되어 있지 않습니다. 참고 문서에서 `OrderInLayer`에 대해 언급된 내용은 "4개의 레이어에 각각 타일과 오브젝트를 배치했습니다.(OrderInLayer는 기본값입니다.)"라는 부분뿐이며, 값이 겹치거나 동일할 경우 어떻게 처리되는지에 대한 기술적 규정은 없습니다. 따라서 해당 질문에 대한 정확한 답은 문서에 근거하여 제공하기 어렵습니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 초록 타일은 Layer1에, 연두 타일은 Layer2에 배치했습니다. 초록 타일을 밟고 있는 플레이어 아바타는 점프할 때까지는 Layer1에 머물러 있지만, 노란 타일에 착지하는 순간 Layer2에 있는 상태가 됩니다. #### 활용 예시 2 4개의 레이어에 각각 타일과 오브젝트를 배치했습니다.(OrderInLayer는 기본값입니다.) 플레이어 아바타는 밟고 있는 엔티티 레이어가 귀속 기준이므로 가장 아래 있는 layer1에서 움직이기 시작합니다. 초록 타일 위 나무 오브젝트들은 Layer4에 배치되어 있습니다. 그러므로 초록
[task] | single_turn [pass] | ⏳ 미판정 [title] | 맵 레이어 [question] | 맵 레이어를 여러 개로 나누면 게임 성능에 어떤 영향이 있는지, 그리고 레이어 수에 제한이 있나요? [answer] | 제공된 참고 문서에는 맵 레이어가 게임 성능에 미치는 영향이나 레이어 수에 대한 제한 사항에 관한 정보가 포함되어 있지 않습니다. 문서에는 레이어를 활용하면 엔티티를 특징별로 묶어 관리할 수 있고, 커다랗고 복잡한 맵을 만들수록 그 장점이 커진다는 점, 그리고 레이어를 이용해 오브젝트 앞뒤로 이동하는 연출(예: 불구덩이, 수풀 헤쳐가기)을 만들 수 있다는 내용만 설명되어 있습니다. 성능 최적화나 기술적 제한(레이어 최대 개수 등)에 대한 내용은 확인되지 않습니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 초록 타일은 Layer1에, 연두 타일은 Layer2에 배치했습니다. 초록 타일을 밟고 있는 플레이어 아바타는 점프할 때까지는 Layer1에 머물러 있지만, 노란 타일에 착지하는 순간 Layer2에 있는 상태가 됩니다. #### 활용 예시 2 4개의 레이어에 각각 타일과 오브젝트를 배치했습니다.(OrderInLayer는 기본값입니다.) 플레이어 아바타는 밟고 있는 엔티티 레이어가 귀속 기준이므로 가장 아래 있는 layer1에서 움직이기 시작합니다. 초록 타일 위 나무 오브젝트들은 Layer4에 배치되어 있습니다. 그러므로 초록
[task] | single_turn [pass] | ⏳ 미판정 [title] | 맵 레이어 [question] | 플레이어 아바타가 다른 레이어의 타일에 착지했을 때 소속 레이어는 즉시 변경되나요? [answer] | 네, 즉시 변경됩니다. 플레이어 아바타는 현재 밟고 있는 엔티티(타일)의 레이어가 소속 레이어를 결정하는 기준이 됩니다. 따라서 다른 레이어에 있는 타일에 착지하는 순간, 아바타의 소속 레이어는 착지한 타일의 레이어로 즉시 변경됩니다. 예를 들어, Layer1의 타일을 밟고 있던 아바타가 Layer2의 타일에 착지하면, 그 순간부터 아바타는 Layer2에 속하게 됩니다. 이 소속 레이어는 아바타의 레이어 순서(렌더링 순서)와 다른 레이어의 오브젝트와 겹치는 방식(앞으로 지나가거나 뒤로 가려지는지)을 결정합니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 초록 타일은 Layer1에, 연두 타일은 Layer2에 배치했습니다. 초록 타일을 밟고 있는 플레이어 아바타는 점프할 때까지는 Layer1에 머물러 있지만, 노란 타일에 착지하는 순간 Layer2에 있는 상태가 됩니다. #### 활용 예시 2 4개의 레이어에 각각 타일과 오브젝트를 배치했습니다.(OrderInLayer는 기본값입니다.) 플레이어 아바타는 밟고 있는 엔티티 레이어가 귀속 기준이므로 가장 아래 있는 layer1에서 움직이기 시작합니다. 초록 타일 위 나무 오브젝트들은 Layer4에 배치되어 있습니다. 그러므로 초록
[task] | instruction_following [pass] | ⏳ 미판정 [title] | 컴포넌트 추가와 삭제 [question] | 컴포넌트 삭제와 초기화 시 사용하는 메뉴명만 코드 블록 없이 한 줄로 나열하세요. [answer] | Remove Component, Reset All Properties [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 엔티티에 정체성을 불어넣는 방법은 컴포넌트를 이용하는 것입니다. 컴포넌트와 프로퍼티 에디터 창 이용 방법을 알아보겠습니다. # 컴포넌트 구분 컴포넌트는 엔티티의 정체성을 결정하는 역할을 합니다. 컴포넌트는 크리에이터가 제작한 모델에서 몇 가지 컴포넌트를 추가하거나, 삭제해 겉모습은 같지만 다르게 동작하는 엔티티를 제작할 수 있습니다. 프로퍼티 에디터 창에서 컴포넌트는 **Map, UI, Player, Etc** 4가지 항목으로 분류하고 있습니다.각 항목에 맞는 컴포넌트가 들어 있으며, 컴포넌트의 특징은 아
[task] | two_turn [pass] | ⏳ 미판정 [title] | Entity, Component, Property [question] | Property가 Component의 재사용성을 높이는 원리와 Entity별 세부 설정 방식에 대해 설명해 주세요 [answer] | Property는 동일한 Component를 여러 Entity에 반복적으로 적용하되, 각 Entity의 상황에 맞게 세부 동작을 달리하도록 설정 값을 변경할 수 있게 해주는 역할입니다. 재사용성이 높아지는 원리는 다음과 같습니다. 만약 각 Entity의 요구사항(예: 다른 크기, 다른 텍스트 크기 등)에 맞춰 Component 자체를 새로 만들어야 한다면, 컴포넌트 수가 과도하게 늘어날 것입니다. 그러나 Property를 사용하면, 동일한 Component를 공유하면서 각 Entity에 할당된 Property 값만 다르게 설정함으 [followup] | ChatBalloonComponent의 BalloonScale과 FontSize 값을 다르게 설정할 때 mLua 스크립트에서 해당 Property에 접근하는 코드 예시를 보여주세요 [followup_answer] | `ChatBalloonComponent`의 `BalloonScale`과 `FontSize` 프로퍼티에 접근하는 mLua 코드 예시는 다음과 같습니다. ```lua Method: [server only] void OnBeginPlay() { local chatBalloon = self.Entity.ChatBalloonComponent if chatBalloon == nil then chatBalloon = self.Entity:AddComponent("ChatBalloonComponent") end -- BalloonS [scores] | [judge_reason] | [source_doc] | Property는 각 Component의 세부사항을 설정합니다. Component에서 예시를 든 피자로 다시 돌아와 볼까요? 세 명의 아이가 페퍼로니 피자를 먹고 싶어 합니다. 철수는 페퍼로니가 2배들어 있는 피자를 원하고, 영희는 들어 있는 치즈가 체다가 아닌 모짜렐라 치즈를 원합니다. 윤후는 사이즈를 조금 더 크게 먹고 싶습니다. 기존에 도우 Component, 페퍼로니 Component, 치즈 Component 가 있습니다. 자, 어떻게 하면 될까요? 철수는 페퍼로니 2배 Component를 추가하고 영희는 모짜렐라 치즈
[task] | two_turn [pass] | ⏳ 미판정 [title] | 액션을 예약하고 실행하는 TimerService [question] | _TimerService:SetTimerOnce()와 SetTimerRepeat()의 매개변수 차이와 예약 실패 시 반환값을 어떻게 처리해야 하나요? [answer] | `_TimerService:SetTimerOnce()`와 `SetTimerRepeat()`는 매개변수 구성과 동작 방식에 차이가 있으며, 예약 실패 시 반환값 처리 방법도 함께 확인해야 합니다. ### 1. 매개변수 차이 **`SetTimerOnce()`** * **용도:** 특정 시간 이후에 액션을 **1회만** 실행할 때 사용합니다. * **매개변수:** * `callback` (func): 실행할 액션을 함수 형태로 전달합니다. * `delaySeconds` (float): 예약 후 몇 초 뒤에 [followup] | callback에 컴포넌트 메서드를 직접 전달할 때 EnableInHierarchy가 false인 경우 동작은 어떻게 되는지, 그리고 이를 방지하기 위한 코드 예시를 보여주세요. [followup_answer] | `_TimerService:SetTimerOnce()`나 `_TimerService:SetTimerRepeat()`의 `callback` 매개변수에 컴포넌트의 메서드를 직접 전달할 때(예: `_TimerService:SetTimerOnce(self.MyMethod, 1)`), 해당 callback의 실행은 컴포넌트의 `EnableInHierarchy` 상태에 영향을 받습니다. 즉, **`EnableInHierarchy`가 `false`인 경우, 예약된 callback이 실행되지 않습니다.** 이를 방지하기 위해서는 컴포넌트 메서 [scores] | [judge_reason] | [source_doc] | `SetTimerOnce()`는 `SetTimer()`의 isRepeat를 false로 설정한 것과 동일하게 작동합니다. 예약 성공 시 integer 타입의 타이머의 id를 반환하고, 예약 실패 시 0을 반환합니다. 매개 변수는 다음과 같습니다. | 타입 | 매개 변수 | 설명 | | --- | ------ | --- | | func | callback | 몇 초 뒤 수행할 액션을 CallBack 형태로 넘겨줍니다. | | float | delaySeconds | 액션을 예약한 뒤 몇 초 후에 액션을 실행할 것인지를 설정합니다.
[task] | instruction_following [pass] | ⏳ 미판정 [title] | 컴포넌트 추가와 삭제 [question] | 프로퍼티 에디터에서 컴포넌트를 추가하는 3단계 절차를 단계별 번호 목록으로 나열하세요. [answer] | 프로퍼티 에디터에서 컴포넌트를 추가하는 3단계 절차는 다음과 같습니다. 1. 프로퍼티 에디터 하단의 **Add component**를 누릅니다. 2. 추가할 컴포넌트를 검색, 선택합니다. 3. 프로퍼티 에디터 창에 선택한 컴포넌트가 추가되었는지 확인합니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 엔티티에 정체성을 불어넣는 방법은 컴포넌트를 이용하는 것입니다. 컴포넌트와 프로퍼티 에디터 창 이용 방법을 알아보겠습니다. # 컴포넌트 구분 컴포넌트는 엔티티의 정체성을 결정하는 역할을 합니다. 컴포넌트는 크리에이터가 제작한 모델에서 몇 가지 컴포넌트를 추가하거나, 삭제해 겉모습은 같지만 다르게 동작하는 엔티티를 제작할 수 있습니다. 프로퍼티 에디터 창에서 컴포넌트는 **Map, UI, Player, Etc** 4가지 항목으로 분류하고 있습니다.각 항목에 맞는 컴포넌트가 들어 있으며, 컴포넌트의 특징은 아
[task] | instruction_following [pass] | ⏳ 미판정 [title] | 컴포넌트 추가와 삭제 [question] | 컴포넌트 활성/비활성 상태 변경 방법과 초기화 기능을 2문장 이내로 요약하세요. [answer] | 컴포넌트 활성/비활성 상태는 아이콘 옆의 체크박스 또는 콘텍스트 메뉴의 Disable Component를 통해 변경할 수 있습니다. 초기화 기능은 콘텍스트 메뉴에서 Reset All Properties를 선택하여 프로퍼티 값을 초깃값으로 되돌리는 것입니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 엔티티에 정체성을 불어넣는 방법은 컴포넌트를 이용하는 것입니다. 컴포넌트와 프로퍼티 에디터 창 이용 방법을 알아보겠습니다. # 컴포넌트 구분 컴포넌트는 엔티티의 정체성을 결정하는 역할을 합니다. 컴포넌트는 크리에이터가 제작한 모델에서 몇 가지 컴포넌트를 추가하거나, 삭제해 겉모습은 같지만 다르게 동작하는 엔티티를 제작할 수 있습니다. 프로퍼티 에디터 창에서 컴포넌트는 **Map, UI, Player, Etc** 4가지 항목으로 분류하고 있습니다.각 항목에 맞는 컴포넌트가 들어 있으며, 컴포넌트의 특징은 아
[task] | instruction_following [pass] | ⏳ 미판정 [title] | 스크립트 에디터 오리엔테이션 [question] | 스크립트 아우트라인 기능이 제공하는 목록 항목과 순서 변경 방법을 표로 정리해 주세요. [answer] | 스크립트 아우트라인 기능을 활성화하면 스크립트 컴포넌트의 구성 요소를 한눈에 파악할 수 있습니다. 제공되는 목록 항목과 순서 변경 방법은 다음과 같습니다. | 항목 | 내용 | | :--- | :--- | | **목록 항목** | 프로퍼티(Property), 함수(Function/Method), 이벤트(Event Handler) 목록 | | **순서 변경 방법** | 아우트라인에서 해당 목록 항목을 드래그하여 원하는 위치로 이동 | 이 기능을 활용하면 스크립트가 길어지거나 복잡해졌을 때 전체적인 구조를 쉽게 정리하고 관리할 수 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 메이플스토리 월드에서는 스크립트 에디터를 사용해 크리에이터가 원하는 컴포넌트나 로직을 만들 수 있습니다. 스크립트 문법은 **Lua Script**를 사용하며 다양한 **API**를 지원합니다. 월드를 만들다 보면, 메이플스토리 월드에서 제공하는 스크립트나 다른 크리에이터가 작성한 스크립트를 수정해야 할 일이 생깁니다. 스크립트를 수정하기 위해서라도 스크립트 에디터 기본 사용법을 익혀두는 것이 좋습니다. 이번 과정에서는 간단하게 스크립트로 로그를 출력하는 방법을 알아보고, 스크립트 에디터의 다양한 편의 기능도
[task] | code [pass] | ⏳ 미판정 [title] | 맵 레이어 [question] | OnUpdate(delta)에서 self.Entity.TransformComponent.Position.Z를 매 프레임 0.1씩 증가시켜 레이어 순서 내에서 점진적으로 앞으로 나오게 하는 스크립트를 작성해줘 [answer] | 요청하신 기능을 구현하는 mLua 스크립트입니다. 참고 문서에 따르면, 메이커에서 엔티티 순서는 `Map Layer` -> `OrderInLayer` -> `TransformComponent의 Position Z값` 순서로 결정됩니다. 따라서 동일한 레이어와 OrderInLayer 값을 가진 엔티티들 사이에서 `Position.Z` 값을 증가시키면 점진적으로 화면 앞으로(앞쪽) 배치되게 됩니다. ```lua Property: [None] number zSpeed = 0.1 Method: [server only] void OnU [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 맵 레이어를 사용해 더욱 입체적으로 게임 화면을 디자인할 수 있습니다. 맵 레이어 창 구성을 살펴보고 활용하는 방법을 알아봅니다. 레이어 순서를 이해하고 레이어를 크리에이터의 게임에 맞게 활용할 수 있습니다. # 맵 레이어 위치 맵 레이어 창은 기본 패널 설정 기준, 중앙 하단에 위치합니다. 작업 편의를 위해 탭을 닫은 후 다시 불러올 때는 **Panels - Map Layer**을 선택해 불러올 수 있습니다. | 메이커 화면 기본 위치 | Panels - Map Layer | | ------------
[task] | code [pass] | ⏳ 미판정 [title] | 캐릭터 초기 속성 편집 [question] | RigidbodyComponent의 WalkAcc와 Gravity 프로퍼티를 조정하여 이동 가감속도와 중력 효과를 변경하는 스크립트를 작성해줘 [answer] | 메이플스토리 월드에서 플레이어 캐릭터의 이동 가감속도와 중력 효과를 변경하려면 `MovementComponent`의 `InputSpeed`와 `RigidbodyComponent`의 `WalkAcc`, `Gravity` 프로퍼티를 조정해야 합니다. 참고 문서에 따르면 `walkAcceleration`은 `RIgidbodyComponent`의 `WalkAcc`에, `gravity`는 `RIgidbodyComponent`의 `Gravity`에 매핑됩니다. 아래 스크립트는 특정 엔티티(예: 플레이어 캐릭터)의 이동 가감속도와 중력 값을 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | | 모델 프로퍼티 명 | 원 컴포넌트 원 프로퍼티 명 | 설명 | | --------- | ---------------- | --- | | speed | MovementComponent <ul><li>InputSpeed</li></ul> | 플레이어의 기본 이동 속도 값을 정합니다. 값이 클수록 빠르게 움직입니다. 기본값은 1.2입니다. | | jumpForce | MovementComponent<ul><li>JumpForce</li></ul> | 플레이어의 기본 점프 높이를 설정합니다. 값이 클수록 높이 점프합니다. 기본값은
[task] | code [pass] | ⏳ 미판정 [title] | 컴포넌트 추가와 삭제 [question] | 제공된 문서에는 mLua 스크립트 코드 작성에 필요한 API(서비스, 메서드, 이벤트 등) 정보가 포함되어 있지 않으며, 메이커 편집기에서의 컴포넌트 추가·삭제·활성화 UI 조작 지침만 담고 있습니다. 따라서 요청하신 mLua 코딩 과제를 만들 수 없습니다. [answer] | 제시된 참고 문서에는 mLua 스크립트 언어의 API(서비스, 메서드, 이벤트 등) 정보가 포함되어 있지 않습니다. 해당 문서는 메이커(Maker) 편집기 환경에서 컴포넌트를 추가, 삭제, 활성화 및 초기화하는 UI 조작 지침만 다루고 있습니다. 따라서 문서에 근거하여 mLua 코딩 과제를 생성할 수 없습니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 엔티티에 정체성을 불어넣는 방법은 컴포넌트를 이용하는 것입니다. 컴포넌트와 프로퍼티 에디터 창 이용 방법을 알아보겠습니다. # 컴포넌트 구분 컴포넌트는 엔티티의 정체성을 결정하는 역할을 합니다. 컴포넌트는 크리에이터가 제작한 모델에서 몇 가지 컴포넌트를 추가하거나, 삭제해 겉모습은 같지만 다르게 동작하는 엔티티를 제작할 수 있습니다. 프로퍼티 에디터 창에서 컴포넌트는 **Map, UI, Player, Etc** 4가지 항목으로 분류하고 있습니다.각 항목에 맞는 컴포넌트가 들어 있으며, 컴포넌트의 특징은 아
[task] | code [pass] | ⏳ 미판정 [title] | 맵 레이어 [question] | SpriteRendererComponent의 OrderInLayer를 2로 설정하여 몬스터와 같은 우선순위로 렌더링되도록 하는 스크립트를 작성해줘 [answer] | SpriteRendererComponent의 `OrderInLayer` 프로퍼티는 스크립트에서 직접 설정하는 것이 아니라, 메이플스토리 월드 메이커의 엔티티 인스펙터(속성 편집기)에서 직접 수정해야 하는 값입니다. 참고 문서에 따르면, `OrderInLayer` 값 2는 **몬스터, NPC, 발판, 사다리, 로프, 포탈, 트랩, 아이템**의 기본 우선순위입니다. 따라서 특정 엔티티(예: 아이템이나 특수 오브젝트)를 몬스터와 같은 순서로 보이게 하려면, 해당 엔티티를 선택한 뒤 인스펙터에서 `SpriteRendererComponen [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 맵 레이어를 사용해 더욱 입체적으로 게임 화면을 디자인할 수 있습니다. 맵 레이어 창 구성을 살펴보고 활용하는 방법을 알아봅니다. 레이어 순서를 이해하고 레이어를 크리에이터의 게임에 맞게 활용할 수 있습니다. # 맵 레이어 위치 맵 레이어 창은 기본 패널 설정 기준, 중앙 하단에 위치합니다. 작업 편의를 위해 탭을 닫은 후 다시 불러올 때는 **Panels - Map Layer**을 선택해 불러올 수 있습니다. | 메이커 화면 기본 위치 | Panels - Map Layer | | ------------
[task] | single_turn [pass] | ⏳ 미판정 [title] | 맵 레이어 [question] | 아바타가 레이어 3의 타일 위에 있으면 레이어 2에 있는 오브젝트와 물리적으로 상호작용(충돌 등)이 가능한가요? [answer] | 제공된 문서에는 아바타의 레이어 속성과 오브젝트와의 **물리적 충돌(물리 상호작용) 가능성**에 대한 정보가 없습니다. 문서에서 설명하는 '레이어'의 역할은 다음과 같습니다: 1. **시각적 순서(렌더링) 관리**: 아바타가 특정 레이어의 타일을 밟으면, 그 타일의 레이어 번호를 따릅니다. 이후 다른 레이어에 배치된 오브젝트와의 앞/뒤 관계(예: 나무 뒤로 이동, 장난감 앞으로 지나감)를 결정합니다. 2. **엔티티 묶음 관리**: 특징별로 엔티티를 묶어 관리하는 용도입니다. 즉, 문서에서는 레이어가 **화면에 어떻게 보이는 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 초록 타일은 Layer1에, 연두 타일은 Layer2에 배치했습니다. 초록 타일을 밟고 있는 플레이어 아바타는 점프할 때까지는 Layer1에 머물러 있지만, 노란 타일에 착지하는 순간 Layer2에 있는 상태가 됩니다. #### 활용 예시 2 4개의 레이어에 각각 타일과 오브젝트를 배치했습니다.(OrderInLayer는 기본값입니다.) 플레이어 아바타는 밟고 있는 엔티티 레이어가 귀속 기준이므로 가장 아래 있는 layer1에서 움직이기 시작합니다. 초록 타일 위 나무 오브젝트들은 Layer4에 배치되어 있습니다. 그러므로 초록
[task] | single_turn [pass] | ⏳ 미판정 [title] | 스크립트 에디터 오리엔테이션 [question] | OnBeginPlay 함수 옆의 [+] 버튼을 누르면 어떤 기능이 활성화되나요? [answer] | `OnBeginPlay` 함수 옆의 **[+]** 버튼을 누르면 해당 함수를 **펼칠 수 있습니다**. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 메이플스토리 월드에서는 스크립트 에디터를 사용해 크리에이터가 원하는 컴포넌트나 로직을 만들 수 있습니다. 스크립트 문법은 **Lua Script**를 사용하며 다양한 **API**를 지원합니다. 월드를 만들다 보면, 메이플스토리 월드에서 제공하는 스크립트나 다른 크리에이터가 작성한 스크립트를 수정해야 할 일이 생깁니다. 스크립트를 수정하기 위해서라도 스크립트 에디터 기본 사용법을 익혀두는 것이 좋습니다. 이번 과정에서는 간단하게 스크립트로 로그를 출력하는 방법을 알아보고, 스크립트 에디터의 다양한 편의 기능도
[task] | single_turn [pass] | ⏳ 미판정 [title] | 스크립트 에디터 오리엔테이션 [question] | 스크립트 아우트라인 기능을 활성화했을 때 한눈에 확인할 수 있는 목록에는 어떤 것들이 있나요? [answer] | 스크립트 아우트라인 기능을 활성화하면 프로퍼티, 함수, 이벤트 목록을 한눈에 확인할 수 있습니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 메이플스토리 월드에서는 스크립트 에디터를 사용해 크리에이터가 원하는 컴포넌트나 로직을 만들 수 있습니다. 스크립트 문법은 **Lua Script**를 사용하며 다양한 **API**를 지원합니다. 월드를 만들다 보면, 메이플스토리 월드에서 제공하는 스크립트나 다른 크리에이터가 작성한 스크립트를 수정해야 할 일이 생깁니다. 스크립트를 수정하기 위해서라도 스크립트 에디터 기본 사용법을 익혀두는 것이 좋습니다. 이번 과정에서는 간단하게 스크립트로 로그를 출력하는 방법을 알아보고, 스크립트 에디터의 다양한 편의 기능도
[task] | instruction_following [pass] | ⏳ 미판정 [title] | 스크립트 에디터 오리엔테이션 [question] | 스크립트 컴포넌트 생성부터 로그 출력까지의 과정을 5단계 이내의 번호 목록으로 정리해 주세요. [answer] | 메이플스토리 월드에서 스크립트 컴포넌트를 생성하고 로그를 출력하는 과정은 다음과 같습니다. 1. **Workspace** 탭에서 **MyDesk - Create Scripts - Create Component**를 클릭해 새 컴포넌트를 생성하고 이름을 지정합니다(예: HelloMapleWorld). 2. 생성한 스크립트 컴포넌트를 더블클릭해 에디터를 열고, Function 목록에서 `OnBeginPlay` 함수를 추가합니다. 3. `OnBeginPlay` 함수 안에 `log("Hello Maple World")` 코드를 작성해 로 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 메이플스토리 월드에서는 스크립트 에디터를 사용해 크리에이터가 원하는 컴포넌트나 로직을 만들 수 있습니다. 스크립트 문법은 **Lua Script**를 사용하며 다양한 **API**를 지원합니다. 월드를 만들다 보면, 메이플스토리 월드에서 제공하는 스크립트나 다른 크리에이터가 작성한 스크립트를 수정해야 할 일이 생깁니다. 스크립트를 수정하기 위해서라도 스크립트 에디터 기본 사용법을 익혀두는 것이 좋습니다. 이번 과정에서는 간단하게 스크립트로 로그를 출력하는 방법을 알아보고, 스크립트 에디터의 다양한 편의 기능도
[task] | single_turn [pass] | ⏳ 미판정 [title] | Entity, Component, Property [question] | 같은 Entity에 동일한 Component를 여러 번 붙이고 각각의 Property 값을 다르게 설정할 수 있나요? [answer] | 아니요, 같은 Entity에 동일한 Component를 여러 번 붙일 수 없습니다. 참고 문서에서 설명한 피자의 예시를 보면, 철수, 영희, 윤후가 원하는 피자를 만들기 위해 처음에는 '페퍼로니 2배 Component', '모짜렐라 치즈 Component' 등 Component 자체를 따로따로 만드는 방식을 고려합니다. 하지만 이 방식은 Component의 재사용성이 떨어진다는 문제점이 있습니다. 이 문제를 해결하기 위해 도입된 것이 Property입니다. Property는 Component 내에서 세부 속성을 설정하는 값입니다 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | Property는 각 Component의 세부사항을 설정합니다. Component에서 예시를 든 피자로 다시 돌아와 볼까요? 세 명의 아이가 페퍼로니 피자를 먹고 싶어 합니다. 철수는 페퍼로니가 2배들어 있는 피자를 원하고, 영희는 들어 있는 치즈가 체다가 아닌 모짜렐라 치즈를 원합니다. 윤후는 사이즈를 조금 더 크게 먹고 싶습니다. 기존에 도우 Component, 페퍼로니 Component, 치즈 Component 가 있습니다. 자, 어떻게 하면 될까요? 철수는 페퍼로니 2배 Component를 추가하고 영희는 모짜렐라 치즈
[task] | code [pass] | ⏳ 미판정 [title] | Entity, Component, Property [question] | Entity의 TransformComponent를 접근하여 OnBeginPlay 메서드에서 실행 위치와 이름을 log 함수로 출력하는 스크립트를 작성해줘 [answer] | 요청하신 기능을 구현하기 위한 mLua 스크립트입니다. `self.Entity.TransformComponent.Position`을 통해 현재 위치를, `self.Entity.Name`을 통해 엔티티 이름을 가져와 `log` 함수로 출력합니다. ```lua Method: [server only] void OnBeginPlay() { local position = self.Entity.TransformComponent.Position local entityName = self.Entity.Name log("En [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] | 철수, 영희, 윤후가 원하는 피자를 만들기 위해 기존 방식과 Property 활용 방식의 차이를 단계별 번호 목록으로 나열하세요. [answer] | 철수, 영희, 윤후가 원하는 피자를 만드는 두 가지 방식의 차이는 다음과 같습니다. **1. 기존 방식 (Component 추가 방식)** 1. 기존에 존재하는 `도우 Component`, `페퍼로니 Component`, `치즈 Component`를 기준으로 합니다. 2. 철수의 요구사항(페퍼로니 2배)을 충족하기 위해 `페퍼로니 2배 Component`를 새로 추가합니다. 3. 영희의 요구사항(모짜렐라 치즈)을 충족하기 위해 `모짜렐라 치즈 Component`를 새로 추가합니다. 4. 윤후의 요구사항(사이즈 증대)을 충족하기 위 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | Property는 각 Component의 세부사항을 설정합니다. Component에서 예시를 든 피자로 다시 돌아와 볼까요? 세 명의 아이가 페퍼로니 피자를 먹고 싶어 합니다. 철수는 페퍼로니가 2배들어 있는 피자를 원하고, 영희는 들어 있는 치즈가 체다가 아닌 모짜렐라 치즈를 원합니다. 윤후는 사이즈를 조금 더 크게 먹고 싶습니다. 기존에 도우 Component, 페퍼로니 Component, 치즈 Component 가 있습니다. 자, 어떻게 하면 될까요? 철수는 페퍼로니 2배 Component를 추가하고 영희는 모짜렐라 치즈
[task] | single_turn [pass] | ⏳ 미판정 [title] | 스크립트 에디터 오리엔테이션 [question] | 스크립트 에디터에서 코드 화면을 400%까지 확대하려면 어떤 키 조합을 사용해야 하나요? [answer] | 스크립트 에디터에서 코드 화면을 확대하려면 **Ctrl(L)** 키를 누른 채로 마우스 휠을 위로 올려야 합니다. 참고로, 왼쪽 하단에서 화면 배율을 직접 입력할 수도 있으며, 이 경우 20~400% 범위 내에서 원하는 배율(예: 400%)을 설정할 수 있습니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 메이플스토리 월드에서는 스크립트 에디터를 사용해 크리에이터가 원하는 컴포넌트나 로직을 만들 수 있습니다. 스크립트 문법은 **Lua Script**를 사용하며 다양한 **API**를 지원합니다. 월드를 만들다 보면, 메이플스토리 월드에서 제공하는 스크립트나 다른 크리에이터가 작성한 스크립트를 수정해야 할 일이 생깁니다. 스크립트를 수정하기 위해서라도 스크립트 에디터 기본 사용법을 익혀두는 것이 좋습니다. 이번 과정에서는 간단하게 스크립트로 로그를 출력하는 방법을 알아보고, 스크립트 에디터의 다양한 편의 기능도
[task] | code [pass] | ⏳ 미판정 [title] | 캐릭터 초기 속성 편집 [question] | MovementComponent의 InputSpeed와 JumpForce 프로퍼티를 수정하여 이동 속도와 점프 높이를 커스텀하는 스크립트를 작성해줘 [answer] | 메이플스토리 월드에서 플레이어의 이동 속도와 점프 높이를 커스텀하려면 `MovementComponent`의 `InputSpeed`와 `JumpForce` 프로퍼티를 수정하면 됩니다. 이 값들은 게임 실행 시(예: `OnBeginPlay`) 또는 특정 조건이 충족될 때(예: 특정 타일 위일 때) 변경할 수 있습니다. 아래 예제는 스크립트가 붙은 엔티티가 로컬 플레이어일 때, 시작 시점(`OnBeginPlay`)에 이동 속도와 점프 힘을 지정된 값으로 설정하는 코드입니다. ```lua Property: [None] number Cu [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | | 모델 프로퍼티 명 | 원 컴포넌트 원 프로퍼티 명 | 설명 | | --------- | ---------------- | --- | | speed | MovementComponent <ul><li>InputSpeed</li></ul> | 플레이어의 기본 이동 속도 값을 정합니다. 값이 클수록 빠르게 움직입니다. 기본값은 1.2입니다. | | jumpForce | MovementComponent<ul><li>JumpForce</li></ul> | 플레이어의 기본 점프 높이를 설정합니다. 값이 클수록 높이 점프합니다. 기본값은
[task] | single_turn [pass] | ⏳ 미판정 [title] | 맵 레이어 [question] | 아바타가 레이어 1에서 레이어 2로 이동하는 순간, 레이어 2에 있는 오브젝트와 충돌判定이 어떻게 처리되나요? [answer] | 제공된 문서에는 아바타가 레이어를 이동하는 순간의 **충돌 판정(커링) 처리 방식에 대한 기술적 설명이 없습니다.** 문서에서 확인 가능한 내용은 다음과 같습니다: 1. **레이어 귀속 기준:** 플레이어 아바타는 밟고 있는 엔티티(타일 등)의 레이어를 기준으로 자신의 레이어가 결정됩니다. 2. **시각적 연출(렌더링 순서):** 레이어의 위아래 관계에 따라 아바타가 오브젝트 앞이나 뒤로 지나가는 *화면 표시*가 달라집니다. * 예: 아바타가 Layer3(연두 타일)에 있고, 오브젝트가 Layer2에 있으면, 아바타 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 초록 타일은 Layer1에, 연두 타일은 Layer2에 배치했습니다. 초록 타일을 밟고 있는 플레이어 아바타는 점프할 때까지는 Layer1에 머물러 있지만, 노란 타일에 착지하는 순간 Layer2에 있는 상태가 됩니다. #### 활용 예시 2 4개의 레이어에 각각 타일과 오브젝트를 배치했습니다.(OrderInLayer는 기본값입니다.) 플레이어 아바타는 밟고 있는 엔티티 레이어가 귀속 기준이므로 가장 아래 있는 layer1에서 움직이기 시작합니다. 초록 타일 위 나무 오브젝트들은 Layer4에 배치되어 있습니다. 그러므로 초록