← 목록

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

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

[task] | single_turn [pass] | ⏳ 미판정 [title] | 인스턴스 맵 만들기 [question] | Ready 상태가 아닌 유저가 인스턴스 룸 생성 조건에 포함되지 않도록 하기 위해 v.Player.isReady 를 확인하는데, 이 프로퍼티가 서버에서만 접근 가능한지 클라이언트에서도 실시간으로 업데이트되는지 어떻게 확인하나요? [answer] | 제공된 참고 문서에는 `v.Player.isReady` 프로퍼티가 서버에서만 접근 가능한지, 클라이언트에서도 실시간으로 업데이트되는지에 대한 명시적인 정보가 없습니다. 문서에서는 해당 프로퍼티가 **`[server only]`** 메서드(`OnUpdate`) 내부에서 `_UserService.UserEntities`를 통해 반복되며 확인된다는 사실만 확인됩니다. 이는 해당 로직이 서버 측에서 처리됨을 의미하지만, 클라이언트 측에서의 접근 가능 여부나 동기화(Sync) 상태에 대한 기술적 설명은 포함되어 있지 않습니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 게임이 진행될 인스턴스 룸에 입장할 수 있는 유저를 정하는 조건을 만들어 유저를 이동시켜봅시다. 조건은 크리에이터의 기획에 따라 달라질 수 있습니다. 예시는 **'Ready' 버튼을 3명 이상의 유저가 누르면** 새로운 인스턴스 룸으로 이동시킵니다. 1. **GameManager 스크립트 컴포넌트**에 주기적으로 유저의 Ready 상태를 확인해, 인스턴스 룸으로 이동시키는 스크립트를 작성합니다. ```lua Property: [None] number checkReadyPlayerTimer = 0

[task] | two_turn [pass] | ⏳ 미판정 [title] | 아바타의 외형 변경과 활용 [question] | 아바타의 복장 정보는 어떤 컴포넌트를 통해 관리되며, 크리에이터가 모든 유저에게 동일한 무기를 적용하려면 어떻게 설정해야 하나요? [answer] | 아바타의 복장 정보는 **CostumeManagerComponent**를 통해 관리됩니다. 이 컴포넌트는 복장 정보를 가지고 있으며, 크리에이터가 특정 값을 지정하지 않으면 유저 개개인이 실제로 장착한 옷의 정보를 가져와 표시합니다. 모든 유저에게 동일한 무기를 적용하려면 **CostumeManagerComponent**에서 복장(무기)을 직접 지정해야 합니다. 이렇게 설정하면 월드를 실행했을 때 **AvatarRendererComponent**가 지정된 복장 정보를 가져와 월드에 접속하는 모든 유저에게 같은 무기를 적용합니다. [followup] | `CostumeManagerComponent`의 프로퍼티에서 특정 복장을 지정할 때, 상하의와 한벌옷 또는 한손무기와 양손무기처럼 중복 장착이 불가능한 경우 어떤 우선순위로 아이템이 출력되나요? [followup_answer] | 동시 착용이 불가능한 아이템을 같이 입력한 경우, **한벌옷**과 **두손무기**가 우선하여 출력됩니다. [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 아바타 구성을 살펴보고, 아바타의 장비를 교체하는 방법을 알아봅니다. 아바타의 구성을 이해해 새로운 방식으로 아바타를 활용할 수 있습니다. # 아바타 **DefaultPlayer**의 프로퍼티 에디터에는 **AvatarRendererComponent**와 **CostumeManagerComponent**가 있습니다. * **AvatarRendererComponent** * 복장 정보를 가져와 아바타를 그리는(Rendering) 역할을 합니다. * **CostumeManagerComponent**

[task] | code [pass] | ⏳ 미판정 [title] | 인스턴스 맵 만들기 [question] | checkReadyPlayerTimer 프로퍼티를 이용해 5.0초가 경과할 때마다 타이머를 초기화하고, 그 시점에 _UserService.UserEntities 를 순회하며 Ready 상태 유저를 필터링하는 OnUpdate 메서드 로직을 작성해줘 [answer] | 요청하신 로직은 `OnUpdate` 메서드 내에서 `checkReadyPlayerTimer`를 `delta` 값으로 누적하고, 5.0초가 되면 타이머를 0으로 초기화한 뒤 `_UserService.UserEntities`를 순회하여 `Player.isReady`가 `true`인 유저만 필터링하는 방식으로 구현할 수 있습니다. ```lua Property: [None] number checkReadyPlayerTimer = 0 Method: [server only] void OnUpdate(number delta) { se [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 게임이 진행될 인스턴스 룸에 입장할 수 있는 유저를 정하는 조건을 만들어 유저를 이동시켜봅시다. 조건은 크리에이터의 기획에 따라 달라질 수 있습니다. 예시는 **'Ready' 버튼을 3명 이상의 유저가 누르면** 새로운 인스턴스 룸으로 이동시킵니다. 1. **GameManager 스크립트 컴포넌트**에 주기적으로 유저의 Ready 상태를 확인해, 인스턴스 룸으로 이동시키는 스크립트를 작성합니다. ```lua Property: [None] number checkReadyPlayerTimer = 0

[task] | instruction_following [pass] | ⏳ 미판정 [title] | 아바타의 외형 변경과 활용 [question] | CostumeManagerComponent에 입력해야 하는 복장 정보 RUID 목록을 표로 정리해서 [answer] | CostumeManagerComponent에 입력해야 하는 복장 정보 RUID는 다음과 같습니다. | Parts | RUID | | :---: | --- | | Body | 504244b76e654f5db23dc62693106bc8 | | Cape | 0c40fcbc25844082981d2f4ca04ee383 | | EyeAccessory | e3846cade85f4a04a603a9a8f5f705d4 | | Face | 0b67e20c585145b7b50bdce28386bef0 | | Glove | 43e864f8cd77466db [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | **AvatarRendererComponent**와 **CostumeManagerComponent**를 활용해 새로운 아바타를 만들어 사용할 수 있습니다. 몬스터, 포탈, NPC 혹은 크리에이터만의 특별한 엔티티로 제작할 수 있습니다. 이때 **TransformComponent, AvatarRendererComponent, CostumeManagerComponent** 총 3가지는 필수 컴포넌트입니다. 필수 컴포넌트와 더불어 다른 네이티브 컴포넌트를 추가하거나, 크리에이터가 제작한 새로운 컴포넌트를 추가해 활용합니다. #### 아

[task] | single_turn [pass] | ⏳ 미판정 [title] | 영상 재생시키기 [question] | 문서 예시 코드에서 OnBeginPlay 함수 내부에 Jump 함수가 잘못 배치되어 있는 것으로 보이는데, 이는 문법 오류인지 아니면 특정 구조를 의도한 것인지 정확한 작성 방식을 알려주세요. [answer] | 참고 문서에 제시된 첫 번째 코드 블록은 문법 오류이며, 실제 동작하는 코드가 아닙니다. `OnBeginPlay()` 함수 선언부 바로 아래에 `Jump` 함수 선언부가 중복으로 삽입되어 있어 Lua 문법적으로 허용되지 않는 구조입니다. 문서 후반부에 제시된 **[실제 mLua 예제]** 블록들이 올바른 작성 방식을 보여줍니다. `OnBeginPlay()` 함수 내부에서는 컴포넌트 참조를 저장하고, `Jump` 호출은 별도의 메서드 또는 이벤트 핸들러에서 수행해야 합니다. 문서에서 요구하는 동작(입장 시 00:20부터 재생, P [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 월드에 입장하면 영상을 바로 00:20초부터 재생을 시작하게 만들고, 재생 중에 특정 키를 입력할 때 함수가 동작하게 만듭니다. YoutubePlayerWorldComponent와 YoutubePlayerGUIComponent의 함수 사용법은 동일합니다. 예시는 YoutubePlayerWorldComponent가 기준입니다. 예시 Url: https://www.youtube.com/watch?v=9pL_b1fl9LQ&t=1s 1. YoutubePlayerController 스크립트 컴포넌트를 만들어, 배치한 Youtube 모델에

[task] | single_turn [pass] | ⏳ 미판정 [title] | 인스턴스 맵 만들기 [question] | RoomService:MoveUsersToInstanceRoom 을 호출할 때 InstanceKey 를 어떻게 생성하거나 가져와야 하며, GetOrCreateInstanceRoom 메서드의 구현 로직이 문서에 빠져있어 어떤 방식으로 작성해야 하는지 궁금합니다. [answer] | 제공된 참고 문서에는 `_RoomService:MoveUsersToInstanceRoom` 호출 시 필요한 `InstanceKey`를 생성하거나 가져오는 구체적인 로직이 포함되어 있지 않습니다. 문서의 예제 코드(`GameManager` 스크립트)에서는 `self:GetOrCreateInstanceRoom()` 메서드를 호출하여 `instanceRoom` 객체를 얻어온 후, `instanceRoom.InstanceKey` 프로퍼티를 통해 키를 가져와 `_RoomService:MoveUsersToInstanceRoom`에 전달하는 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 게임이 진행될 인스턴스 룸에 입장할 수 있는 유저를 정하는 조건을 만들어 유저를 이동시켜봅시다. 조건은 크리에이터의 기획에 따라 달라질 수 있습니다. 예시는 **'Ready' 버튼을 3명 이상의 유저가 누르면** 새로운 인스턴스 룸으로 이동시킵니다. 1. **GameManager 스크립트 컴포넌트**에 주기적으로 유저의 Ready 상태를 확인해, 인스턴스 룸으로 이동시키는 스크립트를 작성합니다. ```lua Property: [None] number checkReadyPlayerTimer = 0

[task] | code [pass] | ⏳ 미판정 [title] | 영상 재생시키기 [question] | self.Entity.YoutubePlayerWorldComponent 를 참조하여 Play, Pause, PlayPause, Jump 메서드를 호출하고, 모든 메서드에 [client only] 실행 공간 속성을 부여하는 YoutubePlayerController 스크립트를 작성해줘 [answer] | 사용자가 요청한 조건을 정리하면 다음과 같습니다. 1. **타겟 컴포넌트**: `self.Entity.YoutubePlayerWorldComponent` 2. **호출할 메서드**: `Play()`, `Pause()`, `PlayPause()`, `Jump(time)` 3. **실행 공간**: 모든 메서드에 `[client only]` 적용 4. **구조**: mLua 스크립트 형식 (Property, Method, Event Handler) 참고 문서의 예제 코드를 기반으로, 각 동작을 수행하는 메서드를 정의하고 키 입 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 월드에 입장하면 영상을 바로 00:20초부터 재생을 시작하게 만들고, 재생 중에 특정 키를 입력할 때 함수가 동작하게 만듭니다. YoutubePlayerWorldComponent와 YoutubePlayerGUIComponent의 함수 사용법은 동일합니다. 예시는 YoutubePlayerWorldComponent가 기준입니다. 예시 Url: https://www.youtube.com/watch?v=9pL_b1fl9LQ&t=1s 1. YoutubePlayerController 스크립트 컴포넌트를 만들어, 배치한 Youtube 모델에

[task] | code [pass] | ⏳ 미판정 [title] | 인스턴스 맵 만들기 [question] | _RoomService:MoveUsersToInstanceRoom 메서드를 호출할 때, InstanceKey 와 toSendPlayers 테이블을 인자로 전달하여 준비된 유저들을 특정 인스턴스 룸으로 이동시키는 코드를 작성해줘 [answer] | `_RoomService:MoveUsersToInstanceRoom` 메서드는 생성된 인스턴스 룸의 `InstanceKey`와 이동시킬 플레이어들의 이름이 담긴 테이블을 인자로 받아, 해당 유저들을 특정 인스턴스 룸으로 이동시킵니다. 준비된 유저들을 특정 인스턴스 룸으로 이동시키는 코드는 다음과 같이 작성할 수 있습니다. ```lua Property: [None] integer playerNumPerGame = 3 Method: [server only] void MoveReadyPlayersToInstance() { - [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 게임이 진행될 인스턴스 룸에 입장할 수 있는 유저를 정하는 조건을 만들어 유저를 이동시켜봅시다. 조건은 크리에이터의 기획에 따라 달라질 수 있습니다. 예시는 **'Ready' 버튼을 3명 이상의 유저가 누르면** 새로운 인스턴스 룸으로 이동시킵니다. 1. **GameManager 스크립트 컴포넌트**에 주기적으로 유저의 Ready 상태를 확인해, 인스턴스 룸으로 이동시키는 스크립트를 작성합니다. ```lua Property: [None] number checkReadyPlayerTimer = 0

[task] | single_turn [pass] | ⏳ 미판정 [title] | 인스턴스 맵 만들기 [question] | `OnBeginPlay`에서 `CurrentMapName`이 "dungeon"일 때 `readyButton.Enable = false`로 설정하는 로직이 Instance Room 재진입 시 정상적으로 초기화되지 않는 현상의 원인은 무엇인가요? [answer] | 제시된 참고 문서에는 `Instance Room` 재진입 시 `readyButton.Enable` 초기화 실패 현상의 원인이나 해결책에 대한 정보가 포함되어 있지 않습니다. 문서에는 `OnBeginPlay`에서 `CurrentMapName`이 "dungeon"일 때 `readyButton.Enable = false`로 설정하는 코드 단편만 제시되어 있을 뿐, 이 로직이 재진입 상황에서 어떻게 동작하는지 또는 왜 초기화되지 않는지에 대한 기술적 설명이 없습니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 3. **ReadyButton** 스크립트 컴포넌트를 생성하고 **Ready UI 버튼**에 추가합니다. 유저가 준비 상태가 되면 서버에 해당 유저가 준비되었다는 정보를 보내줍니다. ```lua Property: [None] boolean isReady = false Event Handler: [client only] [Entity: UIButton(/ui/DefaultGroup/UIButton)] HandleButtonClickEvent(ButtonClickEvent e

[task] | single_turn [pass] | ⏳ 미판정 [title] | 인스턴스 맵 만들기 [question] | OnUpdate 함수 내에서 checkReadyPlayerTimer 를 5.0 이상으로 조건을 잡았을 때, delta 값의 정밀도 문제로 타이머가 정확히 5.0 이 되는 순간을 놓칠 수 있는 문제가 발생하나요? [answer] | 네, `OnUpdate` 함수 내에서 `delta` 값을 누적하여 타이머를 관리할 때 정밀도 문제로 인해 값이 정확히 `5.0`이 되는 순간을 놓칠 수 있습니다. 이는 `delta`가 부동소수점(float/double) 타입으로 전달되며, 매 프레임마다 작은 오차가 발생할 수 있기 때문입니다. 따라서 `==` 같은 동등 비교를 사용하는 것이 아니라, `>=` (크거나 같다) 조건을 사용하여 임계값을 넘었는지 확인하는 것이 표준적인 처리 방식입니다. 제시된 참고 문서의 코드에서도 이 문제를 인지하고 `>=` 연산자를 사용하고 있습 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 게임이 진행될 인스턴스 룸에 입장할 수 있는 유저를 정하는 조건을 만들어 유저를 이동시켜봅시다. 조건은 크리에이터의 기획에 따라 달라질 수 있습니다. 예시는 **'Ready' 버튼을 3명 이상의 유저가 누르면** 새로운 인스턴스 룸으로 이동시킵니다. 1. **GameManager 스크립트 컴포넌트**에 주기적으로 유저의 Ready 상태를 확인해, 인스턴스 룸으로 이동시키는 스크립트를 작성합니다. ```lua Property: [None] number checkReadyPlayerTimer = 0

[task] | single_turn [pass] | ⏳ 미판정 [title] | 인스턴스 맵 만들기 [question] | Ready UI 버튼에서 `_UserService.LocalPlayer.Player:OnReady()` 호출 시 발생하는 `Player` 속성 접근 오류의 원인은 무엇인가요? [answer] | 제공된 참고 문서에 `_UserService.LocalPlayer.Player` 속성 접근 오류의 원인이나 해결 방법에 대한 설명이 포함되어 있지 않습니다. 문서에는 `ReadyButton` 스크립트에서 `_UserService.LocalPlayer.Player:OnReady()`를 호출하는 코드 예시와, `DefaultPlayer`에 추가되는 `Player` 스크립트 컴포넌트에서 `[server]` 실행 공간의 `OnReady()` 메서드를 정의하는 코드가 제시되어 있을 뿐, 이 호출이 실패할 수 있는 원인(예: Player 스 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 3. **ReadyButton** 스크립트 컴포넌트를 생성하고 **Ready UI 버튼**에 추가합니다. 유저가 준비 상태가 되면 서버에 해당 유저가 준비되었다는 정보를 보내줍니다. ```lua Property: [None] boolean isReady = false Event Handler: [client only] [Entity: UIButton(/ui/DefaultGroup/UIButton)] HandleButtonClickEvent(ButtonClickEvent e

[task] | single_turn [pass] | ⏳ 미판정 [title] | 인스턴스 맵 만들기 [question] | Ready 상태인 유저를 인스턴스 룸으로 이동시킬 때 _UserService.UserEntities 를 직접 순회하는 것 외에 다른 서비스나 메서드를 사용해야 하는 경우가 있나요? [answer] | 제공된 참고 문서의 범위 내에서 답변드립니다. 문서에 명시된 예제 코드와 설명을 보면, Ready 상태인 유저를 확인하고 인스턴스 룸으로 이동시키는 로직에서 `_UserService.UserEntities`를 직접 순회하는 방식 외에 **다른 서비스나 메서드를 통해 Ready 상태 유저 목록을 조회하는 별도 API는 언급되어 있지 않습니다.** 문서에서 안내하는 구체적인 절차는 다음과 같습니다: 1. **유저 상태 확인:** `_UserService.UserEntities` 테이블을 `pairs`로 순회하며, 각 유저 엔티티 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 게임이 진행될 인스턴스 룸에 입장할 수 있는 유저를 정하는 조건을 만들어 유저를 이동시켜봅시다. 조건은 크리에이터의 기획에 따라 달라질 수 있습니다. 예시는 **'Ready' 버튼을 3명 이상의 유저가 누르면** 새로운 인스턴스 룸으로 이동시킵니다. 1. **GameManager 스크립트 컴포넌트**에 주기적으로 유저의 Ready 상태를 확인해, 인스턴스 룸으로 이동시키는 스크립트를 작성합니다. ```lua Property: [None] number checkReadyPlayerTimer = 0

[task] | code [pass] | ⏳ 미판정 [title] | 인스턴스 맵 만들기 [question] | RoomService의 InstanceRoom 객체를 반환받아 해당 룸에 속한 유저들을 관리하고, 조건이 충족되면 모든 참여자를 dungeon 맵으로 이동시키는 InstanceRoomManager 스크립트를 작성해줘. [answer] | 제시된 참고 문서에는 `RoomService`의 `GetOrCreateInstanceRoom()` 및 `CreateInstanceRoom()` 메서드와, 생성된 인스턴스 룸 객체의 `MoveUsers()` 메서드 사용법이 명시되어 있습니다. 하지만 질문에서 요구하는 **"해당 룸에 속한 유저들을 관리"** 하기 위한 API(예: 현재 룸에 있는 유저 목록을 조회하거나, 특정 유저의 Ready 상태와 같은 조건을 체크하는 메서드)는 제공된 문서에 포함되어 있지 않습니다. 또한, "Ready 버튼을 누른 3명"이라는 조건을 충족하는지 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 대기실에 모인 인원 중 Ready 버튼을 누른 3명만 게임이 진행될 맵으로 이동하게 만들어봅시다. #### 준비 이 예제에서는 시작 맵을 인스턴스 맵으로 보내는 정적 룸, 돌아오는 정적 룸으로 활용합니다. 1. 대기 맵과 인스턴스 맵을 만듭니다. * 정적 맵 이름: waitingmap * 인스턴스 맵 이름: dungeon 2. dungeon 맵을 인스턴스 맵으로 사용하기 위해 프로퍼티 에디터 창에서 **MapComponent의 InstanceMap 프로퍼티**를 활성화합니다. 3. UI 에디터 - 좌측 기

[task] | single_turn [pass] | ⏳ 미판정 [title] | 아바타의 외형 변경과 활용 [question] | AvatarRendererComponent와 CostumeManagerComponent 각각의 역할은 무엇이며, 둘은 어떻게 협력하나요? [answer] | AvatarRendererComponent와 CostumeManagerComponent는 아바타의 외형 표현을 담당하며, 각각 다음과 같은 역할을 수행하여 협력합니다. **1. CostumeManagerComponent (복장 정보 관리)** * **역할**: 아바타에 장착할 복장(장비) 정보를 가지고 있는 컴포넌트입니다. * **동작**: * 기본적으로 유저 개개인이 실제로 장착한 옷의 정보를 가져와 보여줍니다. * 크리에이터가 프로퍼티에 특정 값을 지정하면, 해당 복장 정보를 저장합니다. * [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 아바타 구성을 살펴보고, 아바타의 장비를 교체하는 방법을 알아봅니다. 아바타의 구성을 이해해 새로운 방식으로 아바타를 활용할 수 있습니다. # 아바타 **DefaultPlayer**의 프로퍼티 에디터에는 **AvatarRendererComponent**와 **CostumeManagerComponent**가 있습니다. * **AvatarRendererComponent** * 복장 정보를 가져와 아바타를 그리는(Rendering) 역할을 합니다. * **CostumeManagerComponent**

[task] | instruction_following [pass] | ⏳ 미판정 [title] | 인스턴스 맵 만들기 [question] | `playerNumPerGame` 이 3으로 설정되어 있을 때, `Ready` 상태인 플레이어가 7명인 경우 `_RoomService:MoveUsersToInstanceRoom` 이 호출되는 횟수와 각 호출 시 전달되는 `toSendPlayers` 의 길이를 코드 블록(`lua`) 안에 주석으로만 설명하여 출력하세요. [answer] | `playerNumPerGame`이 3이고 Ready 상태인 플레이어가 7명인 경우, `_RoomService:MoveUsersToInstanceRoom`은 총 2회 호출됩니다. 각 호출 시 전달되는 `toSendPlayers` 배열의 길이는 첫 번째 호출 시 3, 두 번째 호출 시 1입니다. ```lua -- 1. Ready 상태인 플레이어 수(readyPlayerNum)가 7이고, playerNumPerGame이 3이므로 -- math.floor(7 / 3) = 2가 되어 for 반복문이 2번 실행됩니다. -- 따라 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 게임이 진행될 인스턴스 룸에 입장할 수 있는 유저를 정하는 조건을 만들어 유저를 이동시켜봅시다. 조건은 크리에이터의 기획에 따라 달라질 수 있습니다. 예시는 **'Ready' 버튼을 3명 이상의 유저가 누르면** 새로운 인스턴스 룸으로 이동시킵니다. 1. **GameManager 스크립트 컴포넌트**에 주기적으로 유저의 Ready 상태를 확인해, 인스턴스 룸으로 이동시키는 스크립트를 작성합니다. ```lua Property: [None] number checkReadyPlayerTimer = 0

[task] | single_turn [pass] | ⏳ 미판정 [title] | 인스턴스 맵 만들기 [question] | Ready 버튼을 누른 유저만 인스턴스 맵으로 이동시키기 위해 RoomService와 UI 이벤트 핸들러를 어떻게 연결해야 하나요? [answer] | 사용자가 `Ready` 버튼을 누른 이벤트를 감지하여 서버로 전달하고, 서버에서 `RoomService`를 호출해 해당 유저를 인스턴스 맵으로 이동시키는 과정으로 구성해야 합니다. 다음과 같은 단계로 구현할 수 있습니다. 1. **클라이언트 (UI 이벤트)**: `Ready` 버튼 클릭 이벤트를 처리하는 `Event Handler`를 작성하여, 클릭한 유저의 `UserId`를 서버 메서드로 전달합니다. 2. **서버 (로직 처리)**: 서버 메서드에서 전달받은 유저 리스트를 받아 `RoomService`의 `GetOrCrea [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 대기실에 모인 인원 중 Ready 버튼을 누른 3명만 게임이 진행될 맵으로 이동하게 만들어봅시다. #### 준비 이 예제에서는 시작 맵을 인스턴스 맵으로 보내는 정적 룸, 돌아오는 정적 룸으로 활용합니다. 1. 대기 맵과 인스턴스 맵을 만듭니다. * 정적 맵 이름: waitingmap * 인스턴스 맵 이름: dungeon 2. dungeon 맵을 인스턴스 맵으로 사용하기 위해 프로퍼티 에디터 창에서 **MapComponent의 InstanceMap 프로퍼티**를 활성화합니다. 3. UI 에디터 - 좌측 기

[task] | two_turn [pass] | ⏳ 미판정 [title] | 인스턴스 맵 만들기 [question] | OnUpdate에서 5초 주기로 체크하는 로직에서 _UserService.UserEntities의 v.Player.isReady 상태가 실시간으로 동기화되지 않으면 어떤 문제가 발생하며, 이를 방지하기 위한 [Sync] 프로퍼티 사용이나 이벤트 기반 처리로 전환하는 방법이 있나요? [answer] | 제공된 참고 문서에는 `_UserService.UserEntities`의 `v.Player.isReady` 상태가 실시간으로 동기화되지 않을 때 발생하는 구체적인 문제나, 이를 방지하기 위해 `[Sync]` 프로퍼티를 사용하거나 이벤트 기반 처리로 전환하는 방법에 대한 정보가 포함되어 있지 않습니다. 문서에서는 `GameManager` 스크립트 컴포넌트의 `OnUpdate` 메서드 내에서 5초 주기로 `_UserService.UserEntities`를 순회하며 `v.Player.isReady == true` 조건을 확인하는 로직만 [followup] | isReady 상태를 [Sync] 프로퍼티로 관리하고 HandleUserReadyEvent 같은 이벤트 핸들러를 사용하여 타이머 대신 즉시 이동 처리하는 스크립트 구조를 작성해 주세요. [followup_answer] | 제공된 참고 문서에는 `isReady` 상태를 `[Sync]` 프로퍼티로 관리하는 방법이나 `HandleUserReadyEvent`와 같은 이벤트 핸들러가 존재하는지 여부에 대한 정보가 포함되어 있지 않습니다. 문서에서는 `GameManager` 스크립트 컴포넌트의 `OnUpdate` 메서드 내에서 5초 주기로 `_UserService.UserEntities`를 순회하며 `v.Player.isReady` 값을 폴링(polling)하는 방식만 예시로 제시하고 있으며, 이벤트 기반 처리나 `[Sync]` 프로퍼티를 이용한 즉시 이동 [scores] | [judge_reason] | [source_doc] | 게임이 진행될 인스턴스 룸에 입장할 수 있는 유저를 정하는 조건을 만들어 유저를 이동시켜봅시다. 조건은 크리에이터의 기획에 따라 달라질 수 있습니다. 예시는 **'Ready' 버튼을 3명 이상의 유저가 누르면** 새로운 인스턴스 룸으로 이동시킵니다. 1. **GameManager 스크립트 컴포넌트**에 주기적으로 유저의 Ready 상태를 확인해, 인스턴스 룸으로 이동시키는 스크립트를 작성합니다. ```lua Property: [None] number checkReadyPlayerTimer = 0

[task] | single_turn [pass] | ⏳ 미판정 [title] | 인스턴스 맵 만들기 [question] | `isReady` 상태 변수를 `[None]`으로 선언했을 때, 다른 유저의 Player 스크립트에서 이 값을 실시간으로 동기화하여 확인하기 위한 올바른 Property 속성은 무엇인가요? [answer] | 제공된 참고 문서에는 `isReady` 상태 변수를 다른 유저의 Player 스크립트에서 실시간으로 동기화하여 확인하기 위해 사용해야 하는 올바른 Property 속성(예: `[Sync]`)에 대한 정보가 포함되어 있지 않습니다. 참고 문서의 Player 스크립트 컴포넌트 예제에서는 `isReady` 변수를 `[None]` 속성으로 선언하고 있으며, `[server]` 실행 공간의 `OnReady()` 및 `OnCancelReady()` 메서드를 통해 서버 측 상태만 변경하는 것을 보여줄 뿐, 클라이언트나 다른 엔티티로 값을 동기 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 3. **ReadyButton** 스크립트 컴포넌트를 생성하고 **Ready UI 버튼**에 추가합니다. 유저가 준비 상태가 되면 서버에 해당 유저가 준비되었다는 정보를 보내줍니다. ```lua Property: [None] boolean isReady = false Event Handler: [client only] [Entity: UIButton(/ui/DefaultGroup/UIButton)] HandleButtonClickEvent(ButtonClickEvent e

[task] | single_turn [pass] | ⏳ 미판정 [title] | 인스턴스 맵 만들기 [question] | playerNumPerGame 을 프로퍼티 에디터에서 설정할 때, 인스턴스 룸에 배정될 유저가 항상 정확히 playerNumPerGame 명씩만 들어가는지, 아니면 나머지는 대기실에 남는지 어떻게 처리되나요? [answer] | 제공된 참고 문서에 따르면, `playerNumPerGame` 을 프로퍼티 에디터에서 설정할 때 인스턴스 룸에 배정되는 유저 수는 **항상 정확히 `playerNumPerGame` 명씩만** 들어갑니다. 문서의 `GameManager` 스크립트 예제를 보면, Ready 상태인 플레이어(`readyPlayers`)를 순서대로 `playerNumPerGame` 명씩 잘라서(`toSendPlayers`) 인스턴스 룸으로 보내는 로직이 구현되어 있습니다. 구체적으로 다음과 같이 처리됩니다: 1. **배정 로직:** `for j = 1 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 게임이 진행될 인스턴스 룸에 입장할 수 있는 유저를 정하는 조건을 만들어 유저를 이동시켜봅시다. 조건은 크리에이터의 기획에 따라 달라질 수 있습니다. 예시는 **'Ready' 버튼을 3명 이상의 유저가 누르면** 새로운 인스턴스 룸으로 이동시킵니다. 1. **GameManager 스크립트 컴포넌트**에 주기적으로 유저의 Ready 상태를 확인해, 인스턴스 룸으로 이동시키는 스크립트를 작성합니다. ```lua Property: [None] number checkReadyPlayerTimer = 0

[task] | single_turn [pass] | ⏳ 미판정 [title] | 아바타의 외형 변경과 활용 [question] | CostumeManagerComponent를 이용해 의상을 변경할 때 SetEquip 함수를 직접 호출하는 대신 CustomCapEquip 같은 프로퍼티에 RUID를 직접 대입하는 방식은 어떤 차이점이 있나요? [answer] | 제공된 참고 문서에는 `SetEquip` 함수와 `CustomCapEquip` 같은 프로퍼티 대입 방식 간의 차이점(예: 동작 원리, 성능, 지원 범위 등)에 대한 설명이 없습니다. 문서에는 두 방식 모두 사용 가능한 예시만 제시되어 있을 뿐, 그 차이에 대한 기술적 설명은 찾을 수 없습니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | **AvatarRendererComponent**의 `SetColor` 함수와 **확장한 TriggerComponent**를 사용해 특정 엔티티와 유저가 닿으면(충돌하면) 유저가 빨간색으로 변하게 합니다. 1. **BaseEnvironment - NativeScripts - Component - TriggerComponent**를 선택합니다. 2. **TriggerComponent**의 콘텍스트 메뉴를 열고 **Extend**를 클릭합니다. 3. 확장한 스크립트 이름을 변경하고, 아바타와 부딪힐 엔티티에 컴포넌트를 추가합니

[task] | single_turn [pass] | ⏳ 미판정 [title] | 아바타의 외형 변경과 활용 [question] | TriggerComponent를 확장해서 OnEnterTriggerBody를 정의할 때 __base:OnEnterTriggerBody를 호출하지 않으면 어떤 문제가 발생하나요? [answer] | 제공된 참고 문서에는 `__base:OnEnterTriggerBody(enterEvent)`를 호출하지 않았을 때 발생하는 구체적인 문제나 오류에 대한 설명이 포함되어 있지 않습니다. 문서에는 단순히 "TriggerComponent를 확장했기 때문에 OnEnterTriggerBody 함수를 추가하면 앞에 가 붙습니다"라는 문구와 함께, 모든 예제 코드에서 `__base:OnEnterTriggerBody(enterEvent)`를 호출하는 방식만 제시되어 있을 뿐, 이를 생략할 경우의 동작이나 부작용에 대한 정보는 없습니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | **AvatarRendererComponent**의 `SetColor` 함수와 **확장한 TriggerComponent**를 사용해 특정 엔티티와 유저가 닿으면(충돌하면) 유저가 빨간색으로 변하게 합니다. 1. **BaseEnvironment - NativeScripts - Component - TriggerComponent**를 선택합니다. 2. **TriggerComponent**의 콘텍스트 메뉴를 열고 **Extend**를 클릭합니다. 3. 확장한 스크립트 이름을 변경하고, 아바타와 부딪힐 엔티티에 컴포넌트를 추가합니

[task] | two_turn [pass] | ⏳ 미판정 [title] | 인스턴스 맵 만들기 [question] | RoomService의 GetOrCreateInstanceRoom() 함수로 인스턴스 룸을 생성하고 관리하는 방식이 궁금합니다. [answer] | `_RoomService:GetOrCreateInstanceRoom()` 함수는 특정 식별자(Key)를 가진 인스턴스 룸을 가져오거나, 존재하지 않으면 새로 생성하는 기능을 제공합니다. 이 함수를 사용하면 매번 새로운 인스턴스 룸을 생성할지, 이미 존재하는 룸에 접속할지를 하나의 호출로 관리할 수 있습니다. 인스턴스 룸을 생성하고 관리하는 핵심 방식은 **고유한 식별자(Key)를 동적으로 생성**하는 것입니다. 아래 예시처럼 프로퍼티에 카운터 변수를 두고, 매번 호출될 때마다 값이 증가하도록 하여 중복되지 않는 Key를 만들어주는 [followup] | GetOrCreateInstanceRoom()에서 roomIdx를 키로 사용하는 이유와, 이 값이 충돌하거나 초기화되지 않을 경우 발생하는 예외 상황 및 처리 코드는 무엇인가요? [followup_answer] | 참고 문서를 근거로 `GetOrCreateInstanceRoom()`에서 `roomIdx`를 키로 사용하는 이유와 예외 상황 처리에 대해 설명합니다. ### 1. roomIdx를 키로 사용하는 이유 `roomIdx`를 키로 사용하는 주된 이유는 **매번 호출될 때마다 중복되지 않는 새로운 인스턴스 룸을 생성하기** 위함입니다. * **고유 식별자 생성**: `"DungeonMap"..tostring(self.roomIdx)`와 같이 맵 이름에 `roomIdx`를 붙여 고유한 문자열 Key를 만듭니다. * **새로운 인스 [scores] | [judge_reason] | [source_doc] | 대기실에 모인 인원 중 Ready 버튼을 누른 3명만 게임이 진행될 맵으로 이동하게 만들어봅시다. #### 준비 이 예제에서는 시작 맵을 인스턴스 맵으로 보내는 정적 룸, 돌아오는 정적 룸으로 활용합니다. 1. 대기 맵과 인스턴스 맵을 만듭니다. * 정적 맵 이름: waitingmap * 인스턴스 맵 이름: dungeon 2. dungeon 맵을 인스턴스 맵으로 사용하기 위해 프로퍼티 에디터 창에서 **MapComponent의 InstanceMap 프로퍼티**를 활성화합니다. 3. UI 에디터 - 좌측 기

[task] | code [pass] | ⏳ 미판정 [title] | 인스턴스 맵 만들기 [question] | Player 컴포넌트를 사용하여 OnBeginPlay()에서 _EntityService:GetEntity로 준비 버튼 엔티티를 참조하고, _UserService.LocalPlayer.CurrentMapName이 "dungeon"일 경우 해당 버튼의 Enable 프로퍼티를 false로 설정하는 스크립트를 작성해줘. [answer] | ```lua Property: [None] any readyButton = nil Method: [client only] void OnBeginPlay() { wait(1) -- 'Entity ID' 부분에는 실제 Ready 버튼의 Entity ID를 입력해야 합니다. self.readyButton = _EntityService:GetEntity("Entity ID") if _UserService.LocalPlayer.CurrentMapName == "dungeon" then [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 3. **ReadyButton** 스크립트 컴포넌트를 생성하고 **Ready UI 버튼**에 추가합니다. 유저가 준비 상태가 되면 서버에 해당 유저가 준비되었다는 정보를 보내줍니다. ```lua Property: [None] boolean isReady = false Event Handler: [client only] [Entity: UIButton(/ui/DefaultGroup/UIButton)] HandleButtonClickEvent(ButtonClickEvent e

[task] | code [pass] | ⏳ 미판정 [title] | 인스턴스 맵 만들기 [question] | Player 컴포넌트의 [server] 실행 공간에서 OnReady() 메서드를 구현하여 isReady 프로퍼티를 true로 변경하고, OnCancelReady() 메서드를 구현하여 isReady 프로퍼티를 false로 변경하는 스크립트를 작성해줘. [answer] | Player 스크립트 컴포넌트에서 `isReady` 프로퍼티를 정의하고, 서버 실행 공간에서 상태를 변경하는 `OnReady()` 및 `OnCancelReady()` 메서드를 구현한 스크립트는 다음과 같습니다. ```lua Property: [None] boolean isReady = false Method: [server] void OnReady() { self.isReady = true } [server] void OnCancelReady() { self.isReady = false } ``` [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 3. **ReadyButton** 스크립트 컴포넌트를 생성하고 **Ready UI 버튼**에 추가합니다. 유저가 준비 상태가 되면 서버에 해당 유저가 준비되었다는 정보를 보내줍니다. ```lua Property: [None] boolean isReady = false Event Handler: [client only] [Entity: UIButton(/ui/DefaultGroup/UIButton)] HandleButtonClickEvent(ButtonClickEvent e

[task] | code [pass] | ⏳ 미판정 [title] | 인스턴스 맵 만들기 [question] | EntityService의 GetEntityByPath와 UserService의 GetUsers API를 조합해 특정 유저의 엔티티를 찾아 RoomService를 통해 인스턴스 맵으로 전송하는 전송 로직을 구현하는 TeleportService 스크립트를 작성해줘. [answer] | 제시된 참고 문서에는 `UserService`의 `GetUsers` API에 대한 설명이나 예제가 포함되어 있지 않습니다. 따라서 `UserService:GetUsers()`를 사용하여 유저 목록을 가져오는 로직은 문서 근거 없이 작성할 수 없습니다. 다만, 문서에 명시된 `_EntityService:GetEntityByPath()`와 `_RoomService` 관련 API(`GetOrCreateInstanceRoom`, `MoveUsers`)를 조합하여, **정적 룸에서 실행되며** 특정 유저 ID 리스트를 받아 인스턴스 맵으로 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 대기실에 모인 인원 중 Ready 버튼을 누른 3명만 게임이 진행될 맵으로 이동하게 만들어봅시다. #### 준비 이 예제에서는 시작 맵을 인스턴스 맵으로 보내는 정적 룸, 돌아오는 정적 룸으로 활용합니다. 1. 대기 맵과 인스턴스 맵을 만듭니다. * 정적 맵 이름: waitingmap * 인스턴스 맵 이름: dungeon 2. dungeon 맵을 인스턴스 맵으로 사용하기 위해 프로퍼티 에디터 창에서 **MapComponent의 InstanceMap 프로퍼티**를 활성화합니다. 3. UI 에디터 - 좌측 기

[task] | single_turn [pass] | ⏳ 미판정 [title] | 아바타의 외형 변경과 활용 [question] | 아바타를 엔티티로 만들 때 필수로 붙여야 하는 컴포넌트 3가지를 전부 알고 싶어요. [answer] | 아바타를 엔티티로 만들 때 필수로 붙여야 하는 컴포넌트는 다음과 같습니다. 1. **TransformComponent** 2. **AvatarRendererComponent** 3. **CostumeManagerComponent** 이 3가지 컴포넌트를 모두 적용해야 아바타의 외형을 변경하거나 새로운 아바타 엔티티(몬스터, 포탈, NPC 등)로 활용하는 것이 가능합니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | **AvatarRendererComponent**와 **CostumeManagerComponent**를 활용해 새로운 아바타를 만들어 사용할 수 있습니다. 몬스터, 포탈, NPC 혹은 크리에이터만의 특별한 엔티티로 제작할 수 있습니다. 이때 **TransformComponent, AvatarRendererComponent, CostumeManagerComponent** 총 3가지는 필수 컴포넌트입니다. 필수 컴포넌트와 더불어 다른 네이티브 컴포넌트를 추가하거나, 크리에이터가 제작한 새로운 컴포넌트를 추가해 활용합니다. #### 아

[task] | single_turn [pass] | ⏳ 미판정 [title] | 아바타의 외형 변경과 활용 [question] | 아바타 엔티티에 이름표를 붙이려면 어떤 컴포넌트를 추가로 설치해야 하나요? [answer] | 아바타 엔티티에 이름표를 붙이려면 **NameTagComponent**를 추가로 설치해야 합니다. 문서에 따르면, 아바타를 만들 때 필수로 설치해야 하는 컴포넌트는 **TransformComponent**, **AvatarRendererComponent**, **CostumeManagerComponent**의 3가지입니다. 이 필수 컴포넌트들과 함께 **NameTagComponent**를 추가하여 아바타에 이름표를 표시할 수 있습니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | **AvatarRendererComponent**와 **CostumeManagerComponent**를 활용해 새로운 아바타를 만들어 사용할 수 있습니다. 몬스터, 포탈, NPC 혹은 크리에이터만의 특별한 엔티티로 제작할 수 있습니다. 이때 **TransformComponent, AvatarRendererComponent, CostumeManagerComponent** 총 3가지는 필수 컴포넌트입니다. 필수 컴포넌트와 더불어 다른 네이티브 컴포넌트를 추가하거나, 크리에이터가 제작한 새로운 컴포넌트를 추가해 활용합니다. #### 아

[task] | single_turn [pass] | ⏳ 미판정 [title] | 아바타의 외형 변경과 활용 [question] | Workspace에서 Create Model로 모델을 생성한 후, 아바타 외형을 변경하기 위해 추가해야 하는 컴포넌트 목록을 순서대로 알려주세요. [answer] | 아바타 외형을 변경하기 위해 Workspace에서 모델을 생성한 후 추가해야 하는 컴포넌트는 다음 순서대로입니다. 1. **TransformComponent** 2. **AvatarRendererComponent** 3. **CostumeManagerComponent** 이 3가지 컴포넌트는 아바타를 제작하기 위한 필수 컴포넌트입니다. 이후 아바타의 외형(복장)을 변경하려면 `CostumeManagerComponent`에 복장 정보 RUID를 입력하거나, 스크립트를 통해 `CostumeManagerComponent`를 조작해야 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | **AvatarRendererComponent**와 **CostumeManagerComponent**를 활용해 새로운 아바타를 만들어 사용할 수 있습니다. 몬스터, 포탈, NPC 혹은 크리에이터만의 특별한 엔티티로 제작할 수 있습니다. 이때 **TransformComponent, AvatarRendererComponent, CostumeManagerComponent** 총 3가지는 필수 컴포넌트입니다. 필수 컴포넌트와 더불어 다른 네이티브 컴포넌트를 추가하거나, 크리에이터가 제작한 새로운 컴포넌트를 추가해 활용합니다. #### 아

[task] | single_turn [pass] | ⏳ 미판정 [title] | 인스턴스 맵 만들기 [question] | `[client only]` 영역에서 `wait(1)` 후 `_EntityService:GetEntity`로 얻은 `readyButton`을 `[server]` 메서드에서 직접 조작할 수 없는 이유는 무엇인가요? [answer] | `[client only]` 영역에서 `wait(1)` 후 `_EntityService:GetEntity`를 통해 얻은 `readyButton`은 클라이언트(클라이언트 사이드)에만 존재하거나 클라이언트에서 초기화된 레퍼런스입니다. mLua의 실행 공간 규칙에 따라 `[server]` 메서드는 서버 사이드에서 실행되며, 서버는 클라이언트에서 직접 생성하거나 가져온 Entity 레퍼런스를 직접적으로 조작할 수 없습니다. 이는 서버와 클라이언트 간의 상태 동기화 및 보안, 그리고 데이터 무결성을 보장하기 위한 구조적 제한 때문입니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 3. **ReadyButton** 스크립트 컴포넌트를 생성하고 **Ready UI 버튼**에 추가합니다. 유저가 준비 상태가 되면 서버에 해당 유저가 준비되었다는 정보를 보내줍니다. ```lua Property: [None] boolean isReady = false Event Handler: [client only] [Entity: UIButton(/ui/DefaultGroup/UIButton)] HandleButtonClickEvent(ButtonClickEvent e

[task] | code [pass] | ⏳ 미판정 [title] | 인스턴스 맵 만들기 [question] | _UserService.UserEntities 를 통해 isReady 상태인 플레이어의 수를 5초 주기로 확인하여, playerNumPerGame 이상일 경우 _RoomService:MoveUsersToInstanceRoom 으로 새로운 인스턴스 룸으로 이동시키는 GameManager 스크립트를 작성해줘 [answer] | 요청하신 로직을 구현한 GameManager 스크립트 컴포넌트입니다. 5초 주기로 Ready 상태인 유저를 체크하고, 설정된 인원(`playerNumPerGame`) 이상일 경우 인스턴스 룸을 생성하여 해당 유저들을 이동시킵니다. ```lua Property: [None] number checkReadyPlayerTimer = 0 [None] integer playerNumPerGame = 3 Method: [server only] void OnUpdate(number delta) { self.checkReadyPlaye [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 게임이 진행될 인스턴스 룸에 입장할 수 있는 유저를 정하는 조건을 만들어 유저를 이동시켜봅시다. 조건은 크리에이터의 기획에 따라 달라질 수 있습니다. 예시는 **'Ready' 버튼을 3명 이상의 유저가 누르면** 새로운 인스턴스 룸으로 이동시킵니다. 1. **GameManager 스크립트 컴포넌트**에 주기적으로 유저의 Ready 상태를 확인해, 인스턴스 룸으로 이동시키는 스크립트를 작성합니다. ```lua Property: [None] number checkReadyPlayerTimer = 0

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