← 목록

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

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

[task] | single_turn [pass] | ⏳ 미판정 [title] | 스프라이트 색상을 픽셀 단위로 설정하기 [question] | 픽셀의 특정 위치와 색상 정보를 받아와서 월드에 표시하려면 GetPixel 함수의 매개변수로 어떤 값들을 전달해야 하나요? [answer] | 제공된 참고 문서에는 `GetPixel` 함수를 사용하여 픽셀의 위치와 색상을 받아오는 **방법에 대한 설명**은 있으나, `GetPixel` 함수의 **구체적인 매개변수(인자) 목록이나 반환값 형식**에 대한 정보는 포함되어 있지 않습니다. 따라서 문서에 근거하여 `GetPixel` 함수의 정확한 매개변수를 알려드릴 수 없습니다. 참고로, 문서에는 `ResetWithColors` 함수를 통해 스프라이트의 크기와 픽셀 색상 배열을 설정하는 예시(`self.Entity.PixelRendererComponent:ResetWithCo [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | `SetAlpha` 함수를 활용하면 스프라이트 전체의 알파 값을 변경할 수 있습니다. 예시 코드는 아래와 같습니다. 버튼을 만들고, 함수를 추가한 다음 버튼에 **ButtonClickEvent**를 연결하는 것은 위의 예제와 동일합니다. ```lua [client only] void SetAlphaTest() { local a = _UtilLogic:RandomDouble() -- SetAlpha를 사용하여 스프라이트 전체의 알파 값을 변경합니다. self.Entity.PixelRendererComponent

[task] | single_turn [pass] | ⏳ 미판정 [title] | 스프라이트 색상을 픽셀 단위로 설정하기 [question] | SetAlpha 함수로 스프라이트의 투명도를 조절할 때, 0에서 1 사이의 값을 직접 지정하는 것 말고 랜덤 값으로 변경하려면 어떤 코드를 작성해야 하나요? [answer] | `SetAlpha` 함수를 호출할 때, 인자로 `0`에서 `1` 사이의 랜덤 실수 값을 전달하면 스프라이트의 투명도를 랜덤하게 변경할 수 있습니다. 랜덤 값을 생성하기 위해 `_UtilLogic:RandomDouble()` 함수를 사용합니다. 아래는 버튼 클릭 시 스프라이트의 알파 값을 랜덤하게 변경하는 예시 코드입니다. ```lua [client only] void SetAlphaTest() { -- 0.0에서 1.0 사이의 랜덤 실수 값 생성 local a = _UtilLogic:RandomDouble() [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | `SetAlpha` 함수를 활용하면 스프라이트 전체의 알파 값을 변경할 수 있습니다. 예시 코드는 아래와 같습니다. 버튼을 만들고, 함수를 추가한 다음 버튼에 **ButtonClickEvent**를 연결하는 것은 위의 예제와 동일합니다. ```lua [client only] void SetAlphaTest() { local a = _UtilLogic:RandomDouble() -- SetAlpha를 사용하여 스프라이트 전체의 알파 값을 변경합니다. self.Entity.PixelRendererComponent

[task] | single_turn [pass] | ⏳ 미판정 [title] | 로그 [question] | 콘솔 창에서 확인 가능한 일반 콘솔과 빌드 콘솔은 각각 어떤 용도로 사용되는가요? [answer] | 제공된 참고 문서에는 콘솔 창이 '콘솔'과 '빌드 콘솔'로 나뉘어 있다는 사실만 언급되어 있으며, 두 콘솔의 각각의 구체적 용도나 차이점에 대한 설명은 포함되어 있지 않습니다. 따라서 문서 근거만으로 일반 콘솔과 빌드 콘솔의 개별 용도를 설명할 수 없습니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 로그에 대해 알아보고 월드 제작 과정에서 로그를 효과적으로 활용하는 방법을 살펴봅시다. # 로그 소개 로그(Log)란 월드 제작 중 발생하는 여러 가지 정보나 문제 상황에 대한 기록을 말합니다. 로그를 통해 현재 제작 중인 월드가 의도대로 잘 동작하고 있는지 확인할 수 있습니다. 만약 의도대로 동작하지 않는다면 문제의 원인을 파악하고 해결하는 데 로그를 활용할 수 있습니다. 로그 종류는 로그를 남기는 주체를 기준으로 구분합니다. 시스템 로그와 크리에이터 로그로 나누어 살펴봅시다. ## 시스템 로그 제작

[task] | single_turn [pass] | ⏳ 미판정 [title] | 로그 [question] | 크리에이터 로그가 너무 많이 쌓여서 원하는 로그를 찾기 어려울 때 어떻게 관리하는 것이 좋을까요? [answer] | 크리에이터 로그가 너무 많이 쌓여 원하는 로그를 찾기 어렵다면, **불필요한 로그를 정리해가며 월드를 제작**하는 것이 좋습니다. 월드 제작 과정에서 의도대로 잘 진행되는지 확인하기 위해 로그를 수시로 남기게 되지만, 플레이 테스트 도중 로그가 과도하게 쌓이면 오히려 중요한 로그를 놓칠 수 있기 때문입니다. 따라서 사용하지 않는 로그나 더 이상 확인이 필요 없는 로그는 삭제하거나 주석 처리하여 콘솔 창에 표시되는 로그의 양을 적절히 관리해야 합니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 로그에 대해 알아보고 월드 제작 과정에서 로그를 효과적으로 활용하는 방법을 살펴봅시다. # 로그 소개 로그(Log)란 월드 제작 중 발생하는 여러 가지 정보나 문제 상황에 대한 기록을 말합니다. 로그를 통해 현재 제작 중인 월드가 의도대로 잘 동작하고 있는지 확인할 수 있습니다. 만약 의도대로 동작하지 않는다면 문제의 원인을 파악하고 해결하는 데 로그를 활용할 수 있습니다. 로그 종류는 로그를 남기는 주체를 기준으로 구분합니다. 시스템 로그와 크리에이터 로그로 나누어 살펴봅시다. ## 시스템 로그 제작

[task] | single_turn [pass] | ⏳ 미판정 [title] | 로그 [question] | 메이커에서 시스템 로그의 중요도가 '높음'으로 표시되는 오류와 '중간'인 경고는 어떤 차이가 있나요? [answer] | 메이커에서 시스템 로그의 중요도는 오류와 경고가 월드 동작에 미치는 영향의 심각성 기준으로 구분됩니다. '높음'으로 표시되는 오류(Error)는 해결하지 않으면 확정적으로 문제가 발생하는 상황을 의미합니다. 즉, 이 로그가 출력되면 월드가 의도대로 정상적으로 작동하지 않는 것이 보장되는 상태입니다. 반면, '중간'으로 표시되는 경고(Warning)는 메이커에서 권장하지 않는 방식으로 코드가 작성되었거나, 문제가 발생할 확률이 높은 경우 발생합니다. 오류와 달리 확정적인 장애를 의미하지는 않지만, 잠재적인 문제를 예방하기 위해 수 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 로그에 대해 알아보고 월드 제작 과정에서 로그를 효과적으로 활용하는 방법을 살펴봅시다. # 로그 소개 로그(Log)란 월드 제작 중 발생하는 여러 가지 정보나 문제 상황에 대한 기록을 말합니다. 로그를 통해 현재 제작 중인 월드가 의도대로 잘 동작하고 있는지 확인할 수 있습니다. 만약 의도대로 동작하지 않는다면 문제의 원인을 파악하고 해결하는 데 로그를 활용할 수 있습니다. 로그 종류는 로그를 남기는 주체를 기준으로 구분합니다. 시스템 로그와 크리에이터 로그로 나누어 살펴봅시다. ## 시스템 로그 제작

[task] | single_turn [pass] | ⏳ 미판정 [title] | 스프라이트 색상을 픽셀 단위로 설정하기 [question] | 버튼 클릭 시 SetRandomPixel이 실행되지 않는다면, 컴포넌트 이름이나 메서드 호출 방식 중 어떤 부분을 먼저 확인해야 하는지 오류 원인을 알려주세요. [answer] | 버튼 클릭 시 `SetRandomPixel` 메서드가 실행되지 않는다면, 제공된 문서와 예제 코드 기준으로 아래 두 가지 부분을 우선적으로 확인해야 합니다. ### 1. 메서드 호출 대상의 컴포넌트 이름 확인 버튼 클릭 이벤트 핸들러에서 다른 엔티티(또는 다른 컴포넌트)의 메서드를 호출할 때, **`self`를 직접 사용하는 것이 아니라, 해당 메서드가 포함된 컴포넌트의 이름으로 접근**해야 합니다. * **잘못된 방식 (자신의 메서드처럼 호출):** ```lua self:SetRandomPixel() [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 11. **ButtonClick_SetPixel** 스크립트에 **ButtonClickEvent**도 추가합니다. ```lua Event Handler: HandleButtonClickEvent (ButtonClickEvent event) { -- Parameters local Entity = event.Entity -------------------------------------------------------- -- 버튼을 클릭하면 SetRa

[task] | two_turn [pass] | ⏳ 미판정 [title] | 로그 [question] | 스크립트 작성 시 로그를 활용하여 문제점을 파악하는 기본 방법은 무엇인가요? [answer] | 스크립트 작성 시 로그를 활용하여 문제점을 파악하는 기본 방법은 `log()` 함수를 사용하여 실행 중인 코드의 흐름과 변수 상태를 출력하는 것입니다. 이를 통해 크리에이터가 의도한 대로 스크립트가 작동하는지 확인하고, 오류 발생 위치나 상태 변화를 추적하여 문제를 빠르게 진단할 수 있습니다. 특히 `_TimerService`와 같은 타이머 기능 사용 시, 타이머 설정 시점과 콜백 실행 시점을 각각 로그로 기록하면 타이머가 정상적으로 작동하는지 여부를 쉽게 확인할 수 있습니다. 아래는 타이머 사용 시 로그를 활용하여 실행 흐름을 [followup] | 로그와 함께 스크립트 디버그 기능을 어떻게 결합하여 오류를 빠르게 해결할 수 있나요? [followup_answer] | 참고 문서에 따르면, 로그와 함께 **디버그 기능**을 적절히 활용하면 스크립트 오류를 보다 빠르고 정확하게 해결할 수 있습니다. 다만, 제공된 참고 문서에는 디버그 기능의 구체적인 사용법이나 로그와의 결합 방식에 대한 상세한 설명(예: 디버거에서 로그를 어떻게 참조하는지, 브레이크포인트를 어떻게 설정하는지 등)이 포함되어 있지 않습니다. 문서에서는 디버그 기능의 자세한 내용을 확인하기 위해 "스크립트 디버그" 문서를 별도로 참고하도록 안내하고 있습니다. 따라서 제공된 문서 정보만으로는 로그와 디버그 기능을 결합하는 구체적인 [scores] | [judge_reason] | [source_doc] | 스크립트를 작성하고 플레이 테스트를 하다 보면 크리에이터의 생각대로 단번에 잘 작동하는 경우는 많지 않습니다. 크리에이터는 스크립트에 로그를 적절히 활용해 월드의 문제점을 보다 빠르게 파악하고 수정할 수 있습니다. 로그를 활용하여 시행착오를 줄이고 보다 효율적으로 스크립트를 작성해봅시다. > **더 알아보기** > 로그와 함께 디버그 기능을 적절히 활용하면 스크립트 오류를 보다 빠르고 정확하게 해결할 수 있습니다. > [스크립트 디버그](https://mod-developers.nexon.com/docs/?postId=202)도

[task] | instruction_following [pass] | ⏳ 미판정 [title] | 로그 [question] | 문서에 언급된 추가 참고 자료 링크만 코드 블록으로 출력하고, 설명은 주석으로 작성하세요. [answer] | ```lua -- 문서에서 언급된 추가 참고 자료 링크입니다. -- 스크립트 오류를 보다 빠르고 정확하게 해결하기 위해 디버그 기능을 함께 참고할 수 있습니다. https://mod-developers.nexon.com/docs/?postId=202 ``` [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 스크립트를 작성하고 플레이 테스트를 하다 보면 크리에이터의 생각대로 단번에 잘 작동하는 경우는 많지 않습니다. 크리에이터는 스크립트에 로그를 적절히 활용해 월드의 문제점을 보다 빠르게 파악하고 수정할 수 있습니다. 로그를 활용하여 시행착오를 줄이고 보다 효율적으로 스크립트를 작성해봅시다. > **더 알아보기** > 로그와 함께 디버그 기능을 적절히 활용하면 스크립트 오류를 보다 빠르고 정확하게 해결할 수 있습니다. > [스크립트 디버그](https://mod-developers.nexon.com/docs/?postId=202)도

[task] | instruction_following [pass] | ⏳ 미판정 [title] | 로그 [question] | 로그를 활용하여 스크립트 작성 효율성을 높이는 방법을 3문장 이내로 요약하세요. [answer] | 스크립트 작성 중 예상과 다른 동작이 발생하면 로그를 적절히 활용하여 월드의 문제점을 빠르게 파악하고 수정해야 합니다. 이를 통해 시행착오를 줄이고 보다 효율적인 스크립트 작성 환경을 만들 수 있습니다. 또한 로그와 함께 디버그 기능을 병행 사용하면 스크립트 오류를 더욱 빠르고 정확하게 해결할 수 있습니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 스크립트를 작성하고 플레이 테스트를 하다 보면 크리에이터의 생각대로 단번에 잘 작동하는 경우는 많지 않습니다. 크리에이터는 스크립트에 로그를 적절히 활용해 월드의 문제점을 보다 빠르게 파악하고 수정할 수 있습니다. 로그를 활용하여 시행착오를 줄이고 보다 효율적으로 스크립트를 작성해봅시다. > **더 알아보기** > 로그와 함께 디버그 기능을 적절히 활용하면 스크립트 오류를 보다 빠르고 정확하게 해결할 수 있습니다. > [스크립트 디버그](https://mod-developers.nexon.com/docs/?postId=202)도

[task] | code [pass] | ⏳ 미판정 [title] | DataStorage 활용하기 [question] | _DataStorageService:GetGlobalDataStorage("globalDS") 를 통해 globalDataStorage 를 얻어온 후, DataStorageKeyInfo() 객체의 Key 를 "PlayerRecord" 로 설정하고 Version 을 "V1" 으로 지정하여 SetByInfoAndWait 를 호출해 초기 데이터를 저장하는 스크립트를 작성해줘. [answer] | 요청한 대로 `_DataStorageService:GetGlobalDataStorage("globalDS")` 를 통해 `globalDataStorage` 를 얻어오고, `DataStorageKeyInfo()` 객체의 `Key` 를 `"PlayerRecord"` 로, `Version` 을 `"V1"` 으로 설정하여 `SetByInfoAndWait` 를 호출하는 스크립트입니다. ```lua Method: [server only] void SaveInitialPlayerRecord() { local globalDataStora [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | ```lua local globalDataStorage = _DataStorageService:GetGlobalDataStorage("globalDS") keyInfo = DataStorageKeyInfo() keyInfo.Key = "Key" keyInfo.Version = "Version1" globalDataStorage:SetByInfoAndWait(keyInfo, "Value") -- 기존 버전의 "Value" 값을 덮어 쓰는 대신 새로운 버전을 만들어 저장합니다. keyInfo.Key = "Key" keyInfo.

[task] | single_turn [pass] | ⏳ 미판정 [title] | 스프라이트 색상을 픽셀 단위로 설정하기 [question] | 스프라이트 전체의 알파 값을 변경하기 위해 PixelRendererComponent의 SetAlpha를 호출했는데, 클라이언트에서만 실행되도록 [client only] 속성을 붙여야 하는 이유는 무엇인가요? [answer] | `PixelRendererComponent:SetAlpha` 함수는 스프라이트의 시각적 표현(알파 값)을 변경하는 렌더링 관련 작업이기 때문에, **클라이언트에서만 실행되어야 합니다.** 메이플스토리 월드에서 클라이언트는 화면에 보이는 그래픽과 사용자 인터페이스(UI)를 담당하며, 서버는 게임 로직과 데이터 무결성을 관리합니다. 스프라이트의 색상이나 투명도 같은 시각적 요소는 네트워크를 통해 서버까지 동기화할 필요가 없으며, 각 클라이언트에서 독립적으로 처리하는 것이 효율적입니다. 따라서 `SetAlpha`와 같은 시각적 변경 [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] | 로그 [question] | 플레이 테스트 중 콘솔 로그를 자동으로 초기화하는 기능의 이름과 활성화 방법, 그리고 실행 시 효과를 3문장 이내로 설명하세요. [answer] | 이 기능의 이름은 **Clear on Play**입니다. 콘솔 창 상단의 Clear 버튼 옆 확장 버튼을 눌러 활성화합니다. 시작 버튼을 누르면 콘솔 창에 남아있던 로그가 자동으로 삭제된 상태로 플레이 테스트가 시작됩니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 콘솔에는 플레이 테스트 도중에 발생한 정보, 경고, 오류 로그가 출력됩니다. | 번호 | 설명 | | :---: | --- | | | 콘솔 창에 남아있는 로그를 삭제합니다. Clear 오른쪽에 확장 버튼을 눌러 Clear on Play를 활성화하고, 시작 버튼을 누르면 콘솔 창에 남아있던 로그를 자동으로 삭제하고 시작합니다. | | | 버튼을 누르면 중복 로그를 하나로 합쳐줍니다. 영역에 합쳐진 총 개수가 나옵니다. | | | 실행 공간(Client / Server) 별로 로그를 모아볼 수 있습니다. | | |

[task] | single_turn [pass] | ⏳ 미판정 [title] | 로그 [question] | OnBeginPlay에서 log 함수를 호출했는데 콘솔 창에 로그가 안 나오는 이유가 무엇일까요? [answer] | `OnBeginPlay`에서 `log` 함수를 호출했는데 콘솔 창에 로그가 안 나오는 주요 원인은 **메이커의 콘솔 창이 열려 있지 않은 경우**입니다. 로그는 메이커 상단 메뉴의 **Panels - Console**을 클릭해 콘솔 창을 직접 열어봐야만 확인할 수 있습니다. 콘솔 창이 닫혀 있으면 로그가 출력되어도 화면에서 볼 수 없습니다. 또한, 로그가 실제로 출력되었는지 확인하기 위해 아래 사항을 점검해 보세요. 1. **테스트 실행 여부**: 스크립트 수정 후 **시작** 버튼을 눌러 월드를 테스트 중인지 확인해야 합니 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 로그에 대해 알아보고 월드 제작 과정에서 로그를 효과적으로 활용하는 방법을 살펴봅시다. # 로그 소개 로그(Log)란 월드 제작 중 발생하는 여러 가지 정보나 문제 상황에 대한 기록을 말합니다. 로그를 통해 현재 제작 중인 월드가 의도대로 잘 동작하고 있는지 확인할 수 있습니다. 만약 의도대로 동작하지 않는다면 문제의 원인을 파악하고 해결하는 데 로그를 활용할 수 있습니다. 로그 종류는 로그를 남기는 주체를 기준으로 구분합니다. 시스템 로그와 크리에이터 로그로 나누어 살펴봅시다. ## 시스템 로그 제작

[task] | single_turn [pass] | ⏳ 미판정 [title] | 로그 [question] | log, log_warning, log_error 함수를 구분해서 사용해야 하는 이유는 무엇인가요? [answer] | 로그를 `log`, `log_warning`, `log_error` 세 가지 함수로 구분해서 사용하는 이유는 **로그의 중요도(심각성)를 시각적으로 명확히 구분**하기 위해서입니다. 메이플스토리 월드 메이커의 콘솔 창에서 로그는 각각 다른 아이콘으로 표시됩니다. * **`log()`**: 아이콘이 **정보(Info)** 로 표시됩니다. * 월드의 동작에 문제가 되지 않는 일반적인 정보나 디버깅용 메시지를 기록할 때 사용합니다. * **`log_warning()`**: 아이콘이 **경고(Warning)** 로 표 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 로그에 대해 알아보고 월드 제작 과정에서 로그를 효과적으로 활용하는 방법을 살펴봅시다. # 로그 소개 로그(Log)란 월드 제작 중 발생하는 여러 가지 정보나 문제 상황에 대한 기록을 말합니다. 로그를 통해 현재 제작 중인 월드가 의도대로 잘 동작하고 있는지 확인할 수 있습니다. 만약 의도대로 동작하지 않는다면 문제의 원인을 파악하고 해결하는 데 로그를 활용할 수 있습니다. 로그 종류는 로그를 남기는 주체를 기준으로 구분합니다. 시스템 로그와 크리에이터 로그로 나누어 살펴봅시다. ## 시스템 로그 제작

[task] | code [pass] | ⏳ 미판정 [title] | DataStorage 활용하기 [question] | _DataStorageService:GetGlobalDataStorage("globalDS") 에서 globalDataStorage 를 얻은 후, DateTime(2022, 4, 20) 과 DateTime(2022, 5, 20) 을 최소/최대 날짜로 설정하여 GetVersionsAndWait 로 "PlayerRecord" 키의 버전 목록을 가져오고, pages:GetCurrentPageDatas() 로 데이터를 페이지 단위로 반복 처리하며 versionInfo.CreateTime 과 versionInfo.Version 을 log 로 [answer] | 요청하신 조건에 맞춰 `GetVersionsAndWait`로 "PlayerRecord" 키의 버전 목록을 가져오고, 페이지 단위로 반복 처리하여 정보를 로그로 출력하는 스크립트는 다음과 같습니다. ```lua local globalDataStorage = _DataStorageService:GetGlobalDataStorage("globalDS") -- 4월 20일부터 5월 20일까지의 버전 목록만 가져옵니다. local minDate = DateTime(2022, 4, 20) local maxDate = DateTime(202 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | ```lua local globalDataStorage = _DataStorageService:GetGlobalDataStorage("globalDS") keyInfo = DataStorageKeyInfo() keyInfo.Key = "Key" keyInfo.Version = "Version1" globalDataStorage:SetByInfoAndWait(keyInfo, "Value") -- 기존 버전의 "Value" 값을 덮어 쓰는 대신 새로운 버전을 만들어 저장합니다. keyInfo.Key = "Key" keyInfo.

[task] | code [pass] | ⏳ 미판정 [title] | DataStorage 활용하기 [question] | _DataStorageService:GetGlobalDataStorage("globalDS") 에서 globalDataStorage 를 가져와 Key 가 "PlayerRecord" 인 DataStorageKeyInfo 객체를 생성하고, Version 을 "V2" 로 설정한 뒤 SetByInfoAndWait 로 새로운 버전 데이터를 저장하며, 이후 Version 을 다시 "V1" 로 설정해 GetByInfoAndWait 로 과거 버전의 값을 조회하는 스크립트를 작성해줘. [answer] | 요청하신 대로 `_DataStorageService:GetGlobalDataStorage("globalDS")`를 통해 전역 데이터 스토리지 객체를 가져오고, `Key`가 `"PlayerRecord"`인 `DataStorageKeyInfo` 객체를 생성하여 버전 관리 기능을 활용하는 스크립트입니다. 먼저 `Version`이 `"V2"`인 새 데이터를 `SetByInfoAndWait`로 저장한 후, `Version`을 `"V1"`로 변경하여 `GetByInfoAndWait`로 과거 버전의 값을 조회하는 로직을 포함하고 있습니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | ```lua local globalDataStorage = _DataStorageService:GetGlobalDataStorage("globalDS") keyInfo = DataStorageKeyInfo() keyInfo.Key = "Key" keyInfo.Version = "Version1" globalDataStorage:SetByInfoAndWait(keyInfo, "Value") -- 기존 버전의 "Value" 값을 덮어 쓰는 대신 새로운 버전을 만들어 저장합니다. keyInfo.Key = "Key" keyInfo.

[task] | instruction_following [pass] | ⏳ 미판정 [title] | 로그 [question] | 로그와 디버그 기능의 관계를 표로 정리해서 설명하세요. [answer] | 제공된 참고 문서에는 로그와 디버그 기능의 관계를 표로 정리한 내용이나 구체적인 비교 정보가 포함되어 있지 않습니다. 문서에서 확인할 수 있는 내용만으로는 다음과 같이 설명할 수 있습니다: 1. **로그 활용 목적**: 스크립트가 의도대로 작동하지 않을 때, 로그를 적절히 활용하여 월드의 문제점을 빠르게 파악하고 수정하며, 시행착오를 줄여 효율적인 스크립트 작성을 돕는 도구로 제시됩니다. 2. **디버그 기능과의 연관성**: 문서의 "더 알아보기" 섹션에서 "로그와 함께 디버그 기능을 적절히 활용하면 스크립트 오류를 보다 빠 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 스크립트를 작성하고 플레이 테스트를 하다 보면 크리에이터의 생각대로 단번에 잘 작동하는 경우는 많지 않습니다. 크리에이터는 스크립트에 로그를 적절히 활용해 월드의 문제점을 보다 빠르게 파악하고 수정할 수 있습니다. 로그를 활용하여 시행착오를 줄이고 보다 효율적으로 스크립트를 작성해봅시다. > **더 알아보기** > 로그와 함께 디버그 기능을 적절히 활용하면 스크립트 오류를 보다 빠르고 정확하게 해결할 수 있습니다. > [스크립트 디버그](https://mod-developers.nexon.com/docs/?postId=202)도

[task] | instruction_following [pass] | ⏳ 미판정 [title] | 로그 [question] | 스크립트 에러 로그를 클릭했을 때 발생하는 동작과 엔티티 관련 로그를 클릭했을 때의 동작을 구분하여 단계별 번호 목록으로 작성하세요. [answer] | 로그 목록에서 특정 로그를 선택하면 로그의 종류에 따라 다음과 같은 동작이 발생합니다. **스크립트 에러 로그를 클릭했을 때** 1. 해당 로그에 대한 자세한 정보가 표시됩니다. 2. 정보 영역에 포함된 링크를 누릅니다. 3. 에러가 발생한 스크립트의 해당 라인으로 이동합니다. **엔티티 관련 로그를 클릭했을 때** 1. 해당 로그에 대한 자세한 정보가 표시됩니다. 2. 정보 영역에 포함된 링크를 누릅니다. 3. Hierarchy 뷰에서 해당 엔티티가 선택됩니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 콘솔에는 플레이 테스트 도중에 발생한 정보, 경고, 오류 로그가 출력됩니다. | 번호 | 설명 | | :---: | --- | | | 콘솔 창에 남아있는 로그를 삭제합니다. Clear 오른쪽에 확장 버튼을 눌러 Clear on Play를 활성화하고, 시작 버튼을 누르면 콘솔 창에 남아있던 로그를 자동으로 삭제하고 시작합니다. | | | 버튼을 누르면 중복 로그를 하나로 합쳐줍니다. 영역에 합쳐진 총 개수가 나옵니다. | | | 실행 공간(Client / Server) 별로 로그를 모아볼 수 있습니다. | | |

[task] | code [pass] | ⏳ 미판정 [title] | 스프라이트 색상을 픽셀 단위로 설정하기 [question] | `ButtonClickEvent` 핸들러를 통해 버튼 클릭 시 연결된 `PixelRendererTest` 스크립트의 `SetRandomPixel` 메서드를 호출하는 UI 버튼 컴포넌트 스크립트를 작성해줘. [answer] | 사용자가 요청한 `ButtonClickEvent` 핸들러와 `PixelRendererTest` 스크립트의 `SetRandomPixel` 메서드 호출 로직을 포함한 UI 버튼 컴포넌트 스크립트를 작성합니다. 참고 문서와 실제 mLua 예제 형식을 기반으로 작성하며, `PixelRendererTest` 컴포넌트는 `self.PR.PixelRendererTest` 형태로 접근하는 것으로 보입니다. (문서 11번 항목의 `self.PR.PixelRendererTest:SetRandomPixel()` 참고) ```lua Property: [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 11. **ButtonClick_SetPixel** 스크립트에 **ButtonClickEvent**도 추가합니다. ```lua Event Handler: HandleButtonClickEvent (ButtonClickEvent event) { -- Parameters local Entity = event.Entity -------------------------------------------------------- -- 버튼을 클릭하면 SetRa

[task] | single_turn [pass] | ⏳ 미판정 [title] | 스프라이트 색상을 픽셀 단위로 설정하기 [question] | PixelRendererComponent의 GetPixels를 사용할 때 반드시 [client only] 메서드로 선언해야 하는 이유가 무엇인가요? [answer] | 제시된 참고 문서에는 `PixelRendererComponent:GetPixels()` 함수가 `[client only]` 메서드로 선언되어야 하는 구체적인 이유나 배경 설명이 포함되어 있지 않습니다. 문서에는 해당 함수를 사용하는 예제 코드만 제공되며, 코드 내에서 `[client only]` 태그가 사용된 사실은 확인할 수 있지만, 그와 관련된 기술적 제약 사항이나 원인에 대한 설명은 없습니다. [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] | 빌드 콘솔과 출시 월드 콘솔에서 제공되는 공통 기능 3가지를 표로 정리하세요. [answer] | 빌드 콘솔과 출시 월드 콘솔에서 모두 제공되는 공통 기능은 다음 표와 같습니다. | 공통 기능 | 설명 | | :--- | :--- | | **로그 심각도별 필터링 및 개수 확인** | 정보, 경고, 오류 로그의 총 개수를 확인할 수 있으며, 각 심각도별 버튼을 활성화하거나 해제하여 해당 로그의 표시 여부를 제어할 수 있습니다. | | **로그 검색** | 콘솔에 출력된 로그를 텍스트로 검색하여 원하는 내용을 찾을 수 있습니다. | | **로그 상세 정보 확인 및 링크 이동** | 특정 로그를 선택하면 세부 내용을 확인할 수 있습 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 콘솔에는 플레이 테스트 도중에 발생한 정보, 경고, 오류 로그가 출력됩니다. | 번호 | 설명 | | :---: | --- | | | 콘솔 창에 남아있는 로그를 삭제합니다. Clear 오른쪽에 확장 버튼을 눌러 Clear on Play를 활성화하고, 시작 버튼을 누르면 콘솔 창에 남아있던 로그를 자동으로 삭제하고 시작합니다. | | | 버튼을 누르면 중복 로그를 하나로 합쳐줍니다. 영역에 합쳐진 총 개수가 나옵니다. | | | 실행 공간(Client / Server) 별로 로그를 모아볼 수 있습니다. | | |

[task] | code [pass] | ⏳ 미판정 [title] | DataStorage 활용하기 [question] | _DataStorageService:GetGlobalDataStorage("globalDS") 를 이용해 Key "PlayerRecord" 의 버전 목록을 GetVersionsAndWait 로 조회한 뒤, pages.IsLastPage 가 true 가 될 때까지 pages:MoveToNextPageAndWait() 를 호출하며 각 페이지의 versionInfo 리스트를 순회하여 특정 버전이 존재하는지 확인하는 로직을 구현하는 스크립트를 작성해줘. [answer] | ```lua Method: [server only] void CheckPlayerRecordVersion() { local globalDataStorage = _DataStorageService:GetGlobalDataStorage("globalDS") -- 전체 버전 목록을 조회합니다. (minDate, maxDate를 생략하면 전체 범위로 조회합니다.) local errorCode, pages = globalDataStorage:GetVersionsAndWait("PlayerRecord", Sort [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | ```lua local globalDataStorage = _DataStorageService:GetGlobalDataStorage("globalDS") keyInfo = DataStorageKeyInfo() keyInfo.Key = "Key" keyInfo.Version = "Version1" globalDataStorage:SetByInfoAndWait(keyInfo, "Value") -- 기존 버전의 "Value" 값을 덮어 쓰는 대신 새로운 버전을 만들어 저장합니다. keyInfo.Key = "Key" keyInfo.

[task] | code [pass] | ⏳ 미판정 [title] | 스프라이트 색상을 픽셀 단위로 설정하기 [question] | 버튼 클릭 시 PixelRendererComponent 의 FillColor 함수를 호출하여 스프라이트 전체를 _UtilLogic:RandomDouble() 으로 생성된 랜덤한 Color 값으로 변경하는 [client only] 스크립트를 작성해줘 [answer] | `PixelRendererComponent`의 `FillColor` 함수를 사용해 스프라이트 전체 색상을 랜덤한 값으로 변경하는 스크립트입니다. 버튼 컴포넌트에서 `ButtonClickEvent` 이벤트 핸들러를 등록하고, 해당 함수를 호출하도록 연결해야 합니다. ```lua Method: [client only] void ChangeRandomColor() { local r = _UtilLogic:RandomDouble() local g = _UtilLogic:RandomDouble() local b = [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] | single_turn [pass] | ⏳ 미판정 [title] | 스프라이트 색상을 픽셀 단위로 설정하기 [question] | HandleButtonClickEvent 이벤트 핸들러에서 event.Entity를 받아서 쓰는데, 이 Entity 값이 실제 스프라이트 객체를 가리키는 건지 버튼 UI 객체를 가리키는 건지 어떻게 구별하나요? [answer] | 제공된 참고 문서와 실제 mLua 예제를 바탕으로 `HandleButtonClickEvent`에서 `event.Entity`가 무엇을 가리키는지 설명드립니다. **결론부터 말씀드리면, `event.Entity`는 이벤트가 발생한 버튼 UI 객체 자신을 가리킵니다.** 이유와 구별 방법은 다음과 같습니다. 1. **이벤트 발생 주체 (Sender):** 제공된 실제 mLua 예제 중 두 번째 코드 블록을 보면 다음과 같은 주석이 명시되어 있습니다. ```lua Event Handler: [self] [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 11. **ButtonClick_SetPixel** 스크립트에 **ButtonClickEvent**도 추가합니다. ```lua Event Handler: HandleButtonClickEvent (ButtonClickEvent event) { -- Parameters local Entity = event.Entity -------------------------------------------------------- -- 버튼을 클릭하면 SetRa

[task] | code [pass] | ⏳ 미판정 [title] | 스프라이트 색상을 픽셀 단위로 설정하기 [question] | EntityService와 UtilLogic 서비스를 활용하여 지정된 경로("/maps/map01/SetPixelTest")의 엔티티를 참조하고, 랜덤한 정수 범위(1~Width/Height) 및 실수(0~1)를 생성하여 픽셀 좌표와 RGBA 색상을 결정하는 스크립트를 작성해줘. [answer] | `EntityService`는 `SetPixelTest` 엔티티를 참조하는 데 사용되며, `UtilLogic` 서비스는 랜덤한 픽셀 좌표와 색상을 생성하는 데 사용됩니다. 제공된 문서에 따르면, 픽셀 좌표는 `1`부터 `Width`/`Height` 사이의 정수로 결정되며, 색상 값은 `0`부터 `1` 사이의 실수로 결정됩니다. 요구사항에 맞춰 `EntityService`로 엔티티를 조회하고, `UtilLogic`으로 랜덤 값을 생성하여 `SetPixel`을 호출하는 스크립트입니다. ```lua Property: [None] En [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | `SetPixel` 함수를 활용해 스프라이트에서 원하는 위치의 픽셀 색상을 변경할 수 있습니다. 버튼을 누르면 스프라이트의 랜덤한 위치에 랜덤한 색상의 픽셀이 표시되도록 해봅시다. 1. **Hierarchy - map01 - Create Entity - Create Empty**를 눌러 새로운 **SetPixelTest**를 생성합니다. 2. **SetPixelTest** 엔티티에 **TransformComponent**를 추가하고 **Scale** 프로퍼티에 **X = 10, Y = 10**을 입력합니다. 그리

[task] | code [pass] | ⏳ 미판정 [title] | 스프라이트 색상을 픽셀 단위로 설정하기 [question] | PixelRendererComponent의 SetPixel 메서드로 픽셀을 설정한 후 GetPixel 메서드로 해당 픽셀의 색상을 확인하여 로그에 출력하는 스크립트를 작성해줘. [answer] | `PixelRendererComponent`의 `SetPixel` 메서드로 픽셀 색상을 설정한 뒤, `GetPixel` 메서드로 해당 픽셀의 색상을 받아와 `log` 함수로 출력하는 스크립트입니다. 참고 문서에 따르면 `GetPixel`은 `self.Entity.PixelRendererComponent:GetPixel(x, y)` 형태로 호출하며, `SetPixel`은 `self.Entity.PixelRendererComponent:SetPixel(x, y, color)` 형태로 호출합니다. ```lua Property: [No [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] | 버튼 클릭 시 PixelRendererComponent 의 ResetWithColor 함수를 호출하여 _UtilLogic:RandomIntegerRange(8, 32) 로 생성된 랜덤한 크기와 랜덤한 Color 값으로 스프라이트를 재설정하는 [client only] 스크립트를 작성해줘 [answer] | 버튼 클릭 시 스프라이트의 크기와 전체 색상을 랜덤하게 변경하는 mLua 스크립트입니다. ```lua Method: [client only] void ResetColorTest() { local newWidth = _UtilLogic:RandomIntegerRange(8, 32) local newHeight = _UtilLogic:RandomIntegerRange(8, 32) local r = _UtilLogic:RandomDouble() local g = _UtilLogic:RandomDouble [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] | code [pass] | ⏳ 미판정 [title] | 스프라이트 색상을 픽셀 단위로 설정하기 [question] | 버튼 클릭 시 PixelRendererComponent 의 ResetWithColors 함수를 호출하여 16x16 크기 스프라이트의 각 픽셀 색상을 _UtilLogic:RandomDouble() 을 이용해 랜덤하게 채우는 [client only] 스크립트를 작성해줘 [answer] | 버튼 클릭 시 16x16 크기의 스프라이트 픽셀 색상을 랜덤하게 채우는 `[client only]` 스크립트입니다. ```lua Property: [None] PixelRendererComponent PixelRendererComp = nil Method: [client only] void OnBeginPlay () { self.PixelRendererComp = self.Entity.PixelRendererComponent } [client only] void RandomizeSpriteColors () { l [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] | code [pass] | ⏳ 미판정 [title] | 스프라이트 색상을 픽셀 단위로 설정하기 [question] | 클라이언트 전용으로 PixelRendererComponent의 GetPixels()를 호출하여 픽셀 배열을 반환하고, 이를 로컬 변수에 저장하는 메서드를 구현한 스크립트를 작성해줘 [answer] | 클라이언트 전용으로 `PixelRendererComponent:GetPixels()`를 호출하여 픽셀 값을 로컬 변수에 저장하는 메서드는 다음과 같이 작성할 수 있습니다. ```lua Method: [client only] void GetSpritePixels() { local pixels = self.Entity.PixelRendererComponent:GetPixels() } ``` [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | `GetPixels` 함수를 활용하면 스프라이트 전체의 픽셀 값을 모두 받아올 수 있습니다. 예시 코드는 아래와 같습니다. 버튼을 만들고, 함수를 추가한 다음 버튼에 **ButtonClickEvent**를 연결하는 것은 위의 예제와 동일합니다. ```lua [client only] void GetPixelsTest() { -- GetPixels을 사용해 SetPixelTest 전체의 픽셀 값을 받아옵니다. local getPixels = self.Entity.PixelRendererComponent:GetPixels

[task] | two_turn [pass] | ⏳ 미판정 [title] | 로그 [question] | 스크립트 컴포넌트에서 OnBeginPlay() 시점에 문자열을 출력하는 log() 함수 사용 예시를 보여주세요. [answer] | 스크립트 컴포넌트의 `OnBeginPlay()` 생명주기 메서드에서 `log()` 함수를 사용하여 문자열을 콘솔 창에 출력하는 예시는 다음과 같습니다. ```lua [server only] void OnBeginPlay() { log("Hello Maple World") } ``` 위 스크립트를 작성한 후 메이커에서 테스트를 시작하면 콘솔 창에서 "Hello Maple World"라는 로그를 확인할 수 있습니다. [followup] | 콘솔 창에서 해당 로그를 확인하기 위한 메이커의 정확한 메뉴 경로(상단 메뉴 - Panels - Console)와, 콘솔이 나뉘는 두 가지 종류(콘솔, 빌드 콘솔)는 무엇인가요? [followup_answer] | 메이커에서 로그를 확인하기 위한 메뉴 경로는 **상단 메뉴 - Panels - Console**입니다. 콘솔 창은 다음과 같이 두 가지 종류로 나뉩니다. 1. **콘솔** 2. **빌드 콘솔** [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 로그에 대해 알아보고 월드 제작 과정에서 로그를 효과적으로 활용하는 방법을 살펴봅시다. # 로그 소개 로그(Log)란 월드 제작 중 발생하는 여러 가지 정보나 문제 상황에 대한 기록을 말합니다. 로그를 통해 현재 제작 중인 월드가 의도대로 잘 동작하고 있는지 확인할 수 있습니다. 만약 의도대로 동작하지 않는다면 문제의 원인을 파악하고 해결하는 데 로그를 활용할 수 있습니다. 로그 종류는 로그를 남기는 주체를 기준으로 구분합니다. 시스템 로그와 크리에이터 로그로 나누어 살펴봅시다. ## 시스템 로그 제작

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