[task] | single_turn [pass] | ⏳ 미판정 [title] | UI 에디터 [question] | UI 프리셋을 배치하면 MyDesk에 무엇이 추가되나요? [answer] | UI 프리셋을 배치하면 해당 프리셋에 포함된 **UI와 스크립트**가 MyDesk에 추가됩니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 기본 UI 엔티티는 UI 제작 시 가장 많이 사용하는 기능을 제공합니다. **이미지, 버튼, 스크롤 뷰, 텍스트, 입력 텍스트**로 구성되어 있습니다. 크리에이터는 여러 개의 UI 엔티티를 조합해 새로운 UI를 만들 수도 있습니다. [기본 UI 컴포넌트](/docs?postId=744) 가이드를 참고하세요. ![[object Object]](https://mod-file.dn.nexoncdn.co.kr/bbs/17132470861160af59286c47f4cdfb9012301dfc3d0c1.png "4") | 아이콘 | UI
[task] | code [pass] | ⏳ 미판정 [title] | 스킬 이펙트를 뿌려보자! [question] | EffectService의 PlayEffect 함수를 사용하여 Q, W, E, R 키 입력 시 각각 지정된 이펙트 ID("f396262ddb6e4d5581360496bb4e9f86", "aae828e6daa342a996320e32dc5c2ab6", "0da34c3dd7ba4c2890107d743b8c7a97", "5f67e1efe0b84d9c9111a21ecfedc937")를 엔티티의 현재 TransformComponent 위치에서 재생하도록 하는 NewSkill 컴포넌트 스크립트를 작성해줘 [answer] | 사용자가 요청한 `NewSkill` 컴포넌트 스크립트는 `InputService`의 `HandleKeyDownEvent`를 통해 Q, W, E, R 키 입력을 감지하고, 해당 키에 매핑된 이펙트 ID를 `_EffectService:PlayEffect` 함수를 사용하여 현재 엔티티의 위치에서 재생하도록 구성됩니다. ```lua Event Handler: [service: InputService] HandleKeyDownEvent(KeyDownEvent event) { -- Parameters local key = e [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 위에 이어서 이번에는 각 키를 입력할 때마다 다음의 스킬 이펙트가 호출되도록 만들어보겠습니다. 우선 **_EffectService**의 함수 중 `PlayEffect` 함수를 이용해 스크립트를 작성해보겠습니다. 1. **NewSkill** 컴포넌트의 **HandleKeyDownEvent**를 다음과 같이 수정해줍니다. ```lua [service: InputService] HandleKeyDownEvent(KeyDownEvent event) { -- Parameters
[task] | two_turn [pass] | ⏳ 미판정 [title] | CameraService를 활용한 카메라 제어 [question] | 카메라 전환 시 움직임의 부드러움을 조절하는 TransitionBlendType 프로퍼티와 지원되는 6가지 블렌드 타입에 대해 설명해 주세요. [answer] | `TransitionBlendType`은 카메라가 새로운 타깃으로 전환될 때 적용되는 움직임의 방식(블렌드 타입)을 결정하는 프로퍼티입니다. `CameraService`를 통해 제어하며, `SwitchCameraTo()` 메서드를 호출하기 전에 이 프로퍼티에 원하는 `CameraBlendType` enum 값을 할당하면 전환 시 카메라의 움직임이 해당 타입에 맞게 변경됩니다. 기본값은 **EaseInOut**으로, 값을 명시적으로 지정하지 않으면 자동으로 이 타입이 적용됩니다. ### 지원되는 6가지 블렌드 타입 `Transi [followup] | 특정 NPC 엔티티로 카메라 타깃을 전환할 때, 딱딱하고 기계적인 느낌을 주기 위해 CameraBlendType.Linear를 적용하는 mLua 스크립트 코드를 작성해 주세요. [followup_answer] | 특정 NPC 엔티티로 카메라 타깃을 전환하면서 `CameraBlendType.Linear`를 적용하여 딱딱하고 기계적인 전환 효과를 주는 mLua 스크립트代码如下입니다. ```lua Event Handler: [self] HandleTriggerEnterEvent (TriggerEnterEvent event) { --------------- Native Event Sender Info ---------------- -- Sender: TriggerComponent -- Space: Server, Client [scores] | [judge_reason] | [source_doc] | **TranstionBlendType**은 피사체(타깃)로 전환 시 카메라의 움직임을 제어할 수 있는 프로퍼티입니다. `SwitchCameraTo()` 호출 전에 **TranstionBlendType**에 CameraBlendType의 enum 값을 할당해 타깃 전환 시 블렌드 타입을 변경할 수 있습니다. 아래는 위 예제에서 **TranstionBlendType**에 CameraBlendType.Linear를 할당하는 코드를 추가하여, 카메라의 움직임을 조금 딱딱하게 변경해보도록 하겠습니다. ```lua [self] HandleT
[task] | single_turn [pass] | ⏳ 미판정 [title] | CameraService를 활용한 카메라 제어 [question] | SwitchCameraTo 함수를 사용할 때 매개변수로 엔티티 객체 자체를 넘겨도 되나요, 아니면 반드시 CameraComponent 프로퍼티를 추출해서 넘겨야 하나요? [answer] | `SwitchCameraTo` 함수를 사용할 때 엔티티 객체 자체를 넘겨서는 안 됩니다. 반드시 목표 엔티티의 **`CameraComponent`** 프로퍼티를 추출하여 매개변수로 넘겨야 합니다. 함수 시그니처가 `void SwitchCameraTo(CameraComponent cameraToSwitch)`로 정의되어 있어, 인수로 `CameraComponent` 타입을 요구합니다. 따라서 특정 엔티티(예: NPC)로 카메라 타깃을 변경하려면, 해당 엔티티를 먼저 가져온 뒤 `.CameraComponent`에 접근한 객체를 전달해 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 사전 설정을 마쳤으니 본격적으로 **CameraService**의 기능에 대해 알아보겠습니다. 먼저 카메라의 타깃 설정 방법을 알아봅시다. ##### void SwitchCameraTo(CameraComponent cameraToSwitch) 게임을 플레이하면 카메라는 기본적으로 플레이어를 피사체(타깃)로 삼아 계속 플레이어를 따라다니며 화면에 비춥니다.그러나 게임 장르 특성 때문에 혹은 게임의 특별한 연출을 위해서 카메라의 피사체(타깃)를 변경하고 싶을 때 CameraService의 `SwitchCameraTo()` 함수를 활
[task] | two_turn [pass] | ⏳ 미판정 [title] | 다른 위치로 이동하는 포탈 만들기 [question] | mLua에서 PortalComponent를 사용해 다른 위치로 이동하는 포탈을 만드는 기본 구조와 필수 설정은 무엇인가요? [answer] | mLua에서 `PortalComponent`를 사용해 다른 위치로 이동하는 포탈을 만들 때의 기본 구조와 필수 설정은 다음과 같습니다. ### 1. 포탈 엔티티 생성 포탈을 만들기 위해 두 가지 방법을 사용할 수 있습니다. * **Preset 사용:** 에디터의 Preset List에서 `Portal`을 선택하여 씬(Scene)에 배치합니다. 이 모델에는 이미 `PortalComponent`가 포함되어 있습니다. * **직접 제작:** 원하는 스프라이트(빛나는 원, 특정 그림 등)를 가진 엔티티를 배치한 후, 프로퍼티 에디 [followup] | PortalEntityRef에 목적지 포탈을 선택한 후 저장(Ctrl+S) 또는 테스트 실행하지 않으면 경로가 갱신되지 않는 예외 상황과 해결 방법은 무엇인가요? [followup_answer] | 포탈 경로는 World에 배치한 후 **저장(Ctrl + S) 또는 테스트 실행**을 해야 갱신됩니다. 따라서 `PortalEntityRef`에 목적지 포탈을 선택한 후 이 단계를 거치지 않으면 설치한 포탈 경로가 목록에 나타나지 않는 예외 상황이 발생합니다. **해결 방법:** 1. World에 포탈을 배치한 상태인지 확인합니다. 2. **저장(Ctrl + S)**을 수행하거나 **테스트 실행**을 합니다. 3. 이 단계를 거치면 포탈 경로가 갱신되어 정상적으로 선택 및 이동이 가능해집니다. [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 월드나 하나의 맵 안에서 이동하는 포탈을 만들어 간단하게 플레이어 아바타가 맵을 이동하게 만들 수 있습니다. [PortalComponent](/apiReference/Components/PortalComponent) 사용 방법을 알아보겠습니다. # 포탈 만들기 [PortalComponent](/apiReference/Components/PortalComponent)는 동일한 포탈 컴포넌트를 가진 엔티티를 목적지로 설정하고, 플레이어 아바타가 포탈 영역에서 특정 동작을 수행하면(키 입력) 목적지로 이동할 수
[task] | single_turn [pass] | ⏳ 미판정 [title] | UI 에디터 [question] | 입력 텍스트 엔티티에 포함된 컴포넌트는 무엇인가요? [answer] | 입력 텍스트 엔티티에는 다음과 같은 4가지 컴포넌트가 포함되어 있습니다. * **UITransformComponent** * **SpriteGUIRendererComponent** * **TextComponent** * **TextInputComponent** [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 기본 UI 엔티티는 UI 제작 시 가장 많이 사용하는 기능을 제공합니다. **이미지, 버튼, 스크롤 뷰, 텍스트, 입력 텍스트**로 구성되어 있습니다. 크리에이터는 여러 개의 UI 엔티티를 조합해 새로운 UI를 만들 수도 있습니다. [기본 UI 컴포넌트](/docs?postId=744) 가이드를 참고하세요. ![[object Object]](https://mod-file.dn.nexoncdn.co.kr/bbs/17132470861160af59286c47f4cdfb9012301dfc3d0c1.png "4") | 아이콘 | UI
[task] | instruction_following [pass] | ⏳ 미판정 [title] | UI 에디터 [question] | UI 에디터의 다섯 가지 구성 요소와 그 기능을 3문장 이내로 요약하세요. [answer] | UI 에디터는 Preset List, UI 경로 정보, 캔버스, 기본 도구, UI Groups 패널의 다섯 가지 요소로 구성됩니다. Preset List와 기본 도구를 활용해 UI 엔티티를 배치하고 편집하며, 캔버스는 실제 게임 화면 출력 방식을 미리 볼 수 있는 작업 공간입니다. UI 경로 정보와 UI Groups 패널을 통해 엔티티의 경로와 그룹을 관리하고, 그룹 선택 시 해당 화면으로 편집이 전환됩니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 UI를 편집할 수 있는 UI 에디터와 UI Group에 대해 알아봅시다. ##### 참고 가이드 * [UI 엔티티 제어하기](/docs?postId=1154&version=1) * [기본 UI 컴포넌트](/docs?postId=744) * [UI 제작하기](/docs?postId=64) # UI 에디터 소개 UI 에디터는 UI 엔티티를 구성하고, 메이플스토리 월드에서 제공하는 UI 엔티티를 조합해서 인벤토리나 상점 UI를 제작할 수 있습니다. UI 에디터 구성은 다음과 같습니다. | 번호 | 이름 |
[task] | single_turn [pass] | ⏳ 미판정 [title] | UI 에디터 [question] | 기본 UI 엔티티 중 이미지 출력에 주로 사용되는 것은 무엇인가요? [answer] | 기본 UI 엔티티 중 이미지 출력에 주로 사용되는 것은 **이미지**입니다. 이 UI 엔티티는 UI에 원하는 이미지를 출력하는 기능을 제공하며, 주로 아이콘 표시를 위해 사용됩니다. 포함된 컴포넌트는 `UITransformComponent`와 `SpriteGUIRendererComponent`입니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 기본 UI 엔티티는 UI 제작 시 가장 많이 사용하는 기능을 제공합니다. **이미지, 버튼, 스크롤 뷰, 텍스트, 입력 텍스트**로 구성되어 있습니다. 크리에이터는 여러 개의 UI 엔티티를 조합해 새로운 UI를 만들 수도 있습니다. [기본 UI 컴포넌트](/docs?postId=744) 가이드를 참고하세요. ![[object Object]](https://mod-file.dn.nexoncdn.co.kr/bbs/17132470861160af59286c47f4cdfb9012301dfc3d0c1.png "4") | 아이콘 | UI
[task] | single_turn [pass] | ⏳ 미판정 [title] | UI 에디터 [question] | 스크롤뷰 컴포넌트에는 어떤 기능이 포함되어 있나요? [answer] | 스크롤뷰(Scroll View)는 많은 양의 정보를 리스트 형태 또는 그리드 형태로 정렬하는 기능입니다. 인벤토리나 상점과 같이 항목이 많을 때 사용합니다. 스크롤뷰 UI 엔티티에는 다음 3개의 컴포넌트가 포함되어 있습니다. 1. `UITransformComponent` 2. `SpriteGUIRendererComponent` 3. `ScrollLayoutGroupComponent` [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 기본 UI 엔티티는 UI 제작 시 가장 많이 사용하는 기능을 제공합니다. **이미지, 버튼, 스크롤 뷰, 텍스트, 입력 텍스트**로 구성되어 있습니다. 크리에이터는 여러 개의 UI 엔티티를 조합해 새로운 UI를 만들 수도 있습니다. [기본 UI 컴포넌트](/docs?postId=744) 가이드를 참고하세요. ![[object Object]](https://mod-file.dn.nexoncdn.co.kr/bbs/17132470861160af59286c47f4cdfb9012301dfc3d0c1.png "4") | 아이콘 | UI
[task] | code [pass] | ⏳ 미판정 [title] | CameraService를 활용한 카메라 제어 [question] | CameraService의 Blend 시간을 0.5초로 설정한 뒤 타깃을 NPC로 전환하고, 이벤트 해제 시 캐릭터로 전환하는 스크립트를 작성해줘 [answer] | CameraService의 `TransitionBlendTime` 프로퍼티를 0.5로 설정하여 전환 시간을 조절하고, 트리거에 진입할 때 NPC로, 트리거에서 벗어날 때(`TriggerExitEvent`) 캐릭터(기본 플레이어)로 카메라 타깃을 전환하는 스크립트입니다. 참고로 `TriggerExitEvent`는 TriggerComponent가 제공하는 이벤트이며, 이벤트 핸들러에서 `event.TriggerBodyEntity`를 통해 나간 엔티티를 확인할 수 있습니다. 캐릭터로 복귀할 때는 `DefaultPlayer` 엔티티의 ` [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 게임을 만들다 보면 카메라가 비추는 대상을 변경하거나 확대, 축소를 이용해 연출해야 할 때가 있습니다. 이번 과정에서는 [CameraService](/apiReference/Services/CameraService)를 통해 타깃 카메라를 제어하는 방법과 카메라 연출 효과에 대해 알아보도록 합니다. ##### 참고 가이드 [엔티티와 컴포넌트 참조](docs?postId=164%7B%22target%22:%22\_self%22%7D) [엔티티의 충돌을 감지하는 TriggerComponent](/docs?post
[task] | code [pass] | ⏳ 미판정 [title] | CameraService를 활용한 카메라 제어 [question] | CameraService의 GetCurrentCameraComponent()로 가져온 CameraComponent를 로그로 출력하는 스크립트를 작성해줘 [answer] | `_CameraService:GetCurrentCameraComponent()`를 호출하여 현재 카메라가 추적 중인 엔티티의 `CameraComponent`를 가져온 뒤, `log()` 함수를 사용해 출력하는 스크립트입니다. ```lua Method: [client only] void OnBeginPlay() { local cameraComponent = _CameraService:GetCurrentCameraComponent() log(cameraComponent) } ``` [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | `ZoomReset()`는 변경된 줌 값을 초깃값으로 되돌리는 함수입니다. `ZoomReset()`을 사용하면 `ZoomTo()`를 이용해 줌 값을 변경하더라도, 다시 초깃값으로(100%) 맞출 수 있습니다. `ZoomTo()` 예시에 이어 `ZoomReset()`을 사용해 5초 뒤 줌 값을 100%로 변경하는 예시 코드입니다. 이해를 돕기 위해 **TimerService**를 활용했습니다. [TimerService](/docs?postId=47%7B%22target%22:%22\_self%22%7D) 가이드를 참고하세요. ``
[task] | instruction_following [pass] | ⏳ 미판정 [title] | UI 에디터 [question] | UIGroupComponent의 DefaultShow 프로퍼티를 활용해 그룹 노출 여부를 설정하는 방법을 단계별 번호 목록으로 작성하세요. [answer] | UIGroupComponent의 DefaultShow 프로퍼티를 활용해 그룹 노출 여부를 설정하는 방법은 다음과 같습니다. 1. 상단 메뉴에서 **[UI]** 버튼을 눌러 UI 에디터로 전환합니다. 2. **UI Groups 패널**에서 노출 여부를 설정할 UIGroup을 선택합니다. 3. 선택된 UIGroup의 **UIGroupComponent** 컴포넌트를 찾습니다. 4. **DefaultShow** 프로퍼티 값을 설정합니다. * 해당 UIGroup에 속한 UI들이 늘 보이는 상태가 되도록 하려면 **true**로 설정 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 UI를 편집할 수 있는 UI 에디터와 UI Group에 대해 알아봅시다. ##### 참고 가이드 * [UI 엔티티 제어하기](/docs?postId=1154&version=1) * [기본 UI 컴포넌트](/docs?postId=744) * [UI 제작하기](/docs?postId=64) # UI 에디터 소개 UI 에디터는 UI 엔티티를 구성하고, 메이플스토리 월드에서 제공하는 UI 엔티티를 조합해서 인벤토리나 상점 UI를 제작할 수 있습니다. UI 에디터 구성은 다음과 같습니다. | 번호 | 이름 |
[task] | instruction_following [pass] | ⏳ 미판정 [title] | UI 에디터 [question] | UIGroup의 기본 제공 그룹 3가지와 각각의 연결 로직 또는 특징을 표로 정리해서 설명하세요. [answer] | UIGroup에서는 크리에이터의 편의를 위해 기본으로 3개의 그룹을 제공합니다. 각 그룹의 특징과 연결된 로직은 다음과 같습니다. | 그룹 이름 | 특징 및 연결 로직 | | :--- | :--- | | **ToastGroup** | 크리에이터의 편의를 위해 제공하는 UI 그룹으로, `UIToast` 로직에 연결되어 있습니다. | | **PopupGroup** | 크리에이터의 편의를 위해 제공하는 UI 그룹으로, `UIPopup` 로직에 연결되어 있습니다. | | **DefaultGroup** | 항상 활성화된 UI 그룹입니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 UI를 편집할 수 있는 UI 에디터와 UI Group에 대해 알아봅시다. ##### 참고 가이드 * [UI 엔티티 제어하기](/docs?postId=1154&version=1) * [기본 UI 컴포넌트](/docs?postId=744) * [UI 제작하기](/docs?postId=64) # UI 에디터 소개 UI 에디터는 UI 엔티티를 구성하고, 메이플스토리 월드에서 제공하는 UI 엔티티를 조합해서 인벤토리나 상점 UI를 제작할 수 있습니다. UI 에디터 구성은 다음과 같습니다. | 번호 | 이름 |
[task] | code [pass] | ⏳ 미판정 [title] | CameraService를 활용한 카메라 제어 [question] | _CameraService의 CurrentZoomRatio 값을 매 프레임마다 OnUpdate에서 로그로 출력하는 스크립트를 작성해줘 [answer] | `_CameraService`의 `CurrentZoomRatio`는 현재 카메라의 줌 비율을 퍼센트 단위로 반환하는 읽기 전용 프로퍼티입니다. 매 프레임마다 이 값을 확인하려면 `OnUpdate` 생명주기 메서드에서 `log` 함수를 사용하면 됩니다. 아래는 매 프레임마다 현재 줌 비율을 로그로 출력하는 스크립트입니다. ```lua Method: [server] void OnUpdate (number delta) { log("Current Zoom Ratio: " .. _CameraService.CurrentZoomRat [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | `ZoomReset()`는 변경된 줌 값을 초깃값으로 되돌리는 함수입니다. `ZoomReset()`을 사용하면 `ZoomTo()`를 이용해 줌 값을 변경하더라도, 다시 초깃값으로(100%) 맞출 수 있습니다. `ZoomTo()` 예시에 이어 `ZoomReset()`을 사용해 5초 뒤 줌 값을 100%로 변경하는 예시 코드입니다. 이해를 돕기 위해 **TimerService**를 활용했습니다. [TimerService](/docs?postId=47%7B%22target%22:%22\_self%22%7D) 가이드를 참고하세요. ``
[task] | instruction_following [pass] | ⏳ 미판정 [title] | Workspace [question] | Workspace 검색 기능의 기준과 범위를 단계별 번호 목록으로 작성하세요. [answer] | Workspace 검색 기능의 기준과 범위는 다음과 같습니다. 1. **검색 기준**: 리소스의 이름 2. **검색 범위**: Workspace 전체 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 **Workspace**를 이용해 엔티티, 스크립트, 이미지를 효율적으로 관리할 수 있습니다. ##### 참고 가이드 [Entity, Component, Property](/docs?postId=54) [Model](/docs?postId=55) # Workspace 소개 **Workspace**는 폴더 형식의 리소스 관리 공간입니다. 필요한 것을 찾을 수 있는 **Workspace**는 효율적인 월드 제작을 위해 필요합니다. **Workspace** 패널의 기본 위치는 우측 중앙입니다. 크리에이터의 편의에
[task] | single_turn [pass] | ⏳ 미판정 [title] | CameraService를 활용한 카메라 제어 [question] | HandleTriggerEnterEvent 안에서 _CameraService:ZoomTo를 호출했을 때 서버와 클라이언트 모두에서 카메라가 반응하는 이유가 무엇인가요? [answer] | `HandleTriggerEnterEvent` 이벤트 핸들러의 실행 공간이 **Server, Client**로 설정되어 있기 때문입니다. 참고 문서의 이벤트 핸들러 주석(`-- Space: Server, Client`)에 명시된 바와 같이, `TriggerEnterEvent`가 발생하면 이 이벤트 핸들러는 서버와 클라이언트 양쪽 모두에서 실행됩니다. 따라서 이벤트 핸들러 내부에서 호출된 `_CameraService:ZoomTo` 함수도 서버와 클라이언트에서 동시에 실행되어 카메라 줌 효과가 적용됩니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 게임 플레이 중에 카메라 줌 인과 줌 아웃을 제어하는 방법에 대해 알아보겠습니다. 위에서 작성한 코드는 필요하지 않기 때문에 모두 지우고, 아래와 같은 상태에서 시작합니다. ```lua [self] HandleTriggerEnterEvent (TriggerEnterEvent event) { --------------- Native Event Sender Info ---------------- -- Sender: TriggerComponent -- Space: Server, Client ----------
[task] | instruction_following [pass] | ⏳ 미판정 [title] | Workspace [question] | Workspace의 상위 폴더 구성과 각 폴더의 역할을 3문장 이내로 설명하세요. [answer] | Workspace는 `DefaultPlayer`, `BaseEnvironment`, `MyDesk` 세 가지 상위 폴더로 구성됩니다. `DefaultPlayer`는 플레이어 아바타 정보를 참조하고 시작 시 스타트 포인트에 엔티티를 생성하며, `BaseEnvironment`는 메이커 기본 제공 컴포넌트와 서비스 등을 저장합니다. `MyDesk`는 크리에이터가 추가한 리소스와 WorldConfig 설정 변경을 관리하는 공간입니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 **Workspace**를 이용해 엔티티, 스크립트, 이미지를 효율적으로 관리할 수 있습니다. ##### 참고 가이드 [Entity, Component, Property](/docs?postId=54) [Model](/docs?postId=55) # Workspace 소개 **Workspace**는 폴더 형식의 리소스 관리 공간입니다. 필요한 것을 찾을 수 있는 **Workspace**는 효율적인 월드 제작을 위해 필요합니다. **Workspace** 패널의 기본 위치는 우측 중앙입니다. 크리에이터의 편의에
[task] | instruction_following [pass] | ⏳ 미판정 [title] | Workspace [question] | BaseEnvironment의 주요 엔트리 중 수정과 삭제가 불가능한 폴더 이름을 3문장 이내로 나열하세요. [answer] | BaseEnvironment의 주요 엔트리 중 수정과 삭제가 불가능한 폴더는 NativeScripts입니다. NativeScripts 하위의 Component, Service, Logic, Event, Misc 폴더도 수정과 삭제가 불가능합니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 메이커에서 기본 제공하는 기능을 모아 둔 폴더입니다. 총 2개의 폴더로 구성되어 있습니다. * **NativeScripts** * **NativeModel** **BaseEnvironment**의 폴더 순서를 바꾸거나, 하위 목록을 옮길 수 없습니다. **NativeScripts**의 모든 계층은 복제/삭제할 수 없습니다. **NativeScripts**의 특성을 변경해 사용하려면 해당 스크립트를 확장(Extend)하여 사용해야 합니다. 또한 **NativeModel**은 복제하거나 확장해 활용할 수 있습니다. **BaseEn
[task] | single_turn [pass] | ⏳ 미판정 [title] | CameraService를 활용한 카메라 제어 [question] | 카메라 줌을 5초 동안 천천히 변경하려면 ZoomTo 호출 시 두 번째 인자로 어떤 값을 설정해야 하는지 궁금합니다. [answer] | 5초 동안 천천히 카메라 줌을 변경하려면 `ZoomTo(percent, duration)` 함수의 두 번째 인자인 `duration`에 `5`를 설정해야 합니다. `duration`은 현재 줌 값에서 지정한 `percent` 값까지 도달하는 데 걸리는 시간을 초 단위로 나타냅니다. 예를 들어, 5초 동안 줌을 150%로 변경하려면 다음과 같이 코드를 작성할 수 있습니다. ```lua [self] HandleTriggerEnterEvent (TriggerEnterEvent event) { --------------- Nat [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 게임 플레이 중에 카메라 줌 인과 줌 아웃을 제어하는 방법에 대해 알아보겠습니다. 위에서 작성한 코드는 필요하지 않기 때문에 모두 지우고, 아래와 같은 상태에서 시작합니다. ```lua [self] HandleTriggerEnterEvent (TriggerEnterEvent event) { --------------- Native Event Sender Info ---------------- -- Sender: TriggerComponent -- Space: Server, Client ----------
[task] | instruction_following [pass] | ⏳ 미판정 [title] | Workspace [question] | MyDesk에서 리소스를 추가할 때의 절차를 단계별 번호 목록으로 작성하세요. [answer] | MyDesk에 리소스를 추가하는 절차는 다음과 같습니다. 1. 검색 창 왼쪽의 **[+]** 버튼을 클릭해 콘텍스트 메뉴를 엽니다. 2. 원하는 항목을 선택합니다. 3. **Workspace**의 **MyDesk** 하위에 새로운 항목이 추가됩니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 메이커에서 기본 제공하는 기능을 모아 둔 폴더입니다. 총 2개의 폴더로 구성되어 있습니다. * **NativeScripts** * **NativeModel** **BaseEnvironment**의 폴더 순서를 바꾸거나, 하위 목록을 옮길 수 없습니다. **NativeScripts**의 모든 계층은 복제/삭제할 수 없습니다. **NativeScripts**의 특성을 변경해 사용하려면 해당 스크립트를 확장(Extend)하여 사용해야 합니다. 또한 **NativeModel**은 복제하거나 확장해 활용할 수 있습니다. **BaseEn
[task] | code [pass] | ⏳ 미판정 [title] | CameraService를 활용한 카메라 제어 [question] | _onUpdate에서 _TimerService:SetTimerOnce()를 사용해 5초 후 _EntityService로 엔티티를 가져와 _CameraService:SwitchCameraTo()를 호출하는 스크립트를 작성해줘 [answer] | 요청하신 동작을 구현하기 위해 `OnUpdate` 생명주기 메서드와 `_TimerService`, `_EntityService`, `_CameraService`를 조합한 스크립트를 작성했습니다. 참고 문서에 따르면, `OnUpdate`는 모든 스크립트에서 사용 가능한 표준 생명주기 메서드입니다. `_TimerService:SetTimerOnce(fn, sec)`는 특정 시간(초) 후 함수를 한 번 실행하는 데 사용됩니다. `_EntityService:GetEntityByPath(path)`로 엔티티를 가져오고, 해당 엔티티의 `C [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 사전 설정을 마쳤으니 본격적으로 **CameraService**의 기능에 대해 알아보겠습니다. 먼저 카메라의 타깃 설정 방법을 알아봅시다. ##### void SwitchCameraTo(CameraComponent cameraToSwitch) 게임을 플레이하면 카메라는 기본적으로 플레이어를 피사체(타깃)로 삼아 계속 플레이어를 따라다니며 화면에 비춥니다.그러나 게임 장르 특성 때문에 혹은 게임의 특별한 연출을 위해서 카메라의 피사체(타깃)를 변경하고 싶을 때 CameraService의 `SwitchCameraTo()` 함수를 활
[task] | single_turn [pass] | ⏳ 미판정 [title] | UI 에디터 [question] | 버튼과 텍스트 컴포넌트의 차이점이 뭔가요? [answer] | 버튼과 텍스트 컴포넌트는 UI에서 담당하는 역할과 포함하는 컴포넌트 구성이 다릅니다. **1. 기능 차이** * **버튼**: 클릭 또는 터치가 발생했을 때 특정 액션이나 기능을 수행하도록 하는 역할을 합니다. * **텍스트**: UI에 텍스트를 표시하기 위해 사용하는 역할을 합니다. **2. 포함된 컴포넌트 차이** 두 UI 엔티티 모두 `UITransformComponent`와 `SpriteGUIRendererComponent`를 기본적으로 포함하지만, 핵심 기능 컴포넌트가 다릅니다. * **버튼**: `UITr [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 기본 UI 엔티티는 UI 제작 시 가장 많이 사용하는 기능을 제공합니다. **이미지, 버튼, 스크롤 뷰, 텍스트, 입력 텍스트**로 구성되어 있습니다. 크리에이터는 여러 개의 UI 엔티티를 조합해 새로운 UI를 만들 수도 있습니다. [기본 UI 컴포넌트](/docs?postId=744) 가이드를 참고하세요. ![[object Object]](https://mod-file.dn.nexoncdn.co.kr/bbs/17132470861160af59286c47f4cdfb9012301dfc3d0c1.png "4") | 아이콘 | UI
[task] | instruction_following [pass] | ⏳ 미판정 [title] | Workspace [question] | WorldConfig에서 보안 수준을 높이기 위해 활성화할 수 있는 설정 항목과 그 효과를 표로 정리하세요. [answer] | WorldConfig에서 보안 수준을 높이기 위해 활성화할 수 있는 설정은 `PlayerEntityAuthorityCheck`와 `ServiceAuthorityCheck` 두 가지입니다. 각 설정의 효과는 다음과 같습니다. | 설정 항목 | 효과 | | :--- | :--- | | `PlayerEntityAuthorityCheck` | 플레이어 엔티티에 속한 Component들의 Server 함수들을 로컬 Client 이외의 Client에서 호출하지 못하도록 변경하여 더 높은 보안 수준을 제공합니다. | | `ServiceAuth [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 **Workspace**를 이용해 엔티티, 스크립트, 이미지를 효율적으로 관리할 수 있습니다. ##### 참고 가이드 [Entity, Component, Property](/docs?postId=54) [Model](/docs?postId=55) # Workspace 소개 **Workspace**는 폴더 형식의 리소스 관리 공간입니다. 필요한 것을 찾을 수 있는 **Workspace**는 효율적인 월드 제작을 위해 필요합니다. **Workspace** 패널의 기본 위치는 우측 중앙입니다. 크리에이터의 편의에
[task] | single_turn [pass] | ⏳ 미판정 [title] | Workspace [question] | 메이커 화면에서 Workspace 패널이 안 보일 때 어떻게 다시 불러올 수 있나요? [answer] | 메이커에서 **Workspace** 패널이 보이지 않을 때는 상단 메뉴에서 **Panels - Workspace**를 클릭하면 다시 불러올 수 있습니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 **Workspace**를 이용해 엔티티, 스크립트, 이미지를 효율적으로 관리할 수 있습니다. ##### 참고 가이드 [Entity, Component, Property](/docs?postId=54) [Model](/docs?postId=55) # Workspace 소개 **Workspace**는 폴더 형식의 리소스 관리 공간입니다. 필요한 것을 찾을 수 있는 **Workspace**는 효율적인 월드 제작을 위해 필요합니다. **Workspace** 패널의 기본 위치는 우측 중앙입니다. 크리에이터의 편의에
[task] | code [pass] | ⏳ 미판정 [title] | CameraService를 활용한 카메라 제어 [question] | TimerService를 이용해 2초 후 120%로 줌인하고, 추가 4초 후 ZoomReset()을 호출하는 스크립트를 작성해줘 [answer] | 사용자가 요청한 로직(2초 대기 -> 120% 줌인 -> 추가 4초 대기 -> 초기화)을 `TimerService`와 `CameraService`를 활용하여 구현한 스크립트입니다. ```lua Method: [server] void OnBeginPlay() { -- 1단계: 2초 후 120%로 줌인하는 함수를 예약 local ZoomInFunc = function() -- 5초 동안 120%로 확대 _CameraService:ZoomTo(120, 5) -- [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | `ZoomReset()`는 변경된 줌 값을 초깃값으로 되돌리는 함수입니다. `ZoomReset()`을 사용하면 `ZoomTo()`를 이용해 줌 값을 변경하더라도, 다시 초깃값으로(100%) 맞출 수 있습니다. `ZoomTo()` 예시에 이어 `ZoomReset()`을 사용해 5초 뒤 줌 값을 100%로 변경하는 예시 코드입니다. 이해를 돕기 위해 **TimerService**를 활용했습니다. [TimerService](/docs?postId=47%7B%22target%22:%22\_self%22%7D) 가이드를 참고하세요. ``
[task] | instruction_following [pass] | ⏳ 미판정 [title] | Workspace [question] | NativeScripts와 NativeModel 폴더의 복제 및 삭제 가능 여부를 비교하여 표로 정리하세요. [answer] | NativeScripts와 NativeModel 폴더의 복제 및 삭제 가능 여부는 다음과 같습니다. | 폴더 | 삭제 가능 여부 | 복제 가능 여부 | 비고 | | :--- | :---: | :---: | :--- | | **NativeScripts** | 불가 | 불가 | 모든 계층이 복제/삭제할 수 없습니다. 특성을 변경하려면 해당 스크립트를 확장(Extend)하여 사용해야 합니다. | | **NativeModel** | 불가 | 가능 | 복제하거나 확장해 활용할 수 있습니다. 다른 폴더로 이동하거나 모델을 새로 만들 수는 없 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 메이커에서 기본 제공하는 기능을 모아 둔 폴더입니다. 총 2개의 폴더로 구성되어 있습니다. * **NativeScripts** * **NativeModel** **BaseEnvironment**의 폴더 순서를 바꾸거나, 하위 목록을 옮길 수 없습니다. **NativeScripts**의 모든 계층은 복제/삭제할 수 없습니다. **NativeScripts**의 특성을 변경해 사용하려면 해당 스크립트를 확장(Extend)하여 사용해야 합니다. 또한 **NativeModel**은 복제하거나 확장해 활용할 수 있습니다. **BaseEn
[task] | single_turn [pass] | ⏳ 미판정 [title] | CameraService를 활용한 카메라 제어 [question] | 플레이어 트리거 영역에 진입했을 때 카메라가 NPC로 넘어가는데, 화면이 순간적으로 점프하는 것 같은 현상이 발생하는 원인은 무엇인가요? [answer] | 카메라가 순간적으로 점프하는 것처럼 보이는 현상은 **카메라 전환 시간(Transition Blend Time)이 설정되지 않았거나 0에 가깝기 때문**입니다. `_CameraService:SwitchCameraTo()` 함수를 호출할 때, 카메라가 현재 타깃(플레이어)에서 새로운 타깃(NPC)으로 이동하는 과정에 걸리는 시간을 지정해야 부드러운 전환이 가능합니다. 이 시간을 지정하지 않으면 카메라가 즉시(new position)로 점프하게 되어 화면이 갑자기 튀는 것처럼 보입니다. 이 문제를 해결하려면 `_CameraServi [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 사전 설정을 마쳤으니 본격적으로 **CameraService**의 기능에 대해 알아보겠습니다. 먼저 카메라의 타깃 설정 방법을 알아봅시다. ##### void SwitchCameraTo(CameraComponent cameraToSwitch) 게임을 플레이하면 카메라는 기본적으로 플레이어를 피사체(타깃)로 삼아 계속 플레이어를 따라다니며 화면에 비춥니다.그러나 게임 장르 특성 때문에 혹은 게임의 특별한 연출을 위해서 카메라의 피사체(타깃)를 변경하고 싶을 때 CameraService의 `SwitchCameraTo()` 함수를 활
[task] | code [pass] | ⏳ 미판정 [title] | CameraService를 활용한 카메라 제어 [question] | TriggerComponent 이벤트에서 3초 동안 200%로 확대한 뒤 3초 후 ZoomReset()으로 되돌리는 스크립트를 작성해줘 [answer] | `TriggerComponent` 이벤트가 발생하면 `_CameraService:ZoomTo(200, 3)`을 호출하여 3초 동안 200%로 확대하고, 이 확대 동작이 끝난 후 3초가 지난 시점에 `_CameraService:ZoomReset()`이 실행되도록 `_TimerService:SetTimerOnce`를 활용하는 스크립트입니다. ```lua Event Handler: [self] HandleTriggerEnterEvent (TriggerEnterEvent event) { --------------- Native E [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | `ZoomReset()`는 변경된 줌 값을 초깃값으로 되돌리는 함수입니다. `ZoomReset()`을 사용하면 `ZoomTo()`를 이용해 줌 값을 변경하더라도, 다시 초깃값으로(100%) 맞출 수 있습니다. `ZoomTo()` 예시에 이어 `ZoomReset()`을 사용해 5초 뒤 줌 값을 100%로 변경하는 예시 코드입니다. 이해를 돕기 위해 **TimerService**를 활용했습니다. [TimerService](/docs?postId=47%7B%22target%22:%22\_self%22%7D) 가이드를 참고하세요. ``
[task] | code [pass] | ⏳ 미판정 [title] | CameraService를 활용한 카메라 제어 [question] | `TriggerEnterEvent` 수신 시 `_CameraService.TransitionBlendTime`을 0으로 설정하여 즉시 전환되도록 하고, `_EntityService:GetEntityByPath`로 가져온 엔티티의 `CameraComponent`를 인자로 `SwitchCameraTo`에 전달하는 스크립트를 작성해줘. [answer] | 사용자가 요청한 조건에 따라 `TriggerEnterEvent` 수신 시 카메라 전환 시간을 0으로 설정하여 즉시 전환되도록 하는 스크립트입니다. ```lua Event Handler: [self] HandleTriggerEnterEvent (TriggerEnterEvent event) { --------------- Native Event Sender Info ---------------- -- Sender: TriggerComponent -- Space: Server, Client --------- [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | **TransitionBlendTime**은 **CameraService**에서 제공하는 프로퍼티로 카메라가 목표 피사체로 이동하는데 걸리는 시간을 정할 수 있습니다. **TransitionBlendTime** 시간을 `SwitchCameraTo()` 함수 호출 이전에 설정하면, 설정 시간에 걸쳐 카메라가 목표 피사체로 이동하는 것을 볼 수 있습니다. 따라서 `SwitchCameraTo()` 함수를 호출하기 전에 **TransitionBlendTime에 시간을 설정**하면, **TransitionBlendTime**의 설정 시간 동
[task] | code [pass] | ⏳ 미판정 [title] | CameraService를 활용한 카메라 제어 [question] | `TriggerEnterEvent`를 처리하여 `_EntityService`로 엔티티를 조회한 뒤, `_CameraService`의 `TransitionBlendTime`을 2.5로 설정하고 `SwitchCameraTo`를 호출해 카메라 전환 시간을 조절하는 스크립트를 작성해줘. [answer] | 사용자가 요청한 조건에 맞춰 `TriggerEnterEvent`를 처리하고, `_EntityService`로 엔티티를 조회한 뒤 `_CameraService`의 `TransitionBlendTime`을 2.5로 설정하고 `SwitchCameraTo`를 호출하는 스크립트는 다음과 같습니다. ```lua Event Handler: [self] HandleTriggerEnterEvent (TriggerEnterEvent event) { --------------- Native Event Sender Info ----------- [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | **TransitionBlendTime**은 **CameraService**에서 제공하는 프로퍼티로 카메라가 목표 피사체로 이동하는데 걸리는 시간을 정할 수 있습니다. **TransitionBlendTime** 시간을 `SwitchCameraTo()` 함수 호출 이전에 설정하면, 설정 시간에 걸쳐 카메라가 목표 피사체로 이동하는 것을 볼 수 있습니다. 따라서 `SwitchCameraTo()` 함수를 호출하기 전에 **TransitionBlendTime에 시간을 설정**하면, **TransitionBlendTime**의 설정 시간 동