← 목록

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

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

[task] | code [pass] | ⏳ 미판정 [title] | 캐릭터 초기 속성 편집 [question] | 제시된 문서에는 mLua 스크립트 코드 작성에 필요한 API(메서드, 이벤트, 프로퍼티 접근자 등) 정보가 전혀 포함되어 있지 않으며, 모델 프로퍼티 편집 및 컴포넌트 삭제라는 에디터 GUI 조작 절차만을 다루고 있습니다. 따라서 문서 내 정보만으로 해결할 수 있는 구체적인 mLua 코딩 과제를 생성할 수 없습니다. [answer] | 제시된 문서에는 mLua 스크립트 코드 작성에 필요한 API(메서드, 이벤트, 프로퍼티 접근자 등) 정보가 전혀 포함되어 있지 않으며, 모델 프로퍼티 편집 및 컴포넌트 삭제라는 에디터 GUI 조작 절차만을 다루고 있습니다. 따라서 문서 내 정보만으로 해결할 수 있는 구체적인 mLua 코딩 과제를 생성할 수 없습니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 모델 프로퍼티 비활성화하기 크리에이터의 의도에 따라 필요 없는 모델 프로퍼티를 비활성화 할 수 있습니다. 예를 들어, **NameTag**을 사용하고 싶지 않다면, 프로퍼티 에디터에서 **NameTagComponent**의 **Enable** 체크를 해제합니다. # DefaultPlayer의 기본 컴포넌트 삭제하기 기본 컴포넌트를 확장한 컴포넌트를 제작해 사용한다면, **DefaultPlayer**의 기본 컴포넌트를 삭제해야 합니다. 근본이 같은 컴포넌트가 여러 개 있으면 오동작 가능성이 커지기 때문에 기본적으로 하나의 컴

[task] | instruction_following [pass] | ⏳ 미판정 [title] | 캐릭터 초기 속성 편집 [question] | 카메라 관련 프로퍼티 5개(cameraDeadZone, cameraSoftZone, cameraDamping, cameraScreen, cameraDutch)를 원 컴포넌트 명과 함께 표로 정리해서 출력하세요. [answer] | 요청하신 카메라 관련 프로퍼티 5개와 해당 원 컴포넌트 명을 아래 표에 정리했습니다. | 모델 프로퍼티 명 | 원 컴포넌트 명 | | :--- | :--- | | cameraDeadZone | CameraComponent | | cameraSoftZone | CameraComponent | | cameraDamping | CameraComponent | | cameraScreen | CameraComponent | | cameraDutch | CameraComponent | [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | | 모델 프로퍼티 명 | 원 컴포넌트 원 프로퍼티 명 | 설명 | | --------- | ---------------- | --- | | speed | MovementComponent <ul><li>InputSpeed</li></ul> | 플레이어의 기본 이동 속도 값을 정합니다. 값이 클수록 빠르게 움직입니다. 기본값은 1.2입니다. | | jumpForce | MovementComponent<ul><li>JumpForce</li></ul> | 플레이어의 기본 점프 높이를 설정합니다. 값이 클수록 높이 점프합니다. 기본값은

[task] | single_turn [pass] | ⏳ 미판정 [title] | 캐릭터 초기 속성 편집 [question] | DefaultPlayer에서 기본 컴포넌트를 삭제하려면 Workspace의 어떤 경로로 이동해야 하나요? [answer] | DefaultPlayer의 기본 컴포넌트를 삭제하려면 **Workspace - BaseEnvironment - NativeModel - Player** 경로로 이동해야 합니다. 이 경로에서 모델 프로퍼티 창을 열어 삭제하고자 하는 컴포넌트를 선택한 후, 콘텍스트 메뉴의 **Remove Component**를 클릭하면 됩니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 모델 프로퍼티 비활성화하기 크리에이터의 의도에 따라 필요 없는 모델 프로퍼티를 비활성화 할 수 있습니다. 예를 들어, **NameTag**을 사용하고 싶지 않다면, 프로퍼티 에디터에서 **NameTagComponent**의 **Enable** 체크를 해제합니다. # DefaultPlayer의 기본 컴포넌트 삭제하기 기본 컴포넌트를 확장한 컴포넌트를 제작해 사용한다면, **DefaultPlayer**의 기본 컴포넌트를 삭제해야 합니다. 근본이 같은 컴포넌트가 여러 개 있으면 오동작 가능성이 커지기 때문에 기본적으로 하나의 컴

[task] | single_turn [pass] | ⏳ 미판정 [title] | 캐릭터 초기 속성 편집 [question] | NameTagComponent의 Enable 체크를 해제하면 이름표가 실제로 사라지나요? [answer] | 네, `NameTagComponent`의 `Enable` 체크를 해제하면 이름표가 비활성화되어 화면에 표시되지 않습니다. 이는 메이플스토리 월드의 기본 제작 가이드에서 설명하는 "모델 프로퍼티 비활성화" 과정의 일부로, 크리에이터가 의도에 따라 필요 없는 모델 프로퍼티를 끄기 위한 기능입니다. `NameTagComponent`의 `Enable`을 해제하면 해당 컴포넌트가 동작하지 않으므로 이름표가 사라지는 효과가 발생합니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 모델 프로퍼티 비활성화하기 크리에이터의 의도에 따라 필요 없는 모델 프로퍼티를 비활성화 할 수 있습니다. 예를 들어, **NameTag**을 사용하고 싶지 않다면, 프로퍼티 에디터에서 **NameTagComponent**의 **Enable** 체크를 해제합니다. # DefaultPlayer의 기본 컴포넌트 삭제하기 기본 컴포넌트를 확장한 컴포넌트를 제작해 사용한다면, **DefaultPlayer**의 기본 컴포넌트를 삭제해야 합니다. 근본이 같은 컴포넌트가 여러 개 있으면 오동작 가능성이 커지기 때문에 기본적으로 하나의 컴

[task] | single_turn [pass] | ⏳ 미판정 [title] | 캐릭터 초기 속성 편집 [question] | cameraDeadZone의 X, Y 값을 0으로 설정하면 카메라 동작이 어떻게 변하는지 설명해 주세요. [answer] | `cameraDeadZone`의 X, Y 값을 모두 0으로 설정하면, 플레이어 아바타가 움직일 때 카메라가 고정되는 영역(DeadZone)이 사라집니다. 이 경우 플레이어 아바타의 모든 움직임에 카메라가 즉시 반응하게 됩니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | | 모델 프로퍼티 명 | 원 컴포넌트 원 프로퍼티 명 | 설명 | | --------- | ---------------- | --- | | speed | MovementComponent <ul><li>InputSpeed</li></ul> | 플레이어의 기본 이동 속도 값을 정합니다. 값이 클수록 빠르게 움직입니다. 기본값은 1.2입니다. | | jumpForce | MovementComponent<ul><li>JumpForce</li></ul> | 플레이어의 기본 점프 높이를 설정합니다. 값이 클수록 높이 점프합니다. 기본값은

[task] | single_turn [pass] | ⏳ 미판정 [title] | 캐릭터 초기 속성 편집 [question] | 컴포넌트를 삭제할 때 Remove Component를 클릭해야 하는 구체적인 위치는 어디인가요? [answer] | 컴포넌트를 삭제할 때 **Remove Component**를 클릭해야 하는 구체적인 위치는 **Workspace - BaseEnvironment - NativeModel - Player**를 선택한 후, 모델 프로퍼티 창에서 삭제하려는 컴포넌트를 선택하고 그 컴포넌트 항목에서 여는 **콘텍스트 메뉴**입니다. 즉, 삭제 대상 컴포넌트를 마우스로 선택한 뒤, 해당 항목에서 나오는 콘텍스트 메뉴(우클릭 메뉴 등)에서 **Remove Component**를 선택하면 됩니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 모델 프로퍼티 비활성화하기 크리에이터의 의도에 따라 필요 없는 모델 프로퍼티를 비활성화 할 수 있습니다. 예를 들어, **NameTag**을 사용하고 싶지 않다면, 프로퍼티 에디터에서 **NameTagComponent**의 **Enable** 체크를 해제합니다. # DefaultPlayer의 기본 컴포넌트 삭제하기 기본 컴포넌트를 확장한 컴포넌트를 제작해 사용한다면, **DefaultPlayer**의 기본 컴포넌트를 삭제해야 합니다. 근본이 같은 컴포넌트가 여러 개 있으면 오동작 가능성이 커지기 때문에 기본적으로 하나의 컴

[task] | single_turn [pass] | ⏳ 미판정 [title] | 캐릭터 초기 속성 편집 [question] | 플레이어의 기본 점프 높이를 높이고 싶을 때 수정해야 하는 원 컴포넌트와 프로퍼티 명은 무엇인가요? [answer] | 플레이어의 기본 점프 높이를 높이고 싶을 때 수정해야 하는 원 컴포넌트는 `MovementComponent`이며, 해당 프로퍼티 명은 `JumpForce`입니다. 이 값이 클수록 플레이어가 더 높이 점프합니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | | 모델 프로퍼티 명 | 원 컴포넌트 원 프로퍼티 명 | 설명 | | --------- | ---------------- | --- | | speed | MovementComponent <ul><li>InputSpeed</li></ul> | 플레이어의 기본 이동 속도 값을 정합니다. 값이 클수록 빠르게 움직입니다. 기본값은 1.2입니다. | | jumpForce | MovementComponent<ul><li>JumpForce</li></ul> | 플레이어의 기본 점프 높이를 설정합니다. 값이 클수록 높이 점프합니다. 기본값은

[task] | single_turn [pass] | ⏳ 미판정 [title] | 액션을 예약하고 실행하는 TimerService [question] | 컴포넌트가 삭제되는 시점에 ClearTimer를 명시적으로 호출하지 않아도 타이머가 자동으로 취소되는지, 아니면 반드시 OnEndPlay에서 수동으로 정리해줘야 하는지 궁금합니다. [answer] | 컴포넌트가 삭제되는 시점에 `ClearTimer()`를 명시적으로 호출하지 않아도, 예약된 액션의 소유자가 파괴되면 내부에서 자동으로 `ClearTimer()` 함수 호출을 시도하여 타이머가 취소됩니다. 다만, 예약된 액션이 과도하게 누적될 경우 월드 성능이 하락할 수 있으므로, 컴포넌트나 로직의 `OnEndPlay` 혹은 예약된 액션의 소유자가 파괴되는 시점에 `ClearTimer()` 함수를 직접 호출하여 예약을 취소하는 것이 권장됩니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | `SetTimerOnce()`와 `SetTimerRepeat()`는 예약한 액션을 취소할 수 있습니다. 예약한 액션을 취소할 때는 `ClearTimer()` 함수를 활용합니다. 아래의 예제처럼 10초 뒤 액션 실행을 취소할 수 있습니다. ```lua Method: [server only] void OnBeginPlay() { local callBack = function() log("CallBack! :"..tostring(os.date())) end log("SetTimer! :"

[task] | single_turn [pass] | ⏳ 미판정 [title] | 캐릭터 초기 속성 편집 [question] | 카메라가 플레이어 아바타를 따라갈 때 화면이 급격하게 흔들리지 않고 부드럽게 전환되게 하려면 어떤 프로퍼티 값을 조절해야 하나요? [answer] | 카메라가 플레이어 아바타를 따라갈 때 화면의 급격한 전환을 방지하고 부드러운 추적을 원한다면 **`cameraDamping`** 프로퍼티 값을 조절해야 합니다. 이 프로퍼티는 카메라가 DeadZone을 벗어나 이동할 때 화면을 급격하게 틀지 않고 자연스럽게 플레이어 아바타를 따라가게 하는 역할을 합니다. **값이 클수록** 움직이는 플레이어 아바타를 더욱 부드럽게 따라가게 됩니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | | 모델 프로퍼티 명 | 원 컴포넌트 원 프로퍼티 명 | 설명 | | --------- | ---------------- | --- | | speed | MovementComponent <ul><li>InputSpeed</li></ul> | 플레이어의 기본 이동 속도 값을 정합니다. 값이 클수록 빠르게 움직입니다. 기본값은 1.2입니다. | | jumpForce | MovementComponent<ul><li>JumpForce</li></ul> | 플레이어의 기본 점프 높이를 설정합니다. 값이 클수록 높이 점프합니다. 기본값은

[task] | single_turn [pass] | ⏳ 미판정 [title] | 액션을 예약하고 실행하는 TimerService [question] | 특정 조건이 충족될 때까지 3초마다 반복 실행되다가 조건이 충족되면 즉시 실행을 멈추고 싶을 때, 어떤 함수 조합을 사용하는 것이 가장 효율적인가요? [answer] | 특정 조건이 충족될 때까지 3초마다 반복 실행되다가 조건이 충족되면 즉시 실행을 멈추고 싶을 때, 가장 효율적인 함수 조합은 **`_TimerService:SetTimerRepeat()`** 과 **`_TimerService:ClearTimer()`** 입니다. **추천 이유:** 1. **간편한 반복 예약:** `SetTimer()`를 사용할 때와 달리 반복 여부를 매개변수로 지정할 필요가 없어 코드가 더 깔끔합니다. 2. **즉시 중단:** 반복 타이머의 ID를 저장해두고, 조건이 충족되는 시점에 해당 ID를 인수로 `Cl [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | `SetTimer()`를 통해 특정 액션을 수행하도록 예약을 만들었지만, 특정 조건에 의해 해당 예약을 취소해야 하는 경우가 빈번히 발생합니다. 게임 내에서 스위치를 On 했을 때 3초 후 문이 열리는 장치를 만들었다고 가정해 봅시다. 유저가 스위치를 On 상태로 만들었을 때 3초 뒤에 문이 열리게 됩니다. 문이 열리는 액션을 `SetTimer()`를 이용해 예약했기 때문입니다. 그러나 유저가 문이 열리기 전에 스위치를 Off 상태로 만든다면 `SetTimer()`의 예약을 취소해 Off일 때 문이 열리지 않게 만들어야 합니다.

[task] | single_turn [pass] | ⏳ 미판정 [title] | 캐릭터 초기 속성 편집 [question] | 말풍선 안에 채팅창에 입력한 내용이 자동으로 표시되게 하려면 어떤 설정을 활성화해야 하나요? [answer] | 말풍선 안에 채팅창에 입력한 대화가 자동으로 표시되게 하려면 **`chatModeEnabled`** 설정을 활성화해야 합니다. 이 설정은 `ChatBalloonComponent`의 **`ChatModeEnaled`** 프로퍼티에 해당하며, 기본값은 활성화(활성) 상태입니다. 활성화되어 있으면 채팅창에 입력한 내용이 플레이어 아바타의 말풍선에 동시에 표시됩니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | | 모델 프로퍼티 명 | 원 컴포넌트 원 프로퍼티 명 | 설명 | | --------- | ---------------- | --- | | speed | MovementComponent <ul><li>InputSpeed</li></ul> | 플레이어의 기본 이동 속도 값을 정합니다. 값이 클수록 빠르게 움직입니다. 기본값은 1.2입니다. | | jumpForce | MovementComponent<ul><li>JumpForce</li></ul> | 플레이어의 기본 점프 높이를 설정합니다. 값이 클수록 높이 점프합니다. 기본값은

[task] | single_turn [pass] | ⏳ 미판정 [title] | 캐릭터 초기 속성 편집 [question] | DefaultPlayer의 기본 컴포넌트를 삭제하지 않고 확장한 컴포넌트를 추가하면 어떤 문제가 발생하나요? [answer] | DefaultPlayer의 기본 컴포넌트를 삭제하지 않고 확장한 컴포넌트를 추가하면, 근본이 같은 컴포넌트가 여러 개 존재하게 되어 **오동작 가능성이 커집니다**. 따라서 기본적으로는 하나의 컴포넌트만 사용하는 것이 권장되며, 기존 기본 컴포넌트를 삭제하고 새로 제작한 확장 컴포넌트를 사용하는 것이 안전합니다. 단순히 비활성화만 하는 것보다는 삭제하는 것이 더 좋습니다. 이는 컴포넌트 동작 방식의 차이로 인해 비활성화 상태에서도 스크립트 작성 중 컴포넌트 명이 헷갈리거나, 작성한 대로 동작하지 않고 오류가 발생할 가능성이 있기 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 모델 프로퍼티 비활성화하기 크리에이터의 의도에 따라 필요 없는 모델 프로퍼티를 비활성화 할 수 있습니다. 예를 들어, **NameTag**을 사용하고 싶지 않다면, 프로퍼티 에디터에서 **NameTagComponent**의 **Enable** 체크를 해제합니다. # DefaultPlayer의 기본 컴포넌트 삭제하기 기본 컴포넌트를 확장한 컴포넌트를 제작해 사용한다면, **DefaultPlayer**의 기본 컴포넌트를 삭제해야 합니다. 근본이 같은 컴포넌트가 여러 개 있으면 오동작 가능성이 커지기 때문에 기본적으로 하나의 컴

[task] | code [pass] | ⏳ 미판정 [title] | 액션을 예약하고 실행하는 TimerService [question] | 단일 실행 예약인 _TimerService:SetTimerOnce를 이용해 10초 후 플레이어에게 아이템을 지급하는 스크립트를 작성해줘 [answer] | `_TimerService:SetTimerOnce`는 특정 시간 후에 단 한 번만 콜백을 실행하는 데 사용됩니다. 질문하신 "10초 후 플레이어에게 아이템 지급" 기능을 구현하려면, 10초 후 실행될 콜백 함수 내에서 아이템 지급 로직을 작성하면 됩니다. 참고 문서에는 `_TimerService:SetTimerOnce(callBack, 10)` 형태의 사용 예시가 있으며, 첫 번째 인자로 콜백 함수, 두 번째 인자로 지연 시간(초)을 전달합니다. 다만, **아이템 지급을 위한 구체적인 API(예: `_InventoryServic [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | `SetTimer()`를 통해 특정 액션을 수행하도록 예약을 만들었지만, 특정 조건에 의해 해당 예약을 취소해야 하는 경우가 빈번히 발생합니다. 게임 내에서 스위치를 On 했을 때 3초 후 문이 열리는 장치를 만들었다고 가정해 봅시다. 유저가 스위치를 On 상태로 만들었을 때 3초 뒤에 문이 열리게 됩니다. 문이 열리는 액션을 `SetTimer()`를 이용해 예약했기 때문입니다. 그러나 유저가 문이 열리기 전에 스위치를 Off 상태로 만든다면 `SetTimer()`의 예약을 취소해 Off일 때 문이 열리지 않게 만들어야 합니다.

[task] | code [pass] | ⏳ 미판정 [title] | 액션을 예약하고 실행하는 TimerService [question] | OnBeginPlay 시점에 0.5초 지연 후 시작하여 2초 간격으로 무한히 반복되는 헬프 메시지 로그 출력을 수행하는 스크립트를 _TimerService:SetTimerRepeat을 사용하여 작성해줘. [answer] | `_TimerService:SetTimerRepeat(callback, intervalSeconds, startDelaySeconds)` 메서드를 사용하면 요청하신 조건을 충족할 수 있습니다. 매개변수 `intervalSeconds`에 2, `startDelaySeconds`에 0.5를 전달하면 0.5초 지연 후 2초 간격으로 무한히 반복됩니다. ```lua Method: [server only] void OnBeginPlay() { local callBack = function() log("Help Mess [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | `SetTimerOnce()`는 `SetTimer()`의 isRepeat를 false로 설정한 것과 동일하게 작동합니다. 예약 성공 시 integer 타입의 타이머의 id를 반환하고, 예약 실패 시 0을 반환합니다. 매개 변수는 다음과 같습니다. | 타입 | 매개 변수 | 설명 | | --- | ------ | --- | | func | callback | 몇 초 뒤 수행할 액션을 CallBack 형태로 넘겨줍니다. | | float | delaySeconds | 액션을 예약한 뒤 몇 초 후에 액션을 실행할 것인지를 설정합니다.

[task] | code [pass] | ⏳ 미판정 [title] | 액션을 예약하고 실행하는 TimerService [question] | _ TimerService의 SetTimerRepeat으로 반복 타이머를 생성하여 TimerId를 Property에 저장하고 OnEndPlay에서 TimerId가 0보다 크면 ClearTimer를 호출하여 해제하는 스크립트를 작성해줘 [answer] | ```lua Property: [None] integer TimerId = 0 Method: [server only] void OnBeginPlay() { local callBack = function() log("CallBack! :"..tostring(os.date())) end self.TimerId = _TimerService:SetTimerRepeat(callBack, 3) } [server only] void OnEndPlay() { if self.TimerId > 0 th [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | `SetTimerOnce()`와 `SetTimerRepeat()`는 예약한 액션을 취소할 수 있습니다. 예약한 액션을 취소할 때는 `ClearTimer()` 함수를 활용합니다. 아래의 예제처럼 10초 뒤 액션 실행을 취소할 수 있습니다. ```lua Method: [server only] void OnBeginPlay() { local callBack = function() log("CallBack! :"..tostring(os.date())) end log("SetTimer! :"

[task] | single_turn [pass] | ⏳ 미판정 [title] | 액션을 예약하고 실행하는 TimerService [question] | TimerService의 SetTimer를 반복 실행으로 설정했을 때, intervalSeconds가 최초 실행 시점 기준이 아닌 콜백 재실행 간격으로 해석되는 이유를 설명해 주세요. [answer] | `TimerService`의 `SetTimer` 메서드를 반복 실행(`isRepeat`을 `true`)으로 설정했을 때 `intervalSeconds`가 "콜백 재실행 간격"으로 해석되는 이유는, 반복 모드에서 `SetTimer()` 호출 시점과 콜백 함수의 최초 실행 시점이 **동일한 순간**이기 때문입니다. 구체적인 동작 원리는 다음과 같습니다. 1. **동시 실행:** 반복 실행으로 설정하면 `SetTimer()`가 호출되는 즉시 콜백 함수가 가장 먼저 실행됩니다. 즉, 타이머 설정과 콜백 실행이 동시에 일어나므로 "초기 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | isRepeat을 true로 변경해 반복 실행하게 만듭니다. `SetTimer()`가 호출될 때 "SetTimer!"라는 문자열과 함께 해당 코드가 실행된 시간을 출력합니다. 예시 코드는 다음과 같습니다. 3초마다 `SetTimer()`로 넘긴 CallBack 함수가 호출될 때 "CallBack!"이라는 문자열과 함께 코드가 실행된 시간을 출력합니다. ```lua Method: [server only] void OnBeginPlay() { local callBack = function() log("Ca

[task] | single_turn [pass] | ⏳ 미판정 [title] | 액션을 예약하고 실행하는 TimerService [question] | SetTimerRepeat으로 반복 타이머를 잡은 후 특정 조건이 충족되면 이를 즉시 중단하고 싶을 때 어떤 함수를 호출해야 하나요? [answer] | 반복 타이머를 즉시 중단하려면 `_TimerService:ClearTimer(timerId)` 함수를 호출해야 합니다. `SetTimerRepeat()` 함수를 호출할 때 반환되는 `timerId`를 변수에 저장해 두었다가, 중단 조건이 충족된 시점에 해당 `timerId`를 인수로 `ClearTimer()`에 전달하면 예약된 반복 액션이 취소됩니다. ```lua Property: [None] integer TimerId = 0 Method: [server only] void OnBeginPlay() { local ca [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | `SetTimerOnce()`와 `SetTimerRepeat()`는 예약한 액션을 취소할 수 있습니다. 예약한 액션을 취소할 때는 `ClearTimer()` 함수를 활용합니다. 아래의 예제처럼 10초 뒤 액션 실행을 취소할 수 있습니다. ```lua Method: [server only] void OnBeginPlay() { local callBack = function() log("CallBack! :"..tostring(os.date())) end log("SetTimer! :"

[task] | code [pass] | ⏳ 미판정 [title] | 액션을 예약하고 실행하는 TimerService [question] | _ TimerService의 SetTimerRepeat으로 3초 간격으로 로그를 출력하고 10초 후 SetTimerOnce로 예약된 액션을 ClearTimer로 취소하는 스크립트를 작성해줘 [answer] | 요청하신 기능을 수행하는 mLua 스크립트입니다. `SetTimerRepeat`을 사용하여 3초 간격으로 로그를 출력하는 반복 타이머를 생성한 후, `SetTimerOnce`를 이용하여 10초 후 해당 반복 타이머를 `ClearTimer`로 취소하는 로직을 포함하고 있습니다. ```lua Method: [server only] void OnBeginPlay() { local callBack = function() log("CallBack! :"..tostring(os.date())) end [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | `SetTimerOnce()`와 `SetTimerRepeat()`는 예약한 액션을 취소할 수 있습니다. 예약한 액션을 취소할 때는 `ClearTimer()` 함수를 활용합니다. 아래의 예제처럼 10초 뒤 액션 실행을 취소할 수 있습니다. ```lua Method: [server only] void OnBeginPlay() { local callBack = function() log("CallBack! :"..tostring(os.date())) end log("SetTimer! :"

[task] | single_turn [pass] | ⏳ 미판정 [title] | 액션을 예약하고 실행하는 TimerService [question] | 반복 실행하는 SetTimer에서 실행 취소 로직을 적용했는데, 마지막 로그 출력 시점과 예상했던 마지막 실행 시점 사이에 간격이 생기는 원인은 무엇인가요? [answer] | `SetTimer()`로 반복 실행을 예약한 후, 특정 시점에 `ClearTimer()`를 호출하면 타이머가 즉시 제거됩니다. 따라서 `ClearTimer()`가 실행된 시점 이후에 예정되어 있던 콜백은 더 이상 실행되지 않습니다. 참고 문서의 예제를 보면, `SetTimer()`가 실행된 후 2초 뒤에 첫 번째 콜백이 실행되고, 이후 3초 간격으로 반복됩니다. 만약 10초 뒤에 `ClearTimer()`가 실행되면, 10초 시점 이후로 예정되어 있던 모든 반복 실행이 취소됩니다. 구체적인 간격이 생기는 원인은 다음과 같습니다: [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | `SetTimer()`를 통해 특정 액션을 수행하도록 예약을 만들었지만, 특정 조건에 의해 해당 예약을 취소해야 하는 경우가 빈번히 발생합니다. 게임 내에서 스위치를 On 했을 때 3초 후 문이 열리는 장치를 만들었다고 가정해 봅시다. 유저가 스위치를 On 상태로 만들었을 때 3초 뒤에 문이 열리게 됩니다. 문이 열리는 액션을 `SetTimer()`를 이용해 예약했기 때문입니다. 그러나 유저가 문이 열리기 전에 스위치를 Off 상태로 만든다면 `SetTimer()`의 예약을 취소해 Off일 때 문이 열리지 않게 만들어야 합니다.

[task] | code [pass] | ⏳ 미판정 [title] | 액션을 예약하고 실행하는 TimerService [question] | 게임 시작 후 5초 동안 대기하다가 1초 간격으로 10초 동안 로그를 출력하는 스크립트를 _TimerService:SetTimerOnce와 _TimerService:SetTimerRepeat을 사용하여 작성해줘. [answer] | ```lua Property: [None] number repeatTimerId = 0 number logCount = 0 number maxLogCount = 10 Method: [server only] void OnBeginPlay() { -- 5초 후 대기 후 반복 타이머 시작 local startRepeatCallBack = function() self.logCount = 0 -- 1초 간격으로 반복 로그 출력 self.repeatTimerId = _TimerServ [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | `SetTimerOnce()`는 `SetTimer()`의 isRepeat를 false로 설정한 것과 동일하게 작동합니다. 예약 성공 시 integer 타입의 타이머의 id를 반환하고, 예약 실패 시 0을 반환합니다. 매개 변수는 다음과 같습니다. | 타입 | 매개 변수 | 설명 | | --- | ------ | --- | | func | callback | 몇 초 뒤 수행할 액션을 CallBack 형태로 넘겨줍니다. | | float | delaySeconds | 액션을 예약한 뒤 몇 초 후에 액션을 실행할 것인지를 설정합니다.

[task] | code [pass] | ⏳ 미판정 [title] | 액션을 예약하고 실행하는 TimerService [question] | 서버 측에서 실행되며, 2초 후 특정 액션을 수행하고 그 즉시 다시 3초 후 다른 액션을 수행하도록 체이닝되는 스크립트를 _TimerService:SetTimerOnce를 사용하여 작성해줘. [answer] | `_TimerService:SetTimerOnce`를 사용하여 2초 후 특정 액션을 실행하고, 그 액션 내부에서 다시 3초 후 다른 액션을 실행하도록 체이닝하는 서버 스크립트입니다. ```lua Method: [server only] void OnBeginPlay() { local firstAction = function() log("2초 후 첫 번째 액션 실행") local secondAction = function() log("추가 3초 후 두 번째 액션 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | `SetTimerOnce()`는 `SetTimer()`의 isRepeat를 false로 설정한 것과 동일하게 작동합니다. 예약 성공 시 integer 타입의 타이머의 id를 반환하고, 예약 실패 시 0을 반환합니다. 매개 변수는 다음과 같습니다. | 타입 | 매개 변수 | 설명 | | --- | ------ | --- | | func | callback | 몇 초 뒤 수행할 액션을 CallBack 형태로 넘겨줍니다. | | float | delaySeconds | 액션을 예약한 뒤 몇 초 후에 액션을 실행할 것인지를 설정합니다.

[task] | single_turn [pass] | ⏳ 미판정 [title] | 캐릭터 초기 속성 편집 [question] | MovementComponent의 InputSpeed와 RigidBodyComponent의 WalkAcc가 각각 어떤 움직임에 영향을 주는지 차이점을 알고 싶습니다. [answer] | MovementComponent의 `InputSpeed`와 RigidBodyComponent의 `WalkAcc`는 플레이어의 움직임에서 서로 다른 역할을 담당합니다. **InputSpeed (이동 속도)** * **영향:** 플레이어의 **최대 이동 속도**를 결정합니다. * **설명:** 값이 클수록 플레이어가 더 빠르게 이동할 수 있습니다. 즉, 플레이어가 달릴 수 있는 최고 속도를 의미합니다. * **기본값:** 1.2 **WalkAcc (이동 가감속도)** * **영향:** 플레이어가 **정지 상태에서 움직 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | | 모델 프로퍼티 명 | 원 컴포넌트 원 프로퍼티 명 | 설명 | | --------- | ---------------- | --- | | speed | MovementComponent <ul><li>InputSpeed</li></ul> | 플레이어의 기본 이동 속도 값을 정합니다. 값이 클수록 빠르게 움직입니다. 기본값은 1.2입니다. | | jumpForce | MovementComponent<ul><li>JumpForce</li></ul> | 플레이어의 기본 점프 높이를 설정합니다. 값이 클수록 높이 점프합니다. 기본값은

[task] | two_turn [pass] | ⏳ 미판정 [title] | 액션을 예약하고 실행하는 TimerService [question] | OnBeginPlay()에서 SetTimerOnce를 호출한 후 엔티티가 삭제되면 예약된 callback은 실행되나요? [answer] | 제공된 문서에는 `_TimerService:SetTimerOnce()`로 예약된 callback이 엔티티 삭제 시점에 실행되는지 여부에 대한 명시적인 정보가 없습니다. 문서에 있는 주의 사항으로는 callback에 컴포넌트 메서드를 직접 전달할 경우 `EnableInHierarchy`의 영향을 받는다는 내용이 있으나, 이는 컴포넌트 활성화 상태와 관련된 것이며 엔티티 삭제 시 동작에 대한 설명은 아닙니다. 따라서 엔티티 삭제 시 예약된 callback의 실행 여부는 제공된 문서 기준으로 알 수 없습니다. [followup] | 엔티티 삭제 시 타이머가 자동으로 해제되지 않는 경우를 대비하여 OnEndPlay()에서 타이머를 명시적으로 취소하는 처리 로직을 코드와 함께 설명해 주세요. [followup_answer] | 제공된 문서에는 엔티티 삭제 시 타이머가 자동으로 해제되는지 여부에 대한 정보가 없으므로, 해당 가정을 전제로 `OnEndPlay()`에서 타이머를 명시적으로 취소하는 로직을 작성할 수 있습니다. 문서에 따르면 `_TimerService:SetTimerOnce()`와 `_TimerService:SetTimerRepeat()`는 예약 성공 시 integer 타입의 타이머 ID를 반환하며, 이 ID를 `_TimerService:ClearTimer(timerId)`에 전달하여 예약을 취소할 수 있습니다. 다음은 `OnBeginPlay [scores] | [judge_reason] | [source_doc] | `SetTimerOnce()`는 `SetTimer()`의 isRepeat를 false로 설정한 것과 동일하게 작동합니다. 예약 성공 시 integer 타입의 타이머의 id를 반환하고, 예약 실패 시 0을 반환합니다. 매개 변수는 다음과 같습니다. | 타입 | 매개 변수 | 설명 | | --- | ------ | --- | | func | callback | 몇 초 뒤 수행할 액션을 CallBack 형태로 넘겨줍니다. | | float | delaySeconds | 액션을 예약한 뒤 몇 초 후에 액션을 실행할 것인지를 설정합니다.

[task] | code [pass] | ⏳ 미판정 [title] | 캐릭터 초기 속성 편집 [question] | 문서에 제공된 정보는 **Player 모델 프로퍼티 편집 방법**과 **Workspace - BaseEnvironment - NativeModel - Player 경로**에 대한 설명만 포함되어 있으며, mLua 스크립트에서 모델을 생성하거나 속성을 동적으로 변경하는 API(예: `_SpawnService`, `Property` 설정 메서드 등)에 대한 구체적인 문법이나 함수 시그니처가 없습니다. [answer] | 제시된 참고 문서에는 **Player 모델의 기본 속성을 편집하는 방법**과 해당 모델의 경로(`Workspace - BaseEnvironment - NativeModel - Player`)에 대한 설명만 포함되어 있습니다. mLua 스크립트 내에서 Player 모델의 속성을 동적으로 변경하거나, `_SpawnService` 등을 통해 모델을 생성하는 구체적인 API 함수 시그니처나 문법은 문서에 명시되어 있지 않습니다. 따라서 문서 근거로 Player 모델의 속성을 스크립트로 변경하는 코드를 작성할 수 없습니다. 문서에 따르면 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 동시에 출발해 목표 지점까지 오르는 게임을 시작할 때 누군가는 한 번에 4칸을 오르고, 다른 누구는 2칸을 오른다면 함께 게임을 즐길 수 없을 것입니다. 게임을 처음 시작할 때 만큼은 동일한 환경에서 시작하는 게 중요합니다. 모델 프로퍼티를 이용해 속성을 편집하는 방법을 알아봅니다. # 플레이어 기본 속성 변경 **Player** 모델에서 기본 속성을 변경할 수 있습니다. 1. **Workspace - BaseEnvironment - NativeModel - Player**를 선택합니다. 2. **Play

[task] | code [pass] | ⏳ 미판정 [title] | 액션을 예약하고 실행하는 TimerService [question] | 반복 실행 예약인 _TimerService:SetTimerRepeat를 이용해 1초마다 체력 회복 효과를 적용하고, 특정 조건 시 _TimerService:ClearTimer로 예약을 종료하는 스크립트를 작성해줘 [answer] | `_TimerService:SetTimerRepeat`를 사용하여 1초마다 체력 회복 효과를 적용하고, 특정 조건(예: 스크립트가 종료되거나 특정 이벤트 발생) 시 `_TimerService:ClearTimer`로 예약을 종료하는 스크립트입니다. 참고 문서에 따르면 `SetTimerRepeat`는 반복 액션 수행 시 사용하며, 반환값으로 `timerId`를 받습니다. 이 `timerId`를 저장해두었다가 취소 시점에 `ClearTimer`에 전달해야 합니다. 또한 `OnEndPlay` 시점에 타이머가 남아있다면 반드시 정리하는 것 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | `SetTimer()`를 통해 특정 액션을 수행하도록 예약을 만들었지만, 특정 조건에 의해 해당 예약을 취소해야 하는 경우가 빈번히 발생합니다. 게임 내에서 스위치를 On 했을 때 3초 후 문이 열리는 장치를 만들었다고 가정해 봅시다. 유저가 스위치를 On 상태로 만들었을 때 3초 뒤에 문이 열리게 됩니다. 문이 열리는 액션을 `SetTimer()`를 이용해 예약했기 때문입니다. 그러나 유저가 문이 열리기 전에 스위치를 Off 상태로 만든다면 `SetTimer()`의 예약을 취소해 Off일 때 문이 열리지 않게 만들어야 합니다.

[task] | code [pass] | ⏳ 미판정 [title] | 액션을 예약하고 실행하는 TimerService [question] | _ _TimerService의 SetTimerRepeat으로 반환된 timerId가 0인지 확인하여 실패 시 함수를 종료하고 성공 시 ClearTimer로 취소하는 로직을 포함한 스크립트를 작성해줘 [answer] | `_TimerService:SetTimerRepeat()` 호출 후 반환된 `timerId`가 0인지 확인하여 예약 실패 시 함수를 종료하고, 성공 시 특정 시점에 `ClearTimer()`를 호출해 예약을 취소하는 로직은 다음과 같습니다. ```lua Method: [server only] void OnBeginPlay() { local callBack = function() log("CallBack! :"..tostring(os.date())) end log("SetTimer! :" [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | `SetTimerOnce()`와 `SetTimerRepeat()`는 예약한 액션을 취소할 수 있습니다. 예약한 액션을 취소할 때는 `ClearTimer()` 함수를 활용합니다. 아래의 예제처럼 10초 뒤 액션 실행을 취소할 수 있습니다. ```lua Method: [server only] void OnBeginPlay() { local callBack = function() log("CallBack! :"..tostring(os.date())) end log("SetTimer! :"

[task] | single_turn [pass] | ⏳ 미판정 [title] | 캐릭터 초기 속성 편집 [question] | 모델 프로퍼티에서 컴포넌트를 비활성화만 하는 것과 완전히 삭제하는 것의 차이점은 무엇인가요? [answer] | 모델 프로퍼티에서 컴포넌트를 비활성화(Enable 해제)하는 것과 완전히 삭제(Remove Component)하는 것의 차이점은 다음과 같습니다. **1. 동작 방식과 오동작 위험** * **비활성화:** 컴포넌트 자체는 모델에 남아있지만 동작만 멈추는 것입니다. 컴포넌트마다 고유한 동작 방식이 다르기 때문에, 단순히 비활성화만 하면 작성한 대로 동작하지 않거나 오류가 날 가능성이 있습니다. 또한 스크립트 작성 중 컴포넌트 명칭이 헷갈릴 수 있습니다. * **삭제:** 컴포넌트를 모델에서 완전히 제거합니다. 이는 오동작 가 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 모델 프로퍼티 비활성화하기 크리에이터의 의도에 따라 필요 없는 모델 프로퍼티를 비활성화 할 수 있습니다. 예를 들어, **NameTag**을 사용하고 싶지 않다면, 프로퍼티 에디터에서 **NameTagComponent**의 **Enable** 체크를 해제합니다. # DefaultPlayer의 기본 컴포넌트 삭제하기 기본 컴포넌트를 확장한 컴포넌트를 제작해 사용한다면, **DefaultPlayer**의 기본 컴포넌트를 삭제해야 합니다. 근본이 같은 컴포넌트가 여러 개 있으면 오동작 가능성이 커지기 때문에 기본적으로 하나의 컴

[task] | single_turn [pass] | ⏳ 미판정 [title] | 액션을 예약하고 실행하는 TimerService [question] | 예약된 액션이 과도하게 누적될 경우 월드 성능이 저하된다고 하는데, 이를 방지하기 위해 크리에이터가 주의해야 하는 코딩 패턴은 무엇인가요? [answer] | 예약된 액션이 과도하게 누적되어 월드 성능이 저하되는 것을 방지하기 위해 크리에이터가 지켜야 하는 핵심 코딩 패턴은 **반복 예약된 타이머의 ID를 프로퍼티에 저장하고, 컴포넌트가 종료되는 시점에 `ClearTimer()`를 반드시 호출하는 것**입니다. 구체적인 주의사항과 권장 패턴은 다음과 같습니다. 1. **타이머 ID 관리**: `SetTimerOnce()` 또는 `SetTimerRepeat()` 호출 시 반환되는 `timerId`를 컴포넌트의 프로퍼티(예: `integer TimerId`)에 저장해야 합니다. 2. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | `SetTimerOnce()`와 `SetTimerRepeat()`는 예약한 액션을 취소할 수 있습니다. 예약한 액션을 취소할 때는 `ClearTimer()` 함수를 활용합니다. 아래의 예제처럼 10초 뒤 액션 실행을 취소할 수 있습니다. ```lua Method: [server only] void OnBeginPlay() { local callBack = function() log("CallBack! :"..tostring(os.date())) end log("SetTimer! :"

[task] | code [pass] | ⏳ 미판정 [title] | 액션을 예약하고 실행하는 TimerService [question] | 1초마다 반복되는 로그 출력을 5초 후 자동으로 중단하는 스크립트를 _TimerService:SetTimerRepeat과 예약 취소 로직을 사용하여 작성해줘. [answer] | `_TimerService:SetTimerRepeat`으로 1초 간격 로그 출력을 시작하고, `_TimerService:SetTimerOnce`으로 5초 후 해당 타이머를 취소하는 로직을 구성할 수 있습니다. ```lua Method: [server only] void OnBeginPlay() { local repeatCallback = function() log("1초마다 반복 로그 출력: " .. tostring(os.date())) end local timerId = _TimerServi [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | `SetTimerOnce()`는 `SetTimer()`의 isRepeat를 false로 설정한 것과 동일하게 작동합니다. 예약 성공 시 integer 타입의 타이머의 id를 반환하고, 예약 실패 시 0을 반환합니다. 매개 변수는 다음과 같습니다. | 타입 | 매개 변수 | 설명 | | --- | ------ | --- | | func | callback | 몇 초 뒤 수행할 액션을 CallBack 형태로 넘겨줍니다. | | float | delaySeconds | 액션을 예약한 뒤 몇 초 후에 액션을 실행할 것인지를 설정합니다.

[task] | single_turn [pass] | ⏳ 미판정 [title] | 액션을 예약하고 실행하는 TimerService [question] | TimerService의 SetTimer와 SetTimerOnce의 차이는 무엇이며, 어떤 상황에서 각각을 사용하는 것이 좋나요? [answer] | `TimerService`의 `SetTimer`와 `SetTimerOnce`는 모두 특정 시간 이후에 액션을 실행하도록 예약하는 함수이지만, 매개 변수 구조와 용도에서 차이가 있습니다. ### 1. 핵심 차이점 | 구분 | `SetTimer` | `SetTimerOnce` | | :--- | :--- | :--- | | **기능** | 1회 또는 **반복** 실행 모두 지원 | **1회만** 실행 | | **매개 변수** | `scriptable`, `callback`, `intervalSeconds`, `isRepeat`, ` [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # SetTimer 활용 `SetTimer()`는 예약 함수입니다. 특정 시점에 수행할 액션을 예약할 수 있고, 액션 반복 수행 여부와 반복 주기를 설정할 수 있습니다. 예약한 액션 반복 여부에 따라 매개 변수의 의미와 쓰임새가 달라집니다. `SetTimer()`는 예약 성공 시 integer 타입의 타이머의 id를 반환하고, 예약 실패 시 0을 반환합니다. 매개 변수는 다음과 같습니다. | 타입 | 매개 변수 | 설명 | | --- | ------ | --- | | IScriptable | scriptable | 예약할 액션의

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