[task] | single_turn [pass] | ⏳ 미판정 [title] | 메이플스토리 월드에서 수익 출금하기 [question] | 출금 관련 정보의 명의를 변경하려면 어디에서 수정해야 하며, 이 정보가 어떤 기준과 일치해야 하는가요? [answer] | 출금 관련 정보의 명의를 변경하려면 **넥슨 홈페이지 > 내정보 > 개인정보변경** 메뉴에서 수정해야 합니다. 수정 후 이 정보는 메이플스토리 월드를 이용하는 크리에이터 계정의 **넥슨 홈페이지 회원 명의 정보와 일치**해야 합니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 출금 신청 페이지 또는 계정 프로필 페이지를 통해 출금을 위한 크리에이터 정보 수정 페이지에 진입할 수 있습니다. | 출금 신청 페이지를 통한 진입 | 계정 프로필 페이지를 통한 진입 | | --- | --- | | ![[object Object]](https://mod-file.dn.nexoncdn.co.kr/bbs/17454596149448215ae7b0cd2465b869e7519a088470c.png "path1")| ![[object Object]](https://mod-file.dn.nexoncdn.co.kr/bbs/
[task] | code [pass] | ⏳ 미판정 [title] | NPC 대화창 만들기 [question] | TalkPanel 엔티티에 스크립트를 붙여 Name, Text 자식 엔티티의 UITransformComponent 프로퍼티(PosX, PosY, Width, Height)를 문서에 명시된 값(-600, 110, 300, 100 및 0, 0, 1550, 150)으로 초기화하는 스크립트를 작성해줘. [answer] | 문서에서 명시된 `Name`과 `Text` 자식 엔티티의 `UITransformComponent` 프로퍼티 값을 초기화하는 스크립트입니다. `TalkPanel` 엔티티에 붙일 스크립트로, `OnBeginPlay` 시점에 자식 엔티티를 찾아서 각각의 좌표와 크기를 문서의 표에 맞춰 설정합니다. ```lua Method: [client only] void OnBeginPlay() { -- Name 자식 엔티티 초기화 local nameEntity = self.Entity:GetChild("Name") if nameEntity [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 결과물은 다음과 같습니다. 10. 새로운 텍스트 엔티티를 추가합니다. 추가한 텍스트 엔티티를 클릭하고 이름을 **Name**으로 변경합니다. 11. **Name** 엔티티를 **TalkPanel**로 드래그하여 **TalkPanel**의 자식으로 설정합니다. 12. **Name** 엔티티의 프로퍼티를 다음과 같이 수정합니다. | 컴포넌트 | 프로퍼티 | 값 | | --- | --- | --- | | @cols=1:@rows=4:UITransformComponent | PosX | -600 |
[task] | instruction_following [pass] | ⏳ 미판정 [title] | TileMapMode [question] | TileMapMode CastFrom 메서드 두 가지를 호출하는 코드만 출력하고 설명은 주석으로 작성하세요. [answer] | ```lua Method: [server only] void OnBeginPlay() { -- 숫자 0을 TileMapMode 타입으로 변환하여 MapleTile enum 값을 얻습니다. local modeFromNumber = TileMapMode.CastFrom(0) log(modeFromNumber) -- 문자열 "RectTile"을 TileMapMode 타입으로 변환하여 RectTile enum 값을 얻습니다. local modeFromString = TileMapMode.CastFrom [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 타일맵 모드를 나타냅니다. # Members | 이름 | 값 | 설명 | |---|---|---| | MapleTile | 0 | 메이플스토리 타일맵 모드입니다. | | RectTile | 1 | 탑다운 시점의 사각형 타일맵 모드입니다. | | SideViewRectTile | 2 | 횡스크롤 시점의 사각형 타일맵 모드입니다. | # Methods - **TileMapMode CastFrom(number value) [Static]** 숫자를 해당 타입으로 변환합니다. - **TileMapMode CastFrom(stri
[task] | code [pass] | ✅ 통과 [title] | Color [question] | Color.clear, Color.black, Color.white, Color.red, Color.green, Color.blue, Color.yellow, Color.cyan, Color.magenta, Color.gray Static 프로퍼티의 r, g, b, a 값을 각각 추출하여 로그로 출력하는 스크립트를 작성해줘 [answer] | Color 타입의 Static 프로퍼티는 읽기 전용으로, 각 프로퍼티의 `r`, `g`, `b`, `a` 구성 요소를 직접 접근하여 값을 가져올 수 있습니다. 아래 스크립트는 요청하신 모든 색상의 RGBA 값을 로그로 출력합니다. ```lua Method: [server only] void OnBeginPlay() { log("Color.clear -> r: " .. tostring(Color.clear.r) .. ", g: " .. tostring(Color.clear.g) .. ", b: " .. tostring(Co [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=2 verbosity=2 [judge_reason] | 참고 문서의 Static 프로퍼티와 구성 요소(r,g,b,a)를 정확히 활용해 요청한 로그 출력 스크립트를 제공했으며, mLua 문법과 일치합니다. [source_doc] | 색상입니다. # Properties - **float a** 색상의 투명도 구성 요소입니다. 0이면 투명하고, 1이면 불투명합니다. - **float b** 파란색의 구성 요소입니다. - **float g** 초록색의 구성 요소입니다. - **float r** 빨간색의 구성 요소입니다. - **Color black [Static] [ReadOnly] [HideFromInspector]** 검은색(0, 0, 0, 1)을 간단히 사용할 수 있습니다. - **Color blue [Static] [ReadOnly] [
[task] | code [pass] | ❌ 탈락 [title] | RandomSelectorNode [question] | RandomSelectorNode의 ChildBehave(int32 index, float deltaTime) 메서드를 통해 인덱스 1에 해당하는 자식 노드를 deltaTime 0.1초로 실행하는 스크립트를 작성해줘 [answer] | `RandomSelectorNode`의 `ChildBehave(int32 index, float deltaTime)` 메서드를 사용해 인덱스 1의 자식 노드를 0.1초 간격으로 실행하는 스크립트는 다음과 같습니다. 참고로 `ChildBehave`는 `CompositeNode`에서 상속된 메서드로, 인덱스는 1부터 시작하며 범위를 벗어날 경우 실패를 반환합니다. ```lua Property: [None] any Child = nil Method: [server only] void OnUpdate(number delta) { [followup] | [followup_answer] | [scores] | helpfulness=3 correctness=2 coherence=3 complexity=2 verbosity=2 [judge_reason] | 질문에 대한 코드를 제시했으나, 문서에 없는 'Child' 프로퍼티를 선언하고, RandomSelectorNode 객체를 생성하거나 할당하지 않아 실제 실행이 불가능한 코드이며, mLua 컴포넌트 구조에서 BT 노드 메서드를 self에 직접 호출하는 방식이 API 문서와 불일치합니다. [source_doc] | 자식 노드 중에 하나를 무작위로 선택해 실행합니다. # Properties ##### inherited from CompositeNode: - **int32 ChildCount [ReadOnly]** 자식 노드의 개수입니다. ##### inherited from BTNode: - **boolean ExclusiveExecutionWhenRunning [Deprecated]** 더는 사용하지 않는 프로퍼티입니다. - **func InitFunction** 초기화 시점에 호출되는 함수입니다. - **string Na
[task] | single_turn [pass] | ✅ 통과 [title] | EntitySaveLoadEvent [question] | EntitySaveLoadEvent를 초기화할 때 파라미터를 생략하면 어떤 기본값이 설정되며, 이는 어떤 의미를 가지나요? [answer] | `EntitySaveLoadEvent`를 초기화할 때 파라미터를 모두 생략하면, 모든 필드는 `nil` 값으로 설정됩니다. 이 이벤트의 생성자(Constructor)는 다음과 같이 정의되어 있습니다: `EntitySaveLoadEvent(Entity entity = nil, JObject jsonData = nil)` 따라서 파라미터를 생략하고 `EntitySaveLoadEvent()`를 호출하면: 1. **Entity**: `nil` 2. **JsonData**: `nil` **의미:** * **Entity**: 이벤 [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=2 verbosity=2 [judge_reason] | 생성자 시그니처의 기본값(nil)과 문서에 명시된 '제작자 사용 불가' 제약사항을 정확히 파악하여 질문의 의도(기본값과 그 의미)에 부합하는 설명을 제공했습니다. [source_doc] | 제작자가 사용할 수 없는 기능입니다. 이 Event는 아래 API에 의해 발생합니다. * MODEntity <img src="https://img.shields.io/static/v1?label=Space&message=Server,Client&color=c4a484" alt="custom" title="Server, Client에서 이벤트가 발생합니다." data-nodeid="4"> # Properties - **JObject JsonData** 제작자가 사용할 수 없는 기능입니다. ##### inherited fro
[task] | two_turn [pass] | ⏳ 미판정 [title] | 메이플스토리 월드에서 수익 출금하기 [question] | 수익 출금 시 사업자등록증의 영문 상호 표기 원칙이 어떻게 다른가요? [answer] | 수익 출금 시 사업자등록증의 영문 상호 표기 원칙은 사업자등록증에 영문 상호가 이미 병기되어 있는지에 따라 달라집니다. **1. 사업자등록증 내 영문 상호가 병기된 경우** 사업자등록증에 영문 상호가 함께 적혀 있다면, 그 **병기된 정보를 그대로 입력**해야 합니다. * **올바른 표기**: 사업자등록증에 적힌 영문 상호를 그대로 사용 (예: `Maplestory Worlds`) * **잘못된 표기**: 병기된 정보와 다른 식으로 표기하거나 임의로 변경 (예: `Danpoong-story World`) **2. 사업자 [followup] | 사업자등록증에 영문 상호가 병기되어 있지 않을 때, '메소전사'를 영문으로 표기해야 하는 올바른 예시와 잘못된 예시를 코드로 구현할 수 있는 유효성 검사 로직을 작성해 주세요. [followup_answer] | 참고 문서에 따르면, 사업자등록증에 영문 상호가 병기되어 있지 않을 때 영문 상호명은 한글 상호명의 **발음과 동일하게** 표기해야 하며, 의미상 번역(예: '전사'를 'Warrior'로)은 허용되지 않습니다. 문서에 제시된 '메소전사' 관련 예시는 다음과 같습니다: * **올바른 표기 (발음 중심)**: `MesoJeonsa` * **잘못된 표기 (의미 번역)**: `MesoWarrior` 이 기준을 바탕으로, 입력된 영문 상호명이 발음 기반 표기인지 의미 번역인지 검증하는 유효성 검사 로직을 mLua 형식으로 작성합니 [scores] | [judge_reason] | [source_doc] | **1. 상호 표기 유의사항** * 기본적으로, 사업자등록증 내 영문 상호를 병기하는 것을 권장드립니다. * 영문 상호가 병기되어 있지 않은 경우, 영문 상호명은 한글 상호명의 발음과 동일하게 표기되어야 합니다. **2. 올바른 표기법 예시** **1) 사업자등록증 내 영문 상호가 병기된 경우** | 구분 | 올바른 표기 (병기 정보 입력) | 잘못된 표기 (병기 외 정보 입력) | | --- | --- | --- | |국문 상표 | 메이플스토리 월드(Maplestory Worlds) | 메이플스토리 월드(Maple
[task] | code [pass] | ⏳ 미판정 [title] | LitMode와 광원 사용하기 [question] | TargetSortingLayers를 설정하여 광원이 특정 SortingLayer에만 적용되도록 하는 스크립트를 작성해줘 [answer] | 제공된 참고 문서에는 `TargetAllSortingLayers`와 `TargetSortingLayers`의 기능과 의미에 대한 설명만 포함되어 있으며, 이 프로퍼티들을 스크립트(mLua)를 통해 직접 설정하거나 변경하는 API(예: `LightComponent`의 프로퍼티 접근, 메서드, 이벤트 등)에 대한 정보는 없습니다. 따라서 제공된 문서의 정보만으로는 `TargetSortingLayers`를 설정하는 mLua 스크립트를 작성할 수 없습니다. 해당 설정은 에디터의 인스펙터(Inspector)나 에셋 설정에서 직접 지정하도록 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | SortingLayer에 광원을 적용 여부를 **TargetAllSortingLayers, TargetSortingLayers**로 설정할 수 있습니다. * **TargetAllSortingLayers**: 모든 SortingLayer에 광원이 적용됩니다. 이 프로퍼티를 비활성화하면 TargetSortingLayers를 설정할 수 있습니다. * **TargetSortingLayers**: 광원이 적용될 SortingLayer를 크리에이터가 지정할 수 있습니다. SortingLayer마다 별도의 광원 텍스처를 생성하고 렌더링하게 됩
[task] | single_turn [pass] | ⏳ 미판정 [title] | MODTweenLogic [question] | ConnectEvent의 key 매개변수에 이벤트 타입 이름을 문자열로 직접 넣어야 하는지, 아니면 변수로 전달해야 하는지 헷갈립니다. [answer] | `ConnectEvent`의 `key` 매개변수는 **이벤트 타입의 이름을 문자열로 직접 입력**해야 합니다. 문서 설명에 따르면, `ConnectEvent(string key, IScriptFunction eventHandler)`는 "이 서비스에서 **타입의 이름이 key인** 이벤트가 발생하면" 핸들러로 통지받는다고 명시되어 있습니다. 즉, `key` 값은 이벤트 클래스(타입)의 이름 자체를 가리키는 문자열 리터럴입니다. 변수로 전달하는 경우에도, 그 변수가 저장하고 있는 값이 이벤트 타입의 이름인 문자열이어야 합니다. 그 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | - **EventHandlerBase ConnectEvent(string key, IScriptFunction eventHandler)** 이벤트를 연결합니다. 이 서비스에서 타입의 이름이 key인 이벤트가 발생하면, 핸들러로 통지받습니다. 핸들러는 event 매개 변수를 전달받습니다. - **EventHandlerBase ConnectEvent(Type eventType, IScriptFunction eventHandler)** 이벤트를 연결합니다. 이 서비스에서 타입이 eventType인 이벤트가 발생하면, 핸들러로 통지
[task] | single_turn [pass] | ✅ 통과 [title] | TextComponent [question] | GetPreferredHeight를 호출할 때 width 인자에 어떤 값을 넣어야 원하는 너비 기준의 높이를 정확히 구할 수 있나요? [answer] | `GetPreferredHeight(string preferredText, float width)` 메서드에서 `width` 인자는 **고정된 너비(픽셀 단위)의 공간**을 의미합니다. 즉, 텍스트가 표시될 영역의 **허용되는 최대 너비(폭)**를 `float` 타입으로 입력해야 합니다. 이 너비 내에서 주어진 `preferredText`가 어떻게 줄바꿈(랩핑)되는지를 계산하여, 그에 필요한 **최소 높이**를 반환합니다. ### 핵심 포인트 1. **단위**: 픽셀(px)을 기준으로 합니다. 2. **의미**: "너비가 ` [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=3 verbosity=2 [judge_reason] | 문서의 정의와 시그니처를 정확히 해석하여 width 인자의 의미와 사용 예시를 제공했으며, [Yield] 속성에 대한 주의사항도 적절히 언급하여 전문성을 갖추었습니다. [source_doc] | # Methods - **string GetLocalizedText() [ClientOnly]** IsLocalizationKey의 값이 true인 경우 LocaleDataSet에서 현재 언어 설정에 맞는 텍스트를 찾아 반환합니다. 이때 Text 프로퍼티 값을 Key로 사용합니다. IsLocalizationKey의 값이 false인 경우 Text 프로퍼티 값을 반환합니다. - **float GetPreferredHeight(string preferredText, float width) [ClientOnly] [Yield]**
[task] | two_turn [pass] | ⏳ 미판정 [title] | 액션을 예약하고 실행하는 TimerService [question] | _TimerService:SetTimerOnce()와 SetTimerRepeat()의 매개변수 차이와 예약 실패 시 반환값을 어떻게 처리해야 하나요? [answer] | `_TimerService:SetTimerOnce()`와 `SetTimerRepeat()`는 매개변수 구성과 동작 방식에 차이가 있으며, 예약 실패 시 반환값 처리 방법도 함께 확인해야 합니다. ### 1. 매개변수 차이 **`SetTimerOnce()`** * **용도:** 특정 시간 이후에 액션을 **1회만** 실행할 때 사용합니다. * **매개변수:** * `callback` (func): 실행할 액션을 함수 형태로 전달합니다. * `delaySeconds` (float): 예약 후 몇 초 뒤에 [followup] | callback에 컴포넌트 메서드를 직접 전달할 때 EnableInHierarchy가 false인 경우 동작은 어떻게 되는지, 그리고 이를 방지하기 위한 코드 예시를 보여주세요. [followup_answer] | `_TimerService:SetTimerOnce()`나 `_TimerService:SetTimerRepeat()`의 `callback` 매개변수에 컴포넌트의 메서드를 직접 전달할 때(예: `_TimerService:SetTimerOnce(self.MyMethod, 1)`), 해당 callback의 실행은 컴포넌트의 `EnableInHierarchy` 상태에 영향을 받습니다. 즉, **`EnableInHierarchy`가 `false`인 경우, 예약된 callback이 실행되지 않습니다.** 이를 방지하기 위해서는 컴포넌트 메서 [scores] | [judge_reason] | [source_doc] | `SetTimerOnce()`는 `SetTimer()`의 isRepeat를 false로 설정한 것과 동일하게 작동합니다. 예약 성공 시 integer 타입의 타이머의 id를 반환하고, 예약 실패 시 0을 반환합니다. 매개 변수는 다음과 같습니다. | 타입 | 매개 변수 | 설명 | | --- | ------ | --- | | func | callback | 몇 초 뒤 수행할 액션을 CallBack 형태로 넘겨줍니다. | | float | delaySeconds | 액션을 예약한 뒤 몇 초 후에 액션을 실행할 것인지를 설정합니다.
[task] | code [pass] | ✅ 통과 [title] | WorldInstanceService [question] | 월드 인스턴스 간 데이터를 주고받기 위해 "GlobalBossState"라는 이름의 공유 메모리를 생성하고, 이후 사용이 끝나면 해당 공유 메모리를 해제하는 스크립트를 작성해줘. (사용 서비스: _WorldInstanceService) [answer] | `_WorldInstanceService`를 사용하여 `GlobalBossState`라는 이름의 공유 메모리를 생성(또는 기존 것을 가져오기)하고, 작업이 끝난 후 해제하는 스크립트입니다. 공유 메모리 접근과 해제는 모두 서버에서만 실행되므로 `[server only]` 속성을 적용했습니다. ```lua Method: [server only] void OnBeginPlay () { -- "GlobalBossState" 이름의 공유 메모리를 얻어옵니다. -- 이미 존재하면 기존 것을, 없으면 새로 생성합니다. local re [followup] | [followup_answer] | [scores] | helpfulness=3 correctness=3 coherence=4 complexity=2 verbosity=2 [judge_reason] | 문서에 없는 CreateVariable API를 예시로 제시했으나 주석으로 처리했고, 반환값 처리 방식이 문서와 미묘하게 다를 수 있으나 핵심 흐름은 정확합니다. [source_doc] | 월드 인스턴스 관련 기능을 제공합니다. # Properties - **string WorldInstanceId [ReadOnly]** 현재 월드 인스턴스의 Id입니다. # Methods - **SharedMemoryResultCode DeleteSharedMemoryAndWait(string name) [ServerOnly] [Yield]** 공유 메모리를 삭제합니다. 해당 공유 메모리를 사용 중인 월드 인스턴스가 있더라도 삭제됩니다. 수행하는 동안 스크립트 실행을 중단합니다. - **void DeleteSharedM
[task] | two_turn [pass] | ⏳ 미판정 [title] | AvatarGUIRendererComponent [question] | AvatarGUIRendererComponent 를 사용하여 UI 에 아바타를 렌더링할 때 주요 프로퍼티와 메서드는 무엇인가요? [answer] | `AvatarGUIRendererComponent`는 아바타 형태의 엔티티를 UI에 렌더링할 때 사용하는 컴포넌트입니다. 주요 프로퍼티와 메서드는 다음과 같습니다. ### 주요 프로퍼티 (Properties) * **Color Color**: 아바타 전체의 색상을 지정합니다. * **boolean FlipX**: X축 기준 아바타 반전 여부를 결정합니다. * **boolean FlipY**: Y축 기준 아바타 반전 여부를 결정합니다. * **string MaterialId [Sync]**: 렌더러에 적용할 머티리얼 [followup] | SetAvatarPartColor 메서드로 특정 파츠 색상을 변경하려면 MapleAvatarItemCategory 값을 어떻게 지정해야 하며, 색상 값(RGBA) 형식은 어떻게 되나요? [followup_answer] | `SetAvatarPartColor` 메서드는 아바타의 특정 파츠 색상을 변경할 때 사용하며, 클라이언트에서만 실행됩니다. ### MapleAvatarItemCategory 지정 첫 번째 인자로 `MapleAvatarItemCategory` 타입의 값을 전달하여 변경할 아바타 파츠(카테고리)를 지정해야 합니다. 문서에는 `MapleAvatarItemCategory`의 구체적인 열거형 값 목록이 명시되어 있지 않으므로, 실제 사용할 수 있는 카테고리 상수값은 해당 타입의 정의나 다른 API 문서를 참조해야 합니다. ### 색상 값 [scores] | [judge_reason] | [source_doc] | 아바타 형태의 엔티티를 UI에 렌더링합니다. # Properties - **Color Color** 아바타 전체 색을 지정한 색상 값으로 변경합니다. - **boolean FlipX** X축을 기준으로 반전 여부를 결정합니다. - **boolean FlipY** Y축을 기준으로 반전 여부를 결정합니다. - **string MaterialId [Sync]** 렌더러에 적용할 머티리얼 Id를 지정합니다. - **float PlayRate** 아바타 애니메이션 재생 속도를 지정할 수 있습니다. 0 이상의 값을 지원하
[task] | single_turn [pass] | ⏳ 미판정 [title] | RoomService를 활용해 룸끼리 통신하기 [question] | 8초마다 상태를 바꾸는 예제에서 TimerService 대신 OnUpdate를 쓰면 안 되는지, 그리고 두 방식의 차이는 무엇인가요? [answer] | 제시된 참고 문서에는 `TimerService`와 `OnUpdate`를 비교하거나, `OnUpdate`를 활용한 8초 주기의 상태 변경 예제가 포함되어 있지 않습니다. 문서에 따르면, 8초마다 인스턴스 룸의 상태를 바꾸는 예제에 대해 "8초마다 인스턴스 룸의 상태를 게임 중과 대기 중으로 바꾸어 봅시다"라고 언급하고 있으며, 이를 위해 `RoomService`의 공유 메모리(`GetSharedMemory()`) 기능을 활용한다고 설명하고 있습니다. 그러나 특정 타이머 함수(`TimerService`)나 프레임 단위 업데이트 함수( [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 RoomService를 활용해 하나의 월드 인스턴스 안에 있는 정적 룸과 인스턴스 룸끼리 통신을 할 수 있습니다. 이 가이드는 예제 위주로 진행되며, 기본 개념은 [WorldInstanceService](/apiReference?postId=1034)와 동일합니다. [월드 인스턴스](/docs/?postId=984), [월드 인스턴스 통신](/docs/?postId=999), [인스턴스 맵 만들기](/docs/?postId=540) 가이드를 먼저 학습하기를 권장합니다. # RoomService로 통신 정적
[task] | two_turn [pass] | ⏳ 미판정 [title] | 패키지의 활용 [question] | 패키지 내보내기 및 불러오기 창에서 제공되는 폴더 구조와 계층 구조 뷰의 차이점과 각각의 용도는 어떻게 구분하나요? [answer] | 패키지 내보내기 및 불러오기 창에서는 패키지 내용을 확인하기 위해 **폴더 구조**와 **계층 구조** 두 가지 뷰를 제공합니다. 두 뷰의 차이점과 용도는 다음과 같습니다. * **폴더 구조**: Workspace의 실제 디렉터리 구조와 동일한 형태로 엔트리를 보여줍니다. 워크스페이스 내에서 엔트리를 어떻게 폴더별로 분류하고 배치했는지 그대로 확인할 수 있어, 파일 체계에 익숙한 사용자에게 적합합니다. * **계층 구조**: 엔트리를 데이터 타입별로 구분하여 보여줍니다. 특정 유형의 엔트리(예: 모델, 스크립트, 데이터셋 [followup] | 특정 타입의 스크립트 컴포넌트나 모델만 빠르게 확인하고 싶을 때, 두 뷰 중 어느 것이 더 효율적으로 활용되는지 상황별로 알려주세요. [followup_answer] | 특정 타입의 엔트리만 빠르게 확인하고 싶을 때는 **계층 구조** 뷰가 더 효율적입니다. 계층 구조 뷰는 엔트리를 타입별로 구별해 보여주기 때문에, 모델, 스크립트 컴포넌트, 데이터셋 등 특정 유형의 엔트리만 필터링하여 빠르게 파악할 수 있습니다. 반면, 폴더 구조 뷰는 Workspace의 실제 폴더 배치와 동일한 형태로 엔트리를 보여주므로, 특정 타입을 빠르게 찾기보다는 워크스페이스 내 물리적 파일 구조를 확인하는 데 더 적합합니다. 따라서 다음과 같은 상황별로 뷰를 선택하면 됩니다. * **계층 구조 뷰 활용 상황**: [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 메이플스토리 월드에서는 Workspace의 모델, 스크립트 컴포넌트, 데이터 셋과 같은 엔트리를 하나의 파일로 묶어 외부로 공유할 수 있는 패키지 기능을 제공하고 있습니다. Workspace의 엔트리를 패키지 파일로 내보내거나, 패키지 파일을 월드에 불러오는 방법에 대해 알아봅니다. # 패키지 소개 패키지는 특정 엔트리를 묶은 파일입니다. 패키지 파일을 이용해 제작한 월드의 일부를 외부와 공유하거나, 타인이 공유한 패키지를 내 월드에 사용할 수 있습니다. 패키지 내보내기, 불러오기 창에서는 폴더 구조와 계층
[task] | code [pass] | ❌ 탈락 [title] | OrderInLayerChangedEvent [question] | AvatarRendererComponent의 OrderInLayer가 변경될 때 OrderInLayerChangedEvent를 처리하여 특정 값 이상일 경우 다른 Entity의 위치를 이동시키는 스크립트를 작성해줘 [answer] | `AvatarRendererComponent`의 `OrderInLayer` 값이 변경되면 `OrderInLayerChangedEvent`가 발생합니다. 아래 스크립트는 이 이벤트를 수신하여 `OrderInLayer` 값이 특정 임계값(예: 10) 이상인지 확인하고, 조건을 만족할 경우 다른 Entity의 위치를 변경하는 로직을 포함합니다. 참고: 1. `OrderInLayerChangedEvent`는 `AvatarRendererComponent`가 존재하는 Entity에서 발생하며, Server와 Client 모두에서 트리거됩니다 [followup] | [followup_answer] | [scores] | helpfulness=3 correctness=2 coherence=4 complexity=3 verbosity=2 [judge_reason] | 이벤트 필드 명세가 없어 컴포넌트 프로퍼티를 직접 참조한 접근은 합리적이나, 문서에 없는 'AVATAR_RENDERER_COMPONENT.ORDER_IN_LAYER' 식별자를 지어냈고, 서버/클라이언트 발생 이벤트에 [server only] 태그를 붙여 핸들러가 서버에서만 실행되는지 불명확하며, 위치 변경이 서버에서만 가능한지 명시된 근거가 부족함. [source_doc] | Component의 OrderInLayer가 변경되었을 때 발생하는 이벤트입니다. 이 Event는 아래 API에 의해 발생합니다. * AreaParticleComponent <img src="https://img.shields.io/static/v1?label=Space&message=Server,Client&color=c4a484" alt="custom" title="Server, Client에서 이벤트가 발생합니다." data-nodeid="4"> * AvatarRendererComponent <img src="https://
[task] | single_turn [pass] | ⏳ 미판정 [title] | TweenState [question] | TweenState의 값이 2로 조회될 때 트윈이 완전히 종료된 것인지 일시 정지 상태인지 어떻게 구분할 수 있나요? [answer] | `TweenState`의 값이 **2**로 조회될 때, 이는 트윈이 **완전히 종료된 상태가 아니라 일시 정지(Pausing) 상태**입니다. 참고 문서에 정의된 `TweenState`의 멤버 값을 보면 다음과 같습니다. * **Idle (0)**: 기본 상태 * **Playing (1)**: 트윈이 동작하고 있는 상태 * **Pausing (2)**: **트윈이 일시 정지 상태** * **Destroying (3)**: 트윈이 파괴 전이거나, 파괴된 상태 따라서 값이 2인 경우를 '종료'와 '일시 정지'로 구분 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | TweenComponent, Tweener의 현재 상태를 나타냅니다. # Members | 이름 | 값 | 설명 | |---|---|---| | Idle | 0 | 기본 상태입니다. | | Playing | 1 | 트윈이 동작하고 있는 상태입니다. | | Pausing | 2 | 트윈이 일시 정지 상태입니다. | | Destroying | 3 | 트윈이 파괴 전이거나, 파괴된 상태입니다. | # Methods - **TweenState CastFrom(number value) [Static]** 숫자를 해당 타입으로 변환
[task] | instruction_following [pass] | ⏳ 미판정 [title] | 월드 인스턴스 통신 [question] | 공유 변수 참조 해제 방식을 설명하고, `ReleaseVariableAndWait`와 `ReleaseSharedMemoryAndWait`의 차이점을 3문장 이내로 작성하세요. [answer] | 월드 인스턴스는 공유 변수를 생성하거나 조회하는 순간부터 해당 변수를 참조 상태로 유지하며, 다른 인스턴스에서 변수를 직접 삭제하면 참조 중인 인스턴스들이 사용에 실패할 수 있으므로 참조 해제 방식을 권장합니다. `ReleaseVariableAndWait`는 특정 공유 변수 1개의 참조만 해제하는 반면, `ReleaseSharedMemoryAndWait`는 해당 WorldInstanceSharedMemory 내의 모든 공유 변수 참조를 일괄 해제합니다. 모든 인스턴스에서 참조가 해제되면 공유 변수는 자동으로 삭제됩니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 월드 인스턴스가 공유 변수를 생성, 조회, 수정을 하면 해당 공유 변수를 참조한 상태가 됩니다. 한 번 특정 공유 변수를 참조한 월드 인스턴스는 공유 변수가 삭제될 때까지 계속 참조 상태를 유지합니다. 만약 어떤 공유 변수를 여러 월드 인스턴스에서 참조하고 있을 때 특정 월드 인스턴스에서 해당 공유 변수를 삭제해버리면 다른 월드 인스턴스에서 공유 변수를 사용할 수 없게 됩니다. 이처럼 한 곳에서 데이터를 삭제했지만 전체 월드 인스턴스에게 영향을 주는 사고를 방지하기 위해 메이플스토리 월드는 WorldInstanceSharedMemo
[task] | single_turn [pass] | ⏳ 미판정 [title] | 테스트 서버 [question] | 테스트 서버를 열었다가 나중에 폐쇄하면 이전에 복사해 둔 서버 키는 다시 사용할 수 있나요? [answer] | 아니요, 다시 사용할 수 없습니다. 테스트 서버가 폐쇄되면 해당 서버 키 역시 폐기되므로, 이전에 복사해 두었더라도 더 이상 접속에 사용할 수 없습니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 출시한 월드에 안정적으로 콘텐츠 업데이트를 하려면 테스트 진행은 필수입니다. 예상치 못한 버그를 미리 발견하고 수정하기 위해 크리에이터는 테스트 서버를 열고 제한된 인원에게만 서버 키를 배포해 다양한 상황을 테스트할 수 있습니다. 이번 시간에는 테스트 서버 생성, 접속 및 폐쇄 방법을 알아보겠습니다. # 테스트 서버 생성 크리에이터가 출시한 월드의 상세 정보 페이지로 들어갑니다. [⋯] 버튼을 눌러 콘텍스트 메뉴를 열고 **[테스트 서버 열기]** 메뉴를 클릭합니다. 이후 열린 팝업창에서 테스트 서버로
[task] | two_turn [pass] | ✅ 통과 [title] | LeaderboardInfo [question] | LeaderboardInfo 의 ResetInfo 속성이 리더보드 초기화에 어떤 영향을 주는지 [answer] | `LeaderboardInfo`의 `ResetInfo` 속성은 `LeaderboardSeasonResetInfo` 타입의 읽기 전용(ReadOnly) 속성으로, 리더보드의 초기화 관련 설정 정보를 담고 있습니다. 참고 문서에는 `ResetInfo`가 구체적으로 어떤 초기화 동작(예: 시즌 변경 시 점수 삭제, 순위 재계산 등)을 수행하는지에 대한 상세한 동작 로직이나 하위 프로퍼티 목록이 제공되지 않습니다. 문서에서 확인 가능한 정보만으로는 `ResetInfo`가 리더보드 초기화에 미치는 정확한 영향 범위나 세부 방식을 설명할 수 [followup] | ResetInfo 가 설정된 리더보드에서 시즌이 변경될 때 CurrentSeasonId 가 어떻게 갱신되는지 [followup_answer] | 참고 문서에 따르면, `CurrentSeasonId`는 "현재 시즌의 Id"를 나타내는 읽기 전용 속성입니다. 하지만 `ResetInfo`가 설정된 상태에서 시즌이 변경될 때 `CurrentSeasonId`가 어떤 로직으로 갱신되는지, 또는 갱신 시점에 대한 구체적인 동작 방식은 문서에 명시되어 있지 않습니다. 따라서 제공된 문서 정보만으로는 시즌 변경 시 `CurrentSeasonId`의 갱신 방식을 설명할 수 없습니다. [scores] | helpfulness=3 correctness=4 coherence=4 complexity=2 verbosity=2 [judge_reason] | 문서에 없는 세부 동작을 지어내지 않고 문서에 명시된 타입과 ReadOnly 속성만 정확히 서술하며, 상세 정보가 부재함을 명시하여 신뢰성을 유지했습니다. [source_doc] | 리더보드 정보입니다. # Properties - **string CurrentSeasonId [ReadOnly]** 현재 시즌의 Id입니다. - **string Id [ReadOnly]** 리더보드의 Id입니다. - **string Name [ReadOnly]** 리더보드의 이름입니다. - **LeaderboardRankingStrategy RankingStrategy [ReadOnly]** 순위를 결정하는 방식입니다. - **LeaderboardRatingStrategy RatingStrategy [ReadOnl
[task] | instruction_following [pass] | ⏳ 미판정 [title] | FastVector3을 활용한 월드 최적화 [question] | 인덱스 접근(`v[1]`)과 키 접근(`v.x`)의 매핑 관계 및 성능 비교 결과를 표로 정리해서 보여 주세요. [answer] | FastVector3의 인덱스 접근과 키 접근은 다음과 같이 매핑되며, 성능 비교 결과는 아래 표와 같습니다. ### 1. 인덱스와 키의 매핑 관계 FastVector3에서 인덱스 접근 시 숫자 인덱스는 특정 성분(x, y, z)에 고정되어 대응됩니다. | 인덱스 접근 | 키 접근 | 설명 | | :--- | :--- | :--- | | `v[1]` | `v.x` | X 좌표 값 | | `v[2]` | `v.y` | Y 좌표 값 | | `v[3]` | `v.z` | Z 좌표 값 | ### 2. 성능 비교 결과 인덱스를 이용 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | `FastVector3`은 인덱스를 이용해 접근할 수도 있습니다. 아래 표를 보면 인덱스를 이용한 접근이 키를 이용한 접근보다 약간 더 빠른 것을 알 수 있습니다. ![[object Object]](https://mod-file.dn.nexoncdn.co.kr/bbs/17453667314987383595f55d84737a7cb12f62068050b.png{"width":"1080px"} "FastVector3Index") 인덱스를 이용해 `FastVector3`에 접근하는 예제는 아래와 같습니다. x는 1, y는 2, z는 3에
[task] | code [pass] | ⏳ 미판정 [title] | 중복 컴포넌트 수정하기 [question] | _SpawnService:SpawnByModelId() 로 모델을 스폰한 후, 스폰된 Entity 가 가진 중복 컴포넌트를 제거하기 위해 _EntityService:GetEntityByPath() 로 해당 Entity 를 조회하고, 중복된 컴포넌트를 삭제하는 로직을 작성해줘 [answer] | 제공된 참고 문서에는 `_SpawnService:SpawnByModelId()` 또는 `_EntityService:GetEntityByPath()` 를 사용하여 Entity를 조회하고, **중복된 컴포넌트를 삭제하는 구체적인 함수(예: RemoveComponent, DeleteComponent 등)나 API가 언급되어 있지 않습니다.** 문서에서는 중복 컴포넌트 문제를 해결하기 위해 다음과 같은 조치들을 안내하고 있지만, 이를 mLua 코드로 구현하는 특정 API 명세는 제공하지 않습니다: 1. **모델 또는 엔티티에서** 중복 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 중복된 컴포넌트가 있을 경우 **Console, Build Console 창**에 관련 로그 메시지가 발생합니다. 이 로그 메시지들은 주로 메이커에서 제작 중인 월드에 처음 들어갈 때, 맵을 변경할 때 출력됩니다. 내용과 상황에 따라 적절하게 컴포넌트를 수정하거나, 제거하면 됩니다. 컴포넌트 중복은 주로 아래 네 가지 상황에서 발생합니다. #### 맵에 이미 배치된 Entity에서 중복 컴포넌트 발생 맵에 배치된 Entity에 중복된 Component가 있을 경우 메이커 프로 모드 최초 진입 시 또는 메이커에서 맵 이동 시 로그
[task] | code [pass] | ⏳ 미판정 [title] | mLua [question] | @Sync 속성을 적용한 number 타입 Speed 프로퍼티를 정의하고, OnUpdate 메서드에서 매 프레임마다 Speed 값을 1씩 증가시키는 스크립트를 작성해줘 [answer] | 요청하신 `@Sync` 속성이 적용된 `number` 타입 `Speed` 프로퍼티와, 매 프레임마다 `Speed` 값을 1씩 증가시키는 `OnUpdate` 메서드를 포함한 mLua 스크립트입니다. ```lua Property: [Sync] number Speed = 0 Method: [server only] void OnUpdate(number delta) { self.Speed = self.Speed + 1 } ``` [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 메이플스토리 월드 메이커를 벗어나 외부 편집기에서 스크립트를 작성하기 위해서는 mLua 문법에 맞게 작성해야 합니다. mLua의 문법에 대해 알아봅시다. ##### 참고 가이드 [LocalWorkspace](/docs/?postId=1165) [ExtendedScriptFormat](/docs/?postId=1166) [mLua Extension](/docs?postId=1209) [공동 제작](/docs/?postId=670) # mLua MSW 메이커의 스크립트 엔트리를 표현하기 위한 프로그래밍 언어입니
[task] | code [pass] | ⏳ 미판정 [title] | RoomService를 활용해 룸끼리 통신하기 [question] | 정적 맵과 인스턴스 맵 두 개의 Logic 컴포넌트에서 RoomService의 GetSharedMemory()로 동일한 메모리 객체를 참조하여, 인스턴스 룸에서 "게임 중" 상태 값이 변경될 때 정적 룸의 Txt_RoomState UI가 즉시 업데이트되도록 통신하는 스크립트를 작성해줘. [answer] | 제시된 참고 문서에는 `RoomService`의 `GetSharedMemory()`, `DeleteSharedMemoryAndWait()`, `DeleteSharedMemoryAsync()` 함수의 존재만 언급되어 있을 뿐, 공유 메모리 객체의 구체적인 프로퍼티(예: `value`, `data` 등)나 메서드(예: `Set`, `Get`, `Subscribe` 등)에 대한 API 정의가 포함되어 있지 않습니다. 또한, 공유 메모리 값이 변경될 때 정적 룸으로 이벤트를 전송하거나 클라이언트 UI를 즉시 업데이트하도록 트리거하는 구체적 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 RoomService를 활용해 하나의 월드 인스턴스 안에 있는 정적 룸과 인스턴스 룸끼리 통신을 할 수 있습니다. 이 가이드는 예제 위주로 진행되며, 기본 개념은 [WorldInstanceService](/apiReference?postId=1034)와 동일합니다. [월드 인스턴스](/docs/?postId=984), [월드 인스턴스 통신](/docs/?postId=999), [인스턴스 맵 만들기](/docs/?postId=540) 가이드를 먼저 학습하기를 권장합니다. # RoomService로 통신 정적
[task] | code [pass] | ❌ 탈락 [title] | InstanceMapService [question] | RoomService의 MoveUserToInstanceRoom(string, string, string) 메서드를 사용하여 "instance_key" 키, "user_123" 아이디, "target_map" 맵 이름으로 특정 유저를 인스턴스 룸으로 이동시키는 스크립트를 작성해줘 [answer] | RoomService의 `MoveUserToInstanceRoom`은 문서에 `MoveUserToInstanceMap`이 **Deprecated**되어 RoomService의 `MoveUserToInstanceMaps(string, string, string)`를 사용하라고 안내하고 있습니다. `MoveUserToInstanceRoom` 메서드 명칭은 참고 문서에 존재하지 않으므로, 문서에 명시된 대체 함수인 `MoveUserToInstanceMaps`를 사용하여 스크립트를 작성합니다. ```lua Method: [server o [followup] | [followup_answer] | [scores] | helpfulness=3 correctness=2 coherence=4 complexity=3 verbosity=2 [judge_reason] | 문서의 대체 함수명(MoveUserToInstanceMaps)을 정확히 인용했으나, 질문에서 명시한 MoveUserToInstanceRoom 메서드가 문서에 없는 것을 무시하고 질문의 전제 자체를 부정하는 방식으로 답변하여 사용자의 의도와 괴리가 있으며, RoomService가 mLua 표준 서비스 명명 규칙(_RoomService)에 부합하는지 문서에 명시되어 있지 않아 추론이 섞여 있습니다. [source_doc] | - **InstanceRoom CreateInstanceMap(string key, table<string> mapNames) [Deprecated] [ServerOnly] [Yield]** 더는 사용하지 않는 함수입니다. RoomService의 CreateInstanceRoom(string, table, float)을 사용하세요. - **InstanceRoom CreateInstanceRoom(string key, table<string> mapNames, float firstUserWaitSeconds = 10) [Depre
[task] | two_turn [pass] | ✅ 통과 [title] | ScreenRecordService [question] | 이벤트 핸들러에서 전달받는 event 매개변수의 구조와 접근 가능한 필드들은 무엇인가요? [answer] | 참고 문서에 `ScreenRecordService`의 이벤트 핸들러에서 전달받는 `event` 매개변수의 구체적인 구조나 접근 가능한 필드(예: `UserId`처럼 특정 속성 이름)에 대한 정보는 포함되어 있지 않습니다. 문서에는 이벤트 발생 시 핸들러가 `event` 매개변수를 전달받으며, 이벤트를 연결할 때 `string key` 또는 `Type eventType`를 사용할 수 있다는 사실과 `ConnectEvent`, `DisconnectEvent`, `SendEvent` 메서드의 존재만 명시되어 있을 뿐, 이벤트 객체 내부 [followup] | ConnectEvent를 통해 연결된 핸들러 내부에서 event 객체의 특정 값을 읽어와서 로그(log)로 출력하는 코드 예시를 작성해 주세요. [followup_answer] | 참고 문서에는 `ScreenRecordService`의 이벤트 객체(`event`) 내부에 어떤 필드(속성)가 포함되어 있는지, 즉 어떤 값을 읽어올 수 있는지에 대한 정보가 제공되지 않았습니다. 문서에는 핸들러가 `event` 매개변수를 전달받는다는 사실과 `ConnectEvent`, `DisconnectEvent`, `SendEvent` 메서드의 시그니처만 명시되어 있을 뿐, 이벤트 타입별 구체적인 필드 이름(예: `UserId`, `MapName` 등)이 정의되어 있지 않습니다. 따라서 실제 존재하는 필드를 보장할 수 없는 [scores] | helpfulness=4 correctness=4 coherence=4 complexity=3 verbosity=2 [judge_reason] | 참고 문서에 이벤트 객체의 구조나 필드가 명시되어 있지 않으므로, 이를 정확히 지적하고 지어내지 않은 응답은 정확하고 도움이 됩니다. [source_doc] | - **EventHandlerBase ConnectEvent(string key, IScriptFunction eventHandler)** 이벤트를 연결합니다. 이 서비스에서 타입의 이름이 key인 이벤트가 발생하면, 핸들러로 통지받습니다. 핸들러는 event 매개 변수를 전달받습니다. - **EventHandlerBase ConnectEvent(Type eventType, IScriptFunction eventHandler)** 이벤트를 연결합니다. 이 서비스에서 타입이 eventType인 이벤트가 발생하면, 핸들러로 통지
[task] | two_turn [pass] | ⏳ 미판정 [title] | 월드 숍 서비스 활용하기 [question] | `ShopOpenEvent`를 통해 상점 UI가 열릴 때마다 상품 정보를 갱신하는 구조는 어떻게 작동하나요? [answer] | `ShopOpenEvent`를 활용한 상품 정보 갱신 구조는 **이벤트 발생 → 이벤트 수신 → 데이터 조회 → UI 갱신**의 4단계 프로세스로 작동합니다. 1. **이벤트 정의 및 발생**: * 먼저 `MyDesk`에서 `Create EventType`를 통해 `ShopOpenEvent`라는 커스텀 이벤트 타입을 생성합니다. * 상점 UI를 여는 버튼(예: `ShopOpenBtn`)에 이 `ShopOpenEvent`를 연결하거나, 버튼 클릭 시 해당 이벤트가 발생하도록 설정합니다. 2. **이벤트 수 [followup] | `HandleShopOpenEvent`에서 `RefreshShop`을 호출할 때 `self.Entity:GetChildByName`이 실패하거나 UI가 초기화되지 않은 경우를 방지하기 위해 어떤 예외 처리 또는 상태 확인 코드를 작성해야 하나요? [followup_answer] | 참고 문서에 명시된 `RefreshShop` 메서드와 관련 코드 예제에는 `GetChildByName` 실패 시나 UI 미초기화 상태에 대한 예외 처리(Null 체크, pcall 등)가 포함되어 있지 않습니다. 문서에서는 단순히 `self.Entity:GetChildByName("ItemName").TextComponent`를 호출하고 그 결과의 `.Text`에 값을 대입하는 방식으로만 작성되어 있으며, 자식 엔티티가 존재하지 않거나 텍스트 컴포넌트가 없는 경우의 방어적 코딩이나 에러 핸들링에 대한 지침은 제공되지 않습니다. 따 [scores] | [judge_reason] | [source_doc] | 상품 구매에 성공했을 때 포션 개수와 이용권 보유 여부를 확인할 수 있는 ui를 만들어봅시다. 1. **UI 에디터 - DefaultGroup - MyPotionInfo** 이미지 엔티티를 배치합니다. 2. 하위에 이미지와 텍스트 엔티티를 배치하고, 아래의 그림처럼 이름을 변경합니다. #### 상품 정보를 구매창에 불러오기 1. 새로운 **ItemSlot** 스크립트 컴포넌트를 생성하고 **Item, Pass UI엔티티**에 추가합니다. 2. **ItemSlot** 컴포넌트 스크립트 에디터 창을 열고, 프로퍼티를 추가합니다.
[task] | code [pass] | ✅ 통과 [title] | FontStyleType [question] | FontStyleType CastFrom(string value) 메서드를 사용하여 UI에서 입력받은 문자열 "Bold"을 FontStyleType으로 변환하고 해당 스타일을 텍스트에 설정하는 스크립트를 작성해줘 [answer] | `FontStyleType.CastFrom(string value)` 메서드를 사용하면 "Bold"와 같은 문자열을 `FontStyleType` 열거형 값으로 변환할 수 있습니다. 참고 문서에 따르면, 텍스트 컴포넌트에서 폰트 스타일을 직접 설정하는 구체적인 프로퍼티(예: `FontStyle`) 이름은 명시되어 있지 않습니다. 따라서 아래 예제에서는 변환된 `FontStyleType` 값을 계산하여 `log`로 출력하는 방식으로 변환 로직을 시연합니다. 실제 프로젝트에서 텍스트 컴포넌트가 `FontStyleType` 타입의 프로퍼 [followup] | [followup_answer] | [scores] | helpfulness=3 correctness=4 coherence=4 complexity=3 verbosity=2 [judge_reason] | 문서에 없는 TextComponent API를 지어내지 않고 주석으로 명확히 처리했으며, CastFrom 사용법은 정확히 설명했으나 실제 적용 코드가 없어 실용성이 다소 제한적입니다. [source_doc] | 폰트를 다양하게 표현합니다. # Members | 이름 | 값 | 설명 | |---|---|---| | Normal | 0 | 텍스트를 기본 스타일로 표시합니다. | | Bold | 1 | 굵게 표시합니다. | | Italic | 2 | 기울어진 텍스트로 표시합니다. | | Underline | 4 | 텍스트에 밑줄을 긋습니다. | | LowerCase | 8 | 소문자로 표시합니다. | | UpperCase | 16 | 대문자로 표시합니다. | | SmallCaps | 32 | 모두 대문자로 표시합니다. 대문자로 작성된 경우
[task] | single_turn [pass] | ⏳ 미판정 [title] | 아바타를 UI에서 표현하기 [question] | UI 아바타의 감정 표현을 변경할 때 PlayEmotion 함수의 두 번째 인자인 3이 무엇을 의미하는지 궁금합니다. [answer] | `PlayEmotion` 함수의 두 번째 인자(예제에서 `3`)는 **감정 표현이 유지되는 시간(초)** 을 의미합니다. 참고 문서의 `SetEmotion()` 함수에서 `self.myInfo.AvatarGUIRendererComponent:PlayEmotion(emotions[index], 3)` 호출 시, 해당 감정 표현이 3초간 UI 아바타에 표시된 후 원래대로 돌아옵니다. ```lua [client only] void SetEmotion() { local emotions = { Emotion [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | #### 감정 표현 변경 버튼을 누르면 UI에 보이는 아바타 감정 표현이 랜덤하게 변경되는 예제입니다. 1. **SetColorBtn** 버튼의 콘텍스트 메뉴에서 **Duplicate**를 클릭해 복제합니다. 2. 버튼의 위치를 적당히 옮기고 이름을 **SetEmotionBtn**으로 변경합니다. 3. **SetEmotionBtn - TextComponent - Text** 프로퍼티에 **SetEmotion**을 입력합니다. 4. **ChangeUIAvatar** 스크립트 컴포넌트에 `SetEmotio
[task] | code [pass] | ⏳ 미판정 [title] | PhysicsColliderComponent [question] | IsServer() 와 IsClient() 를 이용하여 현재 실행 환경이 서버인지 클라이언트인지에 따라 PhysicsColliderComponent 에 대한 로그 메시지를 다르게 출력하는 스크립트를 작성해줘 [answer] | `IsServer()`와 `IsClient()` 메서드를 사용하여 현재 실행 환경을 판별하고, 그에 따라 다른 로그 메시지를 출력하는 스크립트입니다. ```lua Method: void LogEnvironment() { if self.Entity.PhysicsColliderComponent:IsServer() then log("Current environment is Server") elseif self.Entity.PhysicsColliderComponent:IsClient() then [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | - **PhysicsRigidbodyComponent GetAttachedPhysicsRigidbody()** 연결된 PhysicsRigidbodyComponent를 반환합니다. - **void OnContactBegin(PhysicsContactBeginEvent beginEvent) [ScriptOverridable]** 두 물리 강체가 충돌을 시작할 때 호출됩니다. - **void OnContactEnd(PhysicsContactEndEvent endEvent) [ScriptOverridable]** 두 물리 강체의