← 목록

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

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

[task] | single_turn [pass] | ⏳ 미판정 [title] | 원거리 발사체 만들기 [question] | OnUpdate 함수의 실행 공간을 server only로 설정해야 하는 이유는 무엇이며, client only로 변경하면 어떤 문제가 발생할 수 있나요? [answer] | mLua에서 발사체와 같은 게임 로직을 처리하는 `OnUpdate` 함수의 실행 공간 설정은 서버와 클라이언트 간의 상태 동기화 문제와 직결됩니다. **1. `server only`로 설정해야 하는 이유** 발사체의 위치 이동(`Translate`)과 같은 물리/상태 변경은 **서버**에서 처리하는 것이 원칙입니다. * **권위적 서버(Authoritative Server):** 서버가 게임의 실제 상태를 관리합니다. `server only`로 설정하면 발사체의 이동 로직이 서버에서만 실행되어 정확한 위치가 계산됩니다. * [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 발사체 스크립트 컴포넌트를 작성하고 발사체 모델에 연결해 봅시다. 1. **Workspace - MyDesk**의 콘텍스트 메뉴에서 **Create Scripts - Create Component**를 클릭해 새 스크립트 컴포넌트를 만듭니다. 이름으로 **Projectile**를 입력합니다. 2. 발사체 모델 **Model_Projectile_Arrow**에 **Projectile** 컴포넌트를 추가합니다. 3. **Projectile** 스크립트 컴포넌트를 열고 아래와 같이 프로퍼티를 추가합니다.

[task] | single_turn [pass] | ⏳ 미판정 [title] | 원거리 발사체 만들기 [question] | 발사체 스크립트에서 폭발 효과를 띄울 때 _EffectService:SpawnEffect 호출 인자 중 Vector3.one * self.EffectScale 부분은 어떤 역할을 하나요? [answer] | 제공된 참고 문서에는 `_EffectService:SpawnEffect` 함수의 구체적인 파라미터 정의나 `Vector3.one * self.EffectScale` 식이 수행하는 정확한 논리적 역할(예: 스케일 적용 방식 등)에 대한 명시적인 설명이 포함되어 있지 않습니다. 문서에는 해당 식이 포함된 코드 조각만 제시되어 있을 뿐, 각 인자의 의미나 동작 원리를 설명하는 텍스트가 없습니다. 따라서 이 특정 식이 어떤 역할을 하는지에 대해서는 문서 근거로 답변할 수 없습니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | fect(self.ExplodeSpriteRUID, self.Entity, effectPosition, 0, Vector3.one * self.EffectScale, false, options) -- 발사체 제거 self.Entity:Destroy() end) } ``` 10. 발사체가 몬스터에 충돌하면 폭발하도록 처리하기 위해 이벤트 핸들러에 **TriggerEnterEvent**를 추가합니다. 실행 공간은 **server only**로

[task] | single_turn [pass] | ⏳ 미판정 [title] | 원거리 발사체 만들기 [question] | Explosion 이펙트 스프라이트의 실제 픽셀 크기를 월드 좌표 기준으로 변환할 때 PixelPerUnit 값을 어떻게 활용해야 하는지 궁금합니다. [answer] | Explosion 이펙트 스프라이트의 실제 픽셀 크기를 월드 좌표(유닛) 기준으로 변환할 때는 스프라이트의 픽셀 단위당 유닛 수(PixelPerUnit, ppu) 값을 분母(분모)로 사용하여 나누어 주어야 합니다. 제공된 `Explode()` 함수 예제를 기준으로 구체적인 변환 과정은 다음과 같습니다. 1. **픽셀 크기 가져오기**: 애니메이션 클립의 첫 프레임 스프라이트(`firstFrameSprite`)의 `Width`와 `Height`를 가져와 픽셀 단위 벡터(`firstSpriteSizeInPixel`)로 생성합니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 완성된 `Explode()` 함수 전체는 아래와 같습니다. ```lua void Explode() { local shape = BoxShape(Vector2.zero, Vector2.one, 0) -- 폭발 이펙트 sprite 사이즈를 가져와 공격 영역으로 설정 _ResourceService:PreloadAsync({self.ExplodeSpriteRUID}, function() if not isvalid(self.Firer) and n

[task] | instruction_following [pass] | ⏳ 미판정 [title] | 캐릭터가 발사체로 몬스터 공격하기 [question] | 발사체와 이펙트의 SpriteRUID를 변경하는 방법을 3문장 이내로 설명하세요. [answer] | 발사체와 이펙트 엔티티에 붙은 스크립트의 `SpriteRUID` 프로퍼티 값을 원하는 리소스 ID 문자열로 변경합니다. 이후 해당 엔티티의 `SpriteRendererComponent`를 통해 `SpriteRUID`를 설정하거나, 컴포넌트 초기화 시점에 직접 값을 대입해 적용합니다. 이를 통해 크리에이터가 원하는 외형의 원거리 공격 스킬을 구현할 수 있습니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | **[시작]** 버튼을 누른 뒤 테스트해 봅시다. 공격 키를 누르면 발사체가 날아가고 몬스터에게 닿거나 일정 시간이 지나면 폭발합니다. # 응용하기 발사체 및 이펙트의 **SpriteRUID**를 변경하거나 대미지, 속도 등 여러 가지 프로퍼티를 변경하여 크리에이터가 원하는 원거리 공격을 구현할 수 있습니다. 본 가이드를 참고하여 크리에이터의 개성을 살린 원거리 공격 스킬을 만들어봅시다.

[task] | instruction_following [pass] | ⏳ 미판정 [title] | 캐릭터가 발사체로 몬스터 공격하기 [question] | 대미지와 속도를 포함한 발사체 프로퍼티 조정 예시를 코드만 출력하고 설명은 주석으로 작성하세요. [answer] | ```lua Property: [Sync] number Damage = 10 [Sync] number Speed = 5 Method: [server only] void OnBeginPlay() { -- 발사체의 초기 대미지 값을 설정합니다. self.Damage = 15 -- 발사체의 이동 속도를 설정합니다. self.Speed = 8 } ``` [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | **[시작]** 버튼을 누른 뒤 테스트해 봅시다. 공격 키를 누르면 발사체가 날아가고 몬스터에게 닿거나 일정 시간이 지나면 폭발합니다. # 응용하기 발사체 및 이펙트의 **SpriteRUID**를 변경하거나 대미지, 속도 등 여러 가지 프로퍼티를 변경하여 크리에이터가 원하는 원거리 공격을 구현할 수 있습니다. 본 가이드를 참고하여 크리에이터의 개성을 살린 원거리 공격 스킬을 만들어봅시다.

[task] | instruction_following [pass] | ⏳ 미판정 [title] | 캐릭터가 발사체로 몬스터 공격하기 [question] | 몬스터의 TriggerComponent 에서 CollisionGroup 을 설정해야 하는 대상 몬스터 종류 3가지를 표로 정리하세요. [answer] | 몬스터의 `TriggerComponent`에서 `CollisionGroup`을 설정해야 하는 대상 몬스터 종류는 총 3가지입니다. | 몬스터 종류 | | :--- | | StaticMonster | | MoveMonster | | ChaseMonster | [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 > 본 가이드는 아래의 순서로 이어지는 과정입니다. > 1편. [원거리 발사체 만들기](/docs?postId=935) > **▶ 2편.** [**캐릭터가 발사체로 몬스터 공격하기**](/docs?postId=937) 원거리 발사체를 날려서 몬스터를 처치하는 월드를 만들어보는 마지막 과정입니다. 이제 캐릭터가 발사체로 몬스터를 공격하도록 만들어봅시다. # 공격 키 누르면 발사체 날리기 1. **PlayerAttack** 스크립트를 열고 아래와 같이 프로퍼티를 추가합니다. ```lua Prop

[task] | instruction_following [pass] | ⏳ 미판정 [title] | 캐릭터가 발사체로 몬스터 공격하기 [question] | PlayerAttack 스크립트의 AttackNormal() 함수에서 발사체 생성 시 좌우 방향에 따라 ProjectileOffset 의 x 좌표가 어떻게 변경되는지 3문장 이내로 설명하세요. [answer] | 캐릭터의 시선 방향이 왼쪽일 때 `lookLeft` 변수가 true로 설정됩니다. 이 경우 `projectileOffset.x` 값에 마이너스 부호가 붙어 좌표가 반전됩니다. 반대로 오른쪽을 보고 있을 때는 오프셋이 그대로 유지되어 발사체가 정방향으로 생성됩니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 > 본 가이드는 아래의 순서로 이어지는 과정입니다. > 1편. [원거리 발사체 만들기](/docs?postId=935) > **▶ 2편.** [**캐릭터가 발사체로 몬스터 공격하기**](/docs?postId=937) 원거리 발사체를 날려서 몬스터를 처치하는 월드를 만들어보는 마지막 과정입니다. 이제 캐릭터가 발사체로 몬스터를 공격하도록 만들어봅시다. # 공격 키 누르면 발사체 날리기 1. **PlayerAttack** 스크립트를 열고 아래와 같이 프로퍼티를 추가합니다. ```lua Prop

[task] | instruction_following [pass] | ⏳ 미판정 [title] | 캐릭터가 발사체로 몬스터 공격하기 [question] | 발사체가 몬스터에게 닿거나 일정 시간 후 폭발하는 작동 원리를 단계별 번호 목록으로 정리하세요. [answer] | 발사체가 몬스터에게 닿거나 일정 시간 후 폭발하는 작동 원리는 다음과 같습니다. 1. 플레이어의 공격 키 입력을 감지합니다. 2. 발사체 엔티티를 생성하고 지정된 방향으로 발사합니다. 3. 발사체가 몬스터와 충돌하는지 또는 설정된 지속 시간이 만료되었는지 지속적으로 확인합니다. 4. 몬스터와 충돌하거나 시간이 지나면 발사체를 폭발 상태로 전환합니다. 5. 발사체와 관련된 이펙트를 재생합니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | **[시작]** 버튼을 누른 뒤 테스트해 봅시다. 공격 키를 누르면 발사체가 날아가고 몬스터에게 닿거나 일정 시간이 지나면 폭발합니다. # 응용하기 발사체 및 이펙트의 **SpriteRUID**를 변경하거나 대미지, 속도 등 여러 가지 프로퍼티를 변경하여 크리에이터가 원하는 원거리 공격을 구현할 수 있습니다. 본 가이드를 참고하여 크리에이터의 개성을 살린 원거리 공격 스킬을 만들어봅시다.

[task] | single_turn [pass] | ⏳ 미판정 [title] | 원거리 발사체 만들기 [question] | TriggerEnterEvent 핸들러에서 isvalid(TriggerBodyEntity.Monster) == false 조건을 확인하고 return을 처리하는 이유는 무엇인가요? [answer] | `TriggerEnterEvent` 핸들러에서 `isvalid(TriggerBodyEntity.Monster) == false` 조건을 확인하고 `return`을 처리하는 이유는, **충돌한 대상이 몬스터가 아닌 경우(예: 플레이어, 다른 발사체, 지형, 오브젝트 등) 불필요한 폭발 처리를 방지하기 위해서**입니다. 원거리 발사체는 몬스터와 충돌할 때만 폭발하여 피해를 주어야 합니다. 만약 충돌한 대상이 몬스터가 아니라면, 해당 발사체는 폭발하지 않고 그대로 통과하거나 다른 동작을 수행해야 할 수 있습니다. `isvalid(Tri [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | fect(self.ExplodeSpriteRUID, self.Entity, effectPosition, 0, Vector3.one * self.EffectScale, false, options) -- 발사체 제거 self.Entity:Destroy() end) } ``` 10. 발사체가 몬스터에 충돌하면 폭발하도록 처리하기 위해 이벤트 핸들러에 **TriggerEnterEvent**를 추가합니다. 실행 공간은 **server only**로

[task] | single_turn [pass] | ⏳ 미판정 [title] | 원거리 발사체 만들기 [question] | 발사체가 적중했을 때 `self.Entity:Destroy()`를 호출하여 즉시 제거하는 방식과, 특정 시간 이후에 제거하는 방식의 차이점과 장단점이 무엇인가요? [answer] | 제공된 참고 문서에는 발사체 적중 시 `self.Entity:Destroy()`를 호출하여 **즉시 제거**하는 방식에 대한 코드와 설명만 포함되어 있습니다. 특정 시간 이후에 제거하는 방식(예: `_TimerService:SetTimer` 등을 이용한 지연 제거)에 대한 설명, 해당 방식의 코드 예제, 그리고 두 방식 간의 차이점 및 장단점에 대한 정보는 참고 문서에 **존재하지 않습니다.** 따라서 문서 근거 내에서 답변할 수 있는 내용은 다음과 같습니다. **1. 즉시 제거 방식 (`self.Entity:Destroy() [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 9. 폭발 이펙트를 재생하고 발사체를 없애기 위해 `Explode()` 함수의 위 내용에 이어서 아래 내용을 작성합니다. ```lua -- 폭발 이펙트 재생 local effectPosition = Vector3(transform.Position.x + effectOffset.x, transform.Position.y + effectOffset.y, transform.Position.z) local options = { ["FlipX"] = not self.ToLeft } _EffectService:PlayEff

[task] | single_turn [pass] | ⏳ 미판정 [title] | 원거리 발사체 만들기 [question] | BoxShape의 Size와 Position을 계산할 때 PPU(픽셀당 유닛)와 PivotPixel을 왜 반드시 고려해야 하는지 궁금합니다. [answer] | 발사체의 폭발 이펙트가 스크린 상의 시각적 크기와 실제 게임 로직에서의 공격 범위(Hitbox)가 일치하도록 하기 위해 PPU(Pixel Per Unit)와 PivotPixel을 반드시 고려해야 합니다. 메이플스토리 월드의 리소스(스프라이트)는 픽셀 단위로 정의되지만, 게임 월드의 좌표계는 유닛(Unit) 단위로 동작합니다. 따라서 스프라이트의 픽셀 정보를 그대로 공격 영역에 적용하면 해상도나 스프라이트 크기에 따라 공격 범위가 비정상적으로 커지거나 작아지는 문제가 발생합니다. 1. **PPU (Pixel Per Unit) 고려 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 7. 발사체의 공격 영역을 설정하고 폭발 이펙트를 재생하기 위해 `Explode()` 함수를 추가합니다. ```lua void Explode() { local shape = BoxShape(Vector2.zero, Vector2.one, 0) -- 폭발 이펙트 sprite 사이즈를 가져와 공격 영역으로 설정 _ResourceService:PreloadAsync({self.ExplodeSpriteRUID}, function() if not

[task] | single_turn [pass] | ⏳ 미판정 [title] | 원거리 발사체 만들기 [question] | 발사체의 생명주기를 관리하기 위해 _TimerService:SetTimerOnce를 사용하여 발사체 생성 후 일정 시간 후 자동으로 파괴되도록 설정하는 코드는 어떻게 작성하나요? [answer] | 발사체의 생명주기를 관리하여 일정 시간 후 자동으로 파괴되도록 설정하려면, 발사체가 생성될 때 실행되는 `OnBeginPlay` 메서드에서 `_TimerService:SetTimerOnce`를 사용해야 합니다. 아래는 발사체 스크립트 컴포넌트에서 3초 후 자동으로 발사체를 파괴하는 코드 예시입니다. ```lua Method: [server only] void OnBeginPlay () { -- 3초 후 발사체를 파괴하는 함수를 예약 _TimerService:SetTimerOnce(function() [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | fect(self.ExplodeSpriteRUID, self.Entity, effectPosition, 0, Vector3.one * self.EffectScale, false, options) -- 발사체 제거 self.Entity:Destroy() end) } ``` 10. 발사체가 몬스터에 충돌하면 폭발하도록 처리하기 위해 이벤트 핸들러에 **TriggerEnterEvent**를 추가합니다. 실행 공간은 **server only**로

[task] | single_turn [pass] | ⏳ 미판정 [title] | 범용 리소스 모음 [question] | 클릭 안내 스프라이트의 경우 @cols=1:@rows=3 표기처럼 여러 프레임이 있는 리소스의 RUID는 어떻게 구분해서 가져오나요? [answer] | 제공된 참고 문서에는 `@cols=1:@rows=3:클릭`과 같은 표기가 포함된 RUID가 목록에 나열되어 있지만, **이 표기 자체가 RUID를 구분하는 방식인지, 아니면 리소스 메타데이터(프레임 구성)를 설명하는 용도인지에 대한 설명이 없습니다.** 또한, 문서에는 특정 RUID에서 개별 프레임을 추출하거나 인덱스(예: 0번째, 1번째 프레임)를 지정하여 가져오는 API나 mLua 코드 예제가 포함되어 있지 않습니다. 따라서, 현재 제공된 문서 기준으로 **여러 프레임이 있는 리소스의 RUID를 어떻게 구분해서 가져오는지(개 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 메이플스토리 월드에서는 원작의 풍부한 리소스를 제공하고 있습니다. 크리에이터는 **Preset List**와 **리소스 스토리지**, **MSW 리소스 조회 페이지**에서 다양한 리소스를 사용할 수 있습니다. 원작 리소스의 양이 워낙 방대하기 때문에 원하는 리소스를 찾기 어려울 때가 종종 있습니다. 크리에이터들이 자주 찾을 만한 리소스를 소개합니다. > **더 알아보기** > 메이플스토리 월드 팀은 보다 편리한 리소스 이용 환경을 만들기 위해 꾸준히 노력하고 있습니다. > 여기서 소개되는 리소스는 앞으로 손쉽게 검색할 수 있도록

[task] | two_turn [pass] | ⏳ 미판정 [title] | 원거리 발사체 만들기 [question] | `Explode()` 함수에서 폭발 이펙트의 스프라이트 크기를 기반으로 공격 영역(`BoxShape`)의 위치와 크기를 계산하는 로직이 어떻게 동작하나요? [answer] | `Explode()` 함수는 폭발 이펙트 스프라이트의 실제 렌더링 크기를 정확히 반영하여 공격 판정 영역(`BoxShape`)을 설정하는 로직을 사용합니다. 이 과정은 다음과 같은 단계로 진행됩니다. **1. 스프라이트 기본 정보 추출** 먼저 리소스 서비스(`_ResourceService`)를 통해 폭발 이펙트 스프라이트를 로드하고, 첫 번째 프레임(`Frames[1]`)의 스프라이트 정보를 가져옵니다. 여기서 다음 값들을 추출합니다. * `firstSpriteSizeInPixel`: 스프라이트의 픽셀 단위 너비와 높이 (` [followup] | `shape.Position` 계산 시 `transform.ZRotation`과 `self.ToLeft` 플래그가 오프셋(`offsetX`, `offsetY`)에 어떻게 영향을 미치며, 좌우 방향이 반대일 때 좌표가 어떻게 반전되는지 코드 흐름을 자세히 설명해 주세요. [followup_answer] | `shape.Position` 계산에서 `transform.ZRotation`과 `self.ToLeft` 플래그는 공격 판정 영역(`BoxShape`)의 중심 위치가 스프라이트의 시각적 중심과 정확히 일치하도록 오프셋을 보정하는 역할을 합니다. 코드 흐름은 다음과 같이 진행됩니다. **1. `transform.ZRotation` (회전 각도)의 영향: 2D 회전 행렬 적용** `positionOffset`은 스프라이트가 회전하지 않은 상태(각도 0도)에서의 중심 보정 값입니다. 엔티티가 특정 각도로 회전되어 있다면, 이 오프셋 [scores] | [judge_reason] | [source_doc] | 완성된 `Explode()` 함수 전체는 아래와 같습니다. ```lua void Explode() { local shape = BoxShape(Vector2.zero, Vector2.one, 0) -- 폭발 이펙트 sprite 사이즈를 가져와 공격 영역으로 설정 _ResourceService:PreloadAsync({self.ExplodeSpriteRUID}, function() if not isvalid(self.Firer) and n

[task] | instruction_following [pass] | ⏳ 미판정 [title] | 범용 리소스 모음 [question] | '카운트다운 효과음' 그룹의 RUID를 변수에 할당하는 mLua 코드만 출력하고, 각 변수 선언부에 해당 효과음의 이름을 주석으로 적어주세요. [answer] | ```lua Property: [None] string BasicCountdownRUID = "7ca9fa1a7b384c1caae2449eee77d3ba" -- 기본 카운트다운 string TickingSoundRUID = "d2aa7ffc04c64c97be26de31dcf3cb2c" -- 째깍째깍 효과음 ``` [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | | 항목 | 설명 | RUID | | --- | --- | --- | | @cols=1:@rows=2:점프 효과음 | 기본 점프 효과음 |d881a73a0700404a91bcf753474274c3 | | 귀여운 기본 점프 효과음 |dfca55f443464fd5801952efeb50d819 | | @cols=1:@rows=4:버튼 효과음 | 기본 버튼 효과음 | 7eda004ded944e459f1fbb16c7f0f3f4 | | 기본 버튼 효과음2 | cd0bd46d7f454640b82c9dfff0c6677b | | 버튼 클릭

[task] | code [pass] | ⏳ 미판정 [title] | 원거리 발사체 만들기 [question] | 발사체의 `TriggerComponent`에 `HandleTriggerEnterEvent`를 구현하여 `CollisionGroup`이 'Projectile'인 발사체가 특정 그룹의 몬스터와 충돌할 때 `SpriteRendererComponent`의 프로퍼티를 변경하여 시각적 피드백을 주는 스크립트를 작성해줘 [answer] | 참고 문서에 제공된 정보만 근거로 답변을 드리겠습니다. 요청하신 스크립트는 `HandleTriggerEnterEvent` 이벤트 핸들러에서 `CollisionGroup`이 'Projectile'인 발사체가 특정 그룹의 몬스터와 충돌할 때 `SpriteRendererComponent`의 프로퍼티를 변경하는 로직입니다. 다만, 참고 문서에 **`CollisionGroup`을 직접적으로 판별하는 API(예: `event.TriggerBodyEntity.CollisionGroup` 등)가 명시되어 있지 않습니다.** 문서의 예제에서는 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 > 본 가이드는 아래의 순서로 이어지는 과정입니다. > **▶ 1편.** [**원거리 발사체 만들기**](/docs?postId=935) > 2편. [캐릭터가 발사체로 몬스터 공격하기](/docs?postId=937) 원거리 발사체를 날려서 몬스터를 처치하는 월드를 만들어 보기 위한 첫 번째 과정입니다. 원거리 발사체 모델을 만들고 관련 스크립트 컴포넌트를 작성하는 예제를 살펴봅시다. # 월드 템플릿 제작 편의를 위해 "기본" 템플릿으로 월드 생성하는 것을 권장합니다. # 발사체 모델 먼저 발사체 모델

[task] | instruction_following [pass] | ⏳ 미판정 [title] | 범용 리소스 모음 [question] | '버튼 효과음' 항목에 포함된 모든 효과음의 이름과 RUID를 쉼표로 구분하여 한 줄에 나열하고, 설명 문장은 추가하지 마세요. [answer] | 기본 버튼 효과음, 7eda004ded944e459f1fbb16c7f0f3f4, 기본 버튼 효과음2, cd0bd46d7f454640b82c9dfff0c6677b, 버튼 클릭 효과음, 972843e759204d3e9ad84e7d3fa94f83, 키보드 입력 효과음, de344b5f1bb444189d57dc52fca2bb14 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | | 항목 | 설명 | RUID | | --- | --- | --- | | @cols=1:@rows=2:점프 효과음 | 기본 점프 효과음 |d881a73a0700404a91bcf753474274c3 | | 귀여운 기본 점프 효과음 |dfca55f443464fd5801952efeb50d819 | | @cols=1:@rows=4:버튼 효과음 | 기본 버튼 효과음 | 7eda004ded944e459f1fbb16c7f0f3f4 | | 기본 버튼 효과음2 | cd0bd46d7f454640b82c9dfff0c6677b | | 버튼 클릭

[task] | instruction_following [pass] | ⏳ 미판정 [title] | 범용 리소스 모음 [question] | 문서에서 제공된 '레벨업 효과음' 카테고리의 RUID 목록을 추출하여 '효과음 이름', 'RUID' 2열 구조의 마크다운 표로만 출력하세요. [answer] | | 효과음 이름 | RUID | | --- | --- | | 메이플스토리 레벨업 | c198d87b06b24707864b1ac73345cca8 | | 레벨업 효과음1 | 85009f4dcc7d4536b732aa54b76d05c9 | | 레벨업 효과음2 | dd47946756f341538f6874dbfc4ce340 | | 레벨업 효과음3 | 4b0b169b519a42e8803e596911d9f96f | [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | | 항목 | 설명 | RUID | | --- | --- | --- | | @cols=1:@rows=2:점프 효과음 | 기본 점프 효과음 |d881a73a0700404a91bcf753474274c3 | | 귀여운 기본 점프 효과음 |dfca55f443464fd5801952efeb50d819 | | @cols=1:@rows=4:버튼 효과음 | 기본 버튼 효과음 | 7eda004ded944e459f1fbb16c7f0f3f4 | | 기본 버튼 효과음2 | cd0bd46d7f454640b82c9dfff0c6677b | | 버튼 클릭

[task] | instruction_following [pass] | ⏳ 미판정 [title] | 인벤토리 스크립트 작성하기 [question] | 인벤토리 스크립트에서 수행해야 할 3가지 핵심 역할을 단계별 번호 목록으로 나열해 주세요. [answer] | 인벤토리 스크립트에서 수행해야 할 3가지 핵심 역할은 다음과 같습니다. 1. 인벤토리의 동작 제어 2. 인벤토리 UI에 변경되는 아이템 정보 전달 3. DB에 아이템 정보 저장 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 > 본 가이드는 아래의 순서로 이어지는 과정입니다. > 1편. [몬스터를 스폰해보자](/docs?postId=204) > 2편. [몬스터 드롭 아이템과 인벤토리 UI 만들기](/docs?postId=943) > **▶ 3편.** [**인벤토리 스크립트 작성하기**](/docs?postId=942) > 4편. [인벤토리 UI 스크립트 작성하기](/docs?postId=946) > 5편. [아이템 스크립트 작성하기](/docs?postId=947) 지난 시간에 이어 이번 과정에서는 인벤토리 스크립트를 작성해 보겠

[task] | single_turn [pass] | ⏳ 미판정 [title] | 원거리 발사체 만들기 [question] | 발사체가 몬스터와 충돌했을 때 폭발 효과를 발생시키고 즉시 발사체를 삭제하려면 어떤 이벤트 핸들러와 메서드를 조합해야 하나요? [answer] | 발사체가 몬스터와 충돌했을 때 폭발 효과를 발생시키고 발사체를 삭제하려면 `TriggerEnterEvent` 이벤트 핸들러와 `Explode` 메서드를 조합하여 사용합니다. 1. **이벤트 핸들러 (`HandleTriggerEnterEvent`)**: - 실행 공간은 **server only**로 설정해야 합니다. - 충돌한 엔티티(`event.TriggerBodyEntity`)가 실제로 몬스터인지 확인하기 위해 `isvalid(TriggerBodyEntity.Monster)` 로직을 수행합니다. - 몬스터일 경우 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | fect(self.ExplodeSpriteRUID, self.Entity, effectPosition, 0, Vector3.one * self.EffectScale, false, options) -- 발사체 제거 self.Entity:Destroy() end) } ``` 10. 발사체가 몬스터에 충돌하면 폭발하도록 처리하기 위해 이벤트 핸들러에 **TriggerEnterEvent**를 추가합니다. 실행 공간은 **server only**로

[task] | instruction_following [pass] | ⏳ 미판정 [title] | 인벤토리 스크립트 작성하기 [question] | 인벤토리 스크립트의 주요 기능을 설명할 때 3문장 이내로 요약해 주세요. [answer] | 인벤토리 스크립트는 인벤토리의 동작을 제어하고, 인벤토리 UI에 변경되는 아이템 정보를 전달하며, DB에 아이템 정보를 저장하도록 처리합니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 > 본 가이드는 아래의 순서로 이어지는 과정입니다. > 1편. [몬스터를 스폰해보자](/docs?postId=204) > 2편. [몬스터 드롭 아이템과 인벤토리 UI 만들기](/docs?postId=943) > **▶ 3편.** [**인벤토리 스크립트 작성하기**](/docs?postId=942) > 4편. [인벤토리 UI 스크립트 작성하기](/docs?postId=946) > 5편. [아이템 스크립트 작성하기](/docs?postId=947) 지난 시간에 이어 이번 과정에서는 인벤토리 스크립트를 작성해 보겠

[task] | instruction_following [pass] | ⏳ 미판정 [title] | 범용 리소스 모음 [question] | 스프라이트 중 '화살표 및 안내' 카테고리에서 제공하는 RUID 목록을 단계별 번호 목록으로 출력해. [answer] | '화살표 및 안내' 카테고리에서 제공하는 스프라이트 RUID 목록입니다. 1. 위 화살표: `621d0abe16e84a79a4e2cd3df1fad1a0` 2. 아래 화살표: `69701c2acf63415ea922119c25f40982` 3. 왼쪽 화살표: `cdfde5ae11d34639b727210bac3ec56f` 4. 아래쪽 화살표: `13266cc409e645ba8502c8e467eefdb5` 5. 포탈 안내: `d6811607f46c42f892bbf9fc4944f3d0` 6. 점프 안내: `9bf47489799f4ccd8f [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 메이플스토리 월드에서는 원작의 풍부한 리소스를 제공하고 있습니다. 크리에이터는 **Preset List**와 **리소스 스토리지**, **MSW 리소스 조회 페이지**에서 다양한 리소스를 사용할 수 있습니다. 원작 리소스의 양이 워낙 방대하기 때문에 원하는 리소스를 찾기 어려울 때가 종종 있습니다. 크리에이터들이 자주 찾을 만한 리소스를 소개합니다. > **더 알아보기** > 메이플스토리 월드 팀은 보다 편리한 리소스 이용 환경을 만들기 위해 꾸준히 노력하고 있습니다. > 여기서 소개되는 리소스는 앞으로 손쉽게 검색할 수 있도록

[task] | single_turn [pass] | ⏳ 미판정 [title] | 원거리 발사체 만들기 [question] | 몬스터가 아닌 일반 오브젝트나 플레이어와 충돌했을 때도 발사체가 폭발하도록 하려면 HandleTriggerEnterEvent 내부의 조건문을 어떻게 수정해야 하나요? [answer] | 참고 문서에 제공된 `HandleTriggerEnterEvent` 코드는 발사체가 **몬스터**와 충돌할 때만 폭발하도록 `isvalid(TriggerBodyEntity.Monster) == false` 조건으로 몬스터가 아닌 경우를 제외하고 있습니다. 문서에는 플레이어와의 충돌이나 일반 오브젝트와의 충돌에 대한 구체적인 처리 로직(예: `PlayerComponent` 접근 방식, 오브젝트 식별 방법)이 발사체 폭발 컨텍스트에서 명시되어 있지 않습니다. 따라서 "몬스터가 아닌 일반 오브젝트나 플레이어와 충돌했을 때도 폭발"하도록 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | fect(self.ExplodeSpriteRUID, self.Entity, effectPosition, 0, Vector3.one * self.EffectScale, false, options) -- 발사체 제거 self.Entity:Destroy() end) } ``` 10. 발사체가 몬스터에 충돌하면 폭발하도록 처리하기 위해 이벤트 핸들러에 **TriggerEnterEvent**를 추가합니다. 실행 공간은 **server only**로

[task] | code [pass] | ⏳ 미판정 [title] | 인벤토리 스크립트 작성하기 [question] | _InventoryService 를 사용하여 아이템을 추가하고, _DBService 를 통해 변경된 인벤토리 상태를 저장하며, 인벤토리 UI 컴포넌트에게 업데이트 이벤트를 전송하는 인벤토리 스크립트를 작성해줘 [answer] | 제공된 참고 문서에는 `_InventoryService`, `_DBService`, 그리고 인벤토리 UI에 업데이트 이벤트를 전송하는 관련 API나 메서드 설명이 포함되어 있지 않습니다. 문서에는 몬스터가 파괴될 때 드롭 아이템을 스폰하기 위해 `_TimerService`와 `_EntityService`를 사용하는 예제와 `DropItemList` 프로퍼티를 관리하는 로직만 다루고 있으며, 인벤토리 시스템 자체의 구현(아이템 추가, DB 저장, UI 업데이트)에 대한 API 정보는 없습니다. 따라서 제공된 문서 내용을 근거로 ` [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 > 본 가이드는 아래의 순서로 이어지는 과정입니다. > 1편. [몬스터를 스폰해보자](/docs?postId=204) > 2편. [몬스터 드롭 아이템과 인벤토리 UI 만들기](/docs?postId=943) > **▶ 3편.** [**인벤토리 스크립트 작성하기**](/docs?postId=942) > 4편. [인벤토리 UI 스크립트 작성하기](/docs?postId=946) > 5편. [아이템 스크립트 작성하기](/docs?postId=947) 지난 시간에 이어 이번 과정에서는 인벤토리 스크립트를 작성해 보겠

[task] | instruction_following [pass] | ⏳ 미판정 [title] | 인벤토리 스크립트 작성하기 [question] | 이 가이드가 속한 학습 과정의 순서와 각 편 제목을 표로 정리해서 보여 주세요. [answer] | 몬스터 사냥과 아이템 획득 인벤토리 스크립트 작성하기 학습 과정의 순서와 제목은 다음과 같습니다. | 순서 | 제목 | | :--- | :--- | | 1편 | 몬스터를 스폰해보자 | | 2편 | 몬스터 드롭 아이템과 인벤토리 UI 만들기 | | 3편 | 인벤토리 스크립트 작성하기 | | 4편 | 인벤토리 UI 스크립트 작성하기 | | 5편 | 아이템 스크립트 작성하기 | [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 > 본 가이드는 아래의 순서로 이어지는 과정입니다. > 1편. [몬스터를 스폰해보자](/docs?postId=204) > 2편. [몬스터 드롭 아이템과 인벤토리 UI 만들기](/docs?postId=943) > **▶ 3편.** [**인벤토리 스크립트 작성하기**](/docs?postId=942) > 4편. [인벤토리 UI 스크립트 작성하기](/docs?postId=946) > 5편. [아이템 스크립트 작성하기](/docs?postId=947) 지난 시간에 이어 이번 과정에서는 인벤토리 스크립트를 작성해 보겠

[task] | instruction_following [pass] | ⏳ 미판정 [title] | 캐릭터가 발사체로 몬스터 공격하기 [question] | AttackNormal() 함수의 실행 공간 설정과 발사체 생성 후 방향 지정 및 발사 처리를 수행하는 코드만 출력하고 설명은 주석으로 작성하세요. [answer] | ```lua Method: [server only] void AttackNormal() { -- 플레이어 컨트롤러와 트랜스포메이션 컴포넌트 참조 local playerController = self.Entity.PlayerControllerComponent local transform = self.Entity.TransformComponent -- 컴포넌트가 존재하는지 확인 if playerController and transform then -- 플레이어의 시선 방향이 왼 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 > 본 가이드는 아래의 순서로 이어지는 과정입니다. > 1편. [원거리 발사체 만들기](/docs?postId=935) > **▶ 2편.** [**캐릭터가 발사체로 몬스터 공격하기**](/docs?postId=937) 원거리 발사체를 날려서 몬스터를 처치하는 월드를 만들어보는 마지막 과정입니다. 이제 캐릭터가 발사체로 몬스터를 공격하도록 만들어봅시다. # 공격 키 누르면 발사체 날리기 1. **PlayerAttack** 스크립트를 열고 아래와 같이 프로퍼티를 추가합니다. ```lua Prop

[task] | single_turn [pass] | ⏳ 미판정 [title] | 캐릭터가 발사체로 몬스터 공격하기 [question] | PlayerControllerComponent 의 LookDirectionX 값이 0 이거나 null 일 때 발사체 좌우 방향 지정에 어떤 문제가 발생하는지 확인해 주세요. [answer] | 제공된 참고 문서에는 `PlayerControllerComponent.LookDirectionX` 값이 `0` 또는 `null`일 때의 구체적인 동작이나 에러 처리 방식에 대한 설명이 포함되어 있지 않습니다. 문서에서 확인 가능한 내용만으로는 `LookDirectionX`가 `0`일 경우 `lookLeft` 변수가 `false`가 되어 오른쪽 방향으로 발사체가 날아가는 것만 추측할 수 있으며, `null` 값에 대한 처리 로직은 문서에 언급되지 않았습니다. 따라서 해당 값들이 발사체 좌우 방향 지정에 어떤 문제가 발생하는지에 대해 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 > 본 가이드는 아래의 순서로 이어지는 과정입니다. > 1편. [원거리 발사체 만들기](/docs?postId=935) > **▶ 2편.** [**캐릭터가 발사체로 몬스터 공격하기**](/docs?postId=937) 원거리 발사체를 날려서 몬스터를 처치하는 월드를 만들어보는 마지막 과정입니다. 이제 캐릭터가 발사체로 몬스터를 공격하도록 만들어봅시다. # 공격 키 누르면 발사체 날리기 1. **PlayerAttack** 스크립트를 열고 아래와 같이 프로퍼티를 추가합니다. ```lua Prop

[task] | single_turn [pass] | ⏳ 미판정 [title] | 원거리 발사체 만들기 [question] | LoadAnimationClipAndWait로 가져온 첫 번째 프레임의 PivotPixel이 공격 영역 위치 보정에 어떻게 영향을 미치는지 구체적으로 알려 주세요. [answer] | `LoadAnimationClipAndWait`로 가져온 애니메이션 클립의 첫 번째 프레임(`clip.Frames[1]`)에서 `PivotPixel`은 스프라이트의 회전 기준점(Pivot)이 픽셀 단위에서 어디에 위치하는지를 나타냅니다. 이 값은 공격 영역의 최종 위치를 계산할 때 **오프셋 보정**에 핵심적으로 사용됩니다. 구체적인 영향은 다음과 같은 단계로 계산됩니다. 1. **스프라이트 중심과 피벗의 차이 계산**: 스프라이트의 픽셀 크기(`firstSpriteSizeInPixel`)의 절반(즉, 스프라이트의 기하 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 완성된 `Explode()` 함수 전체는 아래와 같습니다. ```lua void Explode() { local shape = BoxShape(Vector2.zero, Vector2.one, 0) -- 폭발 이펙트 sprite 사이즈를 가져와 공격 영역으로 설정 _ResourceService:PreloadAsync({self.ExplodeSpriteRUID}, function() if not isvalid(self.Firer) and n

[task] | single_turn [pass] | ⏳ 미판정 [title] | 캐릭터가 발사체로 몬스터 공격하기 [question] | TriggerComponent 의 CollisionGroup 을 Monster 로 설정해야 하는 기술적 근거와, 이 설정을 누락했을 때 발생하는 오류 현상은 무엇인가요? [answer] | 제공된 참고 문서에는 `TriggerComponent`의 `CollisionGroup`을 `Monster`로 설정해야 하는 **기술적 근거**나, 이 설정을 누락했을 때 발생하는 **구체적인 오류 현상(에러 메시지, 동작 중단 등)**에 대한 설명이 포함되어 있지 않습니다. 문서에서 확인할 수 있는 내용만으로는 다음 사항을 알 수 있습니다: 1. 발사체와 몬스터가 충돌하는 것을 체크하기 위해 충돌 그룹을 설정해야 합니다. 2. `StaticMonster`, `MoveMonster`, `ChaseMonster`에 `Trigger [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 > 본 가이드는 아래의 순서로 이어지는 과정입니다. > 1편. [원거리 발사체 만들기](/docs?postId=935) > **▶ 2편.** [**캐릭터가 발사체로 몬스터 공격하기**](/docs?postId=937) 원거리 발사체를 날려서 몬스터를 처치하는 월드를 만들어보는 마지막 과정입니다. 이제 캐릭터가 발사체로 몬스터를 공격하도록 만들어봅시다. # 공격 키 누르면 발사체 날리기 1. **PlayerAttack** 스크립트를 열고 아래와 같이 프로퍼티를 추가합니다. ```lua Prop

[task] | single_turn [pass] | ⏳ 미판정 [title] | 캐릭터가 발사체로 몬스터 공격하기 [question] | CalcDamage 함수의 override 키워드 사용과 attackInfo 파라미터가 실제 데미지 계산에 어떻게 활용되는지 알려주세요. [answer] | 제공된 참고 문서에는 `CalcDamage` 함수의 `override` 키워드 사용과 `attackInfo` 파라미터가 실제 데미지 계산에 어떻게 활용되는지에 대한 구체적인 설명이 없습니다. 문서에 포함된 코드 예시와 지침에서는 다음과 같이 `CalcDamage` 함수를 정의하고 있습니다: ```lua override int CalcDamage(Entity attacker, Entity defender, string attackInfo) { return self.Damage } ``` 또한 다른 예시에서는 다음과 같이 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 > 본 가이드는 아래의 순서로 이어지는 과정입니다. > 1편. [원거리 발사체 만들기](/docs?postId=935) > **▶ 2편.** [**캐릭터가 발사체로 몬스터 공격하기**](/docs?postId=937) 원거리 발사체를 날려서 몬스터를 처치하는 월드를 만들어보는 마지막 과정입니다. 이제 캐릭터가 발사체로 몬스터를 공격하도록 만들어봅시다. # 공격 키 누르면 발사체 날리기 1. **PlayerAttack** 스크립트를 열고 아래와 같이 프로퍼티를 추가합니다. ```lua Prop

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