[task] | code [pass] | ⏳ 미판정 [title] | 효과음 만들기 [question] | SetListenerEntity 메서드를 사용하여 _UserService.LocalPlayer를 리스너로 설정하고, SoundComponent의 Loop를 true로 하여 무한 재생되도록 하는 스크립트를 작성해줘 [answer] | `SoundComponent`의 `Loop` 프로퍼티를 `true`로 설정하고, `SetListenerEntity()` 메서드를 호출하여 `_UserService.LocalPlayer`를 리스너로 지정하는 스크립트입니다. 이 스크립트는 클라이언트에서만 실행되어야 하며(`[client only]`), 대상 엔티티에 `SoundComponent`가 이미 추가되어 있어야 합니다. `AudioClipRUID`에는 실제 사용할 음원의 RUID를 입력해야 합니다. ```lua Method: [client only] void OnBeginP [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 월드를 입체적으로 만들기 위해 [**SoundComponent**](/apiReference/Components/SoundComponent)와 [**SoundService**](/apiReference/Services/SoundService)를 활용해 음원을 재생하고, 때에 맞게 제어하는 방법을 소개합니다. # SoundComponent 월드를 더욱 입체적으로 만들기 위해 다양한 소리가 이곳저곳에서 재생되게 만들거나, 플레이어와 특정 엔티티의 거리에 따라 다른 음량으로 들리게 만들 수 있습니다. **Soun
[task] | instruction_following [pass] | ⏳ 미판정 [title] | 효과음 만들기 [question] | 문서 예시 코드에서 사운드와 이펙트를 재생하기 위해 사용된 서비스 변수 이름과 각 메서드 이름을 표의 2열로만 나열하세요. [answer] | | 서비스 변수 이름 | 메서드 이름 | | :--- | :--- | | _SoundService | PlaySound | | _EffectService | PlayEffect | [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 기본 공격 스킬에 이펙트 스킬과 효과음을 추가해 역동적으로 연출할 수 있습니다. 1. **MyDesk**에 새로운 **SkillSound** 스크립트 컴포넌트를 생성하고, **DefaultPlayer**에 추가합니다. 2. 이벤트 핸들러에 **KeyDownEvent**를 추가하고 아래와 같이 내용을 작성합니다. ```lua Event Handler: [clinet only] [service: InputService] HandleKeyDownEvent(KeyDownEvent event) { -- Parameters l
[task] | code [pass] | ⏳ 미판정 [title] | 행동 트리를 활용한 AI 만들기 [question] | AIComponent 를 사용하여 BTNodeType 에서 정의한 Wait 노드 객체를 생성하고 행동 트리에 연결하여 일정 시간 대기 후 다음 동작을 실행하는 스크립트를 작성해줘 [answer] | 참고 문서에는 `BTNodeType`을 정의하는 코드(예: `OnBehave`를 구현하는 노드 스크립트)와 `AIComponent`를 사용하여 노드 객체를 생성하는 것이 언급되어 있지만, **`BTNodeType`을 직접 생성하는 구체적인 API(예: `NewBTNode`, `CreateNode` 등)나 `AIComponent`에 노드를 추가/연결하는 구체적인 메서드 이름(예: `AddChild`, `SetRoot` 등)이 문서에 포함되어 있지 않습니다.** 따라서 문서에 있는 정보만 사용하여 `AIComponent`로 노드를 생 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 자식 노드가 Success 또는 Failure를 반환하면 부모 노드는 다음 자식 노드를 실행합니다. 그러나 자식 노드가 Running을 반환하면 부모 노드는 Running을 반환했던 자식 노드를 다음 프레임에 다시 실행합니다. 이 특성을 활용해 여러 프레임 동안 동작하는 노드를 만들 수 있습니다. 아래 그림과 같이 자식 노드 A, B, C가 있을 때 Sequence Node와 Selector Node의 경우 B 노드가 Running을 반환하는 동안 C 노드를 실행하지 않습니다. RandomSelector Node는 선택된 노드를 계
[task] | single_turn [pass] | ⏳ 미판정 [title] | 효과음 만들기 [question] | 음원 파일이 Resource Storage에 있는데도 AudioClipRUID에 값을 넣었을 때 소리가 안 나오는 오류의 원인은 무엇일까요? [answer] | 제공된 참고 문서에는 음원 파일이 Resource Storage에 존재함에도 불구하고 `AudioClipRUID`에 값을 넣었을 때 소리가 재생되지 않는 구체적인 오류 원인이나 디버깅 단계에 대한 정보가 포함되어 있지 않습니다. 문서에서 확인할 수 있는 사실은 다음과 같습니다: 1. `SoundComponent`는 **Resource Storage**의 **Audio RUID** 또는 크리에이터가 추가한 음원의 **RUID**를 활용합니다. 2. 예제 코드에서는 `self.Entity.SoundComponent.AudioCli [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 월드를 입체적으로 만들기 위해 [**SoundComponent**](/apiReference/Components/SoundComponent)와 [**SoundService**](/apiReference/Services/SoundService)를 활용해 음원을 재생하고, 때에 맞게 제어하는 방법을 소개합니다. # SoundComponent 월드를 더욱 입체적으로 만들기 위해 다양한 소리가 이곳저곳에서 재생되게 만들거나, 플레이어와 특정 엔티티의 거리에 따라 다른 음량으로 들리게 만들 수 있습니다. **Soun
[task] | single_turn [pass] | ⏳ 미판정 [title] | 효과음 만들기 [question] | 스크립트에서 사운드 볼륨을 조절하려면 어떤 인자를 전달해야 하나요? [answer] | `_SoundService:PlaySound` 메서드를 호출할 때 두 번째 인자로 볼륨을 전달합니다. 참고 문서의 예제에서 볼륨 `0.3`을 사용하도록 설정한 부분이 이를 보여줍니다. ```lua _SoundService:PlaySound("02fe29e7670c447cb23c4ee4e5bf5674", 0.3) ``` 따라서 사운드 ID 문자열 다음에 원하는 볼륨 값(예: `0.3`)을 숫자 타입으로 전달하면 됩니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 기본 공격 스킬에 이펙트 스킬과 효과음을 추가해 역동적으로 연출할 수 있습니다. 1. **MyDesk**에 새로운 **SkillSound** 스크립트 컴포넌트를 생성하고, **DefaultPlayer**에 추가합니다. 2. 이벤트 핸들러에 **KeyDownEvent**를 추가하고 아래와 같이 내용을 작성합니다. ```lua Event Handler: [clinet only] [service: InputService] HandleKeyDownEvent(KeyDownEvent event) { -- Parameters l
[task] | single_turn [pass] | ⏳ 미판정 [title] | 효과음 만들기 [question] | SoundService와 SoundComponent 중 엔티티에 직접 붙여 거리에 따라 음량을 조절하고 싶을 때는 어떤 것을 사용해야 하나요? [answer] | 엔티티에 직접 붙여 플레이어와 특정 엔티티의 거리에 따라 음량을 조절하고 싶을 때는 **SoundComponent**를 사용해야 합니다. **SoundComponent**는 엔티티에 추가하여 소리를 재생, 정지할 수 있으며, `SetListenerEntity()` 함수를 활용하면 특정 엔티티(예: 플레이어)와의 거리에 따라 가까워질수록 음량이 커지고 멀어질수록 음량이 0에 가까워지도록 자동으로 조정됩니다. 이 기능을 구현하기 위해 엔티티에 `SoundComponent`를 추가하고, 아래와 같이 스크립트 컴포넌트를 작성하여 함께 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 월드를 입체적으로 만들기 위해 [**SoundComponent**](/apiReference/Components/SoundComponent)와 [**SoundService**](/apiReference/Services/SoundService)를 활용해 음원을 재생하고, 때에 맞게 제어하는 방법을 소개합니다. # SoundComponent 월드를 더욱 입체적으로 만들기 위해 다양한 소리가 이곳저곳에서 재생되게 만들거나, 플레이어와 특정 엔티티의 거리에 따라 다른 음량으로 들리게 만들 수 있습니다. **Soun
[task] | instruction_following [pass] | ⏳ 미판정 [title] | 효과음 만들기 [question] | 문서의 KeyDownEvent 핸들러에서 LeftControl 키가 눌렸을 때 실행되는 두 가지 서비스 호출 문장을 코드 블록으로만 출력하세요. [answer] | ```lua _SoundService:PlaySound("02fe29e7670c447cb23c4ee4e5bf5674", 0.3) _EffectService:PlayEffect("01f39ee5971246ed8306bc471d44a1fd", self.Entity, self.Entity.TransformComponent.Position, 0, Vector3(1,1,1), false) ``` [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 기본 공격 스킬에 이펙트 스킬과 효과음을 추가해 역동적으로 연출할 수 있습니다. 1. **MyDesk**에 새로운 **SkillSound** 스크립트 컴포넌트를 생성하고, **DefaultPlayer**에 추가합니다. 2. 이벤트 핸들러에 **KeyDownEvent**를 추가하고 아래와 같이 내용을 작성합니다. ```lua Event Handler: [clinet only] [service: InputService] HandleKeyDownEvent(KeyDownEvent event) { -- Parameters l
[task] | single_turn [pass] | ⏳ 미판정 [title] | 효과음 만들기 [question] | OnBeginPlay에서 SoundComponent의 Loop를 true로 설정하고 Play를 호출한 뒤 wait(2)를 넣은 코드의 의도는 무엇인가요? [answer] | 제시된 예시 코드에서 `OnBeginPlay()` 함수 내에 `wait(2)`를 `Play()` 호출 뒤에 배치한 주된 의도는 **`SetListenerEntity()` 함수가 정상적으로 작동할 수 있도록 시간적 여유를 주는 것**입니다. 구체적인 흐름은 다음과 같습니다. 1. **음원 재생 시작**: `AudioClipRUID`와 `Loop`를 설정한 뒤 `Play()`를 호출하여 음원 재생을 즉시 시작합니다. 2. **2초 대기 (`wait(2)`)**: 음원 재생이 안정적으로 시작된 상태를 기다립니다. 3. **청취자 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 월드를 입체적으로 만들기 위해 [**SoundComponent**](/apiReference/Components/SoundComponent)와 [**SoundService**](/apiReference/Services/SoundService)를 활용해 음원을 재생하고, 때에 맞게 제어하는 방법을 소개합니다. # SoundComponent 월드를 더욱 입체적으로 만들기 위해 다양한 소리가 이곳저곳에서 재생되게 만들거나, 플레이어와 특정 엔티티의 거리에 따라 다른 음량으로 들리게 만들 수 있습니다. **Soun
[task] | two_turn [pass] | ⏳ 미판정 [title] | 카드와 UI 만들기 [question] | ScrollLayoutGroupComponent의 Constraint를 FixedColumnCount로 설정하고 ConstraintCount를 6으로 지정했을 때, 카드 수가 6의 배수가 아닌 경우(예: 10장) 레이아웃은 어떻게 처리되며, Spacing(95, 50)의 X, Y 값은 각각 어떤 방향으로의 간격을 의미합니까? [answer] | 제공된 참고 문서에는 `ScrollLayoutGroupComponent`의 `Constraint`가 `FixedColumnCount`이고 `ConstraintCount`가 6인 상태에서 카드 수가 6의 배수가 아닌 경우(예: 10장)의 구체적인 레이아웃 처리 방식(예: 마지막 행에 남은 카드가 왼쪽 정렬되는지, 빈 공간이 어떻게 채워지는지 등)에 대한 설명이 없습니다. 또한 `Spacing` 프로퍼티의 X, Y 값이 각각 어떤 방향(가로/세로)의 간격을 의미하는지에 대한 명시적인 정의도 문서에 포함되어 있지 않습니다. 문서에서는 [followup] | 카드가 10장일 때 2행째에 4개만 배치되는 구조인지 확인하고, Spacing의 X값(95)과 Y값(50)이 각각 가로 간격과 세로 간격에 해당한다는 점을 코드의 프로퍼티 설정 부분에서 어떻게 확인하는지 설명해주세요. [followup_answer] | 제공된 참고 문서에는 카드 수가 6의 배수가 아닐 때(예: 10장)의 구체적인 배치 결과(2행째에 4개만 배치되는지 여부)에 대한 설명이 없습니다. 또한 `Spacing`의 X값(95)과 Y값(50)이 각각 가로 간격과 세로 간격에 해당한다는 점을 코드의 프로퍼티 설정 부분에서 어떻게 확인하는지에 대한 설명도 문서에 포함되어 있지 않습니다. 문서에서는 `Spacing`이 "카드 사이의 간격"을 설정하는 값이며, 예시 값이 `95, 50`임을 확인할 수 있을 뿐, 각 축별 의미나 비배수 개수 배치 로직을 설명하지 않습니다. [scores] | [judge_reason] | [source_doc] | 이제 카드를 화면에 불러낼 차례입니다. 카드를 불러내기 위해선 **/ui/CardPairGameUI/UI_Board/UI_Blocks/UI_Block_Group**를 활용합니다. **UI_Block_Group**은 [ScrollLayoutGroupComponent](/apiReference?postId=382%7B%22target%22:%22_self%22%7D)를 활용했습니다. **ScollLayoutGroupComponent**는 여러 개의 엔티티를 펼쳐야할 때 사용합니다. 주로 상점이나, 인벤토리처럼 한 눈에 봐야하는 이미지
[task] | code [pass] | ⏳ 미판정 [title] | 행동 트리를 활용한 AI 만들기 [question] | AIComponent 로 생성한 Action Node 객체에 BTNodeType 으로 정의한 2초 대기 노드를 연결하여 AI 가 특정 위치에서 2초간 대기하도록 설정하는 스크립트를 작성해줘 [answer] | 제시된 참고 문서에는 `AIComponent`를 사용하여 Action Node 객체를 생성하고, 생성된 노드를 행동 트리(Behaviour Tree)에 연결하는 구체적인 API(예: `AddChild`, `AddNode`, `RootNode` 프로퍼티 등)나 코드가 포함되어 있지 않습니다. 문서에는 `BTNodeType` 스크립트 내에서 `OnInit()`와 `OnBehave()`를 구현하여 2초 대기 로직을 작성하는 방법과, `self.ParentAI`를 통해 부모 AI 엔티티에 접근하는 방법은 설명되어 있지만, **메인 AI [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 자식 노드가 Success 또는 Failure를 반환하면 부모 노드는 다음 자식 노드를 실행합니다. 그러나 자식 노드가 Running을 반환하면 부모 노드는 Running을 반환했던 자식 노드를 다음 프레임에 다시 실행합니다. 이 특성을 활용해 여러 프레임 동안 동작하는 노드를 만들 수 있습니다. 아래 그림과 같이 자식 노드 A, B, C가 있을 때 Sequence Node와 Selector Node의 경우 B 노드가 Running을 반환하는 동안 C 노드를 실행하지 않습니다. RandomSelector Node는 선택된 노드를 계
[task] | single_turn [pass] | ⏳ 미판정 [title] | 효과음 만들기 [question] | 이펙트 재생 시 대상 엔티티의 위치를 어떻게 참조해야 하나요? [answer] | 이펙트 재생 시 대상 엔티티의 위치는 `TransformComponent`를 통해 참조합니다. 문서 예제에서 `_EffectService:PlayEffect` 메서드를 호출할 때 위치 인자로는 `self.Entity.TransformComponent.Position`을 사용하고 있습니다. ```lua Event Handler: [clinet only] [service: InputService] HandleKeyDownEvent(KeyDownEvent event) { -- Parameters local key = e [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 기본 공격 스킬에 이펙트 스킬과 효과음을 추가해 역동적으로 연출할 수 있습니다. 1. **MyDesk**에 새로운 **SkillSound** 스크립트 컴포넌트를 생성하고, **DefaultPlayer**에 추가합니다. 2. 이벤트 핸들러에 **KeyDownEvent**를 추가하고 아래와 같이 내용을 작성합니다. ```lua Event Handler: [clinet only] [service: InputService] HandleKeyDownEvent(KeyDownEvent event) { -- Parameters l
[task] | single_turn [pass] | ⏳ 미판정 [title] | 효과음 만들기 [question] | 클라이언트에서 키 입력을 감지하기 위해 어떤 이벤트 핸들러를 설정해야 하나요? [answer] | 클라이언트에서 키 입력을 감지하려면 `InputService`의 `KeyDownEvent` 이벤트 핸들러를 설정해야 합니다. 스크립트 컴포넌트의 `Event Handler:` 블록에 아래 형식으로 작성합니다. ```lua Event Handler: [client only] [service: InputService] HandleKeyDownEvent(KeyDownEvent event) { -- Parameters local key = event.key -------------------------------- [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 기본 공격 스킬에 이펙트 스킬과 효과음을 추가해 역동적으로 연출할 수 있습니다. 1. **MyDesk**에 새로운 **SkillSound** 스크립트 컴포넌트를 생성하고, **DefaultPlayer**에 추가합니다. 2. 이벤트 핸들러에 **KeyDownEvent**를 추가하고 아래와 같이 내용을 작성합니다. ```lua Event Handler: [clinet only] [service: InputService] HandleKeyDownEvent(KeyDownEvent event) { -- Parameters l
[task] | two_turn [pass] | ⏳ 미판정 [title] | 이동 발판 만들기 [question] | IsDynamicFoothold 프로퍼티를 활성화하고 RigidbodyMovementOption을 설정해야 하는 이유는 무엇이며, 두 옵션의 차이는 어떻게 되나요? [answer] | `CustomFootholdComponent`를 사용하여 움직이는 발판을 만들 때, `IsDynamicFoothold` 프로퍼티를 활성화하고 `RigidbodyMovementOption`을 설정하는 이유는 발판의 움직임을 시스템이 올바르게 인식하고, 그 위에 있는 플레이어 엔티티에 적절한 물리 관성 효과를 적용하기 위해서입니다. ### 1. `IsDynamicFoothold` 프로퍼티 * **활성화 이유**: 이 프로퍼티를 활성화해야만 해당 발판이 '움직이는 발판'으로 동작합니다. 기본적으로 정적인 발판으로 처리되던 오브젝트가 [followup] | RelativeX와 Absolute 중 플레이어가 발판과 반대 방향으로 움직일 때 감속 효과를 원한다면 어떤 옵션을 선택해야 하며, 해당 설정을 적용하는 구체적인 절차는 무엇인가요? [followup_answer] | 플레이어가 발판과 반대 방향으로 움직일 때 감속 효과를 원한다면 **RelativeX** 옵션을 선택해야 합니다. `RelativeX` 옵션은 x축 관성을 적용하고 y축 관성은 적용하지 않으며, 플레이어가 발판의 이동 방향과 반대로 움직이면 속도가 감속되고 같은 방향으로 움직이면 가속되는 효과를 제공합니다. 해당 설정을 적용하는 구체적인 절차는 다음과 같습니다. 1. 발판으로 사용할 오브젝트에 `CustomFootholdComponent`를 추가하고 발판을 만듭니다. 2. `CustomFootholdComponent`의 * [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 움직이는 발판을 만들어 이동에 재미를 더해보세요. CustomFootholdComponent의 IsDynamicFoothold 프로퍼티를 이용해 나만의 움직이는 발판을 만들 수 있습니다. [발판 만들기](/docs/?postId=71%7B%22target%22:%22_self%22%7D)에서 기본 발판 제작 방법을 배울 수 있습니다. # 이동 발판 만들기 이동 발판은 CustomFootholdComponent를 활용해 크리에이터가 직접 만들어야 합니다. 발판의 움직임을 만드는 방식은 다르지만, 기본 Cus
[task] | instruction_following [pass] | ⏳ 미판정 [title] | 상품 등록하기 [question] | 그룹 월드에서 상품 등록과 수정 권한이 누구에게 있는지 1문장으로 답변하세요. [answer] | 그룹 월드에서 상품 등록과 수정은 모두 그룹장만 가능합니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 상품 상태는 총 5개로 구분됩니다. 메이커에서 테스트할 때는 모든 상태에서 구매할 수 있습니다. 월드에서 실제로 판매하기 위해서는 상품의 상태가 **판매 중**이어야 합니다. | 이름 | 설명 | | --- | --- | | 미출시 | 출시 여부를 '미출시'로 설정한 상태입니다. 판매 기간이 되어도 월드 웹 상점 및 클라이언트 내에서도 노출되지 않고 판매도 불가합니다. 플레이어가 보유한 상품도 목록에서 확인이 불가합니다. | | 판매 대기 | 판매 시작일이 아직 도래하지 않아 대기 중인 상태입니다. 출시 상태로 판매 기간을 지정
[task] | single_turn [pass] | ⏳ 미판정 [title] | 효과음 만들기 [question] | SetListenerEntity를 적용한 사운드 컴포넌트에서 소리가 끊기는 것이 일시 정지 후 재생이 아니라 단순히 음량 변화 때문이라고 하는데, 이는 어떤 의미를 갖나요? [answer] | `SetListenerEntity()`를 적용한 사운드 컴포넌트에서 소리가 끊기는 현상은 일시 정지(Pause) 후 재생(Play)하는 로직 때문이 아니라, 엔티티와의 거리 변화에 따라 **음량(Volume)이 조절**되기 때문입니다. 구체적인 의미는 다음과 같습니다: 1. **재생 위치 유지:** 사운드의 재생 포인터(지금까지 들은 위치)는 계속 유지됩니다. 즉, 소리가 멈추는 것이 아니라 들리지 않을 정도로만 작아지는 것입니다. 2. **연속성 결여:** 플레이어가 소리가 들리는 범위(음량이 0이 아닌 상태)에서 벗어나면 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 월드를 입체적으로 만들기 위해 [**SoundComponent**](/apiReference/Components/SoundComponent)와 [**SoundService**](/apiReference/Services/SoundService)를 활용해 음원을 재생하고, 때에 맞게 제어하는 방법을 소개합니다. # SoundComponent 월드를 더욱 입체적으로 만들기 위해 다양한 소리가 이곳저곳에서 재생되게 만들거나, 플레이어와 특정 엔티티의 거리에 따라 다른 음량으로 들리게 만들 수 있습니다. **Soun
[task] | code [pass] | ⏳ 미판정 [title] | 행동 트리를 활용한 AI 만들기 [question] | Selector Node를 활용해 특정 조건이 만족되면 공격 행동, 조건이 만족되지 않으면 이동 행동을 순서대로 실행하도록 설정하는 스크립트를 작성해줘 [answer] | Selector Node는 자식 노드를 순서대로 실행하다가 첫 번째로 `Success`를 반환하는 노드를 찾으면 그 이후의 노드는 실행하지 않고 멈춥니다. 질문하신 "특정 조건이 만족되면 공격, 만족되지 않으면 이동"이라는 논리는 이 구조와 일치합니다. Selector의 첫 번째 자식으로 "조건이 만족되었을 때만 `Success`를 반환하는" 노드(공격 실행)를 배치하고, 두 번째 자식으로 "조건이 만족되지 않았을 때 `Success`를 반환하는" 노드(이동 실행)를 배치하면 됩니다. 아래 예제에서는 `ConditionCheck [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | **Selector Node**는 자식 노드를 순서대로 실행하다가 자식 노드가 Success를 반환하면 실행을 멈추고 부모 노드로 Success를 반환합니다. 모든 자식 노드가 Failure를 반환하면 부모 노드에 Failure를 반환합니다. ![[object Object]](https://mod-file.dn.nexoncdn.co.kr/bbs/17168858785873218b87041fd46df9756a267a30ce29e.png "SelectorNode") #### RandomSelector Node **RandomSelec
[task] | two_turn [pass] | ⏳ 미판정 [title] | 상품 등록하기 [question] | 상품 등록 시 필수 입력 항목과 무료·유료 가격 설정 범위는 어떻게 되나요? [answer] | 상품 등록 시 필수 입력 항목은 상품 종류, 상품 이름, 가격, 판매 기간, 출시 여부, 상품 섬네일입니다. 필요에 따라 상품 설명을 추가할 수도 있습니다. 가격 설정은 무료와 유료 두 가지로 나뉩니다. * **무료**: 상품을 무료로 구매할 수 있도록 설정합니다. * **유료**: 월드 이용자들이 코인으로 상품을 구매할 수 있도록 설정하며, 가격은 최소 10에서 최대 10,000까지 지정할 수 있습니다. [followup] | 유기한 판매 기간을 설정했을 때 '판매 중' 상태로 변경되는 구체적인 조건과, 이미 구매된 유저 목록에서 상품이 사라지는 '미출시' 처리 로직은 어떻게 구현되는지 알려주세요. [followup_answer] | 유기한 판매 기간을 설정했을 때 '판매 중' 상태로 변경되는 조건은 설정한 **판매 시작일**이 되는 시점입니다. 이 시점이 되면 상품의 상태가 '판매 중'으로 변경되어 이용자가 상품을 구매할 수 있게 됩니다. 이미 구매된 유저의 목록에서 상품이 사라지는 '미출시' 처리 로직은 다음과 같이 동작합니다. 출시된 상품을 **미출시** 상태로 변경하면 웹 상점 및 월드 상품 리스트에서 해당 상품이 제외되어 더 이상 판매할 수 없게 됩니다. 또한, 이미 상품을 구매한 유저의 상품 목록에서도 해당 상품이 보이지 않도록 처리됩니다. [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 이번 과정에서는 월드에서 판매할 수 있는 상품인 아이템과 이용권에 대해서 알아봅니다. 상품에 대해서 알아보고, 만들고 싶은 상품을 등록해봅니다. 상품은 이용자들이 가진 월드코인으로 구매할 수 있습니다. 크리에이터는 상품의 구매 대가로 이용자들에게 이용권과 같은 서비스를 제공해줘야 합니다. 크리에이터는 추후 이용자가 지불한 월드코인을 정산할 수 있습니다. # 상품 등록하기 상품을 등록하는 방법은 두 가지입니다. 메이플스토리 월드 [공식 홈페이지](https://maplestoryworlds.nexon.com/
[task] | instruction_following [pass] | ⏳ 미판정 [title] | 상품 등록하기 [question] | 상품 종류 중 '아이템'과 '이용권'의 핵심 차이점을 3문장 이내로 요약하여 설명하세요. [answer] | 아이템은 재구매가 가능한 상품인 반면, 이용권은 한 번만 구매할 수 있는 상품입니다. 이용권은 구매 후 지속적인 효과를 내는 서비스의 특성을 가집니다. 따라서 상점에서 계속 구매할 수 있는 소모성 상품은 아이템, 일회성 구매로 혜택이 유지되는 상품은 이용권으로 분류됩니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 이번 과정에서는 월드에서 판매할 수 있는 상품인 아이템과 이용권에 대해서 알아봅니다. 상품에 대해서 알아보고, 만들고 싶은 상품을 등록해봅니다. 상품은 이용자들이 가진 월드코인으로 구매할 수 있습니다. 크리에이터는 상품의 구매 대가로 이용자들에게 이용권과 같은 서비스를 제공해줘야 합니다. 크리에이터는 추후 이용자가 지불한 월드코인을 정산할 수 있습니다. # 상품 등록하기 상품을 등록하는 방법은 두 가지입니다. 메이플스토리 월드 [공식 홈페이지](https://maplestoryworlds.nexon.com/
[task] | code [pass] | ⏳ 미판정 [title] | 신발 만들기 [question] | 이 문서에는 mLua 스크립트 API, 컴포넌트, 또는 서비스 정보가 전혀 포함되어 있지 않으므로, 주어진 문서만으로 해결할 수 있는 mLua 코딩 과제를 작성할 수 없습니다. [answer] | 제공된 참고 문서는 메이플스토리 월드의 **아바타 아이템(신발, 양말, 부츠)을 Adobe Photoshop으로 제작하는 그래픽 가이드**입니다. 따라서 문서에는 mLua 스크립트 문법, API, 컴포넌트, 또는 서비스 정보가 **전혀 포함되어 있지 않습니다.** 주어진 문서 내용만으로는 mLua 코딩 과제를 작성하거나 관련 코드를 생성할 수 없습니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 신발 제작 방법을 알아봅시다. 신발 제작을 응용해 신발과 함께 양말, 부츠도 제작할 수 있습니다. [아바타 아이템 제작의 기본 개념](/docs?postId=588)을 참고해 아바타의 기본 개념을 먼저 숙지하길 바랍니다. # 사전 준비 아이템 제작을 위해선 Adobe Photoshop이 필요합니다. 해당 소프트웨어를 설치한 후 아래 파일을 받아 엽니다. $$attachFile {"name":"Avatar_Shoes.psd","url":"https://mod-file.dn.nexoncdn.co.kr/stora
[task] | code [pass] | ⏳ 미판정 [title] | 행동 트리를 활용한 AI 만들기 [question] | AIComponent의 CreateNode()와 CreateLeafNode()를 조합하여, 먼저 BTNodeType 기반 노드를 생성한 후 간단한 로직을 수행하는 리프 노드를 추가로 생성하여 AIComponent에 연결하는 구조를 작성해줘. [answer] | AIComponent를 활용하여 BTNodeType 기반의 일반 노드와 함수 기반의 리프 노드를 조합하는 예제입니다. 참고 문서에 따르면, `CreateNode()`는 BTNodeType과 이름을 매개변수로 받아 노드 객체를 생성하고, `CreateLeafNode()`는 노드 이름과 실행될 함수를 전달받아 간단한 Action Node를 생성합니다. 또한, 생성된 노드들을 연결하기 위해 부모 노드의 `Child` 프로퍼티를 설정하는 방식이 사용될 수 있습니다. 아래 코드는 `OnBeginPlay` 시점에 BTNodeType 기반의 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | AI로 사용할 엔티티에는 **AIComponent 또는 확장한 AIComponent**가 포함되어 있어야 합니다. AIComponent는 BTNodeType에서 정의된 내용으로 Action Node를 별도의 객체로 생성하거나, 만들어진 행동 트리의 최상위 노드를 Root 노드로 설정하여 엔티티에 AI를 부여하기 때문입니다. Action Node를 만들 때는 AIComponent의 `CreateNode()`, `CreateLeafNode()`를 활용해 Action Node를 생성할 수 있습니다. > **Tip** > Action N
[task] | single_turn [pass] | ⏳ 미판정 [title] | 행동 트리를 활용한 AI 만들기 [question] | Behaviour Tree Editor에서 생성한 Composite Node에서는 AttachChild() 같은 자식 관리 메서드를 사용할 수 없다고 하는데, 스크립트로 노드를 직접 추가할 때는 어떤 방법으로 구현해야 하나요? [answer] | Behaviour Tree Editor에서 생성한 Composite Node는 `AttachChild()`, `AttachChildAt()`, `DetachChild()`, `DetachChildAt()` 메서드를 사용할 수 없습니다. 따라서 스크립트로 노드를 직접 추가하고 관리해야 하는 상황이라면, **크리에이터가 직접 정의하는 Custom Composite Node**를 만들어야 합니다. MSW에서 제공하는 4가지 기본 Composite Node(Sequence, Selector, Random Selector, Parallel [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 행동 트리는 프레임마다 Root 노드에서 시작합니다. 그 후 순차적으로 실행됩니다. 실행 순서는 위에서 아래, 왼쪽에서 오른쪽입니다. 부모 노드가 자식 노드를 실행하며 실행 순서는 각 부모에 등록된 순서대로 실행됩니다. 부모 노드는 종류에 따라 자식 노드 실행 조건을 달리하며, 조건에 부합할 때 부모가 가진 자식 노드를 모두 순차적으로 실행합니다. 예를 들어 부모 노드에 자식 노드 A, B, C가 순차적으로 등록된 경우 A가 가장 좌측에, 노드 C가 가장 우측에 배치됩니다. 부모 노드 실행 시 자식 노드는 A, B, C 순으로 실행
[task] | instruction_following [pass] | ⏳ 미판정 [title] | 효과음 만들기 [question] | SkillSound 스크립트 컴포넌트를 생성하고 적용하는 과정과 이벤트 핸들러 설정 단계를 1번부터 순서대로 번호 매긴 목록으로 정리하세요. [answer] | SkillSound 스크립트 컴포넌트를 생성하고 적용하는 과정과 이벤트 핸들러 설정 단계는 다음과 같습니다. 1. `MyDesk`에 새로운 `SkillSound` 스크립트 컴포넌트를 생성합니다. 2. 생성한 `SkillSound` 컴포넌트를 `DefaultPlayer`에 추가합니다. 3. 컴포넌트의 이벤트 핸들러에 `KeyDownEvent`를 추가합니다. 4. 추가한 이벤트 핸들러의 내용을 아래 코드와 같이 작성하여, 좌측 컨트롤 키가 눌릴 때 효과음과 이펙트가 재생되도록 설정합니다. ```lua Event Handler: [c [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 기본 공격 스킬에 이펙트 스킬과 효과음을 추가해 역동적으로 연출할 수 있습니다. 1. **MyDesk**에 새로운 **SkillSound** 스크립트 컴포넌트를 생성하고, **DefaultPlayer**에 추가합니다. 2. 이벤트 핸들러에 **KeyDownEvent**를 추가하고 아래와 같이 내용을 작성합니다. ```lua Event Handler: [clinet only] [service: InputService] HandleKeyDownEvent(KeyDownEvent event) { -- Parameters l
[task] | instruction_following [pass] | ⏳ 미판정 [title] | 상품 등록하기 [question] | 유료 확률형 콘텐츠 제공 시 크리에이터가 준수해야 할 의무를 단계별 번호 목록으로 작성하세요. [answer] | 제공된 문서에는 유료 확률형 콘텐츠 제공 시 크리에이터가 준수해야 할 구체적인 '단계별' 절차를 나열해 두지 않았습니다. 문서에 명시된 유일한 의무 사항은 다음과 같습니다. * ‘유료’ 확률형 콘텐츠를 제공하는 경우, 확률 정보 공개 가이드에 따라 콘텐츠 사용 전 사용자에게 고지해야 할 의무가 있습니다. 따라서 단계별 번호 목록으로 작성할 수 있는 정보는 이 고지 의무 하나뿐이며, 구체적인 단계나 추가적인 의무 사항은 문서에 포함되어 있지 않습니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 상품 상태는 총 5개로 구분됩니다. 메이커에서 테스트할 때는 모든 상태에서 구매할 수 있습니다. 월드에서 실제로 판매하기 위해서는 상품의 상태가 **판매 중**이어야 합니다. | 이름 | 설명 | | --- | --- | | 미출시 | 출시 여부를 '미출시'로 설정한 상태입니다. 판매 기간이 되어도 월드 웹 상점 및 클라이언트 내에서도 노출되지 않고 판매도 불가합니다. 플레이어가 보유한 상품도 목록에서 확인이 불가합니다. | | 판매 대기 | 판매 시작일이 아직 도래하지 않아 대기 중인 상태입니다. 출시 상태로 판매 기간을 지정
[task] | two_turn [pass] | ⏳ 미판정 [title] | 효과음 만들기 [question] | OnBeginPlay 함수 내에서 SoundComponent의 AudioClipRUID와 Loop를 설정하고 재생하는 과정은 어떻게 진행되나요? [answer] | `OnBeginPlay` 함수 내에서 `SoundComponent`의 음원을 설정하고 재생하는 과정은 다음과 같은 순서로 진행됩니다. 1. **AudioClipRUID 설정**: `self.Entity.SoundComponent.AudioClipRUID` 프로퍼티에 재생할 음원의 RUID 문자열을 할당합니다. 2. **Loop 설정**: `self.Entity.SoundComponent.Loop` 프로퍼티에 `true` 또는 `false`를 설정하여 음원이 반복 재생될지 여부를 결정합니다. 3. **재생 시작**: `self.En [followup] | 텔레포트를 통해 이동할 때 음량이 즉시 줄어드는 현상과 같은 예외적인 동작 방식은 어떻게 처리하나요? [followup_answer] | 제공된 참고 문서에는 텔레포트를 통해 이동할 때 음량이 즉시 줄어드는 현상에 대한 **구체적인 처리 방법이나 대안 코드가 제시되어 있지 않습니다.** 문서에는 해당 현상이 존재한다는 사실만 언급되어 있으며, 구체적인 내용은 다음과 같습니다: * `SetListenerEntity()`를 사용하면 플레이어와 특정 엔티티의 거리에 따라 음량이 조정됩니다(가까울수록 커지고, 멀어질수록 0에 가까워짐). * **예외 동작**: 플레이어가 일반적인 이동이 아닌 텔레포트 등을 통해 이동하면 음량은 즉시 줄어듭니다. * **재생 방 [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 월드를 입체적으로 만들기 위해 [**SoundComponent**](/apiReference/Components/SoundComponent)와 [**SoundService**](/apiReference/Services/SoundService)를 활용해 음원을 재생하고, 때에 맞게 제어하는 방법을 소개합니다. # SoundComponent 월드를 더욱 입체적으로 만들기 위해 다양한 소리가 이곳저곳에서 재생되게 만들거나, 플레이어와 특정 엔티티의 거리에 따라 다른 음량으로 들리게 만들 수 있습니다. **Soun
[task] | two_turn [pass] | ⏳ 미판정 [title] | 카드와 UI 만들기 [question] | UI_Block_Group에 ScrollLayoutGroupComponent의 프로퍼티(Constraint, Spacing 등)를 설정한 후, Model_Card를 자식으로 소환하는 CardBoard 컴포넌트 스크립트는 어떻게 작성합니까? [answer] | UI_Block_Group에 `ScrollLayoutGroupComponent`의 프로퍼티를 설정하고, `Model_Card`를 자식으로 소환하는 `CardBoard` 컴포넌트 스크립트는 아래처럼 작성합니다. 참고로, `ScrollLayoutGroupComponent`의 프로퍼티(Constraint, Spacing, CellSize 등)는 스크립트가 아닌 **Hierarchy에서 UI_Block_Group 엔티티를 선택하여 프로퍼티 에디터를 통해** 직접 설정합니다. 스크립트에서는 `Model_Card`를 `UI_Block_Gro [followup] | _SpawnService:SpawnByModelId를 사용하여 UI_Block_Group을 부모로 지정하고, ScrollLayoutGroupComponent가 자동으로 레이아웃을 적용하도록 하는 코드 예시를 보여주세요. [followup_answer] | `ScrollLayoutGroupComponent`는 `UI_Block_Group`에 미리 설정된 프로퍼티(Constraint, Spacing, CellSize 등)에 따라 자식 엔티티가 추가되면 자동으로 레이아웃을 적용합니다. 따라서 스크립트에서는 `_SpawnService:SpawnByModelId`를 사용하여 `Model_Card`를 생성할 때, 마지막 인자로 `UI_Block_Group` 엔티티를 부모로 지정하기만 하면 됩니다. 아래는 `Model_Card`를 `UI_Block_Group`의 자식으로 소환하여 `Scroll [scores] | [judge_reason] | [source_doc] | 이제 카드를 화면에 불러낼 차례입니다. 카드를 불러내기 위해선 **/ui/CardPairGameUI/UI_Board/UI_Blocks/UI_Block_Group**를 활용합니다. **UI_Block_Group**은 [ScrollLayoutGroupComponent](/apiReference?postId=382%7B%22target%22:%22_self%22%7D)를 활용했습니다. **ScollLayoutGroupComponent**는 여러 개의 엔티티를 펼쳐야할 때 사용합니다. 주로 상점이나, 인벤토리처럼 한 눈에 봐야하는 이미지
[task] | instruction_following [pass] | ⏳ 미판정 [title] | 상품 등록하기 [question] | 웹과 메이커 환경에서 상품을 등록하는 절차의 차이를 단계별 번호 목록으로 비교하여 설명하세요. [answer] | 참고 문서에 따르면, 웹과 메이커 환경에서 상품을 등록하는 절차는 다음과 같이 단계별로 나뉩니다. **웹에서 등록하는 절차** 1. 로그인 후 '월드 만들기'를 선택하고 상품을 생성할 월드를 선택합니다. 2. '상점 관리 - 상품 등록'을 선택합니다. 3. 상점 관리 창에서 상품 종류, 상품 이름, 출시 여부, 상품 섬네일을 설정한 뒤 등록을 누릅니다. 4. 상점 관리 창에서 등록한 상품이 추가되고, 판매 상태가 '미출시'인지 확인합니다. **메이커에서 등록하는 절차** 1. 'Panels - World Shop Viewer'를 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 이번 과정에서는 월드에서 판매할 수 있는 상품인 아이템과 이용권에 대해서 알아봅니다. 상품에 대해서 알아보고, 만들고 싶은 상품을 등록해봅니다. 상품은 이용자들이 가진 월드코인으로 구매할 수 있습니다. 크리에이터는 상품의 구매 대가로 이용자들에게 이용권과 같은 서비스를 제공해줘야 합니다. 크리에이터는 추후 이용자가 지불한 월드코인을 정산할 수 있습니다. # 상품 등록하기 상품을 등록하는 방법은 두 가지입니다. 메이플스토리 월드 [공식 홈페이지](https://maplestoryworlds.nexon.com/
[task] | single_turn [pass] | ⏳ 미판정 [title] | 이동 발판 만들기 [question] | CustomFootholdComponent를 추가할 때 발판으로 사용할 오브젝트 자체에 직접 컴포넌트를 붙여야 하는가요? [answer] | 네, 발판으로 사용할 오브젝트 자체에 직접 `CustomFootholdComponent`를 추가해야 합니다. 참고 문서의 활용 예시 단계 1에 명시된 바와 같이, 발판으로 사용할 오브젝트에 `CustomFootholdComponent`를 추가한 뒤 발판을 만들어야 하며, 이후 해당 컴포넌트의 `IsDynamicFoothold`를 활성화하고 `RigidbodyMovementOption`을 설정하는 등의 작업을 진행합니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 움직이는 발판을 만들어 이동에 재미를 더해보세요. CustomFootholdComponent의 IsDynamicFoothold 프로퍼티를 이용해 나만의 움직이는 발판을 만들 수 있습니다. [발판 만들기](/docs/?postId=71%7B%22target%22:%22_self%22%7D)에서 기본 발판 제작 방법을 배울 수 있습니다. # 이동 발판 만들기 이동 발판은 CustomFootholdComponent를 활용해 크리에이터가 직접 만들어야 합니다. 발판의 움직임을 만드는 방식은 다르지만, 기본 Cus
[task] | single_turn [pass] | ⏳ 미판정 [title] | 효과음 만들기 [question] | 효과음과 이펙트를 동시에 재생하려면 어떤 서비스와 메서드를 호출해야 하나요? [answer] | 효과음과 이펙트를 동시에 재생하려면 각각 **`_SoundService`**와 **`_EffectService`**를 사용해야 합니다. 구체적으로 호출하는 메서드는 다음과 같습니다. 1. **효과음 재생**: `_SoundService:PlaySound` * 효과음의 ID(문서 예시에서는 `"02fe29e7670c447cb23c4ee4e5bf5674"`로 표시됨)와 볼륨(예: `0.3`)을 인수로 전달합니다. 2. **이펙트 재생**: `_EffectService:PlayEffect` * 이펙트의 ID( [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 기본 공격 스킬에 이펙트 스킬과 효과음을 추가해 역동적으로 연출할 수 있습니다. 1. **MyDesk**에 새로운 **SkillSound** 스크립트 컴포넌트를 생성하고, **DefaultPlayer**에 추가합니다. 2. 이벤트 핸들러에 **KeyDownEvent**를 추가하고 아래와 같이 내용을 작성합니다. ```lua Event Handler: [clinet only] [service: InputService] HandleKeyDownEvent(KeyDownEvent event) { -- Parameters l
[task] | two_turn [pass] | ⏳ 미판정 [title] | 효과음 만들기 [question] | Resource Storage의 Audio RUID 또는 크리에이터가 추가한 음원의 RUID를 SoundComponent에 적용하는 방법은 무엇인가요? [answer] | SoundComponent에 음원을 적용하려면 `AudioClipRUID` 프로퍼티에 해당 음원의 RUID 문자열을 할당하면 됩니다. 여기서 RUID는 Resource Storage의 **Audio RUID** 또는 크리에이터가 직접 추가한 음원의 **RUID**를 사용할 수 있습니다. 코드를 통해 적용하는 방법은 다음과 같습니다. ```lua Method: [client only] void OnBeginPlay() { -- Resource Storage의 Audio RUID 또는 추가한 음원의 RUID를 문자열로 지정 [followup] | MyDesk에서 ObjectSound 스크립트 컴포넌트를 생성하여 SoundComponent를 추가한 엔티티에 연결하는 전체적인 스크립트 구조를 작성해 주세요. [followup_answer] | MyDesk에서 `ObjectSound` 스크립트 컴포넌트를 생성하고, `SoundComponent`를 추가한 엔티티에 연결하여 거리 기반 음량 조절을 적용하는 전체적인 스크립트 구조는 다음과 같습니다. ```lua Method: [client only] void OnBeginPlay() { -- 1. 음원 RUID 지정 (Resource Storage의 Audio RUID 또는 추가한 음원의 RUID) self.Entity.SoundComponent.AudioClipRUID = "12f37a0d7970482e82c [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 월드를 입체적으로 만들기 위해 [**SoundComponent**](/apiReference/Components/SoundComponent)와 [**SoundService**](/apiReference/Services/SoundService)를 활용해 음원을 재생하고, 때에 맞게 제어하는 방법을 소개합니다. # SoundComponent 월드를 더욱 입체적으로 만들기 위해 다양한 소리가 이곳저곳에서 재생되게 만들거나, 플레이어와 특정 엔티티의 거리에 따라 다른 음량으로 들리게 만들 수 있습니다. **Soun
[task] | instruction_following [pass] | ⏳ 미판정 [title] | 상품 등록하기 [question] | 상품 등록 시 필수 입력 항목과 선택 입력 항목을 구분하여 표로 정리해서 답변하세요. [answer] | 상품 등록 시 필수 입력 항목과 선택 입력 항목은 다음과 같이 구분할 수 있습니다. | 구분 | 항목 | 설명 | | :--- | :--- | :--- | | **필수** | 상품 종류 | **아이템**(재구매 가능) 또는 **이용권**(1회 구매, 지속 효과) 중 선택 | | **필수** | 상품 이름 | 유저에게 보일 이름으로, 최대 50자까지 입력 가능 | | **필수** | 가격 | **무료** 또는 **유료**(최소 10 ~ 최대 10,000 월드코인) 중 선택 | | **필수** | 판매 기간 | **무기한**(상시 판 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 이번 과정에서는 월드에서 판매할 수 있는 상품인 아이템과 이용권에 대해서 알아봅니다. 상품에 대해서 알아보고, 만들고 싶은 상품을 등록해봅니다. 상품은 이용자들이 가진 월드코인으로 구매할 수 있습니다. 크리에이터는 상품의 구매 대가로 이용자들에게 이용권과 같은 서비스를 제공해줘야 합니다. 크리에이터는 추후 이용자가 지불한 월드코인을 정산할 수 있습니다. # 상품 등록하기 상품을 등록하는 방법은 두 가지입니다. 메이플스토리 월드 [공식 홈페이지](https://maplestoryworlds.nexon.com/