[task] | instruction_following [pass] | ⏳ 미판정 [title] | 서버 전용 엔트리 설정하기 [question] | 서버 전용 함수의 실행 공간 설정 단계를 단계별 번호 목록으로 정리해 주세요. [answer] | 서버 전용 함수의 실행 공간 설정 단계는 다음과 같습니다. 1. 함수 설정 버튼을 클릭합니다. 2. Execution Space Setting 메뉴를 선택합니다. 3. 실행 공간을 Server 또는 ServerOnly 중 하나로 설정합니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 크리에이터가 월드를 제작할 때 보안 상의 이슈로 게임을 플레이하는 유저들에게 공개하고 싶지 않은 DataSet이나 스크립트 내 함수가 존재할 수 있습니다. 이번 시간에는 DataSet이나 함수를 서버 전용으로 설정하는 방법에 대해 알아봅시다. # 서버 전용 엔트리의 필요성 월드를 제작할 때, 예를 들어 쿠폰 코드나 게임상에서 활용되는 중요한 키, 대미지 공식이나 내부 로직 등의 정보는 서버에서만 처리되도록 하는 것이 안전합니다. 만약 이러한 중요 정보가 서버와 클라이언트 모두에 존재한다면 클라이언트에서도 중
[task] | instruction_following [pass] | ⏳ 미판정 [title] | 공동 제작 팁 [question] | 개발용 월드를 출시용 월드로 옮기는 두 가지 방법의 절차를 단계별 번호 목록으로 정리하세요. [answer] | 개발용 월드를 출시용 월드로 옮기는 두 가지 방법의 절차는 다음과 같습니다. **1. mod File Import** 1. 개발용 월드에서 **File - Export to File**을 선택하여 mod 파일을 생성합니다. 2. 출시용 월드에서 **File - Import to File**을 선택하여 1단계에서 생성한 mod 파일을 불러옵니다. **2. 개인 월드 - 그룹 월드 이전** 1. 공동 제작에 참여한 그룹원이 자신의 개인 월드에서 작업을 진행한 뒤 저장합니다. 2. [메이플스토리 월드 공식 홈페이지](https://m [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 공동 제작 기능을 활용하면 여러 인원이 동시에 월드를 편집할 수 있기 때문에 매우 편리합니다. 하지만 함께 작업을 진행하다 보면 가끔 오류가 발생할 때도 있습니다. 메이플스토리 월드 팀은 이와 같은 오류를 최소화하고 메이커의 안정성을 높이기 위해 지속적으로 노력하고 있습니다. 이번 시간에는 공동 제작 과정에서 알아두면 좋은 팁을 몇 가지 소개하고자 합니다. ##### 참고 가이드 [공동 제작](/docs/?postId=670) # 개발용 월드와 출시용 월드의 구분 개발용 월드에서 필요한 작업을 끝낸 후,
[task] | instruction_following [pass] | ⏳ 미판정 [title] | 서버 전용 엔트리 설정하기 [question] | 서버 전용 DataSet의 설정 방법과 클라이언트 접근 제한 시 고려사항을 3문장 이내로 요약해 주세요. [answer] | DataSet의 Property에서 ServerOnly 체크박스에 체크하면 해당 DataSet의 내용이 클라이언트로 전달되지 않습니다. 이 설정을 적용하면 클라이언트에서 해당 DataSet에 접근할 수 없으므로, 스크립트 작성 시 이를 반드시 고려해야 합니다. 특정 타이밍에 일부 데이터가 클라이언트에 필요한 경우, 실행 제어나 동기화 등을 통해 명시적으로 전달해 주어야 합니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 크리에이터가 월드를 제작할 때 보안 상의 이슈로 게임을 플레이하는 유저들에게 공개하고 싶지 않은 DataSet이나 스크립트 내 함수가 존재할 수 있습니다. 이번 시간에는 DataSet이나 함수를 서버 전용으로 설정하는 방법에 대해 알아봅시다. # 서버 전용 엔트리의 필요성 월드를 제작할 때, 예를 들어 쿠폰 코드나 게임상에서 활용되는 중요한 키, 대미지 공식이나 내부 로직 등의 정보는 서버에서만 처리되도록 하는 것이 안전합니다. 만약 이러한 중요 정보가 서버와 클라이언트 모두에 존재한다면 클라이언트에서도 중
[task] | single_turn [pass] | ⏳ 미판정 [title] | 파티클 활용하기 [question] | UIBasicParticleComponent에서 Loop를 false로 설정해도 파티클이 계속 재생되는 현상의 원인은 무엇인가요? [answer] | 참고 문서에 따르면, **Loop**를 `false`로 설정해도 파티클이 계속 재생되는 현상의 원인은 명시되어 있지 않습니다. 문서에서는 버튼 클릭 시 파티클이 한 번만 재생되도록 하기 위해 **Loop**를 `false`로 설정하고, **PlayOnEnable**을 `false`로 변경하는 설정을 안내하고 있습니다. 또한 `HandleButtonClickEvent` 내에서 파티클이 이미 재생 중(`IsEmitting == true`)이라면 `Stop()`을 호출한 뒤 `Play()`를 호출하는 로직을 제시하고 있습니다. 하지만 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 1. **UIParticle**에 **UIBasicParticleComponent**를 추가합니다. 2. ParticleType을 **CircleBust**로 선택하고, 원하는 파티클 크기, 속도 등을 조절합니다. 3. **UIBasicParticleComponent**의 **Loop**를 **false**로 설정해 버튼을 눌렀을 때 파티클이 한 번만 재생되도록 합니다. **PlayOnEnable** 또한 **false**로 변경하여 파티클이 월드 진입하자마자 재생되지 않도록 합니다. ![[object Object]](https
[task] | instruction_following [pass] | ⏳ 미판정 [title] | 배경 설정하기 [question] | ScrollRate 값이 1, 10, -10 일 때 배경 움직임의 차이를 3문장 이내로 설명하세요. [answer] | ScrollRate 값이 1일 때는 배경이 기본 속도로 천천히 움직입니다. 값이 10으로 커지면 배경의 움직임 속도가 빨라지며, -10과 같은 음수를 입력하면 배경이 반대 방향으로 이동합니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 **Preset List**와 **BackgroundComponent**를 활용하여 맵의 배경을 설정해봅시다. # 템플릿 배경 설정 **Preset List - Background**에서 메이플스토리의 다양한 배경을 선택할 수 있습니다. 이와 같이 배경 템플릿을 선택하면 배경이 움직이는 속도, 즉 **ScrollRate**를 조절할 수 있습니다. **ScrollRate** 값이 커지면 배경이 움직이는 속도가 빨라지며, 음수를 입력하면 반대 방향으로 이동합니다. | ScrollRate | Image
[task] | single_turn [pass] | ⏳ 미판정 [title] | 파티클 활용하기 [question] | UIParticle 엔티티를 스크립트 프로퍼티로 참조할 때 타입을 Entity로 지정하고 경로를 연결하는 구체적인 방법은 무엇인가요? [answer] | UIParticle 엔티티를 스크립트 프로퍼티로 참조하려면 `Property:` 블록 내에 타입을 `Entity`로 선언하고, 값으로 해당 엔티티의 경로를 연결합니다. 구체적인 작성 예시는 다음과 같습니다. ```lua Property: [None] Entity particleEntity = /ui/UIGroup/UIButton/UIParticle ``` 여기서 `/ui/UIGroup/UIButton/UIParticle`은 실제 워크스페이스에서 UIParticle 엔티티가 위치해 있는 경로를 의미하며, 이 경로를 정확히 입력해 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 1. **UIParticle**에 **UIBasicParticleComponent**를 추가합니다. 2. ParticleType을 **CircleBust**로 선택하고, 원하는 파티클 크기, 속도 등을 조절합니다. 3. **UIBasicParticleComponent**의 **Loop**를 **false**로 설정해 버튼을 눌렀을 때 파티클이 한 번만 재생되도록 합니다. **PlayOnEnable** 또한 **false**로 변경하여 파티클이 월드 진입하자마자 재생되지 않도록 합니다. ![[object Object]](https
[task] | instruction_following [pass] | ⏳ 미판정 [title] | 배경 설정하기 [question] | 웹 이미지 배경 설정 단계를 단계별 번호 목록으로 작성하되 각 단계의 조작 대상 컴포넌트 이름은 대문자로 표기하세요. [answer] | 웹 이미지 배경 설정 단계는 다음과 같습니다. 1. 배경으로 설정하려는 이미지 링크를 복사합니다. 2. **BackgroundComponent**의 **Type**을 **Web**으로 설정합니다. 3. **BackgroundComponent**의 **WebURL**에 복사한 주소를 붙여 넣습니다. 4. 시작을 누른 뒤 테스트합니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 **Preset List**와 **BackgroundComponent**를 활용하여 맵의 배경을 설정해봅시다. # 템플릿 배경 설정 **Preset List - Background**에서 메이플스토리의 다양한 배경을 선택할 수 있습니다. 이와 같이 배경 템플릿을 선택하면 배경이 움직이는 속도, 즉 **ScrollRate**를 조절할 수 있습니다. **ScrollRate** 값이 커지면 배경이 움직이는 속도가 빨라지며, 음수를 입력하면 반대 방향으로 이동합니다. | ScrollRate | Image
[task] | code [pass] | ⏳ 미판정 [title] | 파티클 활용하기 [question] | AttackComponent를 확장한 ExtendAttackComponent 컴포넌트 내에 OnLightning 메서드를 정의하여 self:Attack(Vector2(2, 2), Vector2.zero, nil)을 실행하도록 작성하는 스크립트를 작성해줘 [answer] | AttackComponent를 상속받아 `OnLightning` 메서드를 정의하는 `ExtendAttackComponent` 스크립트는 다음과 같습니다. ```lua Method: void OnLightning() { self:Attack(Vector2(2, 2), Vector2.zero, nil) } ``` [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 파티클 이벤트를 활용하여 파티클을 반복 생성할 때마다 대미지를 주거나 연출을 보여줄 수 있습니다. 번개가 칠 때마다 공격 기능이 작동하여 캐릭터에게 대미지를 주는 예제를 통해 파티클 이벤트의 활용 방법을 살펴봅시다. 1. Preset List - **LightningStrikeSharp** 파티클을 배치합니다. 2. AttackComponent를 Extend하여 새 스크립트 컴포넌트 ExtendAttackComponent를 생성합니다. 3. ExtendAttackComponent를 열고 `OnLightni
[task] | code [pass] | ⏳ 미판정 [title] | 파티클 활용하기 [question] | ParticleEmitStartEvent 핸들러에서 event.ParticleEntity를 지역 변수로 추출하고 해당 파티클이 시작할 때 self:OnLightning()을 호출하는 Event Handler 코드를 작성해줘 [answer] | ```lua Event Handler: HandleParticleEmitStartEvent(ParticleEmitStartEvent event) { -- Parameters local ParticleEntity = event.ParticleEntity -------------------------------------------------------- self:OnLightning() } ``` [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 파티클 이벤트를 활용하여 파티클을 반복 생성할 때마다 대미지를 주거나 연출을 보여줄 수 있습니다. 번개가 칠 때마다 공격 기능이 작동하여 캐릭터에게 대미지를 주는 예제를 통해 파티클 이벤트의 활용 방법을 살펴봅시다. 1. Preset List - **LightningStrikeSharp** 파티클을 배치합니다. 2. AttackComponent를 Extend하여 새 스크립트 컴포넌트 ExtendAttackComponent를 생성합니다. 3. ExtendAttackComponent를 열고 `OnLightni
[task] | single_turn [pass] | ⏳ 미판정 [title] | 파티클 활용하기 [question] | PlayOnEnable을 false로 설정하지 않으면 파티클 연출에 어떤 문제가 발생하나요? [answer] | `PlayOnEnable`을 `false`로 설정하지 않으면(기본값인 `true`로 남아 있으면), 월드에 진입하는 즉시 파티클이 재생되기 시작합니다. 버튼을 눌렀을 때만 파티클이 한 번 재생되도록 연출을 설계했다면, 이는 원치 않는 동작입니다. 월드에 들어오자마자 파티클이 계속 나오거나 재생되기 때문에, 버튼 상호작용과 무관하게 시각적 노이즈가 발생하거나 연출 의도와 어긋나는 결과가 됩니다. 따라서 `PlayOnEnable`을 `false`로 설정하여 월드 진입 시 자동 재생을 막고, 오직 `ButtonClickEvent`와 같 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 1. **UIParticle**에 **UIBasicParticleComponent**를 추가합니다. 2. ParticleType을 **CircleBust**로 선택하고, 원하는 파티클 크기, 속도 등을 조절합니다. 3. **UIBasicParticleComponent**의 **Loop**를 **false**로 설정해 버튼을 눌렀을 때 파티클이 한 번만 재생되도록 합니다. **PlayOnEnable** 또한 **false**로 변경하여 파티클이 월드 진입하자마자 재생되지 않도록 합니다. ![[object Object]](https
[task] | single_turn [pass] | ⏳ 미판정 [title] | 파티클 활용하기 [question] | 호리병에 닿으면 파티클이 생성되도록 하려면 TriggerEnterEvent 핸들러 안에서 어떤 API를 호출해야 하나요? [answer] | 호리병(특정 엔티티)에 캐릭터가 닿았을 때 파티클을 생성하려면 `TriggerEnterEvent` 핸들러 안에서 `_ParticleService:PlayBasicParticleAttached()` 함수를 호출해야 합니다. 문서에 제시된 예제에서 이 함수는 다음과 같은 인자를 받습니다: 1. **BasicParticleType**: 생성할 파티클 타입 (예제에서는 `BasicParticleType.ToonTallFire`) 2. **Entity**: 파티클이 부착될 엔티티 (예제에서는 `TriggerBodyEntity`) 3. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 반복 재생되는 파티클을 생성하거나 삭제하는 방법을 알아봅시다. 특정 엔티티에 캐릭터가 닿으면 파티클이 생성되다가 캐릭터가 목표 지점에 도착하면 파티클 생성이 멈추는 예제를 만들어보겠습니다. 1. 파티클을 뿜어낼 엔티티와 목표 엔티티를 배치합니다. 본 예제에서는 파티클을 뿜어낼 엔티티로 **object-24**(호리병)을, 목표 엔티티로는 **object-928**(소화기)를 사용했습니다. 2. 배치한 모든 엔티티에 TriggerComponent를 추가합니다. 3. Workspace - MyDesk에 새
[task] | code [pass] | ⏳ 미판정 [title] | 파티클 활용하기 [question] | ParticleLoopEvent 핸들러에서 event.ParticleEntity를 지역 변수로 추출하고 파티클 루프가 돌 때마다 self:OnLightning()을 호출하여 반복 공격을 구현하는 Event Handler 코드를 작성해줘 [answer] | ParticleLoopEvent 핸들러에서 `event.ParticleEntity`를 지역 변수로 추출하고, 파티클 루프가 반복될 때마다 `self:OnLightning()`을 호출하는 Event Handler 코드는 다음과 같습니다. ```lua Event Handler: HandleParticleLoopEvent(ParticleLoopEvent event) { -- Parameters local ParticleEntity = event.ParticleEntity ------------------------ [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 파티클 이벤트를 활용하여 파티클을 반복 생성할 때마다 대미지를 주거나 연출을 보여줄 수 있습니다. 번개가 칠 때마다 공격 기능이 작동하여 캐릭터에게 대미지를 주는 예제를 통해 파티클 이벤트의 활용 방법을 살펴봅시다. 1. Preset List - **LightningStrikeSharp** 파티클을 배치합니다. 2. AttackComponent를 Extend하여 새 스크립트 컴포넌트 ExtendAttackComponent를 생성합니다. 3. ExtendAttackComponent를 열고 `OnLightni
[task] | single_turn [pass] | ⏳ 미판정 [title] | 공동 제작 팁 [question] | 스크립트 에디터에서 게임 UI가 겹쳐 보이거나 UI 수정 내용이 반영되지 않을 때 어떻게 대처해야 하나요? [answer] | 스크립트 에디터에서 게임 UI가 겹쳐 보이거나, UI를 수정하고 Check In을 했음에도 작업 내용이 반영되지 않는 현상은 해당 월드에 심각한 문제가 발생했음을 의미합니다. 이러한 증상이 나타나면 즉시 작업을 중단하고, 해당 월드를 새로운 월드로 Import 하여 작업을 재개하는 것이 좋습니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 메이커에서 플레이 테스트를 하다가 인스턴스 맵으로 이동하면 **Hierarchy** 탭에 아무것도 보이지 않는 현상이 발생할 수 있습니다. 이때는 **Hierarchy** 탭을 닫았다가 다시 열면 정상화됩니다. Workspace나 UI에서도 유사한 현상이 발생할 수 있습니다. 이때 폴더를 접었다 펴면 Check Out 정보가 갱신됩니다. ## 새로운 월드로 이전 공동 제작 중 아래와 같은 현상이 발생하면 해당 월드에 심각한 문제가 발생할 가능성이 높습니다. * 스크립트 에디터에 게임 UI가 보임 * UI를 수정하고 Check
[task] | single_turn [pass] | ⏳ 미판정 [title] | 공동 제작 팁 [question] | Hierarchy 탭에 맵 오브젝트가 보이지 않을 때 어떤 조작을 하면 정상화되나요? [answer] | 메이커에서 플레이 테스트를 하다가 인스턴스 맵으로 이동하면 Hierarchy 탭에 아무것도 보이지 않는 현상이 발생할 수 있습니다. 이 경우 Hierarchy 탭을 닫았다가 다시 열면 정상화됩니다. Workspace나 UI에서도 유사한 현상이 발생할 수 있으며, 이때는 폴더를 접었다 펴면 Check Out 정보가 갱신되어 정상적으로 확인 가능합니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 메이커에서 플레이 테스트를 하다가 인스턴스 맵으로 이동하면 **Hierarchy** 탭에 아무것도 보이지 않는 현상이 발생할 수 있습니다. 이때는 **Hierarchy** 탭을 닫았다가 다시 열면 정상화됩니다. Workspace나 UI에서도 유사한 현상이 발생할 수 있습니다. 이때 폴더를 접었다 펴면 Check Out 정보가 갱신됩니다. ## 새로운 월드로 이전 공동 제작 중 아래와 같은 현상이 발생하면 해당 월드에 심각한 문제가 발생할 가능성이 높습니다. * 스크립트 에디터에 게임 UI가 보임 * UI를 수정하고 Check
[task] | code [pass] | ⏳ 미판정 [title] | 파티클 활용하기 [question] | HandleTriggerEnterEvent에서 event.TriggerBodyEntity를 검사하여 지정된 ResetEntity 엔티티가 아닐 때만 BasicParticleType.ToonTallFire 파티클을 생성하고, SpawnList에 serial을 추가하는 로직을 구현하는 스크립트를 작성해줘 [answer] | 요청하신 로직을 구현한 스크립트입니다. `ResetEntity`가 아닌 엔티티에 닿을 때만 파티클을 생성하고, 생성된 파티클의 식별자(serial)를 `SpawnList`에 저장하는 내용입니다. ```lua Property: [None] Entity ResetEntity = "nil" [None] SyncTable<number> SpawnList Event Handler: HandleTriggerEnterEvent(TriggerEnterEvent event) { -- Parameters local TriggerBo [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 반복 재생되는 파티클을 생성하거나 삭제하는 방법을 알아봅시다. 특정 엔티티에 캐릭터가 닿으면 파티클이 생성되다가 캐릭터가 목표 지점에 도착하면 파티클 생성이 멈추는 예제를 만들어보겠습니다. 1. 파티클을 뿜어낼 엔티티와 목표 엔티티를 배치합니다. 본 예제에서는 파티클을 뿜어낼 엔티티로 **object-24**(호리병)을, 목표 엔티티로는 **object-928**(소화기)를 사용했습니다. 2. 배치한 모든 엔티티에 TriggerComponent를 추가합니다. 3. Workspace - MyDesk에 새
[task] | code [pass] | ⏳ 미판정 [title] | 파티클 활용하기 [question] | UIGroupComponent의 DefaultShow 프로퍼티를 true로 설정하여 UI가 기본값으로 보이도록 하는 스크립트를 작성해줘 [answer] | `UIGroupComponent`의 `DefaultShow` 프로퍼티는 에디터의 인스펙터(Inspector)에서 직접 설정하는 값이며, mLua 스크립트에서 런타임에 해당 프로퍼티를 직접 변경하는 API는 제공되지 않습니다. 따라서 UI가 기본적으로 보이도록 하려면, 에디터에서 해당 UIGroup의 `UIGroupComponent` > `DefaultShow` 값을 `true`로 설정해 주셔야 합니다. 스크립트로 UI의 가시성을 제어하려면 `UIGroupComponent`의 다른 메서드(예: Show/Hide 관련 메서드)를 사용 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 파티클을 재생할 수 있는 UI를 만들어봅시다. 1. **Hierachy - World - ui**에 새로운 **UIGroup**을 추가합니다. 2. 추가한 UIGroup에서 **UIGroupComponent**의 **DefaultShow** 프로퍼티를 **true**로 설정합니다. ![[object Object]](https://mod-file.dn.nexoncdn.co.kr/bbs/1738820526946c8b71422566e4a919660cc52294d2f78.png "DefaultShow") 3. UIGroup에서 **콘
[task] | instruction_following [pass] | ⏳ 미판정 [title] | 서버 전용 엔트리 설정하기 [question] | DataSet과 함수의 서버 전용 설정 방식을 비교하는 표로 출력해 주세요. [answer] | DataSet과 함수의 서버 전용 설정 방식을 비교한 표입니다. | 구분 | DataSet | 함수 (스크립트 메서드) | | :--- | :--- | :--- | | **설정 위치** | DataSet의 **Property** | 스크립트 함수의 **Execution Space Setting** | | **설정 방법** | `ServerOnly` 체크 박스에 체크 | 실행 공간을 `Server` 또는 `ServerOnly`로 선택 | | **클라이언트 전송 여부** | DataSet 내용이 클라이언트로 전달되지 않음 | 함수의 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 크리에이터가 월드를 제작할 때 보안 상의 이슈로 게임을 플레이하는 유저들에게 공개하고 싶지 않은 DataSet이나 스크립트 내 함수가 존재할 수 있습니다. 이번 시간에는 DataSet이나 함수를 서버 전용으로 설정하는 방법에 대해 알아봅시다. # 서버 전용 엔트리의 필요성 월드를 제작할 때, 예를 들어 쿠폰 코드나 게임상에서 활용되는 중요한 키, 대미지 공식이나 내부 로직 등의 정보는 서버에서만 처리되도록 하는 것이 안전합니다. 만약 이러한 중요 정보가 서버와 클라이언트 모두에 존재한다면 클라이언트에서도 중
[task] | single_turn [pass] | ⏳ 미판정 [title] | 파티클 활용하기 [question] | 캐릭터가 목표 엔티티가 아닌 다른 엔티티에 닿았을 때 파티클이 생성되지 않도록 방지하기 위해 조건 분기에서 무엇을 비교해야 하나요? [answer] | 문서에 제시된 예제 코드에서 캐릭터가 목표 엔티티가 아닌 다른 엔티티에 닿았을 때 파티클을 생성하는 로직은 `HandleTriggerEnterEvent` 이벤트 핸들러 내부의 조건 분기문을 통해 제어됩니다. 이 조건 분기문에서는 `event.TriggerBodyEntity` (현재 터치된 엔티티)와 스크립트의 프로퍼티인 `self.ResetEntity` (목표 엔티티)를 비교합니다. 구체적으로, `TriggerBodyEntity ~= self.ResetEntity` 조건이 참(true)일 때, 즉 현재 터치된 엔티티가 목표 엔티 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 반복 재생되는 파티클을 생성하거나 삭제하는 방법을 알아봅시다. 특정 엔티티에 캐릭터가 닿으면 파티클이 생성되다가 캐릭터가 목표 지점에 도착하면 파티클 생성이 멈추는 예제를 만들어보겠습니다. 1. 파티클을 뿜어낼 엔티티와 목표 엔티티를 배치합니다. 본 예제에서는 파티클을 뿜어낼 엔티티로 **object-24**(호리병)을, 목표 엔티티로는 **object-928**(소화기)를 사용했습니다. 2. 배치한 모든 엔티티에 TriggerComponent를 추가합니다. 3. Workspace - MyDesk에 새
[task] | single_turn [pass] | ⏳ 미판정 [title] | 파티클 활용하기 [question] | 버튼 클릭 시 파티클이 재생되도록 하려면 UIButtonParticle 스크립트에서 어떤 Event Handler를 구현해야 하나요? [answer] | 버튼 클릭 시 파티클이 재생되도록 하려면 `UIButtonParticle` 스크립트에 `[self]` 영역의 `HandleButtonClickEvent` Event Handler를 구현해야 합니다. 이 핸들러는 `ButtonClickEvent`를 수신하며, 이벤트에서 전달된 `event.Entity`를 통해 현재 버튼 엔티티를 참조합니다. 이후 미리 연결해둔 `particleEntity` 프로퍼티를 통해 `UIBasicParticleComponent`에 접근하여 재생을 제어합니다. 참고 문서에 제시된 구현 코드는 다음과 같습니다 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 1. **UIParticle**에 **UIBasicParticleComponent**를 추가합니다. 2. ParticleType을 **CircleBust**로 선택하고, 원하는 파티클 크기, 속도 등을 조절합니다. 3. **UIBasicParticleComponent**의 **Loop**를 **false**로 설정해 버튼을 눌렀을 때 파티클이 한 번만 재생되도록 합니다. **PlayOnEnable** 또한 **false**로 변경하여 파티클이 월드 진입하자마자 재생되지 않도록 합니다. ![[object Object]](https
[task] | single_turn [pass] | ⏳ 미판정 [title] | 공동 제작 팁 [question] | 데이터 스토리지 초기화 기능을 사용했을 때 다른 공동 작업자의 데이터까지 함께 초기화되나요? [answer] | 아니요, 데이터 스토리지 초기화 기능을 사용해도 다른 공동 작업자의 데이터까지 함께 초기화되지 않습니다. 해당 기능은 현재 작업을 수행 중인 제작자 본인의 데이터만 초기화하며, 다른 그룹원의 데이터에는 영향을 미치지 않습니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 메이커에서 플레이 테스트를 하다가 인스턴스 맵으로 이동하면 **Hierarchy** 탭에 아무것도 보이지 않는 현상이 발생할 수 있습니다. 이때는 **Hierarchy** 탭을 닫았다가 다시 열면 정상화됩니다. Workspace나 UI에서도 유사한 현상이 발생할 수 있습니다. 이때 폴더를 접었다 펴면 Check Out 정보가 갱신됩니다. ## 새로운 월드로 이전 공동 제작 중 아래와 같은 현상이 발생하면 해당 월드에 심각한 문제가 발생할 가능성이 높습니다. * 스크립트 에디터에 게임 UI가 보임 * UI를 수정하고 Check
[task] | code [pass] | ⏳ 미판정 [title] | 파티클 활용하기 [question] | SpawnList에 저장된 모든 serial을 순회하며 _ParticleService:RemoveParticle()을 호출하고 table.clear()로 리스트를 비워 파티클 생성을 멈추는 이벤트 핸들러 코드를 작성해줘 [answer] | 참고 문서의 예제에 포함된 `HandleTriggerEnterEvent` 이벤트 핸들러 코드입니다. 목표 엔티티(`self.ResetEntity`)에 닿았을 때 `SpawnList`에 저장된 모든 파티클 시리얼을 순회하며 `_ParticleService:RemoveParticle()`을 호출하고, `table.clear()`로 리스트를 비우는 로직을 수행합니다. ```lua Event Handler: HandleTriggerEnterEvent(TriggerEnterEvent event) { -- Parameters [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 반복 재생되는 파티클을 생성하거나 삭제하는 방법을 알아봅시다. 특정 엔티티에 캐릭터가 닿으면 파티클이 생성되다가 캐릭터가 목표 지점에 도착하면 파티클 생성이 멈추는 예제를 만들어보겠습니다. 1. 파티클을 뿜어낼 엔티티와 목표 엔티티를 배치합니다. 본 예제에서는 파티클을 뿜어낼 엔티티로 **object-24**(호리병)을, 목표 엔티티로는 **object-928**(소화기)를 사용했습니다. 2. 배치한 모든 엔티티에 TriggerComponent를 추가합니다. 3. Workspace - MyDesk에 새
[task] | instruction_following [pass] | ⏳ 미판정 [title] | 배경 설정하기 [question] | 단색, 그라데이션, 이미지 배경 설정 시 사용해야 하는 Preset List 항목과 BackgroundComponent Type 값을 표로 정리하세요. [answer] | 단색, 그라데이션, 이미지 배경 설정 시 필요한 Preset List 항목과 `BackgroundComponent`의 `Type` 값은 다음과 같습니다. | 배경 유형 | Preset List 항목 | BackgroundComponent Type | | :--- | :--- | :--- | | 단색 | Solid Background | Solid | | 그라데이션 | (Preset List 없음) | Gradient | | 이미지 (저장된 이미지) | Image Background | Image | | 이미지 (웹 이미지) | ( [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 **Preset List**와 **BackgroundComponent**를 활용하여 맵의 배경을 설정해봅시다. # 템플릿 배경 설정 **Preset List - Background**에서 메이플스토리의 다양한 배경을 선택할 수 있습니다. 이와 같이 배경 템플릿을 선택하면 배경이 움직이는 속도, 즉 **ScrollRate**를 조절할 수 있습니다. **ScrollRate** 값이 커지면 배경이 움직이는 속도가 빨라지며, 음수를 입력하면 반대 방향으로 이동합니다. | ScrollRate | Image
[task] | instruction_following [pass] | ⏳ 미판정 [title] | 사다리와 로프 활용하기 [question] | ClimbableComponent에서 등반 영역을 스프라이트 크기에 맞춰 자동 설정하는 프로퍼티와 그 동작 조건을 2문장 이내로 설명하세요. [answer] | 등반 영역을 스프라이트 크기에 맞춰 자동 설정하는 프로퍼티는 `IsUseDefaultObjectBoxSize`입니다. 이 값이 true일 경우 Boxsize와 BoxOffset이 자동으로 설정되며, 해당 동작은 메이커 편집 모드에서만 이루어집니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 캐릭터가 사다리나 로프를 타면 수직으로 올라갈 수 있습니다. 이는 사다리나 로프의 동작과 연관된 **ClimbableComponent**가 있기 때문입니다. 이 컴포넌트를 활용하면 사다리, 로프뿐만 아니라 다른 오브젝트에서도 등반할 수 있습니다. 또한 크리에이터가 원하는 대로 등반 영역이나 등반 속도를 조절할 수 있습니다. 관련된 컴포넌트로 **ClimbableSpriteRendererComponent**도 있습니다. 이 컴포넌트는 사다리나 로프와 같이 머리, 몸통, 꼬리 형태의 스프라이트를 그리기 위한 용도로
[task] | single_turn [pass] | ⏳ 미판정 [title] | 파티클 활용하기 [question] | 캐릭터가 목표 엔티티에 닿았을 때 이전에 생성된 모든 파티클을 한꺼번에 삭제하려면 어떤 절차와 API를 사용해야 하나요? [answer] | 캐릭터가 목표 엔티티에 닿았을 때 이전에 생성된 모든 파티클을 한꺼번에 삭제하려면, 파티클 생성 시 반환되는 식별자를 저장해 두었다가 목표 엔티티에 닿는 이벤트가 발생했을 때 해당 식별자들을 순회하며 삭제하는 방법을 사용해야 합니다. 구체적인 절차와 사용 API는 다음과 같습니다. 1. **파티클 생성 시 식별자(serial) 저장**: 캐릭터가 파티클을 생성해야 할 엔티티에 닿았을 때, `_ParticleService:PlayBasicParticleAttached()` 함수를 호출합니다. 이 함수는 파티클을 생성하고 그 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 반복 재생되는 파티클을 생성하거나 삭제하는 방법을 알아봅시다. 특정 엔티티에 캐릭터가 닿으면 파티클이 생성되다가 캐릭터가 목표 지점에 도착하면 파티클 생성이 멈추는 예제를 만들어보겠습니다. 1. 파티클을 뿜어낼 엔티티와 목표 엔티티를 배치합니다. 본 예제에서는 파티클을 뿜어낼 엔티티로 **object-24**(호리병)을, 목표 엔티티로는 **object-928**(소화기)를 사용했습니다. 2. 배치한 모든 엔티티에 TriggerComponent를 추가합니다. 3. Workspace - MyDesk에 새
[task] | instruction_following [pass] | ⏳ 미판정 [title] | 사다리와 로프 활용하기 [question] | AllowHorizontalMove가 true일 때와 false일 때의 등반 이동 차이를 코드 주석 형식으로 3줄 이내로 출력하세요. [answer] | ```lua -- AllowHorizontalMove가 true일 경우: 캐릭터가 사다리/로프에서 X, Y 축 모두 자유롭게 이동합니다. -- AllowHorizontalMove가 false일 경우: 캐릭터는 Y 축(수직) 방향으로만 등반 이동이 가능합니다. ``` [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 캐릭터가 사다리나 로프를 타면 수직으로 올라갈 수 있습니다. 이는 사다리나 로프의 동작과 연관된 **ClimbableComponent**가 있기 때문입니다. 이 컴포넌트를 활용하면 사다리, 로프뿐만 아니라 다른 오브젝트에서도 등반할 수 있습니다. 또한 크리에이터가 원하는 대로 등반 영역이나 등반 속도를 조절할 수 있습니다. 관련된 컴포넌트로 **ClimbableSpriteRendererComponent**도 있습니다. 이 컴포넌트는 사다리나 로프와 같이 머리, 몸통, 꼬리 형태의 스프라이트를 그리기 위한 용도로
[task] | single_turn [pass] | ⏳ 미판정 [title] | 공동 제작 팁 [question] | '공동 제작 서비스와 연결이 끊어졌습니다'라는 알림이 뜨면 왜 월드만 나갔다 들어오면 안 되고 클라이언트를 완전히 종료해야 하나요? [answer] | "공동 제작 서비스와 연결이 끊어졌습니다. 다시 메이커로 입장하십시오."라는 알림이 출력되면, 월드에서 단순히 나갔다 들어오는 것만으로는 문제가 해결되지 않습니다. 월드 내에서의 재접속은 같은 연결 오류가 반복되는 원인이 될 수 있습니다. 정상적으로 작동하려면 클라이언트(메이플스토리 월드 실행 파일) 자체를 완전히 종료한 후 다시 실행하여 접속해야 합니다. 이는 끊어진 공동 제작 서비스와의 연결 상태를 완전히 초기화하고 재설립하기 위한 필수 조치입니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 메이커에서 플레이 테스트를 하다가 인스턴스 맵으로 이동하면 **Hierarchy** 탭에 아무것도 보이지 않는 현상이 발생할 수 있습니다. 이때는 **Hierarchy** 탭을 닫았다가 다시 열면 정상화됩니다. Workspace나 UI에서도 유사한 현상이 발생할 수 있습니다. 이때 폴더를 접었다 펴면 Check Out 정보가 갱신됩니다. ## 새로운 월드로 이전 공동 제작 중 아래와 같은 현상이 발생하면 해당 월드에 심각한 문제가 발생할 가능성이 높습니다. * 스크립트 에디터에 게임 UI가 보임 * UI를 수정하고 Check
[task] | code [pass] | ⏳ 미판정 [title] | 파티클 활용하기 [question] | 스크립트 컴포넌트에 Color 타입 Property 를 추가하고, OnBeginPlay() 시점에 해당 색상 옵션을 담은 테이블을 _ParticleService:PlayBasicParticle() 의 option 인자로 전달하여 BasicParticleType.Firework 파티클을 생성하는 스크립트를 작성해줘 [answer] | 요청하신 기능을 구현하기 위한 mLua 스크립트 컴포넌트 코드입니다. `Color` 타입의 Property를 정의하고, `OnBeginPlay()`에서 해당 프로퍼티 값을 활용하여 `option` 테이블을 구성한 뒤 `_ParticleService:PlayBasicParticle()`에 전달하는 방식으로 작성했습니다. ```lua Property: [None] Color ParticleColor = Color(0.25, 0.5, 0.5, 1) Method: [server only] void OnBeginPlay() { [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 1. 파티클이 잘 보이도록 어두운 배경을 설정하고 지형을 배치한 뒤 원하는 엔티티를 배치합니다. 본 예제에서는 Preset List에서 Background - **back-51**을 설정하고 Object - **object-174**를 배치했습니다. 2. Workspace - MyDesk에 새 스크립트 컴포넌트 ParticleServiceTest를 생성합니다. 3. 배치한 엔티티(object-174)의 Property에 ParticleServiceTest를 추가합니다. 4. 여기에 TweenCircula
[task] | single_turn [pass] | ⏳ 미판정 [title] | 공동 제작 팁 [question] | 개별 Check In이 번거로울 때 여러 엔티티를 한 번에 저장할 수 있는 Bulk Check In 기능을 실행하는 두 가지 방법은 무엇인가요? [answer] | 개별 Check In이 번거로울 때 Bulk Check In 기능을 실행하는 두 가지 방법은 다음과 같습니다. 1. **Scene** 뷰에서 `Ctrl + S`를 누릅니다. 2. **Workspace - My Desk**를 우클릭하여 **Bulk Check In**을 선택합니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 공동 제작 기능을 활용하면 여러 인원이 동시에 월드를 편집할 수 있기 때문에 매우 편리합니다. 하지만 함께 작업을 진행하다 보면 가끔 오류가 발생할 때도 있습니다. 메이플스토리 월드 팀은 이와 같은 오류를 최소화하고 메이커의 안정성을 높이기 위해 지속적으로 노력하고 있습니다. 이번 시간에는 공동 제작 과정에서 알아두면 좋은 팁을 몇 가지 소개하고자 합니다. ##### 참고 가이드 [공동 제작](/docs/?postId=670) # 개발용 월드와 출시용 월드의 구분 개발용 월드에서 필요한 작업을 끝낸 후,
[task] | code [pass] | ⏳ 미판정 [title] | 파티클 활용하기 [question] | UIButton을 자식으로 생성한 UIEmpty 엔티티의 이름을 UIParticle로 변경하는 스크립트를 작성해줘 [answer] | UIButton을 자식으로 생성한 UIEmpty 엔티티의 이름을 `UIParticle`로 변경하는 스크립트는 다음과 같습니다. 참고 문서에 명시된 API와 접근 방식을 바탕으로 작성되었습니다. ```lua Method: [client only] void OnBeginPlay() { -- UIButton 엔티티 경로를 기준으로 자식 UIEmpty 엔티티를 찾습니다. -- 실제 프로젝트에서 UIButton의 정확한 경로를 확인하여 "/ui/UIGroup/UIButton/UIEmpty" 부분을 수정해야 합니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 파티클을 재생할 수 있는 UI를 만들어봅시다. 1. **Hierachy - World - ui**에 새로운 **UIGroup**을 추가합니다. 2. 추가한 UIGroup에서 **UIGroupComponent**의 **DefaultShow** 프로퍼티를 **true**로 설정합니다. ![[object Object]](https://mod-file.dn.nexoncdn.co.kr/bbs/1738820526946c8b71422566e4a919660cc52294d2f78.png "DefaultShow") 3. UIGroup에서 **콘
[task] | code [pass] | ⏳ 미판정 [title] | 파티클 활용하기 [question] | HandleTouchEvent() 이벤트 핸들러를 사용하여 사용자가 엔티티를 터치할 때마다 _ParticleService:PlayBasicParticle() 을 호출하여 ParticleCount 가 5인 Firework 파티클을 재생하고, 3초 후 _TimerService:SetTimerOnce() 로 해당 파티클을 정리하는 스크립트를 작성해줘 [answer] | ```lua Property: [None] integer ParticleTimerId = 0 Event Handler: [self] HandleTouchEvent(TouchEvent event) { local option = {["ParticleCount"] = 5} _ParticleService:PlayBasicParticle(BasicParticleType.Firework, self.Entity, self.Entity.TransformComponent.WorldPosition, 0, Vector3(1,1 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 1. 파티클이 잘 보이도록 어두운 배경을 설정하고 지형을 배치한 뒤 원하는 엔티티를 배치합니다. 본 예제에서는 Preset List에서 Background - **back-51**을 설정하고 Object - **object-174**를 배치했습니다. 2. Workspace - MyDesk에 새 스크립트 컴포넌트 ParticleServiceTest를 생성합니다. 3. 배치한 엔티티(object-174)의 Property에 ParticleServiceTest를 추가합니다. 4. 여기에 TweenCircula