[task] | code [pass] | ⏳ 미판정 [title] | UI 에디터 [question] | UI 에디터에서 생성한 UI 엔티티의 경로를 _EntityService:GetEntityByPath()로 조회한 후, 해당 엔티티의 UITransformComponent를 직접 참조하여 Position을 수정하는 스크립트를 작성해줘 [answer] | UI 에디터에서 생성한 UI 엔티티의 경로를 `_EntityService:GetEntityByPath()`로 조회한 뒤, 해당 엔티티의 `UITransformComponent`를 직접 참조해서 `Position`을 수정하는 스크립트는 다음과 같이 작성할 수 있습니다. 참고 문서의 예제에서 UI 엔티티의 위치 수정은 `entity.UITransformComponent.Position.y = ...` 형태로 이루어집니다. ```lua Method: [client only] void OnBeginPlay() { -- UI 에디 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 UI를 편집할 수 있는 UI 에디터와 UI Group에 대해 알아봅시다. ##### 참고 가이드 * [UI 엔티티 제어하기](/docs?postId=1154&version=1) * [기본 UI 컴포넌트](/docs?postId=744) * [UI 제작하기](/docs?postId=64) # UI 에디터 소개 UI 에디터는 UI 엔티티를 구성하고, 메이플스토리 월드에서 제공하는 UI 엔티티를 조합해서 인벤토리나 상점 UI를 제작할 수 있습니다. UI 에디터 구성은 다음과 같습니다. | 번호 | 이름 |
[task] | single_turn [pass] | ⏳ 미판정 [title] | Workspace [question] | NativeModel 폴더의 모델을 다른 폴더로 이동하거나 새로 만들 수 없다고 하는데, 이 모델들을 활용해서 커스텀 모델을 만들고 싶은 경우 어떤 방법으로 해결해야 하나요? [answer] | NativeModel 폴더에 포함된 모델은 원본을 직접 수정하거나 다른 폴더로 이동할 수 없으며, 새로운 모델을 그 안에 직접 생성할 수도 없습니다. 하지만 이 모델들을 활용하여 커스텀 모델을 만들려면 **복제** 또는 **확장** 방법을 사용해야 합니다. 해결 방법은 다음과 같습니다. 1. **복제(Copy):** NativeModel의 모델을 복제하여 MyDesk 폴더에 저장합니다. 복제된 모델은 자유롭게 수정할 수 있습니다. 2. **확장(Extend):** NativeModel의 모델을 확장(Extend)하여 MyDe [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 메이커에서 기본 제공하는 기능을 모아 둔 폴더입니다. 총 2개의 폴더로 구성되어 있습니다. * **NativeScripts** * **NativeModel** **BaseEnvironment**의 폴더 순서를 바꾸거나, 하위 목록을 옮길 수 없습니다. **NativeScripts**의 모든 계층은 복제/삭제할 수 없습니다. **NativeScripts**의 특성을 변경해 사용하려면 해당 스크립트를 확장(Extend)하여 사용해야 합니다. 또한 **NativeModel**은 복제하거나 확장해 활용할 수 있습니다. **BaseEn
[task] | code [pass] | ⏳ 미판정 [title] | Workspace [question] | MyDesk의 UIPopup 로직을 확장하여 팝업 메시지 표시 기능을 커스텀하는 스크립트를 작성해줘 [answer] | 참고 문서에 따르면 **MyDesk**의 **UIPopup**은 크리에이터가 자유롭게 수정하거나 삭제할 수 있는 로직이며, 필요에 따라 확장하거나 복제할 수 있습니다. 하지만 문서에는 `UIPopup` 스크립트의 구체적인 API(메서드, 프로퍼티, 이벤트)나 내부 구조가 제공되지 않았습니다. 또한, 팝업 메시지를 표시하기 위한 특정 GUI 컴포넌트나 서비스 API(예: `_UIService` 등)도 문서에 언급되지 않았습니다. 따라서 제공된 참고 문서만으로는 `UIPopup` 로직을 확장하여 팝업 메시지를 커스텀하는 **구체적인 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 메이커에서 기본 제공하는 기능을 모아 둔 폴더입니다. 총 2개의 폴더로 구성되어 있습니다. * **NativeScripts** * **NativeModel** **BaseEnvironment**의 폴더 순서를 바꾸거나, 하위 목록을 옮길 수 없습니다. **NativeScripts**의 모든 계층은 복제/삭제할 수 없습니다. **NativeScripts**의 특성을 변경해 사용하려면 해당 스크립트를 확장(Extend)하여 사용해야 합니다. 또한 **NativeModel**은 복제하거나 확장해 활용할 수 있습니다. **BaseEn
[task] | single_turn [pass] | ⏳ 미판정 [title] | 말풍선 만들기 [question] | ChatBalloonRUID에 다른 말풍선 스프라이트 값을 넣었는데 원본 이미지와 색상이 달라 보이는 것 같은데, FontColor 설정만으로 스프라이트 전체 색상을 변경할 수 있는지 아니면 별도의 색상 조정 기능이 있는지 궁금합니다. [answer] | 참고 문서에 따르면 `FontColor` 프로퍼티는 말풍선 **문구(텍스트) 색상**만 변경하는 기능입니다. 문서에는 "색상 변경은 스프라이트 색상 조정을 참고하세요."라는 안내가 있으나, **스프라이트 전체 색상을 조정하는 구체적인 API나 프로퍼티 이름은 문서에 명시되어 있지 않습니다.** 또한 `ChatBalloonRUID` 값 변경 시 원본 이미지와 색상이 달라 보이는 현상에 대한 기술적 설명도 문서에 포함되어 있지 않습니다. 따라서 현재 제공된 정보 범위 내에서는 `FontColor`만으로 스프라이트 전체 색상을 변경할 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 엔티티와 플레이어 아바타에 말풍선을 간단하게 붙일 수 있습니다. ChatBalloonComponent 사용 방법과 활용 예시를 소개합니다. # 말풍선 붙이기 1. 말풍선을 붙일 엔티티를 선택하고 **ChatBalloonComponent**를 추가합니다. 2. 프로퍼티 값을 변경해 원하는 말풍선을 만듭니다. 주요 프로퍼티 값은 다음과 같습니다. | 프로퍼티 명 | 설명 | | --- | --- | | ChatBalloonRUID | 다양한 말풍선 스프라이트를 이용할 수 있습니다. | | BalloonSca
[task] | single_turn [pass] | ⏳ 미판정 [title] | 말풍선 만들기 [question] | 말풍선 크기를 조절할 때 BalloonScale 값을 3으로 입력했는데 양옆으로만 늘어나고 높이는 그대로라, 상하 방향의 크기 조정은 어떤 프로퍼티를 통해 해야 하는지 알고 싶습니다. [answer] | 제공된 문서에 따르면, **상하 방향(높이)의 크기를 조절하는 전용 프로퍼티는 존재하지 않습니다.** `BalloonScale` 프로퍼티의 설명에는 "입력한 값이 클수록 크기가 **양옆으로** 늘어납니다"라고 명시되어 있으며, 높이를 조절하는 별도의 스케일 프로퍼티나 비율 조절 프로퍼티는 문서에 언급되어 있지 않습니다. 대신, 말풍선의 **위치**를 조정하여 시각적으로 높이를 바꾸는 효과를 낼 수 있습니다. * **Offset**: 말풍선 위치를 정합니다. 기준 축은 Y축이며, 원점 값은 0입니다. * **양수** [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 엔티티와 플레이어 아바타에 말풍선을 간단하게 붙일 수 있습니다. ChatBalloonComponent 사용 방법과 활용 예시를 소개합니다. # 말풍선 붙이기 1. 말풍선을 붙일 엔티티를 선택하고 **ChatBalloonComponent**를 추가합니다. 2. 프로퍼티 값을 변경해 원하는 말풍선을 만듭니다. 주요 프로퍼티 값은 다음과 같습니다. | 프로퍼티 명 | 설명 | | --- | --- | | ChatBalloonRUID | 다양한 말풍선 스프라이트를 이용할 수 있습니다. | | BalloonSca
[task] | two_turn [pass] | ⏳ 미판정 [title] | Workspace [question] | Workspace의 기본 구조와 각 폴더의 역할을 설명해 주세요. [answer] | 메이플스토리 월드 메이커의 **Workspace**는 폴더 형식으로 리소스를 관리하는 공간으로, 기본적으로 우측 중앙에 위치합니다. 워크스페이스는 크게 **BaseEnvironment**, **MyDesk**, **DefaultPlayer** 세 가지 상위 폴더(엔트리)로 구성됩니다. 각 폴더의 역할은 다음과 같습니다. 1. **BaseEnvironment** - 메이커에서 기본적으로 제공하는 `Component`, `Service`, `Logic`, `Event`가 저장된 공간입니다. - 사용자가 직접 추가한 것이 [followup] | MyDesk 폴더에 새로운 리소스를 추가할 때 어떤 규칙을 따라야 하며, BaseEnvironment와 무엇이 다른가요? [followup_answer] | MyDesk 폴더에 새로운 리소스를 추가할 때의 규칙과 BaseEnvironment와의 차이는 다음과 같습니다. **MyDesk 폴더의 규칙 및 특징** * **저장 위치:** 크리에이터가 새롭게 추가한 모든 리소스는 기본적으로 **MyDesk** 폴더 하위에 저장됩니다. * **내용:** 사용자가 직접 추가한 리소스, 또는 BaseEnvironment에서 확장하거나 복제한 모델 및 컴포넌트가 포함됩니다. * **폴더 관리:** 효율적인 리소스 관리를 위해 필요할 때 MyDesk 내부에 하위 폴더를 추가하여 구조를 정리 [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 **Workspace**를 이용해 엔티티, 스크립트, 이미지를 효율적으로 관리할 수 있습니다. ##### 참고 가이드 [Entity, Component, Property](/docs?postId=54) [Model](/docs?postId=55) # Workspace 소개 **Workspace**는 폴더 형식의 리소스 관리 공간입니다. 필요한 것을 찾을 수 있는 **Workspace**는 효율적인 월드 제작을 위해 필요합니다. **Workspace** 패널의 기본 위치는 우측 중앙입니다. 크리에이터의 편의에
[task] | single_turn [pass] | ⏳ 미판정 [title] | Workspace [question] | DefaultPlayer와 BaseEnvironment에서 제공하는 'Add Component'와 'Add New Component' 메뉴의 차이가 무엇인가요? [answer] | 참고 문서에 따르면, 두 메뉴의 차이는 다음과 같습니다. **DefaultPlayer**의 경우: * **Add Component**: 이미 존재하는(기존의) 컴포넌트를 DefaultPlayer에 추가합니다. * **Add New Component**: 새로운 컴포넌트를 생성한 후 DefaultPlayer에 추가합니다. **BaseEnvironment**의 경우: * **Add Component**: NativeModel에 (기존의) 컴포넌트를 추가합니다. * **Add New Component**: NativeM [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | | 목록 | 설명 | | --- | --- | | Duplicate | DefaultPlayer를 복제한 모델을 생성합니다. | | Open | Player의 상태 혹은 변경 점을 확인하기 위해 사용합니다.| | Add Component | DefaultPlayer에 컴포넌트를 추가합니다. | | Add New Component | 새로운 컴포넌트를 생성한 후 DefaultPlayer에 추가합니다. | | Extend | DefaultPlayer의 확장 모델을 생성합니다. | | Copy Entry ID | DefaultPlayer
[task] | code [pass] | ⏳ 미판정 [title] | UI 에디터 [question] | 스크롤뷰 엔티티의 ScrollLayoutGroupComponent 를 참조하여 자식 UI 엔티티의 개수를 계산하고 TextComponent 에 출력하는 스크립트를 작성해줘 [answer] | 제공된 참고 문서에는 `ScrollLayoutGroupComponent` 에 자식 엔티티 개수를 반환하는 메서드(예: `ChildCount`, `GetChildCount` 등)가 존재한다는 정보가 없습니다. 또한, 스크롤뷰의 자식 UI 엔티티를 직접 조회하는 API도 문서에 명시되어 있지 않습니다. 따라서 **참고 문서에 기반하여** 자식 UI 엔티티의 개수를 계산하는 정확한 코드를 작성하는 것은 불가능합니다. `ScrollLayoutGroupComponent` 의 구체적인 API(자식 접근, 개수 조회 등)가 문서에 포함되어 있 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 기본 UI 엔티티는 UI 제작 시 가장 많이 사용하는 기능을 제공합니다. **이미지, 버튼, 스크롤 뷰, 텍스트, 입력 텍스트**로 구성되어 있습니다. 크리에이터는 여러 개의 UI 엔티티를 조합해 새로운 UI를 만들 수도 있습니다. [기본 UI 컴포넌트](/docs?postId=744) 가이드를 참고하세요. ![[object Object]](https://mod-file.dn.nexoncdn.co.kr/bbs/17132470861160af59286c47f4cdfb9012301dfc3d0c1.png "4") | 아이콘 | UI
[task] | single_turn [pass] | ⏳ 미판정 [title] | Workspace [question] | MyDesk에서 'Create Script'로 생성한 탑 레벨 스크립트와 'Create Component'로 만든 스크립트 컴포넌트의 용도 차이는 무엇인가요? [answer] | 제공된 문서에 따르면, MyDesk의 'Create Scripts' 메뉴에서 생성하는 두 항목의 용도 차이는 다음과 같습니다. 1. **Create Component**: 새로운 스크립트 컴포넌트를 생성합니다. 이는 모델이나 엔티티에 추가하여 동작을 부여하는 단위입니다. 2. **Create Script**: 처음부터 스크립트를 입력할 수 있는 **탑 레벨 스크립트**를 생성합니다. 요약하자면, 'Create Component'는 재사용 가능한 컴포넌트 단위의 스크립트를 만들고, 'Create Script'는 개별적으로 관리되는 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | | 목록 | 설명 | | --- | --- | | Duplicate | DefaultPlayer를 복제한 모델을 생성합니다. | | Open | Player의 상태 혹은 변경 점을 확인하기 위해 사용합니다.| | Add Component | DefaultPlayer에 컴포넌트를 추가합니다. | | Add New Component | 새로운 컴포넌트를 생성한 후 DefaultPlayer에 추가합니다. | | Extend | DefaultPlayer의 확장 모델을 생성합니다. | | Copy Entry ID | DefaultPlayer
[task] | instruction_following [pass] | ⏳ 미판정 [title] | 엔티티 구간 이동시키기 [question] | Positions 프로퍼티에서 목적지 좌표를 입력할 때 배열 인덱스 시작 값과 첫 번째 목적지 좌표가 저장되는 위치를 2문장 이내로 [answer] | Size는 0부터 시작하며, [1] 인덱스에 엔티티의 첫 번째 목적지 좌표가 저장됩니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 원점을 기준으로 목적지까지 선형 운동을 하게 만들 때 사용합니다. 목적지까지 편도, 왕복 운동 여부와 더불어 가·감속, 도달 시 튕김 등 운동 방식을 설정할 수 있습니다. **TweenLineComponent**의 프로퍼티를 살펴봅시다. | 프로퍼티 명 | 설명 | | ------ | --- | | TweenType | 기본값은 Linear입니다. 다른 모양의 운동 방식을 선택할 수 있습니다. 선형운동 종류별 설명은 하단의 참고자료를 참고하세요. | | Duration | 목적지까지 도달하는 데 걸리는 시간을 의미합니다. | |
[task] | single_turn [pass] | ⏳ 미판정 [title] | CameraService를 활용한 카메라 제어 [question] | TimerService:SetTimerOnce에서 호출 시점 기준 10초 후 ZoomReset이 실행되도록 코드를 작성했는데, 왜 줌 인이 끝난 직후가 아닌 10초 뒤에야 원래대로 돌아오나요? [answer] | `ZoomTo()` 함수는 첫 번째 매개변수로 줌 비율, 두 번째 매개변수로 **변화까지 걸리는 시간(초)** 을 받습니다. 예시 코드에서 `_CameraService:ZoomTo(150, 5)`를 호출하면 카메라가 150%까지 확대되는 데 **5초**가 소요됩니다. 따라서 `TimerService:SetTimerOnce(CallBack, 10)`에서 설정한 10초는 `ZoomTo()` 호출 시점 기준 10초 후를 의미합니다. 이 10초 안에 줌 인에 걸리는 5초가 포함되므로, 실제로는 줌 인이 끝난 후(5초 경과 시점)에도 ** [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | `ZoomReset()`는 변경된 줌 값을 초깃값으로 되돌리는 함수입니다. `ZoomReset()`을 사용하면 `ZoomTo()`를 이용해 줌 값을 변경하더라도, 다시 초깃값으로(100%) 맞출 수 있습니다. `ZoomTo()` 예시에 이어 `ZoomReset()`을 사용해 5초 뒤 줌 값을 100%로 변경하는 예시 코드입니다. 이해를 돕기 위해 **TimerService**를 활용했습니다. [TimerService](/docs?postId=47%7B%22target%22:%22\_self%22%7D) 가이드를 참고하세요. ``
[task] | two_turn [pass] | ⏳ 미판정 [title] | 엔티티 구간 이동시키기 [question] | mLua에서 엔티티를 자동으로 이동시키기 위해 사용할 수 있는 Tween Component의 종류와 각각의 운동 형태가 무엇인가요? [answer] | mLua에서 엔티티를 자동으로 이동시키기 위해 사용할 수 있는 Tween Component는 총 3가지입니다. 각 컴포넌트의 종류와 운동 형태는 다음과 같습니다. | Tween Component 이름 | 운동 형태 | | :--- | :--- | | `TweenFloatingComponent` | 원점을 기준으로 부유 운동 (제자리에서 상하로 떠다니는 움직임) | | `TweenLineComponent` | 원점에서 목적지까지의 선형운동 | | `TweenCircularComponent` | 원점을 중심으로 원운동 | 각 컴포넌 [followup] | 복수의 Tween 컴포넌트를 동시에 적용했을 때 발생할 수 있는 버그와 권장 사항은 무엇이며, 특정 엔티티에 TweenFloatingComponent를 적용하여 진폭(Amplitude) 1.0, 사이클 시간(OneCycleTime) 2.0으로 설정하는 스크립트 예시를 작성해 주세요. [followup_answer] | 복수의 Tween 컴포넌트를 동시에 적용하면 하나의 컴포넌트만 동작하거나 오작동하는 버그가 발생할 수 있습니다. 이를 방지하기 위해 엔티티에는 Tween 컴포넌트 중 하나만 사용할 것을 권장합니다. 진폭(Amplitude) 1.0, 사이클 시간(OneCycleTime) 2.0으로 설정하는 `TweenFloatingComponent` 스크립트 예시는 다음과 같습니다. ```lua Method: [server only] void OnBeginPlay() { local tween = self.Entity.TweenFloatin [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 엔티티에 동작을 만드는 세 가지 **Tween Component**의 개념을 이해합니다. 컴포넌트를 이용해 크리에이터가 원하는 엔티티 운동 방향과 폭을 조정할 수 있습니다. ##### 참고 가이드 [엔티티의 위치, 크기, 회전 조정](/docs?postId=82) # Tween Component 소개 **Tween Component**를 이용하여 엔티티에 운동성을 만들고, 세부 설정을 조정할 수 있습니다. 운동 성질에 따른 세 가지 컴포넌트가 있으며, 상황에 맞게 단독으로 사용하거나 조합하여 사용할 수 있습
[task] | code [pass] | ⏳ 미판정 [title] | CameraService를 활용한 카메라 제어 [question] | `TriggerComponent`의 `HandleTriggerEnterEvent`에서 `event.TriggerBodyEntity`가 비어있지 않을 경우에만 `_CameraService:ZoomTo(180, 4)`를 실행하여 4초 동안 줌을 180%로 변경하는 스크립트를 작성해줘. [answer] | `event.TriggerBodyEntity`가 `nil`이 아닐 때만 카메라 줌을 실행하도록 `if` 조건문을 추가한 스크립트입니다. ```lua [self] HandleTriggerEnterEvent (TriggerEnterEvent event) { --------------- Native Event Sender Info ---------------- -- Sender: TriggerComponent -- Space: Server, Client ------------------------------ [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 게임 플레이 중에 카메라 줌 인과 줌 아웃을 제어하는 방법에 대해 알아보겠습니다. 위에서 작성한 코드는 필요하지 않기 때문에 모두 지우고, 아래와 같은 상태에서 시작합니다. ```lua [self] HandleTriggerEnterEvent (TriggerEnterEvent event) { --------------- Native Event Sender Info ---------------- -- Sender: TriggerComponent -- Space: Server, Client ----------
[task] | single_turn [pass] | ⏳ 미판정 [title] | Workspace [question] | MyDesk 에 리소스를 추가할 때 동일한 계층으로만 추가된다는 설명이 있는데, 여러 파일을 정리하고 싶을 때 어떻게 해야 하나요? [answer] | **MyDesk**는 크리에이터가 추가한 리소스가 모두 동일한 계층(루트)에 추가되는 구조입니다. 여러 파일을 체계적으로 정리하고 싶다면 **MyDesk** 폴더 내부에 새 폴더를 직접 생성하여 해당 폴더 안에 리소스를 배치하는 것이 방법입니다. 이를 통해 리소스를 목적이나 종류별로 폴더 단위로 묶어 관리할 수 있습니다. **리소스 추가 및 정리 절차** 1. **Workspace**에서 **MyDesk** 폴더를 선택합니다. 2. 검색 창 왼쪽의 **[+]** 버튼을 클릭해 콘텍스트 메뉴를 엽니다. 3. 먼저 정리할 * [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 메이커에서 기본 제공하는 기능을 모아 둔 폴더입니다. 총 2개의 폴더로 구성되어 있습니다. * **NativeScripts** * **NativeModel** **BaseEnvironment**의 폴더 순서를 바꾸거나, 하위 목록을 옮길 수 없습니다. **NativeScripts**의 모든 계층은 복제/삭제할 수 없습니다. **NativeScripts**의 특성을 변경해 사용하려면 해당 스크립트를 확장(Extend)하여 사용해야 합니다. 또한 **NativeModel**은 복제하거나 확장해 활용할 수 있습니다. **BaseEn
[task] | instruction_following [pass] | ⏳ 미판정 [title] | 엔티티 구간 이동시키기 [question] | TweenLineComponent에서 왕복 운동 종료 방식을 결정하는 프로퍼티와 그 선택 가능한 값 3가지를 표로 정리해서 [answer] | `TweenLineComponent`에서 왕복 운동의 종료 방식을 결정하는 프로퍼티는 **StopType**입니다. 선택 가능한 값은 다음과 같습니다. | 프로퍼티 값 | 설명 | | :--- | :--- | | Oneway | 엔티티가 편도로 움직이며 목적지에 도착 후 운동을 종료합니다. | | OneRoundTrip | 엔티티가 목적지를 반환점으로 삼아 왕복 운동을 합니다. 1회 왕복 후 운동을 종료합니다. | | RepeatRoundTrip | 엔티티가 목적지를 반환점으로 삼아 왕복 운동을 반복합니다. | [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 원점을 기준으로 목적지까지 선형 운동을 하게 만들 때 사용합니다. 목적지까지 편도, 왕복 운동 여부와 더불어 가·감속, 도달 시 튕김 등 운동 방식을 설정할 수 있습니다. **TweenLineComponent**의 프로퍼티를 살펴봅시다. | 프로퍼티 명 | 설명 | | ------ | --- | | TweenType | 기본값은 Linear입니다. 다른 모양의 운동 방식을 선택할 수 있습니다. 선형운동 종류별 설명은 하단의 참고자료를 참고하세요. | | Duration | 목적지까지 도달하는 데 걸리는 시간을 의미합니다. | |
[task] | code [pass] | ⏳ 미판정 [title] | UI 에디터 [question] | 입력 텍스트 엔티티의 TextInputComponent 를 감시하여 사용자가 입력한 텍스트가 10자를 초과할 경우 TextComponent 로 "너무 깁니다"라는 경고 메시지를 표시하는 스크립트를 작성해줘 [answer] | 제공된 참고 문서에는 `TextInputComponent`의 프로퍼티나 이벤트 핸들러(예: 텍스트 변경 감시)에 대한 구체적인 API가 포함되어 있지 않습니다. 문서에는 입력 텍스트 엔티티가 `TextInputComponent`를 포함한다는 사실과, `TextComponent`를 통해 텍스트를 표시할 수 있다는 정보만 있습니다. 따라서 `TextInputComponent`의 텍스트 변경 이벤트를 직접 감시하는 정확한 API를 지어내지 않겠습니다. 다만, 문서에 명시된 `TextComponent`를 사용하여 "너무 깁니다"라는 경고 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 기본 UI 엔티티는 UI 제작 시 가장 많이 사용하는 기능을 제공합니다. **이미지, 버튼, 스크롤 뷰, 텍스트, 입력 텍스트**로 구성되어 있습니다. 크리에이터는 여러 개의 UI 엔티티를 조합해 새로운 UI를 만들 수도 있습니다. [기본 UI 컴포넌트](/docs?postId=744) 가이드를 참고하세요. ![[object Object]](https://mod-file.dn.nexoncdn.co.kr/bbs/17132470861160af59286c47f4cdfb9012301dfc3d0c1.png "4") | 아이콘 | UI
[task] | code [pass] | ⏳ 미판정 [title] | CameraService를 활용한 카메라 제어 [question] | 트리거 진입 시 `_CameraService:ZoomTo(120, 2)`로 2초간 줌을 120%로 확대한 뒤, `wait(1)`을 이용해 1초 대기 후 `_CameraService:ZoomReset()`을 호출해 카메라를 초기 상태로 되돌리는 스크립트를 작성해줘. [answer] | 트리거 진입 시 2초 동안 줌을 120%로 확대한 후 1초를 기다리고 카메라를 초기 상태로 되돌리는 mLua 스크립트는 다음과 같습니다. ```lua Event Handler: [self] HandleTriggerEnterEvent (TriggerEnterEvent event) { --------------- Native Event Sender Info ---------------- -- Sender: TriggerComponent -- Space: Server, Client -------------- [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 게임 플레이 중에 카메라 줌 인과 줌 아웃을 제어하는 방법에 대해 알아보겠습니다. 위에서 작성한 코드는 필요하지 않기 때문에 모두 지우고, 아래와 같은 상태에서 시작합니다. ```lua [self] HandleTriggerEnterEvent (TriggerEnterEvent event) { --------------- Native Event Sender Info ---------------- -- Sender: TriggerComponent -- Space: Server, Client ----------
[task] | code [pass] | ⏳ 미판정 [title] | UI 에디터 [question] | Hierarchy 상의 UI 엔티티 구조를 기반으로, UIGroupComponent가 포함된 부모 엔티티를 찾아 DefaultShow 값을 log()로 출력하는 스크립트를 작성해줘 [answer] | 요청하신 기능을 구현하기 위해서는 Hierarchy 상의 UI 엔티티 구조를 직접 순회하며 `UIGroupComponent`가 존재하는 부모 엔티티를 찾아야 합니다. 참고 문서와 mLua 규칙에 따르면: 1. UI 엔티티는 `/ui/` 경로 하위에 위치하며, UIGroup은 `/ui/DefaultGroup`, `/ui/ToastGroup`, `/ui/PopupGroup` 등으로 존재합니다. 2. `UIGroupComponent`는 해당 컴포넌트를 가진 엔티티의 프로퍼티로 접근할 수 있습니다 (예: `entity.UIGroupC [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 UI를 편집할 수 있는 UI 에디터와 UI Group에 대해 알아봅시다. ##### 참고 가이드 * [UI 엔티티 제어하기](/docs?postId=1154&version=1) * [기본 UI 컴포넌트](/docs?postId=744) * [UI 제작하기](/docs?postId=64) # UI 에디터 소개 UI 에디터는 UI 엔티티를 구성하고, 메이플스토리 월드에서 제공하는 UI 엔티티를 조합해서 인벤토리나 상점 UI를 제작할 수 있습니다. UI 에디터 구성은 다음과 같습니다. | 번호 | 이름 |
[task] | two_turn [pass] | ⏳ 미판정 [title] | Workspace [question] | MyDesk에 리소스를 추가한 후 원본을 삭제했을 때 Hierarchy의 엔티티에 미치는 영향은 무엇이며, 'Missing' 상태가 발생하는 조건은 무엇인가요? [answer] | MyDesk에 추가한 리소스의 원본을 삭제하면, 해당 원본 정보를 참조하고 있는 Hierarchy의 엔티티에서 해당 정보는 지워집니다. 하지만 이미 생성된 엔티티 자체는 삭제되지 않고 남아 있게 됩니다. 'Missing' 상태가 발생하는 조건은 **MyDesk에서 바로 배치했던 엔티티**인 경우에 해당합니다. 이러한 엔티티의 원본 리소스가 MyDesk에서 삭제되면, 해당 엔티티(리소스)의 이름 옆에 'Missing'이라는 표기가 붙고 색상도 빨간색으로 변합니다. [followup] | MyDesk에서 바로 배치했던 엔티티가 Missing 상태로 변했을 때 이를 복구하거나 정상화하는 방법이 있나요? [followup_answer] | 제공된 참고 문서에는 MyDesk에서 원본 리소스를 삭제하여 'Missing' 상태가 된 엔티티를 복구하거나 정상화하는 구체적인 방법에 대한 내용이 포함되어 있지 않습니다. 문서에는 원본 삭제 시 엔티티에서 원본 정보가 지워지지만 엔티티 자체는 남으며, 바로 배치했던 경우 이름 옆에 'Missing'이 붙고 빨간색으로 변한다는 사실만 설명하고 있을 뿐, 이를 되돌리는 절차나 방법에 대한 안내는 없습니다. [scores] | [judge_reason] | [source_doc] | 메이커에서 기본 제공하는 기능을 모아 둔 폴더입니다. 총 2개의 폴더로 구성되어 있습니다. * **NativeScripts** * **NativeModel** **BaseEnvironment**의 폴더 순서를 바꾸거나, 하위 목록을 옮길 수 없습니다. **NativeScripts**의 모든 계층은 복제/삭제할 수 없습니다. **NativeScripts**의 특성을 변경해 사용하려면 해당 스크립트를 확장(Extend)하여 사용해야 합니다. 또한 **NativeModel**은 복제하거나 확장해 활용할 수 있습니다. **BaseEn
[task] | two_turn [pass] | ⏳ 미판정 [title] | Workspace [question] | Workspace의 MyDesk 폴더 삭제 시 비어있는 폴더와 리소스가 들어있는 폴더의 처리 방식은 어떻게 다른가요? [answer] | Workspace의 MyDesk 폴더를 삭제할 때, 폴더 내부에 리소스가 있는지 여부에 따라 처리 방식이 다음과 같이 다릅니다. 1. **비어있는 폴더** - 별도의 확인 절차 없이 바로 삭제됩니다. 2. **리소스가 들어있는 폴더** - 폴더 안의 모든 리소스가 함께 삭제됩니다. - 실수 방지를 위해 폴더 삭제 시 **Delete**를 누르면 경고 창이 표시됩니다. - 이 경고 창에서 **[예]** 버튼을 눌러야 삭제가 최종적으로 실행됩니다. [followup] | 리소스가 들어있는 폴더를 삭제할 때 경고 창에서 확인하는 절차와, 삭제 후 관련 리소스에 대한 복구 가능성은 어떻게 되나요? [followup_answer] | 리소스가 들어있는 MyDesk 폴더를 삭제할 때의 절차와 복구 가능성은 다음과 같습니다. **1. 삭제 확인 절차** * 리소스가 들어있는 폴더를 삭제하려면 **Delete**를 누릅니다. * 실수를 방지하기 위해 경고 창이 표시됩니다. * 이 경고 창에서 **[예]** 버튼을 눌러야 삭제가 최종적으로 실행됩니다. * 삭제 시 폴더 안의 모든 리소스가 함께 삭제됩니다. **2. 삭제 후 복구 가능성** * 제공된 문서에는 삭제된 리소스를 복구하는 절차나 방법이 언급되어 있지 않습니다. * 다만, 삭제 후 H [scores] | [judge_reason] | [source_doc] | 메이커에서 기본 제공하는 기능을 모아 둔 폴더입니다. 총 2개의 폴더로 구성되어 있습니다. * **NativeScripts** * **NativeModel** **BaseEnvironment**의 폴더 순서를 바꾸거나, 하위 목록을 옮길 수 없습니다. **NativeScripts**의 모든 계층은 복제/삭제할 수 없습니다. **NativeScripts**의 특성을 변경해 사용하려면 해당 스크립트를 확장(Extend)하여 사용해야 합니다. 또한 **NativeModel**은 복제하거나 확장해 활용할 수 있습니다. **BaseEn
[task] | code [pass] | ⏳ 미판정 [title] | CameraService를 활용한 카메라 제어 [question] | 캐릭터가 트리거 영역에 진입하면 `_CameraService:ZoomTo(200, 2)`를 호출하여 2초 동안 줌을 200%까지 확대하고, 3초 후 `_CameraService:ZoomReset()`을 호출하여 원래 상태로 복원하는 스크립트를 작성해줘. [answer] | 캐릭터가 트리거 영역에 진입하면 2초 동안 줌을 200%까지 확대하고, 3초 후 원래 상태로 복원하는 스크립트는 다음과 같습니다. ```lua Event Handler: [self] HandleTriggerEnterEvent (TriggerEnterEvent event) { --------------- Native Event Sender Info ---------------- -- Sender: TriggerComponent -- Space: Server, Client ------------------ [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 게임 플레이 중에 카메라 줌 인과 줌 아웃을 제어하는 방법에 대해 알아보겠습니다. 위에서 작성한 코드는 필요하지 않기 때문에 모두 지우고, 아래와 같은 상태에서 시작합니다. ```lua [self] HandleTriggerEnterEvent (TriggerEnterEvent event) { --------------- Native Event Sender Info ---------------- -- Sender: TriggerComponent -- Space: Server, Client ----------
[task] | instruction_following [pass] | ⏳ 미판정 [title] | 엔티티 구간 이동시키기 [question] | Degree 값이 0일 때와 0이 아닐 때의 동작 차이와 IsClockwise가 true일 때의 회전 방향을 3문장 이내로 설명해 [answer] | Degree가 0이면 엔티티가 멈추지 않고 계속 원운동을 하지만, 0이 아니면 입력한 각도만큼만 회전한 후 멈춥니다. IsClockwise가 true인 경우 시계 방향으로 회전합니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 원점을 기준으로 원형 운동을 하게 만들 때 사용합니다. 회전 수, 속도, 반경을 설정할 수 있습니다. **TweenCircularComponent**의 프로퍼티를 살펴봅시다. | 프로퍼티 명 | 설명 | | --- | --- | | Radius | 원점을 기준으로 입력한 값만큼 멀어져 원운동을 합니다. 숫자가 클수록 중심에서 멀어집니다. | | Speed | 입력한 숫자가 클수록 엔티티가 빠르게 원운동을 합니다. | | LookAtCenter | 활성화하면 엔티티 사각형 테두리 윗변이 중심점을 바라보고 회전합니다. | | Deg
[task] | instruction_following [pass] | ⏳ 미판정 [title] | 물체의 이동 Ⅰ [question] | StaticNPC 모델에서 RigidbodyComponent를 제거해야 하는 이유를 2문장 이내로 설명하세요. [answer] | StaticNPC에는 RigidbodyComponent와 TransformComponent가 모두 포함되어 있어, 둘 중 하나를 제거하지 않으면 Position 값을 변경할 때 두 값이 충돌하여 원하는 방식으로 움직이지 않을 수 있습니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 용감한 시그너스 기사단 소속 아잘린이 먼저 고통의 미궁으로 출발한 나이트워커 부대에 합류할 수 있도록 택시를 불러봅시다. 부른 택시가 아잘린을 지나치지 않고 아잘린 앞에서 멈춰서 아잘린이 탑승할 수 있도록 만들어야 합니다. ![[object Object]](https://mod-file.dn.nexoncdn.co.kr/bbs/1747902531299ee5bec9350ac458d9f255a76eba57191.gif "Example") # StaticNPC 모델 수정하기 StaticNPC 모델에서 Rigid
[task] | code [pass] | ⏳ 미판정 [title] | Workspace [question] | MyDesk에 추가한 리소스가 Hierarchy에 엔티티로 생성될 때 Missing 상태가 되지 않도록 참조를 유지하는 로직을 작성해줘 [answer] | 제공된 문서에 따르면, **MyDesk**에 추가한 리소스(원본)를 삭제하면 해당 원본을 참조하고 있는 엔티티에서 해당 정보는 지워지지만, 생성된 엔티티 자체는 남아 있게 됩니다. 이때 **MyDesk**에서 바로 배치했던 엔티티의 경우 이름 옆에 **Missing** 표시가 붙고 빨간색으로 변한다고 명시되어 있습니다. 하지만, **원본 리소스가 삭제되는 것을 방지하거나, 참조를 유지하여 Missing 상태가 되지 않도록 하는 mLua 스크립트 로직이나 관련 API(예: 참조 보호, 삭제 방지 메서드 등)는 제공된 문서에 존재하지 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 메이커에서 기본 제공하는 기능을 모아 둔 폴더입니다. 총 2개의 폴더로 구성되어 있습니다. * **NativeScripts** * **NativeModel** **BaseEnvironment**의 폴더 순서를 바꾸거나, 하위 목록을 옮길 수 없습니다. **NativeScripts**의 모든 계층은 복제/삭제할 수 없습니다. **NativeScripts**의 특성을 변경해 사용하려면 해당 스크립트를 확장(Extend)하여 사용해야 합니다. 또한 **NativeModel**은 복제하거나 확장해 활용할 수 있습니다. **BaseEn
[task] | single_turn [pass] | ⏳ 미판정 [title] | 말풍선 만들기 [question] | 플레이어의 채팅창에 입력한 메시지가 말풍선으로 나오길 원하는데, ChatModeEnabled가 기본값으로 true인데도 동작하지 않아서 Player 엔티티의 ChatBalloonComponent에서 추가적으로 설정해야 할 항목이 있는지 궁금합니다. [answer] | 참고 문서에 따르면, 플레이어의 `ChatBalloonComponent`에서 채팅창 메시지가 말풍선으로 나오기 위해 `ChatModeEnabled`가 `true`인 상태여야 합니다. 하지만 이 기능이 동작하려면 `AutoShowEnabled`가 `false`여야 합니다. 문서에서 **AutoShowEnabled** 항목을 보면 "플레이어의 `ChatModeEnabled` 값이 `true`일 경우 자동 말풍선 기능이 동작하지 않습니다"라고 명시되어 있습니다. 이는 역으로 `AutoShowEnabled`가 `true`이면 채팅 기반 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 엔티티와 플레이어 아바타에 말풍선을 간단하게 붙일 수 있습니다. ChatBalloonComponent 사용 방법과 활용 예시를 소개합니다. # 말풍선 붙이기 1. 말풍선을 붙일 엔티티를 선택하고 **ChatBalloonComponent**를 추가합니다. 2. 프로퍼티 값을 변경해 원하는 말풍선을 만듭니다. 주요 프로퍼티 값은 다음과 같습니다. | 프로퍼티 명 | 설명 | | --- | --- | | ChatBalloonRUID | 다양한 말풍선 스프라이트를 이용할 수 있습니다. | | BalloonSca
[task] | single_turn [pass] | ⏳ 미판정 [title] | 엔티티 구간 이동시키기 [question] | TweenFloatingComponent에서 AutoDestroy를 활성화하면 어떤 상황에서 컴포넌트가 삭제되는 것인가요? [answer] | `TweenFloatingComponent`에서 `AutoDestroy`를 활성화하면, **운동이 끝나고** 자동으로 해당 컴포넌트가 삭제됩니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 엔티티에 동작을 만드는 세 가지 **Tween Component**의 개념을 이해합니다. 컴포넌트를 이용해 크리에이터가 원하는 엔티티 운동 방향과 폭을 조정할 수 있습니다. ##### 참고 가이드 [엔티티의 위치, 크기, 회전 조정](/docs?postId=82) # Tween Component 소개 **Tween Component**를 이용하여 엔티티에 운동성을 만들고, 세부 설정을 조정할 수 있습니다. 운동 성질에 따른 세 가지 컴포넌트가 있으며, 상황에 맞게 단독으로 사용하거나 조합하여 사용할 수 있습
[task] | instruction_following [pass] | ⏳ 미판정 [title] | 엔티티 구간 이동시키기 [question] | StopType이 RepeatRoundTrip으로 설정되었을 때 ReturnDuration 프로퍼티가 적용되는 시점을 단계별 번호 목록으로 [answer] | `StopType`이 `RepeatRoundTrip`으로 설정되었을 때 `ReturnDuration` 프로퍼티가 적용되는 시점은 다음과 같습니다. 1. 엔티티가 원점(시작 위치)에서 `Duration`에 설정된 시간 동안 `TweenType`에 따라 설정된 운동 방식으로 이동하여 **목적지(Positions[1])에 도달합니다.** 2. 목적지 도착 시점에 **반환점(목적지)을 기준으로 원점(시작 위치)으로 되돌아오는 왕복 이동(리턴 운동)이 시작됩니다.** 3. 이 **원점으로 되돌아오는 이동 구간**에 `ReturnDurati [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 원점을 기준으로 목적지까지 선형 운동을 하게 만들 때 사용합니다. 목적지까지 편도, 왕복 운동 여부와 더불어 가·감속, 도달 시 튕김 등 운동 방식을 설정할 수 있습니다. **TweenLineComponent**의 프로퍼티를 살펴봅시다. | 프로퍼티 명 | 설명 | | ------ | --- | | TweenType | 기본값은 Linear입니다. 다른 모양의 운동 방식을 선택할 수 있습니다. 선형운동 종류별 설명은 하단의 참고자료를 참고하세요. | | Duration | 목적지까지 도달하는 데 걸리는 시간을 의미합니다. | |
[task] | single_turn [pass] | ⏳ 미판정 [title] | 엔티티 구간 이동시키기 [question] | SyncType을 ClientOnly로 설정하면 다른 플레이어는 내 엔티티의 부유 운동을 어떻게 인식하게 되나요? [answer] | SyncType을 ClientOnly로 설정하면 해당 부유 운동은 설정한 클라이언트(플레이어)의 화면에서만 동작하고 보입니다. 따라서 다른 플레이어는 내 엔티티의 부유 운동을 인식하지 못합니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 엔티티에 동작을 만드는 세 가지 **Tween Component**의 개념을 이해합니다. 컴포넌트를 이용해 크리에이터가 원하는 엔티티 운동 방향과 폭을 조정할 수 있습니다. ##### 참고 가이드 [엔티티의 위치, 크기, 회전 조정](/docs?postId=82) # Tween Component 소개 **Tween Component**를 이용하여 엔티티에 운동성을 만들고, 세부 설정을 조정할 수 있습니다. 운동 성질에 따른 세 가지 컴포넌트가 있으며, 상황에 맞게 단독으로 사용하거나 조합하여 사용할 수 있습
[task] | two_turn [pass] | ⏳ 미판정 [title] | 말풍선 만들기 [question] | ShowDuration과 HideDuration 값을 설정하여 말풍선이 반복적으로 나타나고 사라지게 하려면 어떤 값을 입력해야 하며, 이 값들이 0이거나 1 미만일 때 발생하는 동작은 무엇인가요? [answer] | `ShowDuration`과 `HideDuration` 값을 설정하여 말풍선이 반복적으로 나타나고 사라지게 하려면, **`AutoShowEnabled` 프로퍼티를 `true`로 설정**해야 합니다. 이 조건이 충족되면 `ShowDuration` 동안 말풍선이 보이고, 이후 `HideDuration` 동안 말풍선이 사라지는 동작이 반복됩니다. 각 값이 0이거나 1 미만일 때 발생하는 동작은 다음과 같습니다. 1. **ShowDuration** * **1 이상의 수를 입력해야** 말풍선이 보입니다. * 따라서 [followup] | ShowDuration이 1 이상이어야만 보이는 이유와, HideDuration이 0일 때 화면에 항상 보이는 동작이 ShowDuration과 어떻게 상호작용하는지 구체적인 시나리오와 함께 설명해 주세요. [followup_answer] | 참고 문서에 `ShowDuration`이 1 이상이어야만 보이는 구체적인 이유(예: 최소 렌더링 프레임, 시스템 제한 등)에 대한 기술적 설명은 제공되지 않습니다. 문서에는 **"1 이상의 수를 입력해야 말풍선이 보입니다"**라는 동작 규칙만 명시되어 있습니다. 다만, `HideDuration`이 0일 때의 동작과 `ShowDuration`과의 상호작용은 문서의 설명을 바탕으로 다음과 같이 구체적으로 설명할 수 있습니다. ### 1. HideDuration이 0일 때의 동작 문서에 따르면 `HideDuration`의 값이 **0 [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 엔티티와 플레이어 아바타에 말풍선을 간단하게 붙일 수 있습니다. ChatBalloonComponent 사용 방법과 활용 예시를 소개합니다. # 말풍선 붙이기 1. 말풍선을 붙일 엔티티를 선택하고 **ChatBalloonComponent**를 추가합니다. 2. 프로퍼티 값을 변경해 원하는 말풍선을 만듭니다. 주요 프로퍼티 값은 다음과 같습니다. | 프로퍼티 명 | 설명 | | --- | --- | | ChatBalloonRUID | 다양한 말풍선 스프라이트를 이용할 수 있습니다. | | BalloonSca
[task] | single_turn [pass] | ⏳ 미판정 [title] | 엔티티 구간 이동시키기 [question] | IsClockwise가 false일 때 엔티티는 어떤 방향으로 원운동을 수행하나요? [answer] | IsClockwise가 false일 때 엔티티는 반시계 방향으로 원운동을 수행합니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 원점을 기준으로 원형 운동을 하게 만들 때 사용합니다. 회전 수, 속도, 반경을 설정할 수 있습니다. **TweenCircularComponent**의 프로퍼티를 살펴봅시다. | 프로퍼티 명 | 설명 | | --- | --- | | Radius | 원점을 기준으로 입력한 값만큼 멀어져 원운동을 합니다. 숫자가 클수록 중심에서 멀어집니다. | | Speed | 입력한 숫자가 클수록 엔티티가 빠르게 원운동을 합니다. | | LookAtCenter | 활성화하면 엔티티 사각형 테두리 윗변이 중심점을 바라보고 회전합니다. | | Deg