[task] | code [pass] | ⏳ 미판정 [title] | 스프라이트 색상을 픽셀 단위로 설정하기 [question] | OnUpdate 메서드에서 _UtilLogic:RandomDouble() 을 활용해 PixelRendererComponent 의 알파 값을 주기적으로 변경하는 [client only] 스크립트를 작성해줘 [answer] | `OnUpdate`에서 `_UtilLogic:RandomDouble()`을 사용하여 `PixelRendererComponent`의 알파 값을 주기적으로 변경하는 스크립트는 다음과 같이 작성할 수 있습니다. 참고로, `PixelRendererComponent`는 `FillColor` 메서드를 통해 전체 색상을 변경할 수 있으며, 이 메서드의 인자로 전달되는 `Color` 객체의 4번째 파라미터가 알파 값입니다. `OnUpdate`는 매 프레임마다 호출되므로, 매 프레임마다 랜덤한 알파 값을 생성하여 `FillColor`를 호출하면 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | `ResetWithColors` 함수를 활용해 스프라이트의 크기와 픽셀들의 색상을 변경할 수 있습니다. 예시 코드는 아래와 같습니다. 버튼을 만들고, 함수를 추가한 다음 버튼에 **ButtonClickEvent**를 연결하는 것은 위의 예제와 동일합니다. ```lua [client only] void ResetColorsTest() { local newWidth = _UtilLogic:RandomIntegerRange(8, 32) local newHeight = _UtilLogic:RandomIntegerRange(
[task] | two_turn [pass] | ⏳ 미판정 [title] | 로그 [question] | 콘솔 창에서 출력되는 정보, 경고, 오류 로그를 효과적으로 확인하고 관리하는 방법에는 어떤 것이 있나요? [answer] | 메이플스토리 월드의 콘솔 창에서 정보, 경고, 오류 로그를 효과적으로 확인하고 관리하기 위해 다음 기능들을 활용할 수 있습니다. **1. 로그 필터링 및 표시 제어** * **심각도별 필터:** 정보, 경고, 오류 로그의 총 개수를 확인하는 버튼을 활성화하거나 해제하여 해당 유형만 선택적으로 표시하거나 숨길 수 있습니다. * **실행 공간별 필터:** Client(클라이언트)와 Server(서버)별로 로그를 모아볼 수 있어 특정 실행 공간에서 발생한 문제를 빠르게 파악할 수 있습니다. * **현재 스크립트 전용 보기:* [followup] | 스크립트 에러 로그를 선택했을 때 해당 코드의 특정 라인으로 이동하거나, 엔티티 로그일 때 Hierarchy에서 해당 엔티티를 선택하는 구체적인 조작 절차는 무엇인가요? [followup_answer] | 참고 문서에 따르면, 스크립트 에러 로그와 엔티티 로그를 선택했을 때의 구체적인 조작 절차는 다음과 같습니다. **1. 스크립트 에러 로그의 경우** 1. 콘솔 창(빌드 콘솔 또는 일반 콘솔)의 로그 목록에서 특정 스크립트 에러 로그를 **선택**합니다. 2. 선택된 로그에 대한 **자세한 정보** 영역에서 **링크**가 표시되면, 해당 **링크를 누릅니다**. 3. 링크를 누르면 에러가 발생한 **스크립트의 해당 라인으로 즉시 이동**합니다. **2. 엔티티 로그의 경우** 1. 콘솔 창(빌드 콘솔 또는 일반 콘솔)의 [scores] | [judge_reason] | [source_doc] | 콘솔에는 플레이 테스트 도중에 발생한 정보, 경고, 오류 로그가 출력됩니다. | 번호 | 설명 | | :---: | --- | | | 콘솔 창에 남아있는 로그를 삭제합니다. Clear 오른쪽에 확장 버튼을 눌러 Clear on Play를 활성화하고, 시작 버튼을 누르면 콘솔 창에 남아있던 로그를 자동으로 삭제하고 시작합니다. | | | 버튼을 누르면 중복 로그를 하나로 합쳐줍니다. 영역에 합쳐진 총 개수가 나옵니다. | | | 실행 공간(Client / Server) 별로 로그를 모아볼 수 있습니다. | | |
[task] | instruction_following [pass] | ⏳ 미판정 [title] | 월드 워프하기 [question] | 공개 출시 상태가 아닌 월드 간 이동 가능 여부에 대한 조건을 단계별 번호 목록으로 3단계 이내로 요약하세요. [answer] | 공개 출시 상태가 아닌 월드 간 이동 가능 여부는 다음과 같습니다. 1. 현재 월드와 이동할 월드 모두 공개 상태여야 이동이 가능합니다. 2. 현재 월드가 비공개이고 이동할 월드가 공개 상태라면 이동이 가능합니다. 3. 이동할 월드가 비공개 상태이거나, 현재 월드와 이동할 월드 모두 비공개 상태라면 이동이 불가능합니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 TeleportService의 함수를 활용해 월드에서 다른 월드로 이동할 수 있습니다. # 다른 월드로 이동하기 TeleportService는 월드의 유저를 특정 장소로 이동시킬 때 사용할 수 있을 뿐 아니라, 접속 중인 월드에서 다른 월드로 이동시킬 수 있습니다. 접속 중인 월드와 이동할 월드가 공개 출시된 상태여야 이동이 가능합니다. 이 특성으로 인해 제작 중에는 워프를 테스트할 수 없습니다. | 현재 월드 | 이동할 월드 | 워프 여부 | | --- | --- | --- | | 공개 | 공개 | *
[task] | instruction_following [pass] | ⏳ 미판정 [title] | 월드 워프하기 [question] | `HandlePortalUseEvent` 핸들러 내부에서 `self:Warp` 메서드를 호출하는 코드만 출력하고, 각 줄의 의미를 주석으로 설명하세요. [answer] | ```lua Event Handler: [self] HandlePortalUseEvent(PortalUseEvent event) { -- 포탈 사용 이벤트가 발생했을 때 실행되는 핸들러 local PortalUser = event.PortalUser -- 이벤트에서 전달받은 포탈을 사용한 유저 정보 self:Warp(PortalUser.Name) -- 해당 유저의 이름을 인자로 받아 Warp 메서드를 호출하여 다른 월드로 이동시킴 } ``` [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 TeleportService의 함수를 활용해 월드에서 다른 월드로 이동할 수 있습니다. # 다른 월드로 이동하기 TeleportService는 월드의 유저를 특정 장소로 이동시킬 때 사용할 수 있을 뿐 아니라, 접속 중인 월드에서 다른 월드로 이동시킬 수 있습니다. 접속 중인 월드와 이동할 월드가 공개 출시된 상태여야 이동이 가능합니다. 이 특성으로 인해 제작 중에는 워프를 테스트할 수 없습니다. | 현재 월드 | 이동할 월드 | 워프 여부 | | --- | --- | --- | | 공개 | 공개 | *
[task] | single_turn [pass] | ⏳ 미판정 [title] | 로그 [question] | 로그와 디버그 기능을 함께 사용할 때 스크립트 오류 해결에 어떤 장점이 있나요? [answer] | 로그와 디버그 기능을 함께 사용하면 스크립트 오류를 보다 빠르고 정확하게 해결할 수 있습니다. 스크립트를 작성하고 플레이 테스트를 하는 과정에서 의도대로 작동하지 않는 경우가 많기 때문에, 로그를 적절히 활용하여 월드의 문제점을 신속하게 파악하고 수정할 수 있습니다. 이를 통해 시행착오를 줄이고 보다 효율적으로 스크립트를 작성하는 것이 가능합니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 스크립트를 작성하고 플레이 테스트를 하다 보면 크리에이터의 생각대로 단번에 잘 작동하는 경우는 많지 않습니다. 크리에이터는 스크립트에 로그를 적절히 활용해 월드의 문제점을 보다 빠르게 파악하고 수정할 수 있습니다. 로그를 활용하여 시행착오를 줄이고 보다 효율적으로 스크립트를 작성해봅시다. > **더 알아보기** > 로그와 함께 디버그 기능을 적절히 활용하면 스크립트 오류를 보다 빠르고 정확하게 해결할 수 있습니다. > [스크립트 디버그](https://mod-developers.nexon.com/docs/?postId=202)도
[task] | single_turn [pass] | ⏳ 미판정 [title] | 로그 [question] | 로그를 적절히 활용하지 않으면 스크립트 작성 과정에서 어떤 비효율이 발생할 수 있나요? [answer] | 로그를 적절히 활용하지 않으면 스크립트가 의도한 대로 작동하지 않을 때 문제점을 빠르게 파악하기 어려워집니다. 이로 인해 시행착오가 늘어날 수 있으며, 스크립트를 작성하고 수정하는 과정의 효율이 떨어집니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 스크립트를 작성하고 플레이 테스트를 하다 보면 크리에이터의 생각대로 단번에 잘 작동하는 경우는 많지 않습니다. 크리에이터는 스크립트에 로그를 적절히 활용해 월드의 문제점을 보다 빠르게 파악하고 수정할 수 있습니다. 로그를 활용하여 시행착오를 줄이고 보다 효율적으로 스크립트를 작성해봅시다. > **더 알아보기** > 로그와 함께 디버그 기능을 적절히 활용하면 스크립트 오류를 보다 빠르고 정확하게 해결할 수 있습니다. > [스크립트 디버그](https://mod-developers.nexon.com/docs/?postId=202)도
[task] | single_turn [pass] | ⏳ 미판정 [title] | 스프라이트 색상을 픽셀 단위로 설정하기 [question] | PixelRendererComponent의 FillColor를 호출했는데 스프라이트 색상이 바뀌지 않고 여전히 원래 색상 그대로인데 원인이 뭘까요? [answer] | `PixelRendererComponent`의 `FillColor` 함수를 호출했는데 스프라이트 색상이 변경되지 않는 가장 흔한 원인은 **스프라이트에 이미 특정 색상 값이 지정되어 있을 경우, `FillColor`가 그 위에 덮어쓰지 못하는 동작** 때문일 수 있습니다. 참고 문서에서 제공된 정보와 mLua 스크립트 규칙에 기반하여, `FillColor`가 제대로 작동하지 않을 때 고려해야 할 기술적 요인과 해결 방법을 설명합니다. ### 1. `FillColor`의 동작 원리와 한계 문서에 따르면 `FillColor`는 스프 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | `ResetWithColors` 함수를 활용해 스프라이트의 크기와 픽셀들의 색상을 변경할 수 있습니다. 예시 코드는 아래와 같습니다. 버튼을 만들고, 함수를 추가한 다음 버튼에 **ButtonClickEvent**를 연결하는 것은 위의 예제와 동일합니다. ```lua [client only] void ResetColorsTest() { local newWidth = _UtilLogic:RandomIntegerRange(8, 32) local newHeight = _UtilLogic:RandomIntegerRange(
[task] | instruction_following [pass] | ⏳ 미판정 [title] | 월드 워프하기 [question] | `GetWarpRecord()` 함수가 nil을 반환하는 경우와 그렇지 않은 경우를 구분하는 조건문을 포함하는 3문장 이내의 설명을 작성하세요. [answer] | `GetWarpRecord()` 함수는 유저가 워프로 입장한 경우 워프 기록을 반환하고, 일반적인 방법으로 입장한 경우 nil을 반환합니다. 따라서 반환 값이 nil인지 확인하는 조건문을 통해 워프 입장과 일반 입장을 구분할 수 있습니다. nil이 아닌 경우 기록에서 이전 월드 정보를 조회하여 추가적인 로직을 실행할 수 있습니다. [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] | GetPixels 함수로 가져온 픽셀 데이터를 다른 스프라이트에 바로 적용할 때 SetPixels를 어떻게 호출해야 하나요? [answer] | `GetPixels` 함수로 가져온 픽셀 데이터는 `SetPixels` 메서드를 통해 다른 스프라이트에 직접 적용할 수 있습니다. 호출 방식은 대상 엔티티의 `PixelRendererComponent`를 참조한 뒤 `SetPixels` 메서드에 `GetPixels`에서 반환받은 값을 인수로 전달하는 것입니다. 아래는 버튼 클릭 시 픽셀 데이터를 한 스프라이트에서 가져와 다른 스프라이트에 적용하는 mLua 코드 예제입니다. ```lua Method: [client only] void ApplyPixels() { -- sel [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | `GetPixels` 함수를 활용하면 스프라이트 전체의 픽셀 값을 모두 받아올 수 있습니다. 예시 코드는 아래와 같습니다. 버튼을 만들고, 함수를 추가한 다음 버튼에 **ButtonClickEvent**를 연결하는 것은 위의 예제와 동일합니다. ```lua [client only] void GetPixelsTest() { -- GetPixels을 사용해 SetPixelTest 전체의 픽셀 값을 받아옵니다. local getPixels = self.Entity.PixelRendererComponent:GetPixels
[task] | code [pass] | ⏳ 미판정 [title] | 스프라이트 색상을 픽셀 단위로 설정하기 [question] | PixelRendererComponent의 GetPixel로 받은 색상 값을 기반으로 다른 Entity의 PixelRendererComponent에 SetPixel을 실행하여 픽셀을 복사하는 스크립트를 작성해줘. [answer] | PixelRendererComponent의 `GetPixel` 함수로 특정 좌표의 색상 정보를 가져와서, 다른 Entity의 `PixelRendererComponent`에 `SetPixel` 함수로 해당 색상을 다시 그려서 픽셀을 복사하는 스크립트입니다. 아래 예제는 `SourceEntity`에서 픽셀을 가져와서 `TargetEntity`에 복사하는 구조입니다. ```lua Property: [None] Entity SourceEntity = /maps/map01/SetPixelTest [None] [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] | instruction_following [pass] | ⏳ 미판정 [title] | 월드 워프하기 [question] | `WarpUserToWorldAndWait()` 함수 호출 시 필요한 인자 3가지를 표로 정리해서 설명하세요. [answer] | `WarpUserToWorldAndWait()` 함수를 호출할 때 필요한 인자 3가지는 다음과 같습니다. | 인자 | 타입 | 설명 | | :--- | :--- | :--- | | `userId` | `string` | 이동시킬 유저의 ID | | `worldId` | `string` | 이동할 대상 월드의 ID | | `serializedData` | `string` | 이동할 월드에서 `GetWarpRecord()`로 접근하여 사용할 데이터 (시리얼라이즈된 문자열) | **참고:** * 세 번째 인자인 데이터는 선택적이지 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 TeleportService의 함수를 활용해 월드에서 다른 월드로 이동할 수 있습니다. # 다른 월드로 이동하기 TeleportService는 월드의 유저를 특정 장소로 이동시킬 때 사용할 수 있을 뿐 아니라, 접속 중인 월드에서 다른 월드로 이동시킬 수 있습니다. 접속 중인 월드와 이동할 월드가 공개 출시된 상태여야 이동이 가능합니다. 이 특성으로 인해 제작 중에는 워프를 테스트할 수 없습니다. | 현재 월드 | 이동할 월드 | 워프 여부 | | --- | --- | --- | | 공개 | 공개 | *
[task] | single_turn [pass] | ⏳ 미판정 [title] | 로그 [question] | 빌드 콘솔과 일반 콘솔의 차이점 중, 현재 작성 중인 특정 스크립트에서 발생한 로그만 필터링하여 볼 수 있는 기능이 있는 곳은 어느 쪽인가요? [answer] | 빌드 콘솔입니다. 빌드 콘솔에는 **Current scrip Only** 버튼이 제공되어, 이 버튼을 활성화하면 현재 작성 중인 스크립트에서 발생한 로그만 모아볼 수 있습니다. 일반 콘솔에는 이러한 특정 스크립트 필터링 기능이 없으며, 실행 공간(Client / Server)별로만 로그를 모아볼 수 있습니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 콘솔에는 플레이 테스트 도중에 발생한 정보, 경고, 오류 로그가 출력됩니다. | 번호 | 설명 | | :---: | --- | | | 콘솔 창에 남아있는 로그를 삭제합니다. Clear 오른쪽에 확장 버튼을 눌러 Clear on Play를 활성화하고, 시작 버튼을 누르면 콘솔 창에 남아있던 로그를 자동으로 삭제하고 시작합니다. | | | 버튼을 누르면 중복 로그를 하나로 합쳐줍니다. 영역에 합쳐진 총 개수가 나옵니다. | | | 실행 공간(Client / Server) 별로 로그를 모아볼 수 있습니다. | | |
[task] | single_turn [pass] | ⏳ 미판정 [title] | 스프라이트 색상을 픽셀 단위로 설정하기 [question] | GetPixels 함수를 호출했는데 아무 값도 반환되지 않거나 오류가 나는 경우, PixelRendererComponent가 제대로 연결되지 않은 것이 원인일 수 있나요? [answer] | 네, `PixelRendererComponent`가 대상 엔티티에 제대로 연결(컴포넌트 부착)되어 있지 않다면 `GetPixels` 함수 호출 시 오류가 발생하거나 값이 반환되지 않을 수 있습니다. `GetPixels`는 특정 엔티티의 `PixelRendererComponent`를 통해 스프라이트의 픽셀 데이터를 직접 읽어오는 함수이므로, 해당 엔티티에 `PixelRendererComponent`가 존재하지 않으면 접근 자체가 불가능합니다. 따라서 해당 엔티티에 픽셀 렌더러 컴포넌트가 정상적으로 추가되어 있는지 먼저 확인해야 합니 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | `GetPixels` 함수를 활용하면 스프라이트 전체의 픽셀 값을 모두 받아올 수 있습니다. 예시 코드는 아래와 같습니다. 버튼을 만들고, 함수를 추가한 다음 버튼에 **ButtonClickEvent**를 연결하는 것은 위의 예제와 동일합니다. ```lua [client only] void GetPixelsTest() { -- GetPixels을 사용해 SetPixelTest 전체의 픽셀 값을 받아옵니다. local getPixels = self.Entity.PixelRendererComponent:GetPixels
[task] | code [pass] | ⏳ 미판정 [title] | 스프라이트 색상을 픽셀 단위로 설정하기 [question] | 클라이언트 전용에서 PixelRendererComponent의 GetPixels()로 픽셀을 읽어온 후, 같은 엔티티의 PixelRendererComponent에 SetPixels()로 다시 설정하는 테스트용 스크립트를 작성해줘 [answer] | `GetPixels()`와 `SetPixels()`는 클라이언트 공간에서 동작하므로, 해당 메서드를 포함하는 스크립트 블록은 `[client only]`로 선언해야 합니다. 버튼 클릭 시점에 픽셀을 읽어와 같은 엔티티의 `PixelRendererComponent`에 다시 설정하는 테스트용 스크립트는 다음과 같습니다. ```lua Method: [client only] void TestPixelCopy() { -- 현재 엔티티의 PixelRendererComponent에서 전체 픽셀 값을 가져옵니다. local pix [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | `GetPixels` 함수를 활용하면 스프라이트 전체의 픽셀 값을 모두 받아올 수 있습니다. 예시 코드는 아래와 같습니다. 버튼을 만들고, 함수를 추가한 다음 버튼에 **ButtonClickEvent**를 연결하는 것은 위의 예제와 동일합니다. ```lua [client only] void GetPixelsTest() { -- GetPixels을 사용해 SetPixelTest 전체의 픽셀 값을 받아옵니다. local getPixels = self.Entity.PixelRendererComponent:GetPixels
[task] | instruction_following [pass] | ⏳ 미판정 [title] | 월드 워프하기 [question] | `warpRecord`에서 접근 가능한 필드와 각각의 의미를 2열 3행의 표로 정리하세요. [answer] | 제공된 참고 문서에는 `warpRecord`에서 접근 가능한 필드로 `CurrentWorldId`와 `PreviousWorldId` 두 가지만 명시되어 있습니다. 문서에 언급되지 않은 다른 필드는 확인할 수 없습니다. 요청하신 2열 3행의 표로 정리하면 다음과 같습니다. | 필드명 | 의미 | | :--- | :--- | | `CurrentWorldId` | 유저가 현재 입장한 월드의 ID | | `PreviousWorldId` | 유저가 워프로 이동하기 전까지 있던 이전 월드의 ID | | *(정보 없음)* | 참고 문서에 추 [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] | 플레이 테스트 중 콘솔에 쌓인 로그를 자동으로 지우기 위해서는 **Clear on Play** 옵션을 활성화해야 합니다. 활성화 위치는 다음과 같습니다. 1. 콘솔 창 상단의 **Clear** 버튼 오른쪽에 있는 확장 버튼을 누릅니다. 2. 나타나는 메뉴에서 **Clear on Play**를 활성화합니다. 이렇게 설정한 후 시작 버튼을 누르면, 플레이 테스트가 시작될 때 콘솔 창에 남아있던 로그들이 자동으로 삭제되고 새 로그 출력이 시작됩니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 콘솔에는 플레이 테스트 도중에 발생한 정보, 경고, 오류 로그가 출력됩니다. | 번호 | 설명 | | :---: | --- | | | 콘솔 창에 남아있는 로그를 삭제합니다. Clear 오른쪽에 확장 버튼을 눌러 Clear on Play를 활성화하고, 시작 버튼을 누르면 콘솔 창에 남아있던 로그를 자동으로 삭제하고 시작합니다. | | | 버튼을 누르면 중복 로그를 하나로 합쳐줍니다. 영역에 합쳐진 총 개수가 나옵니다. | | | 실행 공간(Client / Server) 별로 로그를 모아볼 수 있습니다. | | |
[task] | single_turn [pass] | ⏳ 미판정 [title] | 로그 [question] | 콘솔에서 스크립트 에러 로그를 클릭했을 때 해당 코드의 특정 라인으로 이동하는 대신, Hierarchy 뷰에서 특정 대상이 선택되는 경우는 어떤 유형의 로그일 때인가요? [answer] | 콘솔에서 특정 로그를 선택했을 때 Hierarchy 뷰에서 해당 대상이 선택되는 경우는 **엔티티(Entitiy)와 관련된 로그**일 때입니다. 반대로, 스크립트 에러일 경우에는 해당 로그의 링크를 누르면 스크립트 에디터에서 오류가 발생한 특정 라인으로 이동합니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 콘솔에는 플레이 테스트 도중에 발생한 정보, 경고, 오류 로그가 출력됩니다. | 번호 | 설명 | | :---: | --- | | | 콘솔 창에 남아있는 로그를 삭제합니다. Clear 오른쪽에 확장 버튼을 눌러 Clear on Play를 활성화하고, 시작 버튼을 누르면 콘솔 창에 남아있던 로그를 자동으로 삭제하고 시작합니다. | | | 버튼을 누르면 중복 로그를 하나로 합쳐줍니다. 영역에 합쳐진 총 개수가 나옵니다. | | | 실행 공간(Client / Server) 별로 로그를 모아볼 수 있습니다. | | |
[task] | instruction_following [pass] | ⏳ 미판정 [title] | 월드 워프하기 [question] | 사용자가 워프로 입장했는지 확인하고 이전 월드 ID를 출력하는 `HandleUserEnterEvent` 함수의 코드만 출력하고 설명은 주석으로 작성하세요. [answer] | ```lua Event Handler: [server only] [service: UserService] HandleUserEnterEvent(UserEnterEvent event) { -- 이벤트에서 전달받은 UserId를 추출합니다. local UserId = event.UserId -- 해당 유저의 워프 기록을 TeleportService에서 조회합니다. local warpRecord = _TeleportService:GetWarpRecord(UserId) -- 워프 기록이 nil이면 일 [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] | 출시된 월드에서 콘솔 로그를 텍스트 파일로 저장할 때, 파일은 `C:\Users\사용자명\AppData\LocalLow\nexon\MapleStory Worlds\ConsoleLogs\월드ID` 경로에 저장됩니다. 여기서 `사용자명`은 현재 로그인한 Windows 사용자 계정 이름이고, `월드ID`는 해당 출시된 월드의 고유 식별자입니다. 콘솔 창 상단의 로그 저장 버튼을 누르면 이 경로에 `.txt` 파일로 로그가 백업됩니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 콘솔에는 플레이 테스트 도중에 발생한 정보, 경고, 오류 로그가 출력됩니다. | 번호 | 설명 | | :---: | --- | | | 콘솔 창에 남아있는 로그를 삭제합니다. Clear 오른쪽에 확장 버튼을 눌러 Clear on Play를 활성화하고, 시작 버튼을 누르면 콘솔 창에 남아있던 로그를 자동으로 삭제하고 시작합니다. | | | 버튼을 누르면 중복 로그를 하나로 합쳐줍니다. 영역에 합쳐진 총 개수가 나옵니다. | | | 실행 공간(Client / Server) 별로 로그를 모아볼 수 있습니다. | | |
[task] | code [pass] | ⏳ 미판정 [title] | 로그 [question] | OnUpdate 메서드에서 매 프레임마다 self.Entity.TransformComponent.Position 값을 log 함수로 출력하는 스크립트를 작성해줘 [answer] | ```lua Property: [None] number Speed = 10 Method: [server only] void OnUpdate(number delta) { log(self.Entity.TransformComponent.Position) } ``` [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 스크립트를 작성하고 플레이 테스트를 하다 보면 크리에이터의 생각대로 단번에 잘 작동하는 경우는 많지 않습니다. 크리에이터는 스크립트에 로그를 적절히 활용해 월드의 문제점을 보다 빠르게 파악하고 수정할 수 있습니다. 로그를 활용하여 시행착오를 줄이고 보다 효율적으로 스크립트를 작성해봅시다. > **더 알아보기** > 로그와 함께 디버그 기능을 적절히 활용하면 스크립트 오류를 보다 빠르고 정확하게 해결할 수 있습니다. > [스크립트 디버그](https://mod-developers.nexon.com/docs/?postId=202)도
[task] | single_turn [pass] | ⏳ 미판정 [title] | 로그 [question] | 로그 기능을 사용할 때 크리에이터가 주의해야 할 점이나 활용 팁이 있나요? [answer] | 제공된 참고 문서에는 로그 기능을 사용할 때 크리에이터가 특별히 주의해야 할 점이나 구체적인 활용 팁(예: 로그 레벨 구분, 과도한 로그 출력 방지 등)에 대한 내용이 포함되어 있지 않습니다. 문서에서 언급하는 핵심 사항은 다음과 같습니다. 1. **문제 파악 목적**: 스크립트가 생각대로 작동하지 않을 때, 로그를 적절히 활용하여 월드의 문제점을 보다 빠르게 파악하고 수정할 수 있습니다. 2. **시행착오 감소**: 로그를 활용하여 시행착오를 줄이고 보다 효율적으로 스크립트를 작성할 수 있습니다. 3. **디버그 기능과의 병행 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 스크립트를 작성하고 플레이 테스트를 하다 보면 크리에이터의 생각대로 단번에 잘 작동하는 경우는 많지 않습니다. 크리에이터는 스크립트에 로그를 적절히 활용해 월드의 문제점을 보다 빠르게 파악하고 수정할 수 있습니다. 로그를 활용하여 시행착오를 줄이고 보다 효율적으로 스크립트를 작성해봅시다. > **더 알아보기** > 로그와 함께 디버그 기능을 적절히 활용하면 스크립트 오류를 보다 빠르고 정확하게 해결할 수 있습니다. > [스크립트 디버그](https://mod-developers.nexon.com/docs/?postId=202)도
[task] | single_turn [pass] | ⏳ 미판정 [title] | 로그 [question] | 반복적으로 출력되는 동일한 로그를 하나로 묶어 확인하기 위해 눌러야 하는 버튼의 기능과, 그 결과로 표시되는 수치 의미는 무엇인가요? [answer] | 반복적으로 출력되는 동일한 로그를 하나로 묶어 확인하기 위해 눌러야 하는 버튼은 **중복 로그를 하나로 합쳐주는 기능**을 수행합니다. 이 버튼을 누르면 콘솔 창에 표시되는 중복 로그가 하나의 항목으로 통합되며, 그 결과로 표시되는 수치는 **합쳐진 로그의 총 개수**를 의미합니다. 즉, 동일한 내용이 몇 번 반복 출력되었는지 그 횟수를 확인할 수 있습니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 콘솔에는 플레이 테스트 도중에 발생한 정보, 경고, 오류 로그가 출력됩니다. | 번호 | 설명 | | :---: | --- | | | 콘솔 창에 남아있는 로그를 삭제합니다. Clear 오른쪽에 확장 버튼을 눌러 Clear on Play를 활성화하고, 시작 버튼을 누르면 콘솔 창에 남아있던 로그를 자동으로 삭제하고 시작합니다. | | | 버튼을 누르면 중복 로그를 하나로 합쳐줍니다. 영역에 합쳐진 총 개수가 나옵니다. | | | 실행 공간(Client / Server) 별로 로그를 모아볼 수 있습니다. | | |
[task] | code [pass] | ⏳ 미판정 [title] | 스프라이트 색상을 픽셀 단위로 설정하기 [question] | PixelRendererComponent의 GetPixel 메서드를 사용해 특정 좌표의 색상을 가져와 TextComponent의 Text 속성에 문자열로 표시하는 스크립트를 작성해줘. [answer] | PixelRendererComponent의 `GetPixel` 메서드는 특정 좌표의 색상(Color)을 반환하며, 이를 TextComponent의 `Text` 속성에 직접 대입할 수는 없습니다. `Text` 속성은 문자열(string) 타입이기 때문에, 색상 정보를 문자열로 변환하여 표시해야 합니다. 참고 문서에는 `GetPixel`로 받은 색상 값을 `SetPixel`에 전달하는 예제만 제시되어 있고, 색상 객체를 문자열로 변환하는 구체적인 API(예: `ToString()`)는 명시되어 있지 않습니다. 따라서 아래 예제는 Lu [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] | 버튼 클릭 이벤트(ButtonClickEvent)를 통해 스프라이트의 픽셀을 읽어와서 화면에 표시하는 로직을 구현하려면 어떤 절차로 코드를 작성해야 하나요? [answer] | 버튼 클릭 이벤트로 스프라이트 픽셀을 읽어와서 다른 곳에 표시하는 로직은 다음과 같은 절차로 작성합니다. 1. **클라이언트 전용 메서드 정의**: 픽셀 데이터를 읽고 표시하는 로직은 클라이언트에서 실행되어야 하므로 `[client only]` 속성을 가진 메서드를 만듭니다. 2. **픽셀 데이터 읽기**: `self.Entity.PixelRendererComponent:GetPixels()` 함수를 호출하여 현재 엔티티의 스프라이트 픽셀 값을 배열 형태로 받아옵니다. 3. **픽셀 데이터 표시**: 받아온 픽셀 데이터를 다 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | `GetPixels` 함수를 활용하면 스프라이트 전체의 픽셀 값을 모두 받아올 수 있습니다. 예시 코드는 아래와 같습니다. 버튼을 만들고, 함수를 추가한 다음 버튼에 **ButtonClickEvent**를 연결하는 것은 위의 예제와 동일합니다. ```lua [client only] void GetPixelsTest() { -- GetPixels을 사용해 SetPixelTest 전체의 픽셀 값을 받아옵니다. local getPixels = self.Entity.PixelRendererComponent:GetPixels
[task] | code [pass] | ⏳ 미판정 [title] | 스프라이트 색상을 픽셀 단위로 설정하기 [question] | 클라이언트 전용으로 PixelRendererComponent의 GetPixels()를 사용하여 픽셀 데이터를 추출하고, 이를 self.PRCheck 엔티티의 PixelRendererComponent에 SetPixels()로 적용하는 스크립트를 작성해줘 [answer] | `GetPixels()` 함수를 사용하면 특정 엔티티의 픽셀 렌더러에 설정된 모든 픽셀 데이터를 배열 형태로 받아올 수 있습니다. 추출한 데이터는 다른 엔티티의 `PixelRendererComponent`에 `SetPixels()` 메서드를 통해 적용할 수 있습니다. 요청하신 기능을 수행하는 스크립트는 아래 코드와 같습니다. ```lua [client only] void CopyPixels() { -- 현재 엔티티(self.Entity)의 PixelRendererComponent에서 픽셀 데이터를 추출합니다. lo [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | `GetPixels` 함수를 활용하면 스프라이트 전체의 픽셀 값을 모두 받아올 수 있습니다. 예시 코드는 아래와 같습니다. 버튼을 만들고, 함수를 추가한 다음 버튼에 **ButtonClickEvent**를 연결하는 것은 위의 예제와 동일합니다. ```lua [client only] void GetPixelsTest() { -- GetPixels을 사용해 SetPixelTest 전체의 픽셀 값을 받아옵니다. local getPixels = self.Entity.PixelRendererComponent:GetPixels
[task] | single_turn [pass] | ⏳ 미판정 [title] | 스프라이트 색상을 픽셀 단위로 설정하기 [question] | 스프라이트의 픽셀 값을 전체적으로 복사해서 다른 엔티티에 붙이고 싶을 때, GetPixels와 SetPixels를 어떻게 조합해야 하나요? [answer] | 스프라이트의 픽셀 값을 전체적으로 복사하여 다른 엔티티에 적용하려면 `GetPixels`와 `SetPixels` 함수를 조합하여 사용합니다. 1. **원본 스프라이트에서 픽셀 값 가져오기**: 원본 엔티티의 `PixelRendererComponent`에 있는 `GetPixels()` 함수를 호출합니다. 이 함수는 스프라이트 전체의 픽셀 데이터 배열을 반환합니다. 2. **타겟 스프라이트에 픽셀 값 적용하기**: 가져온 픽셀 데이터 배열을 타겟 엔티티의 `PixelRendererComponent`에 있는 `SetPixels()` [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | `GetPixels` 함수를 활용하면 스프라이트 전체의 픽셀 값을 모두 받아올 수 있습니다. 예시 코드는 아래와 같습니다. 버튼을 만들고, 함수를 추가한 다음 버튼에 **ButtonClickEvent**를 연결하는 것은 위의 예제와 동일합니다. ```lua [client only] void GetPixelsTest() { -- GetPixels을 사용해 SetPixelTest 전체의 픽셀 값을 받아옵니다. local getPixels = self.Entity.PixelRendererComponent:GetPixels
[task] | single_turn [pass] | ⏳ 미판정 [title] | 스프라이트 색상을 픽셀 단위로 설정하기 [question] | GetPixel 함수를 호출할 때 x, y 좌표를 전달해야 하는지, 아니면 인자 없이 호출하면 자동으로 가장 최근 픽셀 정보가 반환되는지 궁금합니다. [answer] | `GetPixel` 함수를 호출할 때는 반드시 x, y 좌표를 전달해야 합니다. 인자 없이 호출하여 자동으로 가장 최근 픽셀 정보가 반환되는 방식은 아닙니다. 참고 문서의 코드 예제에서 `GetPixel` 함수는 `self.Entity.PixelRendererComponent:GetPixel(self.lastX, self.lastY)` 형태로 호출되며, 특정 좌표(`self.lastX`, `self.lastY`)에 있는 픽셀의 색상을 가져오는 용도로 사용됩니다. 따라서 원하는 위치의 픽셀 색상을 확인하려면 해당 픽셀의 x, y 좌 [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] | 버튼 클릭 시 스프라이트 색상이 랜덤으로 바뀌지 않고 에러가 발생하는데, ButtonClickEvent 연결과 SetAlphaTest 함수 정의 과정에서 흔히 놓치는 부분이 있나요? [answer] | 제공된 문서에 근거하여, 버튼 클릭 시 스프라이트 색상(알파) 변경과 관련된 `ButtonClickEvent` 연결 및 `SetAlphaTest` 함수 정의 과정에서 흔히 놓치는 부분과 올바른 구현 방식을 설명합니다. ### 1. `SetAlphaTest` 함수의 정확한 구현 문서에 따르면, 스프라이트 전체의 알파 값을 변경하려면 `self.Entity.PixelRendererComponent:SetAlpha(value)` 함수를 사용해야 합니다. 이때 주의할 점은 다음과 같습니다. * **컴포넌트 접근 경로:** `Get [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | `SetAlpha` 함수를 활용하면 스프라이트 전체의 알파 값을 변경할 수 있습니다. 예시 코드는 아래와 같습니다. 버튼을 만들고, 함수를 추가한 다음 버튼에 **ButtonClickEvent**를 연결하는 것은 위의 예제와 동일합니다. ```lua [client only] void SetAlphaTest() { local a = _UtilLogic:RandomDouble() -- SetAlpha를 사용하여 스프라이트 전체의 알파 값을 변경합니다. self.Entity.PixelRendererComponent
[task] | instruction_following [pass] | ⏳ 미판정 [title] | 기본 UI 컴포넌트 [question] | UITransformComponent와 TransformComponent의 핵심 차이점을 2문장 이내로 설명하세요. [answer] | UITransformComponent는 UI 엔티티의 위치를 스크린 좌표 기준으로 설정하는 반면, TransformComponent는 월드 좌표를 사용합니다. 또한 UITransformComponent의 UIMode는 Hierarchy 구조상 UI 하위에서는 Screen으로, maps 하위에서는 World로 고정됩니다. [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] | code [pass] | ⏳ 미판정 [title] | 스프라이트 색상을 픽셀 단위로 설정하기 [question] | PixelRendererComponent의 GetPixels()로 픽셀 데이터를 받아오는 것을 확인하고, 해당 데이터를 다른 엔티티의 PixelRendererComponent에 SetPixels()로 전달하는 클라이언트 전용 스크립트를 작성해줘 [answer] | `PixelRendererComponent`의 `GetPixels()` 메서드를 호출하면 해당 스프라이트의 모든 픽셀 데이터를 받아올 수 있습니다. 이 데이터를 다른 엔티티의 `PixelRendererComponent`에 `SetPixels()` 메서드를 사용하여 전달하면, 원본 스프라이트의 색상이 해당 엔티티에 복사되어 표시됩니다. 사용자가 요청한 기능을 구현하기 위해 아래와 같은 스크립트를 작성합니다. 1. **소스 엔티티**: 픽셀 데이터를 가져올 대상 (예: `SpriteSource`) 2. **타겟 엔티티**: 픽셀 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | `GetPixels` 함수를 활용하면 스프라이트 전체의 픽셀 값을 모두 받아올 수 있습니다. 예시 코드는 아래와 같습니다. 버튼을 만들고, 함수를 추가한 다음 버튼에 **ButtonClickEvent**를 연결하는 것은 위의 예제와 동일합니다. ```lua [client only] void GetPixelsTest() { -- GetPixels을 사용해 SetPixelTest 전체의 픽셀 값을 받아옵니다. local getPixels = self.Entity.PixelRendererComponent:GetPixels