← 목록

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

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

[task] | single_turn [pass] | ⏳ 미판정 [title] | 로그 [question] | 스크립트가 의도대로 동작하지 않을 때 로그를 활용해서 문제를 빠르게 파악하는 구체적인 방법은 무엇인가요? [answer] | 스크립트가 의도대로 동작하지 않을 때, `log()` 함수를 활용해 월드의 문제점을 빠르게 파악하고 수정할 수 있습니다. 시행착오를 줄이고 보다 효율적으로 스크립트를 작성하기 위해 로그를 적절히 활용하는 것이 중요합니다. 구체적인 활용 방법은 다음과 같습니다. 1. **상태 및 이벤트 출력**: 스크립트의 주요 지점(예: `OnBeginPlay`, `OnUpdate`, 특정 이벤트 핸들러 진입 시)에서 현재 상태나 변수 값을 `log()`로 출력합니다. 2. **시간 정보 포함**: `os.date()` 또는 `os.clock( [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 스크립트를 작성하고 플레이 테스트를 하다 보면 크리에이터의 생각대로 단번에 잘 작동하는 경우는 많지 않습니다. 크리에이터는 스크립트에 로그를 적절히 활용해 월드의 문제점을 보다 빠르게 파악하고 수정할 수 있습니다. 로그를 활용하여 시행착오를 줄이고 보다 효율적으로 스크립트를 작성해봅시다. > **더 알아보기** > 로그와 함께 디버그 기능을 적절히 활용하면 스크립트 오류를 보다 빠르고 정확하게 해결할 수 있습니다. > [스크립트 디버그](https://mod-developers.nexon.com/docs/?postId=202)도

[task] | instruction_following [pass] | ⏳ 미판정 [title] | 기본 UI 컴포넌트 [question] | ButtonComponent와 함께 주로 활용하는 Event 3개의 이름만 줄바꿈 없이 쉼표로 구분하여 코드 블록으로 출력하세요. [answer] | ``` ButtonClickEvent, ButtonPressedEvent, ButtonStateChangeEvent ``` [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | [TextComponent](/apiReference/Components/TextComponent)는 UI에 텍스트를 표시하는 컴포넌트입니다. **SpriteGUIRendererComponent**와 같이 사용할 경우 **SpriteGUIRendererComponent**보다 **TextComponent**를 위에 그립니다. UI 엔티티에 **TextComponent**가 포함되어 있으면 엔티티를 더블클릭하여 손쉽게 텍스트를 편집할 수 있습니다. 주요 프로퍼티는 다음과 같습니다. | 번호 | 항목 | 설명 | | :---: |

[task] | code [pass] | ⏳ 미판정 [title] | 로그 [question] | OnBeginPlay 메서드에서 _EntityService:GetEntityByPath("/maps/map01/obj") 로 가져온 엔티티가 nil 인지 아닌지 log 함수로 출력하는 스크립트를 작성해줘 [answer] | `_EntityService:GetEntityByPath`로 가져온 엔티티가 `nil`인지 아닌지를 확인하기 위해 `OnBeginPlay` 메서드에서 `log` 함수를 사용할 수 있습니다. 가져온 값이 `nil`이 아니라면 `true`가 출력되고, `nil`이라면 `false`가 출력됩니다. ```lua Method: [server only] void OnBeginPlay() { local entity = _EntityService:GetEntityByPath("/maps/map01/obj") log(entity ~ [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 스크립트를 작성하고 플레이 테스트를 하다 보면 크리에이터의 생각대로 단번에 잘 작동하는 경우는 많지 않습니다. 크리에이터는 스크립트에 로그를 적절히 활용해 월드의 문제점을 보다 빠르게 파악하고 수정할 수 있습니다. 로그를 활용하여 시행착오를 줄이고 보다 효율적으로 스크립트를 작성해봅시다. > **더 알아보기** > 로그와 함께 디버그 기능을 적절히 활용하면 스크립트 오류를 보다 빠르고 정확하게 해결할 수 있습니다. > [스크립트 디버그](https://mod-developers.nexon.com/docs/?postId=202)도

[task] | code [pass] | ⏳ 미판정 [title] | 로그 [question] | HandleTouchEvent 이벤트 핸들러에서 터치 발생 시점의 event.UserId 를 log 함수로 출력하는 스크립트를 작성해줘 [answer] | `HandleTouchEvent` 이벤트 핸들러에서 터치 발생 시점의 `event.UserId`를 `log` 함수로 출력하는 스크립트는 다음과 같습니다. ```lua Event Handler: [self] HandleTouchEvent (TouchEvent event) { -- Parameters local UserId = event.UserId -------------------------------------------------------- -- 터치 발생 시점의 UserId를 콘솔 창에 출력 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 스크립트를 작성하고 플레이 테스트를 하다 보면 크리에이터의 생각대로 단번에 잘 작동하는 경우는 많지 않습니다. 크리에이터는 스크립트에 로그를 적절히 활용해 월드의 문제점을 보다 빠르게 파악하고 수정할 수 있습니다. 로그를 활용하여 시행착오를 줄이고 보다 효율적으로 스크립트를 작성해봅시다. > **더 알아보기** > 로그와 함께 디버그 기능을 적절히 활용하면 스크립트 오류를 보다 빠르고 정확하게 해결할 수 있습니다. > [스크립트 디버그](https://mod-developers.nexon.com/docs/?postId=202)도

[task] | instruction_following [pass] | ⏳ 미판정 [title] | 기본 UI 컴포넌트 [question] | ButtonComponent의 Transition 프로퍼티에서 설정 가능한 2가지 전환 방식과 각 방식의 의미를 2문장 이내로 설명하세요. [answer] | ButtonComponent의 Transition 프로퍼티에서 설정 가능한 2가지 전환 방식은 **ColorTint**와 **SpriteSwap**입니다. * **ColorTint**: 버튼의 색상 전환을 설정하는 방식입니다. * **SpriteSwap**: 버튼의 스프라이트를 교체하는 방식입니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | [TextComponent](/apiReference/Components/TextComponent)는 UI에 텍스트를 표시하는 컴포넌트입니다. **SpriteGUIRendererComponent**와 같이 사용할 경우 **SpriteGUIRendererComponent**보다 **TextComponent**를 위에 그립니다. UI 엔티티에 **TextComponent**가 포함되어 있으면 엔티티를 더블클릭하여 손쉽게 텍스트를 편집할 수 있습니다. 주요 프로퍼티는 다음과 같습니다. | 번호 | 항목 | 설명 | | :---: |

[task] | instruction_following [pass] | ⏳ 미판정 [title] | 기본 UI 컴포넌트 [question] | TextComponent의 주요 프로퍼티 4가지를 표로 정리해서 출력하세요. [answer] | | 항목 | 설명 | | :--- | :--- | | Font | 어떤 폰트로 표시할지 설정합니다. **Default, Maple, Bazzi, Football** 중에서 선택할 수 있습니다. | | FontColor | 폰트 색상 및 투명도를 설정합니다. | | FontSize | 폰트 크기를 결정합니다. | | Text | 사용할 텍스트를 적어줍니다. | [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | [TextComponent](/apiReference/Components/TextComponent)는 UI에 텍스트를 표시하는 컴포넌트입니다. **SpriteGUIRendererComponent**와 같이 사용할 경우 **SpriteGUIRendererComponent**보다 **TextComponent**를 위에 그립니다. UI 엔티티에 **TextComponent**가 포함되어 있으면 엔티티를 더블클릭하여 손쉽게 텍스트를 편집할 수 있습니다. 주요 프로퍼티는 다음과 같습니다. | 번호 | 항목 | 설명 | | :---: |

[task] | two_turn [pass] | ⏳ 미판정 [title] | 로그 [question] | 메이플스토리 월드에서 시스템 로그와 크리에이터 로그의 차이점과 각각의 용도가 무엇인가요? [answer] | 메이플스토리 월드에서 로그는 월드 제작 중 발생하는 정보나 문제 상황을 기록하는 수단이며, 기록을 남기는 주체에 따라 **시스템 로그**와 **크리에이터 로그**로 구분됩니다. ### 1. 시스템 로그 * **정의:** 제작 중인 월드에서 발생하는 정보 메시지나 오류를 시스템이 자동으로 파악하여 알려주는 로그입니다. * **용도:** 월드가 의도대로 정상적으로 동작하고 있는지 시스템 레벨에서 확인하고, 발생된 문제를 파악하는 데 사용됩니다. * **중요도 분류:** 시스템 로그의 오류는 중요도에 따라 다음과 같이 세 단 [followup] | log(), log_warning(), log_error() 함수의 아이콘 표시 차이와, 플레이 테스트 중 불필요한 로그가 쌓일 때 권장되는 관리 방법은 무엇인가요? [followup_answer] | ### 아이콘 표시 차이 크리에이터 로그 함수는 콘솔 창에서 다음과 같이 서로 다른 아이콘으로 표시됩니다. * **`log()`**: 로그의 아이콘이 **정보(Info)** 로 표시됩니다. * **`log_warning()`**: 로그의 아이콘이 **경고(Warning)** 로 표시됩니다. * **`log_error()`**: 로그의 아이콘이 **오류(Error)** 로 표시됩니다. ### 불필요한 로그 관리 방법 플레이 테스트 도중 로그가 너무 많이 쌓이면 확인해야 할 중요한 로그를 놓칠 수 있으므로, **불필요 [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 로그에 대해 알아보고 월드 제작 과정에서 로그를 효과적으로 활용하는 방법을 살펴봅시다. # 로그 소개 로그(Log)란 월드 제작 중 발생하는 여러 가지 정보나 문제 상황에 대한 기록을 말합니다. 로그를 통해 현재 제작 중인 월드가 의도대로 잘 동작하고 있는지 확인할 수 있습니다. 만약 의도대로 동작하지 않는다면 문제의 원인을 파악하고 해결하는 데 로그를 활용할 수 있습니다. 로그 종류는 로그를 남기는 주체를 기준으로 구분합니다. 시스템 로그와 크리에이터 로그로 나누어 살펴봅시다. ## 시스템 로그 제작

[task] | single_turn [pass] | ⏳ 미판정 [title] | 스프라이트 색상을 픽셀 단위로 설정하기 [question] | SetPixelTest 엔티티에 픽셀을 설정한 직후 GetPixel을 호출하면 항상 해당 픽셀의 색상이 반환되는지, 아니면 렌더링 프레임이 한 번 지나야만 최신 값이 반영되는지 확인 방법이 궁금합니다. [answer] | 제시된 참고 문서에는 `SetPixel` 호출 직후 `GetPixel`을 호출했을 때 즉시 색상이 반환되는지, 아니면 렌더링 프레임(렌더 패스)이 한 번 지나야만 최신 값이 반영되는지에 대한 기술적 설명이나 시맨틱(의미) 정의가 포함되어 있지 않습니다. 문서에는 `GetPixel` 함수가 "제일 최근에 변경된 픽셀의 위치와 색상을 받아올 수 있다"고만 설명되어 있으며, 이 "최근"이 로직 실행 순서에 따른 즉각적인 값인지, 화면에 그려진(Rendered) 프레임의 값인지에 대한 구별 정보가 없습니다. 따라서 제공된 문서만으로는 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | `GetPixel` 함수를 활용하면 제일 최근에 변경된 픽셀의 위치와 색상을 받아올 수 있습니다. 1. **Hierarchy - map01 - Create Entity - Create Empty**를 눌러 새로운 **CheckGetEntity**를 생성합니다. 2. **CheckGetEntity**에 **TransformComponent**를 추가하고 **Scale** 값으로 **X = 10, Y = 10**을 입력합니다. 그리고 **PixelRendererComponent**도 추가합니다. 3. UI 에디터

[task] | single_turn [pass] | ⏳ 미판정 [title] | 월드 워프하기 [question] | 워프로 이동해 온 유저의 이전 월드 ID를 확인하기 위해 warpRecord 객체의 어떤 프로퍼티를 참조해야 하나요? [answer] | `warpRecord` 객체의 `PreviousWorldId` 프로퍼티를 참조하면 됩니다. 이 값을 사용하면 워프로 이동해 온 유저가 이전에는 어떤 월드에 있었는지 확인할 수 있습니다. ```lua Event Handler: [server only] [service: UserService] HandleUserEnterEvent(UserEnterEvent event) { local UserId = event.UserId local warpRecord = _TeleportService:GetWarpRecord(Use [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 이동한 월드에서 입장한 유저가 워프로 입장한 것인지 `GetWarpRecord()`를 활용해 확인할 수 있습니다. 1. 새로운 스크립트 컴포넌트를 생성하고, Common에 추가합니다. 2. 월드에 입장한 유저가 워프로 입장했는지 확인할 수 있도록 아래와 같이 작성합니다. ```lua Event Handler: [server only] [service: UserService] HandleUserEnterEvent(UserEnterEvent event) { -------------

[task] | single_turn [pass] | ⏳ 미판정 [title] | 월드 워프하기 [question] | HandleUserEnterEvent 이벤트 핸들러 내에서 _TeleportService:GetWarpRecord()를 호출할 때 전달해야 하는 파라미터는 무엇인가요? [answer] | `_TeleportService:GetWarpRecord()`를 호출할 때 전달해야 하는 파라미터는 **`UserId`**입니다. `HandleUserEnterEvent` 이벤트 핸들러의 `event` 객체에서 `event.UserId`를 추출하여 함수에 전달합니다. ```lua Event Handler: [server only] [service: UserService] HandleUserEnterEvent(UserEnterEvent event) { local UserId = event.UserId loc [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 이동한 월드에서 입장한 유저가 워프로 입장한 것인지 `GetWarpRecord()`를 활용해 확인할 수 있습니다. 1. 새로운 스크립트 컴포넌트를 생성하고, Common에 추가합니다. 2. 월드에 입장한 유저가 워프로 입장했는지 확인할 수 있도록 아래와 같이 작성합니다. ```lua Event Handler: [server only] [service: UserService] HandleUserEnterEvent(UserEnterEvent event) { -------------

[task] | two_turn [pass] | ⏳ 미판정 [title] | 월드 워프하기 [question] | `GetWarpRecord()`로 워프로 입장한 유저를 어떻게 판별할 수 있나요? [answer] | `GetWarpRecord()` 함수는 유저가 워프(이동)를 통해 현재 월드에 입장했는지 여부를 판별하는 데 사용됩니다. 이 함수는 `_TeleportService`를 통해 호출되며, 특정 유저의 `UserId`를 인수로 받습니다. 판별 로직은 다음과 같습니다: 1. **`nil` 반환 여부 확인**: * 유저가 **일반적인 방식**(직접 월드 선택 등)으로 입장했다면, `GetWarpRecord()`는 `nil`을 반환합니다. * 유저가 **워프를 통해** 입장했다면, `nil`이 아닌 워프 기록 객체를 [followup] | `warpRecord`가 `nil`이 아닌 경우 `PreviousWorldId`를 추출하여 로그에 출력하는 코드 예시를 작성해 주세요. [followup_answer] | `warpRecord`가 `nil`이 아닐 경우(워프로 입장한 경우) `PreviousWorldId`를 추출하여 로그에 출력하는 코드 예시는 다음과 같습니다. ```lua Event Handler: [server only] [service: UserService] HandleUserEnterEvent(UserEnterEvent event) { --------------- Native Event Sender Info ---------------- -- Sender: UserService -- Space: Ser [scores] | [judge_reason] | [source_doc] | 이동한 월드에서 입장한 유저가 워프로 입장한 것인지 `GetWarpRecord()`를 활용해 확인할 수 있습니다. 1. 새로운 스크립트 컴포넌트를 생성하고, Common에 추가합니다. 2. 월드에 입장한 유저가 워프로 입장했는지 확인할 수 있도록 아래와 같이 작성합니다. ```lua Event Handler: [server only] [service: UserService] HandleUserEnterEvent(UserEnterEvent event) { -------------

[task] | single_turn [pass] | ⏳ 미판정 [title] | 월드 워프하기 [question] | GetWarpRecord() 함수를 사용하려면 어떤 서비스 객체를 통해 접근해야 하며, 해당 함수의 실행 공간은 어디인가요? [answer] | `GetWarpRecord()` 함수는 `_TeleportService` 서비스 객체를 통해 접근해야 합니다. 해당 함수를 사용하는 스크립트 메서드(또는 이벤트 핸들러)의 실행 공간은 `[server only]`입니다. 참고 문서의 예제 코드가 모두 `[server only]` 태그와 함께 작성되어 있으며, 서버 측에서만 유저의 워프 기록을 조회할 수 있습니다. ```lua Event Handler: [server only] [service: UserService] HandleUserEnterEvent(UserEnterEvent [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 이동한 월드에서 입장한 유저가 워프로 입장한 것인지 `GetWarpRecord()`를 활용해 확인할 수 있습니다. 1. 새로운 스크립트 컴포넌트를 생성하고, Common에 추가합니다. 2. 월드에 입장한 유저가 워프로 입장했는지 확인할 수 있도록 아래와 같이 작성합니다. ```lua Event Handler: [server only] [service: UserService] HandleUserEnterEvent(UserEnterEvent event) { -------------

[task] | code [pass] | ⏳ 미판정 [title] | 로그 [question] | OnBeginPlay()에서 log(), log_warning(), log_error() 함수를 각각 호출하여 "Info", "Warning", "Error" 메시지를 콘솔에 출력하는 스크립트를 작성해줘 [answer] | ```lua Method: [server only] void OnBeginPlay() { log("Info") log_warning("Warning") log_error("Error") } ``` [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 로그에 대해 알아보고 월드 제작 과정에서 로그를 효과적으로 활용하는 방법을 살펴봅시다. # 로그 소개 로그(Log)란 월드 제작 중 발생하는 여러 가지 정보나 문제 상황에 대한 기록을 말합니다. 로그를 통해 현재 제작 중인 월드가 의도대로 잘 동작하고 있는지 확인할 수 있습니다. 만약 의도대로 동작하지 않는다면 문제의 원인을 파악하고 해결하는 데 로그를 활용할 수 있습니다. 로그 종류는 로그를 남기는 주체를 기준으로 구분합니다. 시스템 로그와 크리에이터 로그로 나누어 살펴봅시다. ## 시스템 로그 제작

[task] | code [pass] | ⏳ 미판정 [title] | 로그 [question] | TimerService:SetTimerOnce 를 통해 5초 후 실행되는 함수 내부에서 "타이머 완료" 라는 문자열을 log 함수로 출력하는 스크립트를 작성해줘 [answer] | `_TimerService:SetTimerOnce` 메서드를 사용하여 5초 후 실행될 함수를 등록하고, 해당 함수 내에서 `log` 함수를 통해 "타이머 완료"를 출력하는 스크립트는 다음과 같습니다. ```lua Method: [server only] void OnBeginPlay() { _TimerService:SetTimerOnce(function() log("타이머 완료") end, 5) } ``` **설명:** 1. `OnBeginPlay()` 생명주기 메서드 내에서 스크립트가 시작될 때 타이 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 스크립트를 작성하고 플레이 테스트를 하다 보면 크리에이터의 생각대로 단번에 잘 작동하는 경우는 많지 않습니다. 크리에이터는 스크립트에 로그를 적절히 활용해 월드의 문제점을 보다 빠르게 파악하고 수정할 수 있습니다. 로그를 활용하여 시행착오를 줄이고 보다 효율적으로 스크립트를 작성해봅시다. > **더 알아보기** > 로그와 함께 디버그 기능을 적절히 활용하면 스크립트 오류를 보다 빠르고 정확하게 해결할 수 있습니다. > [스크립트 디버그](https://mod-developers.nexon.com/docs/?postId=202)도

[task] | instruction_following [pass] | ⏳ 미판정 [title] | 기본 UI 컴포넌트 [question] | SpriteGUIRendererComponent의 Type이 Tiled일 때 성능 부하를 줄이기 위한 권장 사항을 표로 정리해서 나열하세요. [answer] | SpriteGUIRendererComponent의 Type이 Tiled인 경우 성능 부하를 줄이기 위한 권장 사항은 다음과 같습니다. | 구분 | 권장 사항 | 설명 | | :--- | :--- | :--- | | **랩 모드** | **Repeat**로 설정 | ImageRUID로 설정한 리소스의 랩 모드를 Repeat로 설정하면 크기에 영향받지 않고 Tiled를 부하 없이 사용할 수 있습니다. | | **Border 값** | **0**으로 설정 | ImageRUID로 설정한 리소스의 Border 값을 0으로 설정합니다. | [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 컴포넌트를 조합해 다양한 형태의 UI 엔티티를 구성할 수 있습니다. 이번 과정에서는 UI에서 자주 사용하는 기본 컴포넌트에 대해 알아봅니다. ##### 참고 가이드 * [UI 에디터](/docs?postId=120) * [UI 제작하기](/docs?postId=64) * [UI 엔티티 제어하기](/docs?postId=1154) # UITransformComponent [UITransformComponent](/apiReference/Components/UITransformComponent)는 UI 엔티티에

[task] | single_turn [pass] | ⏳ 미판정 [title] | 월드 워프하기 [question] | WarpUserToWorldAndWait 호출 시 전달하는 직렬화 데이터를 다른 월드에서 GetWarpRecord로 가져오는 구체적인 방법은 무엇인가요? [answer] | 제공된 참고 문서에는 `GetWarpRecord()` 함수의 구체적인 사용 방법(인자, 반환값, 코드 예제 등)이 포함되어 있지 않습니다. 문서에는 다른 월드로 워프할 때 `WarpUserToWorldAndWait()`를 통해 데이터를 전달하고, `GetWarpRecord()`로 해당 데이터에 접근할 수 있다는 사실만 언급되어 있을 뿐, 이를 구현하는 구체적인 코드나 API 시그니처는 제공되지 않습니다. 따라서 참고 문서의 범위 내에서 `GetWarpRecord()`를 호출하는 구체적인 방법은 알려드릴 수 없습니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 TeleportService의 함수를 활용해 월드에서 다른 월드로 이동할 수 있습니다. # 다른 월드로 이동하기 TeleportService는 월드의 유저를 특정 장소로 이동시킬 때 사용할 수 있을 뿐 아니라, 접속 중인 월드에서 다른 월드로 이동시킬 수 있습니다. 접속 중인 월드와 이동할 월드가 공개 출시된 상태여야 이동이 가능합니다. 이 특성으로 인해 제작 중에는 워프를 테스트할 수 없습니다. | 현재 월드 | 이동할 월드 | 워프 여부 | | --- | --- | --- | | 공개 | 공개 | *

[task] | single_turn [pass] | ⏳ 미판정 [title] | 월드 워프하기 [question] | warpRecord 변수가 nil인 경우를 어떻게 판별해야 하며, 이 조건이 성립할 때의 의미는 무엇인가요? [answer] | `warpRecord` 변수가 `nil`인지 판별하는 방법은 `if warpRecord == nil then` 조건문을 사용하는 것입니다. 이 조건이 성립하는 경우, 해당 유저가 워프로 이동하여 월드에 입장한 것이 아니라 **일반적인 방식으로 월드에 입장**한 것을 의미합니다. 즉, `GetWarpRecord()` 함수는 워프로 이동한 기록이 없으면 `nil`을 반환하므로, 이 값을 확인하여 워프 입장과 일반 입장을 구분할 수 있습니다. ```lua Event Handler: [server only] [service: UserS [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 이동한 월드에서 입장한 유저가 워프로 입장한 것인지 `GetWarpRecord()`를 활용해 확인할 수 있습니다. 1. 새로운 스크립트 컴포넌트를 생성하고, Common에 추가합니다. 2. 월드에 입장한 유저가 워프로 입장했는지 확인할 수 있도록 아래와 같이 작성합니다. ```lua Event Handler: [server only] [service: UserService] HandleUserEnterEvent(UserEnterEvent event) { -------------

[task] | single_turn [pass] | ⏳ 미판정 [title] | 월드 워프하기 [question] | 제작 중인 월드에서 다른 월드로 워프하는 것을 테스트할 수 없다는데, 이 제한이 풀리는 조건은 무엇인가요? [answer] | 제작 중인 월드에서 다른 월드로 워프를 테스트할 수 없는 이유는, **현재 머물고 있는 월드와 이동할 대상 월드 모두 공개 출시된 상태여야만 워프가 가능하기 때문**입니다. 따라서 이 제한이 풀리는 조건은 다음과 같습니다. 1. **현재 월드**: 공개 출시 상태여야 합니다. (비공개 상태에서는 불가) 2. **이동할 대상 월드**: 공개 출시 상태여야 합니다. (비공개 상태에서는 불가) 두 월드가 모두 공개 출시되어 있으면 워프 테스트가 가능합니다. 참고로 크리에이터가 직접 만든 월드가 아니더라도, 이미 출시된 모든 월드 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 TeleportService의 함수를 활용해 월드에서 다른 월드로 이동할 수 있습니다. # 다른 월드로 이동하기 TeleportService는 월드의 유저를 특정 장소로 이동시킬 때 사용할 수 있을 뿐 아니라, 접속 중인 월드에서 다른 월드로 이동시킬 수 있습니다. 접속 중인 월드와 이동할 월드가 공개 출시된 상태여야 이동이 가능합니다. 이 특성으로 인해 제작 중에는 워프를 테스트할 수 없습니다. | 현재 월드 | 이동할 월드 | 워프 여부 | | --- | --- | --- | | 공개 | 공개 | *

[task] | single_turn [pass] | ⏳ 미판정 [title] | 월드 워프하기 [question] | 메이플스토리 월드 공식 홈페이지 URL 끝의 번호가 월드 ID라고 하는데, 이 ID를 프로퍼티에 입력할 때 문자열 형식으로 넣어야 하는지 숫자 형식으로 넣어야 하는지 알고 싶습니다. [answer] | 참고 문서에 제시된 활용 예제를 보면, 월드 ID를 프로퍼티로 선언할 때 `string` 타입을 사용하도록 되어 있습니다. 예제 코드의 프로퍼티 블록을 보면 다음과 같이 선언되어 있습니다. ```lua Property: [Sync] string WorldId = "" ``` 따라서 월드 ID를 프로퍼티에 입력할 때는 **문자열(string) 형식**으로 넣어야 합니다. URL 끝의 번호를 숫자가 아닌 문자열로 변환하여 프로퍼티 에디터에 입력하면 됩니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 TeleportService의 함수를 활용해 월드에서 다른 월드로 이동할 수 있습니다. # 다른 월드로 이동하기 TeleportService는 월드의 유저를 특정 장소로 이동시킬 때 사용할 수 있을 뿐 아니라, 접속 중인 월드에서 다른 월드로 이동시킬 수 있습니다. 접속 중인 월드와 이동할 월드가 공개 출시된 상태여야 이동이 가능합니다. 이 특성으로 인해 제작 중에는 워프를 테스트할 수 없습니다. | 현재 월드 | 이동할 월드 | 워프 여부 | | --- | --- | --- | | 공개 | 공개 | *

[task] | single_turn [pass] | ⏳ 미판정 [title] | 스프라이트 색상을 픽셀 단위로 설정하기 [question] | ButtonClick_GetPixel 스크립트에서 self.PR.PixelRendererTest:GetPixelTest() 형태로 다른 컴포넌트의 메서드를 호출할 때, self.PR이 Property로 선언된 Entity 타입 변수인지 아니면 PixelRendererComponent 자체를 참조하는지 혼동이 됩니다. [answer] | `self.PR`는 **Entity 타입의 프로퍼티**입니다. `PixelRendererComponent`를 직접 참조하는 것이 아닙니다. 참고 문서의 `ButtonClick_GetPixel` 스크립트 Property 선언을 보면 다음과 같습니다. ```lua Property: [None] Entity PR = /maps/map01/SetPixelTest ``` 여기서 `PR`은 `/maps/map01/SetPixelTest` 경로를 가지는 **Entity(객체)**를 참조하는 변수로 선언되어 있습니다. 따라 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | `GetPixel` 함수를 활용하면 제일 최근에 변경된 픽셀의 위치와 색상을 받아올 수 있습니다. 1. **Hierarchy - map01 - Create Entity - Create Empty**를 눌러 새로운 **CheckGetEntity**를 생성합니다. 2. **CheckGetEntity**에 **TransformComponent**를 추가하고 **Scale** 값으로 **X = 10, Y = 10**을 입력합니다. 그리고 **PixelRendererComponent**도 추가합니다. 3. UI 에디터

[task] | code [pass] | ⏳ 미판정 [title] | 로그 [question] | OnEndPlay() 생명주기 메서드에서 log_error() 함수를 호출하여 "Script ended unexpectedly" 에러 로그를 남겨 월드 종료 시점을 명확히 표시하는 스크립트를 작성해줘 [answer] | OnEndPlay()는 월드 또는 엔티티가 종료될 때 호출되는 표준 생명주기 메서드이며, log_error()는 아이콘이 오류(Error)로 표시되는 크리에이터 로그 함수입니다. 아래 스크립트는 OnEndPlay() 내부에서 log_error()를 호출하여 "Script ended unexpectedly"라는 메시지를 콘솔 창에 에러 로그로 출력하도록 작성되어 있습니다. ```lua Method: [server only] void OnEndPlay() { log_error("Script ended unexpectedly") [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 로그에 대해 알아보고 월드 제작 과정에서 로그를 효과적으로 활용하는 방법을 살펴봅시다. # 로그 소개 로그(Log)란 월드 제작 중 발생하는 여러 가지 정보나 문제 상황에 대한 기록을 말합니다. 로그를 통해 현재 제작 중인 월드가 의도대로 잘 동작하고 있는지 확인할 수 있습니다. 만약 의도대로 동작하지 않는다면 문제의 원인을 파악하고 해결하는 데 로그를 활용할 수 있습니다. 로그 종류는 로그를 남기는 주체를 기준으로 구분합니다. 시스템 로그와 크리에이터 로그로 나누어 살펴봅시다. ## 시스템 로그 제작

[task] | single_turn [pass] | ⏳ 미판정 [title] | 월드 워프하기 [question] | 포탈 이벤트 핸들러에서 self:Warp(PortalUser.Name)을 호출할 때, PortalUser.Name이 실제 유저 ID로 사용될 수 있는지 아니면 다른 식별자를 사용해야 하는지 궁금합니다. [answer] | 참고 문서에 제시된 예제를 보면, 포탈 이벤트 핸들러에서 `self:Warp(PortalUser.Name)`을 호출하여 `PortalUser.Name` 값을 `Warp` 메서드의 `userId` 인자로 전달하고 있습니다. 이후 `Warp` 메서드 내부에서 해당 값이 `_TeleportService:WarpUserToWorldAndWait()` 함수의 첫 번째 인자인 유저 ID로 직접 사용되고 있습니다. 따라서 주어진 예제 컨텍스트에서는 `PortalUser.Name`이 실제 유저 식별자로 사용되어 워프 처리가 정상적으로 수행되는 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 TeleportService의 함수를 활용해 월드에서 다른 월드로 이동할 수 있습니다. # 다른 월드로 이동하기 TeleportService는 월드의 유저를 특정 장소로 이동시킬 때 사용할 수 있을 뿐 아니라, 접속 중인 월드에서 다른 월드로 이동시킬 수 있습니다. 접속 중인 월드와 이동할 월드가 공개 출시된 상태여야 이동이 가능합니다. 이 특성으로 인해 제작 중에는 워프를 테스트할 수 없습니다. | 현재 월드 | 이동할 월드 | 워프 여부 | | --- | --- | --- | | 공개 | 공개 | *

[task] | single_turn [pass] | ⏳ 미판정 [title] | 월드 워프하기 [question] | 일반적인 방법으로 월드에 입장한 유저일 때 GetWarpRecord() 함수가 반환하는 값은 무엇이며, 이를 어떻게 처리해야 하는지 궁금합니다. [answer] | 일반적인 방법으로 월드에 입장한 유저의 경우, `GetWarpRecord()` 함수는 `nil`을 반환합니다. 따라서 워프로 입장한 유저인지 확인하기 위해 이 함수의 반환 값을 검사할 때, 반환 값이 `nil`인 경우를 반드시 처리해야 합니다. `nil`이 반환되면 그 유저가 워프를 통해 이동한 것이 아니므로, 워프 관련 로직(이전 월드 ID 확인 등)을 수행하지 않고 즉시 함수를 종료하는 것이 적절합니다. 아래와 같이 `HandleUserEnterEvent` 이벤트 핸들러 내에서 이 로직을 구현할 수 있습니다. ```lua [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 이동한 월드에서 입장한 유저가 워프로 입장한 것인지 `GetWarpRecord()`를 활용해 확인할 수 있습니다. 1. 새로운 스크립트 컴포넌트를 생성하고, Common에 추가합니다. 2. 월드에 입장한 유저가 워프로 입장했는지 확인할 수 있도록 아래와 같이 작성합니다. ```lua Event Handler: [server only] [service: UserService] HandleUserEnterEvent(UserEnterEvent event) { -------------

[task] | code [pass] | ⏳ 미판정 [title] | 로그 [question] | OnUpdate(delta) 메서드에서 매 프레임마다 현재 프레임 카운터 변수를 증가시키고, 100프레임 단위로 log() 함수를 통해 "Frame Count: [숫자]" 형식의 로그를 남기며, 500프레임 도달 시 log_warning()으로 "Long Run Warning"을 출력하는 스크립트를 작성해줘 [answer] | 요청하신 로직을 구현하기 위해 `FrameCount` 프로퍼티를 추가하고, `OnUpdate` 메서드에서 매 프레임마다 카운터를 증가시키며 조건부 로그를 출력하도록 작성했습니다. ```lua Property: [None] number FrameCount = 0 Method: [server only] void OnUpdate(number delta) { self.FrameCount = self.FrameCount + 1 if self.FrameCount % 100 == 0 then log("F [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 로그에 대해 알아보고 월드 제작 과정에서 로그를 효과적으로 활용하는 방법을 살펴봅시다. # 로그 소개 로그(Log)란 월드 제작 중 발생하는 여러 가지 정보나 문제 상황에 대한 기록을 말합니다. 로그를 통해 현재 제작 중인 월드가 의도대로 잘 동작하고 있는지 확인할 수 있습니다. 만약 의도대로 동작하지 않는다면 문제의 원인을 파악하고 해결하는 데 로그를 활용할 수 있습니다. 로그 종류는 로그를 남기는 주체를 기준으로 구분합니다. 시스템 로그와 크리에이터 로그로 나누어 살펴봅시다. ## 시스템 로그 제작

[task] | single_turn [pass] | ⏳ 미판정 [title] | 스프라이트 색상을 픽셀 단위로 설정하기 [question] | PixelRendererComponent에서 GetPixel로 색상을 받아와 다른 엔티티에 SetPixel로 표시할 때, 원본 엔티티와 대상 엔티티의 Scale 값이 다르면 픽셀 위치가 어긋나거나 색상이 이상하게 보이는 이유가 무엇인가요? [answer] | 제시된 참고 문서에는 `GetPixel`과 `SetPixel` 함수가 픽셀의 좌표와 색상을 전달하는 기능에 대해 설명하고 있으나, **원본 엔티티와 대상 엔티티의 `Scale` 값이 다를 때 발생하는 시각적 문제(위치 어긋남, 색상 이상)에 대한 원인 설명이나 기술적 근거가 포함되어 있지 않습니다.** 참고 문서에서 확인할 수 있는 사실은 다음과 같습니다. 1. `GetPixel(x, y)`는 **제일 최근에 변경된 픽셀**의 위치와 색상을 받아옵니다. 2. 예제 코드에서 `SetPixel`과 `GetPixel`을 호출할 때 동일 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | `GetPixel` 함수를 활용하면 제일 최근에 변경된 픽셀의 위치와 색상을 받아올 수 있습니다. 1. **Hierarchy - map01 - Create Entity - Create Empty**를 눌러 새로운 **CheckGetEntity**를 생성합니다. 2. **CheckGetEntity**에 **TransformComponent**를 추가하고 **Scale** 값으로 **X = 10, Y = 10**을 입력합니다. 그리고 **PixelRendererComponent**도 추가합니다. 3. UI 에디터

[task] | two_turn [pass] | ⏳ 미판정 [title] | 월드 워프하기 [question] | 다른 월드로 워프하기 위해 필요한 World ID는 어디서 확인하고 어떻게 가져와야 하나요? [answer] | World ID는 메이플스토리 월드 공식 홈페이지에서 해당 월드의 정보 페이지 URL을 통해 확인할 수 있습니다. URL의 마지막에 있는 숫자가 바로 World ID로, 이를 스크립트에서 사용하시면 됩니다. * 예시 URL: `https://maplestoryworlds.nexon.com/play/123456` * 이 경우 World ID는 `123456`입니다. 이 World ID는 `_TeleportService:WarpUserToWorldAndWait()` 또는 `WarpUserToWorldAsync()` 함수의 [followup] | `WarpUserToWorldAndWait` 호출 시 World ID 파라미터에 직접 숫자를 입력하는 대신, 프로퍼티로 설정해 관리하는 것이 왜 권장되는지 및 설정 방법을 알려주세요. [followup_answer] | `WarpUserToWorldAndWait` 호출 시 World ID를 프로퍼티로 설정해 관리하는 것이 권장되는 이유는 **유지보수의 용이성** 때문입니다. 월드 ID를 코드 안에 하드코딩(직접 숫자 입력)하면, 이동할 월드가 변경되거나 수정될 때마다 스크립트 코드를 찾아서 수정해야 합니다. 반면, 프로퍼티로 관리하면 **프로퍼티 에디터 창에서 값을 변경**하기만 하면 되므로 코드를 수정할 필요가 없고, 오류 발생 가능성도 줄어듭니다. ### 설정 방법 1. **컴포넌트 생성 및 추가**: 새로운 `Warp` 컴포넌트를 생성 [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 TeleportService의 함수를 활용해 월드에서 다른 월드로 이동할 수 있습니다. # 다른 월드로 이동하기 TeleportService는 월드의 유저를 특정 장소로 이동시킬 때 사용할 수 있을 뿐 아니라, 접속 중인 월드에서 다른 월드로 이동시킬 수 있습니다. 접속 중인 월드와 이동할 월드가 공개 출시된 상태여야 이동이 가능합니다. 이 특성으로 인해 제작 중에는 워프를 테스트할 수 없습니다. | 현재 월드 | 이동할 월드 | 워프 여부 | | --- | --- | --- | | 공개 | 공개 | *

[task] | instruction_following [pass] | ⏳ 미판정 [title] | 기본 UI 컴포넌트 [question] | TextInputComponent의 ContentType 중 'EmailAddress'와 'Pin'의 차이점을 3문장 이내로 설명하세요. [answer] | EmailAddress는 하나의 @ 기호를 포함할 수 있는 영문과 숫자 문자열을 허용하며, 마침표(.)를 연달아 입력할 수 없습니다. Pin은 숫자만 입력할 수 있고, 입력된 모든 문자가 별표(asterisk)로 표시됩니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | [TextInputComponent](/apiReference/Components/TextInputComponent)은 텍스트 입력을 받을 수 있는 컴포넌트입니다. 주요 프로퍼티는 다음과 같습니다. | 번호 | 항목 | 설명 | | :---: | :---: | --- | | | AutoClear | True 이면 텍스트 입력 후 입력 영역을 자동으로 초기화합니다. | | | ContentType | 입력할 수 있는 텍스트 유형을 지정합니다. <ul> <li>**Standard** : 모든 입력을 허용합니다. </li>

[task] | code [pass] | ⏳ 미판정 [title] | 로그 [question] | `HandleUserEnterEvent` 이벤트 핸들러에서 `_UserService`를 통해 사용자가 입장한 `UserId`를 받아 `log()` 함수로 "User [UserId] entered" 형식의 정보 로그를 출력하는 스크립트를 작성해줘 [answer] | `HandleUserEnterEvent` 이벤트 핸들러에서 `event.UserId` 프로퍼티를 통해 사용자 식별자를 추출하고, 이를 `log()` 함수에 전달하여 원하는 형식의 문자열을 출력할 수 있습니다. ```lua Event Handler: [service: UserService] HandleUserEnterEvent(UserEnterEvent event) { local UserId = event.UserId log("User [" .. UserId .. "] entered") } ``` [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 콘솔에는 플레이 테스트 도중에 발생한 정보, 경고, 오류 로그가 출력됩니다. | 번호 | 설명 | | :---: | --- | | | 콘솔 창에 남아있는 로그를 삭제합니다. Clear 오른쪽에 확장 버튼을 눌러 Clear on Play를 활성화하고, 시작 버튼을 누르면 콘솔 창에 남아있던 로그를 자동으로 삭제하고 시작합니다. | | | 버튼을 누르면 중복 로그를 하나로 합쳐줍니다. 영역에 합쳐진 총 개수가 나옵니다. | | | 실행 공간(Client / Server) 별로 로그를 모아볼 수 있습니다. | | |

[task] | instruction_following [pass] | ⏳ 미판정 [title] | 기본 UI 컴포넌트 [question] | TextInputEndEditEvent와 TextInputValueChangeEvent의 발생 시점 및 활용 목적을 2행 3열의 표로 정리하세요. [answer] | | 구분 | 발생 시점 | 활용 목적 | | :--- | :--- | :--- | | **TextInputEndEditEvent** | 텍스트 입력이 완료되었을 때 발생 | 완전한 문장이나 단어를 한 번에 받아서 처리할 경우 사용 | | **TextInputValueChangeEvent** | 입력값이 변경될 때마다 발생 | 입력되는 각 순간을 실시간으로 감지하여 처리할 경우 사용 | [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | [TextInputComponent](/apiReference/Components/TextInputComponent)은 텍스트 입력을 받을 수 있는 컴포넌트입니다. 주요 프로퍼티는 다음과 같습니다. | 번호 | 항목 | 설명 | | :---: | :---: | --- | | | AutoClear | True 이면 텍스트 입력 후 입력 영역을 자동으로 초기화합니다. | | | ContentType | 입력할 수 있는 텍스트 유형을 지정합니다. <ul> <li>**Standard** : 모든 입력을 허용합니다. </li>

[task] | instruction_following [pass] | ⏳ 미판정 [title] | 월드 워프하기 [question] | 이전 월드로 데이터를 전달하기 위해 `WarpUserToWorldAndWait()` 호출 시 필요한 두 가지 인자 외에, 데이터를 직렬화하는 `UtilLogic` 메서드 이름과 그 매개변수를 3문장 이내로 설명하세요. [answer] | 데이터를 직렬화하는 `UtilLogic` 메서드의 이름은 `TableToString`입니다. 이 메서드는 직렬화할 테이블 객체를 매개변수로 전달받아 문자열로 변환합니다. 변환된 문자열은 `WarpUserToWorldAndWait()`의 세 번째 인자로 사용되어 다른 월드로 데이터를 전송합니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 유저의 데이터를 이동할 월드로 전달할 수 있습니다. 1. 새로운 스크립트 컴포넌트를 생성합니다. 2. 맵에 포탈을 추가한 뒤, 만든 스크립트 컴포넌트를 포탈에 추가합니다. 3. 아래와 같이 `WarpUserToWorldAndWait()`와 `UtilLogic`을 활용해 다른 월드에 데이터를 전달할 수 있게 작성합니다. ```lua Property: [Sync] string WorldId = "" Method: [server] void Warp(string userId)

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