← 목록

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

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

[task] | single_turn [pass] | ⏳ 미판정 [title] | 맵 생성과 관리 [question] | 지형 맵을 연결할 때 포탈의 프로퍼티 에디터에서 어떤 항목의 어떤 버튼을 클릭하여 대상 포탈을 지정하나요? [answer] | 포탈의 프로퍼티 에디터에서 **TargetPortal** 항목의 **[◉]** 버튼을 클릭하면 **Reference** 팝업 창이 열리며, 여기서 이동할 대상 포탈을 선택하여 지정할 수 있습니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 1. 연결하려는 맵에 포탈을 설치합니다. 2. 포탈의 프로퍼티 에디터에서 **TargetPortal**의 **[◉]** 버튼을 클릭합니다. 이후 **Reference** 팝업 창에서 이동할 포탈을 선택합니다. 3. **[시작]** 버튼을 클릭한 뒤, 출발 포탈에서 도착 포탈로 잘 이동하는지 확인합니다. # 마무리 좋은 맵의 크기와 개수는 정해진 답이 없습니다. 크리에이터의 기획에 맞게 여러 개의 맵을 만들거나, 하나의 커다란 맵을 만들어도 좋습니다. 그러나 맵이 너무 거대하거나 배치된 오브젝트가 많으면 로딩 및 플

[task] | instruction_following [pass] | ⏳ 미판정 [title] | 아이템 생성 및 삭제 [question] | `OnCreate` 함수 내에서 아이템 테이블의 `MaxStackCount` 값을 아이템 객체의 프로퍼티에 할당하는 코드를 주석 없이 한 줄로만 출력하세요. [answer] | ```lua self.MaxStackCount = tonumber(self.ItemTableData:GetItem("MaxStackCount")) ``` [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 이번 과정에서는 아이템 생성과 삭제 기능을 알아봅니다. 제작할 예제는 다음과 같습니다. * 맵에 놓인 아이템을 먹을 때마다 인벤토리에 랜덤한 아이템이 생성 * 아이템을 먹으면, 5초 뒤 아이템이 놓여있던 자리에 다시 생성 * 맵에 놓인 다른 아이템을 먹을 때마다 인벤토리에 있는 모든 아이템 삭제 # 아이템 테이블 만들기 먼저 개별 아이템을 만들어 봅시다. 개별 아이템은 아이템 테이블에서 정의할 수 있습니다. 아이템 테이블은 **DataSet**으로 만듭니다. **Workspace - MyDesk**에서 콘

[task] | instruction_following [pass] | ⏳ 미판정 [title] | 아이템 생성 및 삭제 [question] | `UserItemDataSet`의 이름을 다르게 지정했을 때 발생하는 문제점을 1문장 이내로 설명하세요. [answer] | 아이템 테이블의 이름이 `UserItemDataSet`이 아니면 아이템 생성 시 데이터를 넘겨줄 수 없습니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 이번 과정에서는 아이템 생성과 삭제 기능을 알아봅니다. 제작할 예제는 다음과 같습니다. * 맵에 놓인 아이템을 먹을 때마다 인벤토리에 랜덤한 아이템이 생성 * 아이템을 먹으면, 5초 뒤 아이템이 놓여있던 자리에 다시 생성 * 맵에 놓인 다른 아이템을 먹을 때마다 인벤토리에 있는 모든 아이템 삭제 # 아이템 테이블 만들기 먼저 개별 아이템을 만들어 봅시다. 개별 아이템은 아이템 테이블에서 정의할 수 있습니다. 아이템 테이블은 **DataSet**으로 만듭니다. **Workspace - MyDesk**에서 콘

[task] | single_turn [pass] | ⏳ 미판정 [title] | 유저 엔티티를 찾아주는 UserService [question] | GetUsersByMapComponent() 함수를 사용할 때 매개변수로 mapId 문자열을 넣어도 동작하나요? [answer] | 아니요, `GetUsersByMapComponent()` 함수에는 mapId 문자열을 넣을 수 없습니다. 이 함수는 특정 맵의 **mapId**가 아닌 **mapComponent**를 매개 변수로 받아 동작합니다. 따라서 직접 mapId 문자열을 전달하면 의도대로 동작하지 않습니다. 사용하려면 먼저 `_EntityService:GetEntityByPath()`와 같은 방식으로 해당 맵 엔티티를 조회한 뒤, 그 엔티티의 `MapComponent` 프로퍼티를 가져와 `GetUsersByMapComponent()`에 전달해야 합니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | `GetUsersByMapComponent()` 역시 특정 맵에 있는 유저 엔티티를 얻어오는 함수입니다. 특정 맵의 **mapId**가 아닌 **mapComponent**를 매개 변수로 넘겨줍니다. 다음은 map01에 있는 모든 유저를 `GetUsersByMapComponent()`로 받아오는 코드입니다. **UserEnterEvent**을 다음과 같이 수정합니다. ```lua Event Handler: [service: UserService] HandleUserEnterEvent (UserEnterEvent event) {

[task] | instruction_following [pass] | ⏳ 미판정 [title] | UI 제작하기 [question] | UI 에디터에서 이미지를 추가하는 과정의 1번부터 5번까지를 단계별 번호 목록으로 작성하세요. [answer] | UI 에디터에서 이미지를 추가하는 과정은 다음과 같습니다. 1. UI 에디터를 연 뒤, **UIGroup**을 클릭합니다. 2. 왼쪽 기본 도구에서 **[이미지]** 버튼을 클릭하여 이미지 UI를 추가합니다. 3. 추가한 이미지의 프로퍼티 에디터에서 **SpriteGUIRendererComponent**의 **ImageRUID** 오른쪽 버튼을 클릭하여 **Resource Picker** 창을 엽니다. 4. 프로퍼티 에디터 - **UITransfromComponent**에서 Pos X, Pos Y, Width, Height 값을 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 텍스트 박스가 조금 더 돋보이도록 메소 이미지를 추가하겠습니다. 1. UI 에디터를 연 뒤, **UIGroup**을 클릭합니다. 2. 왼쪽 기본 도구에서 **[이미지]** 버튼을 클릭하여 이미지 UI를 추가합니다. 3. 추가한 이미지의 프로퍼티 에디터에서 **SpriteGUIRendererComponent**의 **ImageRUID** 오른쪽 버튼을 클릭하여 **Resource Picker** 창을 엽니다. * RUID:fd255d50cb5177545a0e71c4a84 4. 프로퍼티 에디터 - **UITr

[task] | two_turn [pass] | ⏳ 미판정 [title] | UI 제작하기 [question] | UI 에디터에서 배경 이미지를 추가하고 위치를 설정하려면 어떻게 해야 하나요? [answer] | UI 에디터에서 배경 이미지를 추가하고 위치를 설정하는 방법은 다음과 같습니다. 1. UI 에디터를 열고 **UIGroup**을 클릭합니다. 2. 왼쪽 기본 도구에서 **[이미지]** 버튼을 클릭하여 이미지 UI를 추가합니다. 3. 추가한 이미지의 프로퍼티 에디터에서 **SpriteGUIRendererComponent**의 **ImageRUID** 오른쪽 버튼을 클릭하여 **Resource Picker** 창을 엽니다. 여기서 사용할 배경 이미지 리소스를 선택합니다. 4. 프로퍼티 에디터의 **UITransfromCompo [followup] | SpriteGUIRendererComponent의 ImageRUID를 통해 리소스를 선택하는 구체적인 절차와, Pos X/Y 및 Width/Height 값을 입력하는 UITransformComponent 설정 방법은 무엇인가요? [followup_answer] | SpriteGUIRendererComponent의 ImageRUID를 통해 리소스를 선택하는 절차와 UITransformComponent의 위치 및 크기 설정 방법은 다음과 같습니다. **1. SpriteGUIRendererComponent의 ImageRUID 리소스 선택 절차** 1. UI 에디터를 연 뒤, **UIGroup**을 클릭합니다. 2. 왼쪽 기본 도구에서 **[이미지]** 버튼을 클릭하여 이미지 UI를 추가합니다. 3. 추가한 이미지의 프로퍼티 에디터에서 **SpriteGUIRendererComponent** [scores] | [judge_reason] | [source_doc] | 텍스트 박스가 조금 더 돋보이도록 메소 이미지를 추가하겠습니다. 1. UI 에디터를 연 뒤, **UIGroup**을 클릭합니다. 2. 왼쪽 기본 도구에서 **[이미지]** 버튼을 클릭하여 이미지 UI를 추가합니다. 3. 추가한 이미지의 프로퍼티 에디터에서 **SpriteGUIRendererComponent**의 **ImageRUID** 오른쪽 버튼을 클릭하여 **Resource Picker** 창을 엽니다. * RUID:fd255d50cb5177545a0e71c4a84 4. 프로퍼티 에디터 - **UITr

[task] | two_turn [pass] | ⏳ 미판정 [title] | Entity, Component, Property [question] | 엔티티와 컴포넌트, 프로퍼티의 기본 개념과 상호 관계를 설명해 주세요. [answer] | 메이플스토리 월드에서 Entity(엔티티), Component(컴포넌트), Property(프로퍼티)는 게임 객체를 구성하는 핵심 개념입니다. 각 개념의 정의와 상호 관계는 다음과 같습니다. ### 1. Entity (엔티티) * **정의**: 메이플스토리 월드 내에서 존재하는 모든 객체를 의미합니다. * **특징**: * 시각적으로 보이는 객체(캐릭터, 몬스터, 아이템 등)뿐만 아니라 보이지 않지만 내부 로직이 돌아가는 모든 것들이 Entity입니다. * 게임 실행 중 실시간으로 생성, 변경, 삭제됩 [followup] | 프로퍼티 에디터에서 컴포넌트를 추가하거나 제거할 때 엔티티의 동작에 어떤 변화가 일어나며, 재사용성을 높이기 위해 컴포넌트를 분리하는 구체적인 예시를 코드와 함께 보여주세요. [followup_answer] | 참고 문서에 따르면, 프로퍼티 에디터에서 컴포넌트를 추가하거나 제거할 때 엔티티의 동작에 구체적으로 어떤 변화가 일어나는지(예: 특정 메서드 오류 발생, 성능 저하 등)에 대한 기술은 없습니다. 문서에서는 프로퍼티 에디터가 컴포넌트를 **관리**하는 곳이라고만 설명하고 있으며, 컴포넌트를 조합하여 원하는 형태로 동작하는 엔티티를 제작할 수 있다고 일반론적으로 서술하고 있을 뿐입니다. 또한, 참고 문서에는 **재사용성을 높이기 위해 컴포넌트를 분리하는 구체적인 예시 코드**가 포함되어 있지 않습니다. 문서에는 피자(엔티티)와 토마토 [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 Entity와 Component 그리고 Property에 대해서 개념을 이해합니다. # Entity 엔티티는 메이플스토리 월드 내에서 존재하는 객체입니다. 아래의 그림에서 Entity는 어떤 것들일까요? 빨간색을 칠한 부분이 Entity입니다. 그뿐만 아니라 보이지는 않지만 돌아가고 있는 모든 것들이 Entity입니다. 메이플스토리 월드에서는 실제로 수많은 Entity가 배치되어 있고 실시간으로 생성, 변경, 삭제됩니다. Entity들이 실제 게임상에서 활동함으로써 시각적으로 보이며, 내부적으로 로직

[task] | two_turn [pass] | ⏳ 미판정 [title] | 맵 생성과 관리 [question] | 지형 맵을 여러 개로 나누어 연결하고 싶을 때 포탈을 설정하는 기본 절차는 무엇인가요? [answer] | 지형 맵을 여러 개로 나누어 연결하고 포탈을 설정하는 기본 절차는 다음과 같습니다. 1. 연결하려는 맵에 포탈을 설치합니다. 2. 포탈의 프로퍼티 에디터에서 `TargetPortal`의 **[◉]** 버튼을 클릭합니다. 3. 이후 `Reference` 팝업 창에서 이동할 포탈을 선택합니다. 4. **[시작]** 버튼을 클릭한 뒤, 출발 포탈에서 도착 포탈로 잘 이동하는지 확인합니다. 참고로 맵이 너무 거대하거나 배치된 오브젝트가 많으면 로딩 및 플레이 지연이 발생할 수 있으므로, 맵의 크기와 오브젝트 수를 적절히 조절하는 것이 [followup] | 포탈의 TargetPortal 속성을 참조로 연결한 후, 실제로 이동이 정상 작동하는지 확인하는 테스트 과정은 어떻게 진행하나요? [followup_answer] | 포탈의 `TargetPortal` 속성을 참조로 연결한 후 이동이 정상 작동하는지 확인하는 테스트 과정은 다음과 같습니다. 1. 에디터의 **[시작]** 버튼을 클릭하여 플레이 테스트 모드로 진입합니다. 2. 출발 포탈에 접근하여 이동이 트리거되는지 확인합니다. 3. 캐릭터가 설정한 도착 포탈 위치로 정상적으로 이동하는지 확인합니다. [scores] | [judge_reason] | [source_doc] | 1. 연결하려는 맵에 포탈을 설치합니다. 2. 포탈의 프로퍼티 에디터에서 **TargetPortal**의 **[◉]** 버튼을 클릭합니다. 이후 **Reference** 팝업 창에서 이동할 포탈을 선택합니다. 3. **[시작]** 버튼을 클릭한 뒤, 출발 포탈에서 도착 포탈로 잘 이동하는지 확인합니다. # 마무리 좋은 맵의 크기와 개수는 정해진 답이 없습니다. 크리에이터의 기획에 맞게 여러 개의 맵을 만들거나, 하나의 커다란 맵을 만들어도 좋습니다. 그러나 맵이 너무 거대하거나 배치된 오브젝트가 많으면 로딩 및 플

[task] | single_turn [pass] | ⏳ 미판정 [title] | 맵 생성과 관리 [question] | 포탈의 TargetPortal을 설정할 때 Reference 팝업 창에서 이동할 포탈을 선택하는 구체적인 절차가 어떻게 되나요? [answer] | 포탈의 `TargetPortal`을 설정하려면 다음 단계를 따르세요. 1. 연결하려는 맵에 포탈을 설치합니다. 2. 포탈의 프로퍼티 에디터에서 `TargetPortal` 옆의 **[◉]** 버튼을 클릭합니다. 3. 나타나는 **Reference** 팝업 창에서 이동할 대상 포탈을 선택합니다. 이 과정을 통해 출발 포탈과 도착 포탈이 연결되며, **[시작]** 버튼을 눌러 게임 내 테스트를 통해 이동이 정상적으로 이루어지는지 확인할 수 있습니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 1. 연결하려는 맵에 포탈을 설치합니다. 2. 포탈의 프로퍼티 에디터에서 **TargetPortal**의 **[◉]** 버튼을 클릭합니다. 이후 **Reference** 팝업 창에서 이동할 포탈을 선택합니다. 3. **[시작]** 버튼을 클릭한 뒤, 출발 포탈에서 도착 포탈로 잘 이동하는지 확인합니다. # 마무리 좋은 맵의 크기와 개수는 정해진 답이 없습니다. 크리에이터의 기획에 맞게 여러 개의 맵을 만들거나, 하나의 커다란 맵을 만들어도 좋습니다. 그러나 맵이 너무 거대하거나 배치된 오브젝트가 많으면 로딩 및 플

[task] | code [pass] | ⏳ 미판정 [title] | 유저 엔티티를 찾아주는 UserService [question] | `HandleUserEnterEvent`에서 `event.UserId`를 매개변수로 `_UserService:GetUserEntityByUserId()`에 전달하여 입장한 플레이어 엔티티의 이름을 로그로 출력하는 스크립트를 작성해줘. [answer] | `HandleUserEnterEvent` 이벤트 핸들러에서 `event.UserId`를 `_UserService:GetUserEntityByUserId()` 함수의 매개변수로 전달하면 해당 ID를 가진 플레이어 엔티티를 직접 얻을 수 있습니다. 이렇게 받은 엔티티의 `Name` 프로퍼티를 `log` 함수로 출력하면 됩니다. ```lua Event Handler: [service: UserService] HandleUserEnterEvent (UserEnterEvent event) { -- Parameters loca [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | `GetUsersByMapComponent()` 역시 특정 맵에 있는 유저 엔티티를 얻어오는 함수입니다. 특정 맵의 **mapId**가 아닌 **mapComponent**를 매개 변수로 넘겨줍니다. 다음은 map01에 있는 모든 유저를 `GetUsersByMapComponent()`로 받아오는 코드입니다. **UserEnterEvent**을 다음과 같이 수정합니다. ```lua Event Handler: [service: UserService] HandleUserEnterEvent (UserEnterEvent event) {

[task] | instruction_following [pass] | ⏳ 미판정 [title] | 아이템 생성 및 삭제 [question] | `UserItemDataSet`에 반드시 포함되어야 하는 필수 컬럼 3가지를 표로 정리해서 나열하세요. [answer] | `UserItemDataSet`에 반드시 포함되어야 하는 필수 컬럼은 다음과 같습니다. | 컬럼명 | 설명 | | :--- | :--- | | `Name` | 아이템의 이름 | | `IconRUID` | 아이템 아이콘으로 사용할 이미지의 RUID | | `Description` | 아이템의 설명 | [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 이번 과정에서는 아이템 생성과 삭제 기능을 알아봅니다. 제작할 예제는 다음과 같습니다. * 맵에 놓인 아이템을 먹을 때마다 인벤토리에 랜덤한 아이템이 생성 * 아이템을 먹으면, 5초 뒤 아이템이 놓여있던 자리에 다시 생성 * 맵에 놓인 다른 아이템을 먹을 때마다 인벤토리에 있는 모든 아이템 삭제 # 아이템 테이블 만들기 먼저 개별 아이템을 만들어 봅시다. 개별 아이템은 아이템 테이블에서 정의할 수 있습니다. 아이템 테이블은 **DataSet**으로 만듭니다. **Workspace - MyDesk**에서 콘

[task] | code [pass] | ⏳ 미판정 [title] | 유저 엔티티를 찾아주는 UserService [question] | `HandleUserEnterEvent`에서 `_UserService:GetUsersByMapComponent()`를 호출하여 map01에 있는 모든 유저의 이름과 현재 맵 이름을 로그로 출력하는 스크립트를 작성해줘. [answer] | ```lua Event Handler: [service: UserService] HandleUserEnterEvent (UserEnterEvent event) { -- Parameters local UserId = event.UserId -------------------------------------------------------- -- map01의 컴포넌트를 받음 local mapComponent = _EntityService:GetEntityByPath("/maps/map01").MapC [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | `GetUsersByMapComponent()` 역시 특정 맵에 있는 유저 엔티티를 얻어오는 함수입니다. 특정 맵의 **mapId**가 아닌 **mapComponent**를 매개 변수로 넘겨줍니다. 다음은 map01에 있는 모든 유저를 `GetUsersByMapComponent()`로 받아오는 코드입니다. **UserEnterEvent**을 다음과 같이 수정합니다. ```lua Event Handler: [service: UserService] HandleUserEnterEvent (UserEnterEvent event) {

[task] | two_turn [pass] | ⏳ 미판정 [title] | UI 제작하기 [question] | UI 에디터에서 새 UIGroup을 추가하고 텍스트 박스를 배치하는 기본 흐름은 무엇인가요? [answer] | 메이플스토리 월드에서 UI 에디터를 사용해 새 UIGroup을 추가하고 텍스트 박스를 배치하는 기본 흐름은 다음과 같습니다. 1. **새 UIGroup 추가**: 화면 오른쪽 하단의 버튼을 눌러 새로운 그룹을 추가합니다. 이 과정에서 `UIGroup` 엔티티가 생성되며, 그룹 선택 창에서 자동으로 선택됩니다. 2. **텍스트 박스 추가**: 왼쪽 기본 도구에서 텍스트 박스 추가 버튼을 클릭합니다. 텍스트 박스는 화면 중앙에 배치됩니다. 3. **위치 및 크기 설정**: 프로퍼티 에디터의 `UITransformComponent`에서 [followup] | UIGroup의 DefaultShow가 비활성 상태일 때 플레이 화면에서 UI가 보이지 않는 문제를 해결하는 구체적인 설정 방법은 무엇인가요? [followup_answer] | UIGroup의 `DefaultShow`가 비활성 상태일 때 플레이 화면에서 UI가 보이지 않는 문제를 해결하려면, Hierarchy에서 해당 UIGroup을 선택한 후 프로퍼티 에디터에서 `UIGroupComponent`의 `DefaultShow` 값을 활성화(체크)해야 합니다. 이렇게 설정하면 UIGroup이 항상 보이도록 변경되어 플레이 화면에서 정상적으로 표시됩니다. [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 메이플스토리 월드 메이커에서는 UI를 편집할 수 있는 **UI 에디터**를 제공합니다. UI 에디터를 활용해 캐릭터의 이름이나 스탯 창, 채팅 창 등을 구현할 수 있습니다. 또한 게임의 생동감을 살리는 연출도 만들 수 있습니다. UI 에디터의 기본 기능인 **이미지**와 **텍스트**를 사용해 화면 상단에 환영 메시지 UI를 만들어 봅시다. ##### 참고 가이드 * [UI 에디터](/docs?postId=120) * [기본 UI 컴포넌트](/docs?postId=744) * [UI 엔티티 제어하기](/do

[task] | code [pass] | ⏳ 미판정 [title] | 유저 엔티티를 찾아주는 UserService [question] | `HandleUserEnterEvent`에서 `event.UserId`를 이용해 `_UserService:GetUserEntityByUserId()`로 엔티티를 받아와서 `Entity.Name` 프로퍼티를 로그로 출력하는 스크립트를 작성해줘. [answer] | `HandleUserEnterEvent` 이벤트 핸들러에서 `event.UserId`를 파라미터로 전달하여 `_UserService:GetUserEntityByUserId()` 함수를 호출하면 해당 유저의 엔티티를 얻을 수 있습니다. 이후 엔티티의 `Name` 프로퍼티를 문자열 연결(`..`)을 이용해 로그로 출력하면 됩니다. ```lua Event Handler: [service: UserService] HandleUserEnterEvent(UserEnterEvent event) { local UserId = event. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | `GetUsersByMapComponent()` 역시 특정 맵에 있는 유저 엔티티를 얻어오는 함수입니다. 특정 맵의 **mapId**가 아닌 **mapComponent**를 매개 변수로 넘겨줍니다. 다음은 map01에 있는 모든 유저를 `GetUsersByMapComponent()`로 받아오는 코드입니다. **UserEnterEvent**을 다음과 같이 수정합니다. ```lua Event Handler: [service: UserService] HandleUserEnterEvent (UserEnterEvent event) {

[task] | single_turn [pass] | ⏳ 미판정 [title] | UI 제작하기 [question] | SpriteGUIRendererComponent의 Color 프로퍼티에서 알파값(A)을 100%로 설정하면 배경색은 어떻게 변하나요? [answer] | 알파값(A)을 100%로 설정하면 해당 색상(R, G, B 값)이 완전히 불투명하게 표시됩니다. 즉, 배경색이 투명하지 않고 설정된 색상 그대로 화면에 나타나며, 뒤에 있는 다른 UI 요소나 게임 화면이 보이지 않게 됩니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 메이플스토리 월드 메이커에서는 UI를 편집할 수 있는 **UI 에디터**를 제공합니다. UI 에디터를 활용해 캐릭터의 이름이나 스탯 창, 채팅 창 등을 구현할 수 있습니다. 또한 게임의 생동감을 살리는 연출도 만들 수 있습니다. UI 에디터의 기본 기능인 **이미지**와 **텍스트**를 사용해 화면 상단에 환영 메시지 UI를 만들어 봅시다. ##### 참고 가이드 * [UI 에디터](/docs?postId=120) * [기본 UI 컴포넌트](/docs?postId=744) * [UI 엔티티 제어하기](/do

[task] | single_turn [pass] | ⏳ 미판정 [title] | UI 제작하기 [question] | UIGroup을 추가했는데 에디터에서는 잘 보이다가 실제 플레이 화면에서는 보이지 않는 원인은 무엇인가요? [answer] | 추가한 UIGroup이 UI 에디터에서는 보이지만 실제 플레이 화면에서는 보이지 않는 이유는, 새로 추가된 **UIGroup**이 기본적으로 보이지 않는 상태로 설정되어 있기 때문입니다. 해결 방법은 Hierarchy에서 해당 **UIGroup**을 선택한 뒤, 프로퍼티 에디터의 **UIGroupComponent**에서 **DefaultShow**를 활성화하면 됩니다. 이렇게 하면 UIGroup이 항상 보이도록 설정되어 플레이 화면에서도 정상적으로 표시됩니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 메이플스토리 월드 메이커에서는 UI를 편집할 수 있는 **UI 에디터**를 제공합니다. UI 에디터를 활용해 캐릭터의 이름이나 스탯 창, 채팅 창 등을 구현할 수 있습니다. 또한 게임의 생동감을 살리는 연출도 만들 수 있습니다. UI 에디터의 기본 기능인 **이미지**와 **텍스트**를 사용해 화면 상단에 환영 메시지 UI를 만들어 봅시다. ##### 참고 가이드 * [UI 에디터](/docs?postId=120) * [기본 UI 컴포넌트](/docs?postId=744) * [UI 엔티티 제어하기](/do

[task] | single_turn [pass] | ⏳ 미판정 [title] | UI 제작하기 [question] | 텍스트 박스의 위치와 크기를 조절하려면 프로퍼티 에디터에서 어떤 컴포넌트의 값을 수정해야 하나요? [answer] | 텍스트 박스의 위치와 크기를 조절하려면 프로퍼티 에디터에서 **UITransformComponent** 컴포넌트의 값을 수정해야 합니다. 해당 컴포넌트에서 다음 프로퍼티를 설정할 수 있습니다. * **PosX**: X 좌표 * **PosY**: Y 좌표 * **Width**: 너비 * **Height**: 높이 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 메이플스토리 월드 메이커에서는 UI를 편집할 수 있는 **UI 에디터**를 제공합니다. UI 에디터를 활용해 캐릭터의 이름이나 스탯 창, 채팅 창 등을 구현할 수 있습니다. 또한 게임의 생동감을 살리는 연출도 만들 수 있습니다. UI 에디터의 기본 기능인 **이미지**와 **텍스트**를 사용해 화면 상단에 환영 메시지 UI를 만들어 봅시다. ##### 참고 가이드 * [UI 에디터](/docs?postId=120) * [기본 UI 컴포넌트](/docs?postId=744) * [UI 엔티티 제어하기](/do

[task] | single_turn [pass] | ⏳ 미판정 [title] | 맵 생성과 관리 [question] | 공동 제작 월드에서 일반 멤버가 맵의 출시 여부를 설정하려고 하면 안 되는 이유와, 이 권한을 가진 그룹장이 제외했던 맵을 다시 출시 대상에 포함하는 방법을 알려줘. [answer] | 공동 제작 월드에서는 맵의 출시 여부를 설정할 수 있는 권한이 **그룹장에게만** 있습니다. 따라서 일반 멤버가 맵의 출시 여부를 설정하려고 하면 권한이 없어 실행할 수 없습니다. 권한을 가진 그룹장이 출시 대상에서 제외했던 맵을 다시 출시 대상에 포함하려면, 해당 맵의 콘텍스트 메뉴에서 **Add Map to Publish**를 클릭하면 됩니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 다양한 맵은 월드를 탐험하는 유저들에게 다채로운 재미를 선사합니다. 이번 과정에서는 맵 생성과 관리 방법을 알아봅시다. # 맵 관리 방법 맵 관리 방법에는 2가지가 있습니다. * **Hierarchy - maps** 하위 엔트리의 콘텍스트 메뉴를 통해 관리 * **Window - Map List** 창에서 관리 # 새 맵 만들기 | Hierarchy | Map List | | ----------- | ------- | | **Hierarchy - maps**의 콘텍스트 메뉴에서 **Create New M

[task] | single_turn [pass] | ⏳ 미판정 [title] | 맵 생성과 관리 [question] | 맵을 여러 개로 나누어 제작할 경우 로딩 및 플레이 지연을 방지하기 위해 맵의 크기와 오브젝트 수를 어떻게 조절해야 하나요? [answer] | 제공된 문서에는 맵의 크기와 오브젝트 수를 구체적으로 조절하는 수치 기준이나 기술적 최적화 방법이 명시되어 있지 않습니다. 문서에서 확인할 수 있는 내용은 다음과 같습니다. 1. **원인**: 맵이 너무 거대하거나 배치된 오브젝트가 많으면 로딩 및 플레이 지연이 발생할 수 있습니다. 2. **권고 사항**: 맵의 크기와 오브젝트 수를 "적절히" 조절해야 합니다. 3. **제작 방식**: 좋은 맵의 크기와 개수에 정해진 답은 없으며, 크리에이터의 기획에 맞게 여러 개의 맵을 만들거나 하나의 커다란 맵을 만들어도 됩니다. 따라서 구 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 1. 연결하려는 맵에 포탈을 설치합니다. 2. 포탈의 프로퍼티 에디터에서 **TargetPortal**의 **[◉]** 버튼을 클릭합니다. 이후 **Reference** 팝업 창에서 이동할 포탈을 선택합니다. 3. **[시작]** 버튼을 클릭한 뒤, 출발 포탈에서 도착 포탈로 잘 이동하는지 확인합니다. # 마무리 좋은 맵의 크기와 개수는 정해진 답이 없습니다. 크리에이터의 기획에 맞게 여러 개의 맵을 만들거나, 하나의 커다란 맵을 만들어도 좋습니다. 그러나 맵이 너무 거대하거나 배치된 오브젝트가 많으면 로딩 및 플

[task] | single_turn [pass] | ⏳ 미판정 [title] | UI 제작하기 [question] | Resource Picker 창을 통해 텍스트 박스 배경 이미지를 선택할 때 RUID 값은 어디에서 확인하고 설정하나요? [answer] | Resource Picker 창을 열면 텍스트 박스 배경으로 사용할 수 있는 이미지 목록이 출력됩니다. 이 목록에서 원하는 이미지를 선택하면 해당 이미지의 RUID 값이 확인되고 설정됩니다. 예를 들어, 문서의 예제에서는 `b2efe9b7579bd494baecc7a2ef3`라는 RUID 값을 가진 이미지가 선택되었습니다. UI 에디터에서 **SpriteGUIRendererComponent**의 **ImageRUID** 옆 버튼을 클릭해 Resource Picker를 열고 이미지를 선택하는 방식으로 이 값을 직접 확인하고 적용합니다 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 메이플스토리 월드 메이커에서는 UI를 편집할 수 있는 **UI 에디터**를 제공합니다. UI 에디터를 활용해 캐릭터의 이름이나 스탯 창, 채팅 창 등을 구현할 수 있습니다. 또한 게임의 생동감을 살리는 연출도 만들 수 있습니다. UI 에디터의 기본 기능인 **이미지**와 **텍스트**를 사용해 화면 상단에 환영 메시지 UI를 만들어 봅시다. ##### 참고 가이드 * [UI 에디터](/docs?postId=120) * [기본 UI 컴포넌트](/docs?postId=744) * [UI 엔티티 제어하기](/do

[task] | single_turn [pass] | ⏳ 미판정 [title] | 유저 엔티티를 찾아주는 UserService [question] | HandleUserEnterEvent에서 self:PrintLocalPlayerName()을 호출하면 왜 모든 유저가 입장할 때마다 내 이름이 로그에 찍히는 현상이 발생하는지 [answer] | `HandleUserEnterEvent`는 서버에서 발생하는 이벤트입니다. 이 이벤트 핸들러 내부에서 `self:PrintLocalPlayerName()`을 호출하면, 해당 함수가 클라이언트 공간(`[client]`)에서 실행되도록 지정되어 있기 때문입니다. `_UserService.LocalPlayer`는 "현재 클라이언트를 실행 중인 사용자의 엔티티"를 의미합니다. 따라서 서버에서 이벤트가 발생하여 클라이언트 함수를 트리거하더라도, 각 클라이언트는 항상 **자신**의 유저 엔티티만 참조하게 됩니다. 결과적으로: 1. 유저 A [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | **LocalPlayer**는 클라이언트에서 내 유저 엔티티를 얻을 수 있는 프로퍼티입니다. 특정 클라이언트에서 내 캐릭터라는 개념은 클라이언트에서만 유효합니다. 그러므로 서버에서는 사용할 수 없고 반드시 클라이언트에서만 사용할 수 있습니다. **UserEnterEventType**은 서버에서만 발생하기 때문에, 클라이언트에서 실행할 수 있는 함수를 하나 추가하여 유저가 게임에 들어올 때마다 내 캐릭터의 이름을 출력하는 코드를 작성해 줍니다. ```lua Method: [client] void PrintLocalPlayerNam

[task] | instruction_following [pass] | ⏳ 미판정 [title] | 아이템 생성 및 삭제 [question] | 문서에 제시된 _GiftBox_ 스크립트에서 랜덤으로 선정되는 아이템 목록과 그 타입을 표로 정리하세요. [answer] | _GiftBox_ 스크립트에서 랜덤으로 선정되는 아이템 목록과 타입은 다음과 같습니다. | 아이템 이름 | 아이템 타입 | | :--- | :--- | | RedPotion | Potion | | BluePotion | Potion | | IronSword | Weapon | | IronShield | Armor | | GreenShirts | Clothes | [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 이번에는 생성된 아이템을 표시할 인벤토리 UI를 추가합니다. 상단 메뉴에 버튼을 눌러 UI 에디터를 엽니다. **Preset List**에서 **[인벤토리]**, **[버튼모음]** UI를 추가합니다. 만일 **Inventory** 엔티티의 **UIInventory** 컴포넌트에 **InventoryBtnPath**가 비어있으면, 햄버거 메뉴를 열어 **Reset All Properties**를 선택합니다. 그러면 아래와 같이 정상적인 경로가 설정됩니다. # 아이템 엔티티 배치 및 기능 추가 버튼을 눌러 UI 편집모드를

[task] | single_turn [pass] | ⏳ 미판정 [title] | UI 제작하기 [question] | TextComponent의 FontSize 값을 30으로 변경하면 화면에 표시되는 텍스트의 크기는 어떻게 달라지나요? [answer] | TextComponent의 FontSize 값을 30으로 설정하면, 해당 텍스트 컴포넌트가 표시하는 글자의 크기가 30포인트로 고정됩니다. 참고 문서의 예제에서는 "Hello MapleStory Worlds"라는 텍스트를 가진 TextComponent의 FontSize를 30으로 수정하는 과정을 보여줍니다. 이는 UI 에디터에서 텍스트 박스의 위치와 크기(UITransformComponent의 Width, Height)를 별도로 설정한 후, 실제 글자의 크기를 FontSize 프로퍼티를 통해 조절하는 것입니다. 즉, FontSiz [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 메이플스토리 월드 메이커에서는 UI를 편집할 수 있는 **UI 에디터**를 제공합니다. UI 에디터를 활용해 캐릭터의 이름이나 스탯 창, 채팅 창 등을 구현할 수 있습니다. 또한 게임의 생동감을 살리는 연출도 만들 수 있습니다. UI 에디터의 기본 기능인 **이미지**와 **텍스트**를 사용해 화면 상단에 환영 메시지 UI를 만들어 봅시다. ##### 참고 가이드 * [UI 에디터](/docs?postId=120) * [기본 UI 컴포넌트](/docs?postId=744) * [UI 엔티티 제어하기](/do

[task] | instruction_following [pass] | ⏳ 미판정 [title] | 아이템 생성 및 삭제 [question] | _Inventory_ 엔티티의 _UIInventory_ 컴포넌트에서 _InventoryBtnPath_ 가 비어 있을 때 정상적인 경로 설정을 위한 단계를 번호 목록으로 나열하세요. [answer] | `Inventory` 엔티티의 `UIInventory` 컴포넌트에서 `InventoryBtnPath`가 비어 있을 때 정상적인 경로 설정을 위한 단계는 다음과 같습니다. 1. 상단 메뉴의 버튼을 눌러 UI 편집기를 엽니다. 2. `Inventory` 엔티티의 햄버거 메뉴를 엽니다. 3. `Reset All Properties`를 선택합니다. 4. 정상적인 경로가 설정되었는지 확인합니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 이번에는 생성된 아이템을 표시할 인벤토리 UI를 추가합니다. 상단 메뉴에 버튼을 눌러 UI 에디터를 엽니다. **Preset List**에서 **[인벤토리]**, **[버튼모음]** UI를 추가합니다. 만일 **Inventory** 엔티티의 **UIInventory** 컴포넌트에 **InventoryBtnPath**가 비어있으면, 햄버거 메뉴를 열어 **Reset All Properties**를 선택합니다. 그러면 아래와 같이 정상적인 경로가 설정됩니다. # 아이템 엔티티 배치 및 기능 추가 버튼을 눌러 UI 편집모드를

[task] | single_turn [pass] | ⏳ 미판정 [title] | UI 제작하기 [question] | SpriteGUIRendererComponent의 ImageRUID 값을 변경하지 않고 이미지의 크기와 위치만 조정하려면 UITransformComponent의 어떤 항목을 수정해야 하나요? [answer] | 이미지의 크기와 위치만 조정하려면 `UITransformComponent`의 다음 항목을 수정해야 합니다. * **위치 조정**: `Pos X`, `Pos Y` * **크기 조정**: `Width`, `Height` 참고 문서의 예시에서는 이미지 UI를 배치할 때 `UITransformComponent`에서 `Pos X = -257`, `Pos Y = 403`, `Width = 70`, `Height = 70` 값을 입력하여 위치와 크기를 설정했습니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 텍스트 박스가 조금 더 돋보이도록 메소 이미지를 추가하겠습니다. 1. UI 에디터를 연 뒤, **UIGroup**을 클릭합니다. 2. 왼쪽 기본 도구에서 **[이미지]** 버튼을 클릭하여 이미지 UI를 추가합니다. 3. 추가한 이미지의 프로퍼티 에디터에서 **SpriteGUIRendererComponent**의 **ImageRUID** 오른쪽 버튼을 클릭하여 **Resource Picker** 창을 엽니다. * RUID:fd255d50cb5177545a0e71c4a84 4. 프로퍼티 에디터 - **UITr

[task] | single_turn [pass] | ⏳ 미판정 [title] | 아이템 생성 및 삭제 [question] | ItemType을 개별 아이템 단위로 생성하는 것과 동일한 유형별로 묶어서 생성하는 것 중 어느 쪽이 권장되며 그 이유는 무엇인가요? [answer] | 동일한 유형별로 묶어서 ItemType을 생성하는 것이 권장됩니다. 참고 문서의 Tip 섹션에서 제작하는 게임 환경에 따라 개별 아이템 단위로 생성할 수도 있지만, 일반적으로는 동일한 유형별로 ItemType을 생성하는 것을 추천한다고 명시하고 있습니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 이번 과정에서는 아이템 생성과 삭제 기능을 알아봅니다. 제작할 예제는 다음과 같습니다. * 맵에 놓인 아이템을 먹을 때마다 인벤토리에 랜덤한 아이템이 생성 * 아이템을 먹으면, 5초 뒤 아이템이 놓여있던 자리에 다시 생성 * 맵에 놓인 다른 아이템을 먹을 때마다 인벤토리에 있는 모든 아이템 삭제 # 아이템 테이블 만들기 먼저 개별 아이템을 만들어 봅시다. 개별 아이템은 아이템 테이블에서 정의할 수 있습니다. 아이템 테이블은 **DataSet**으로 만듭니다. **Workspace - MyDesk**에서 콘

[task] | single_turn [pass] | ⏳ 미판정 [title] | 맵 생성과 관리 [question] | 현재 Scene에서 작업 중인 맵이나 시작 맵을 삭제하려고 했을 때 실패하는 원인과, 이 제한이 풀리는 조건이 있는지 설명해 줘. [answer] | 현재 Scene에서 작업 중인 맵이나 시작 맵은 삭제할 수 없습니다. 이는 에디터가 현재 작업 중인 맵과 플레이어의 진입점 역할을 하는 시작 맵의 무결성을 유지하기 위해 강제하는 제한 사항입니다. 이 제한이 풀리는 조건은 다음과 같습니다. 1. **시작 맵인 경우**: 다른 맵을 시작 맵으로 변경하면, 기존 시작 맵은 더 이상 시작 맵이 아니므로 삭제할 수 있습니다. 2. **현재 Scene에서 작업 중인 맵인 경우**: 다른 맵으로 전환하여 작업 중인 맵이 아닌 상태로 변경해야 삭제할 수 있습니다. 즉, 해당 맵이 '시작 맵 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 다양한 맵은 월드를 탐험하는 유저들에게 다채로운 재미를 선사합니다. 이번 과정에서는 맵 생성과 관리 방법을 알아봅시다. # 맵 관리 방법 맵 관리 방법에는 2가지가 있습니다. * **Hierarchy - maps** 하위 엔트리의 콘텍스트 메뉴를 통해 관리 * **Window - Map List** 창에서 관리 # 새 맵 만들기 | Hierarchy | Map List | | ----------- | ------- | | **Hierarchy - maps**의 콘텍스트 메뉴에서 **Create New M

[task] | single_turn [pass] | ⏳ 미판정 [title] | 아이템 생성 및 삭제 [question] | UserItemDataSet이라는 특정 이름이 아닌 다른 이름의 데이터셋을 생성했는데 아이템 데이터가 넘어오지 않는 이유는 무엇인가요? [answer] | 아이템 테이블의 이름은 반드시 **UserItemDataSet**으로 생성해야 합니다. 다른 이름으로 데이터셋을 생성하면, 아이템을 생성할 때 테이블에 정의된 데이터를 아이템 객체로 넘겨주는 과정에서 오류가 발생하여 데이터가 정상적으로 전달되지 않습니다. 따라서 아이템 시스템이 올바르게 작동하려면 데이터셋 이름을 **UserItemDataSet**으로 수정해야 합니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 이번 과정에서는 아이템 생성과 삭제 기능을 알아봅니다. 제작할 예제는 다음과 같습니다. * 맵에 놓인 아이템을 먹을 때마다 인벤토리에 랜덤한 아이템이 생성 * 아이템을 먹으면, 5초 뒤 아이템이 놓여있던 자리에 다시 생성 * 맵에 놓인 다른 아이템을 먹을 때마다 인벤토리에 있는 모든 아이템 삭제 # 아이템 테이블 만들기 먼저 개별 아이템을 만들어 봅시다. 개별 아이템은 아이템 테이블에서 정의할 수 있습니다. 아이템 테이블은 **DataSet**으로 만듭니다. **Workspace - MyDesk**에서 콘

[task] | single_turn [pass] | ⏳ 미판정 [title] | 맵 생성과 관리 [question] | 맵 이름을 변경하거나 순서를 바꿀 때 맵 이름의 번호가 오름차순으로 생성된다는 건 어떤 의미인지, 기존 맵의 번호를 수동으로 수정할 수 있는지 궁금해. [answer] | 참고 문서에 따르면, "맵 이름의 번호는 오름차순으로 생성됩니다"라는 문장은 **새로운 맵을 생성할 때** 시스템이 기존 맵들보다 큰 번호를 자동으로 부여하여 순서를 유지한다는 것을 의미합니다. 즉, 사용자가 직접 맵 이름을 입력하더라도 시스템이 내부적으로 오름차순이 되도록 번호를 관리하거나 생성하는 흐름을 설명하는 것입니다. 기존 맵의 번호를 수동으로 수정할 수 있는지, 또는 맵 이름을 변경할 수 있는지에 대한 구체적인 방법은 제공된 문서에 명시되어 있지 않습니다. 문서에서는 새 맵 생성, 복제, 삭제, 다른 맵 불러오기, 시작 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 다양한 맵은 월드를 탐험하는 유저들에게 다채로운 재미를 선사합니다. 이번 과정에서는 맵 생성과 관리 방법을 알아봅시다. # 맵 관리 방법 맵 관리 방법에는 2가지가 있습니다. * **Hierarchy - maps** 하위 엔트리의 콘텍스트 메뉴를 통해 관리 * **Window - Map List** 창에서 관리 # 새 맵 만들기 | Hierarchy | Map List | | ----------- | ------- | | **Hierarchy - maps**의 콘텍스트 메뉴에서 **Create New M

[task] | instruction_following [pass] | ⏳ 미판정 [title] | 아이템 생성 및 삭제 [question] | GiftBox 스크립트에서 아이템 획득 후 5초 뒤 아이템이 다시 활성화되는 과정을 설명하는 코드를 주석으로만 출력하세요. [answer] | ```lua -- 아이템을 생성하여 충돌한 엔티티의 인벤토리에 넣어줍니다. -- 충돌한 엔티티의 인벤토리에 아이템이 생성되면, 해당 아이템을 없앤 뒤 5초 후 다시 나타나도록 예약을 걸어둡니다. -- 1. 현재 스크립트가 붙어 있는 아이템 엔티티의 경로를 저장합니다. -- 2. 5초 후 실행될 타이머를 설정합니다. -- 3. 타이머가 만료되면 저장된 경로로 엔티티를 찾아 다시 활성화(SetEnable(true))시킵니다. -- 4. 즉시 현재 아이템 엔티티를 비활성화(SetEnable(false))시킵니다. ``` [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 이번에는 생성된 아이템을 표시할 인벤토리 UI를 추가합니다. 상단 메뉴에 버튼을 눌러 UI 에디터를 엽니다. **Preset List**에서 **[인벤토리]**, **[버튼모음]** UI를 추가합니다. 만일 **Inventory** 엔티티의 **UIInventory** 컴포넌트에 **InventoryBtnPath**가 비어있으면, 햄버거 메뉴를 열어 **Reset All Properties**를 선택합니다. 그러면 아래와 같이 정상적인 경로가 설정됩니다. # 아이템 엔티티 배치 및 기능 추가 버튼을 눌러 UI 편집모드를

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