← 목록

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

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

[task] | two_turn [pass] | ⏳ 미판정 [title] | Effective MSW 2 [question] | UI Entity와 같이 서버에 존재하지 않는 Localized Entity에서 서버로 정보를 전송할 때 발생하는 문제점과, 이를 우회하기 위해 World Entity를 중개자로 사용하는 구체적인 구현 방법은 무엇인가요? [answer] | UI Entity와 같이 서버에 존재하지 않는 Localized Entity에서 서버로 정보를 전송할 때 발생하는 문제점과 우회 방법은 다음과 같습니다. ### 1. 문제점: 서버와의 연결 쌍(Matching Pair) 부재 실행 제어 함수는 현재 실행 중인 공간(Server 또는 Client)의 엔티티와 다른 공간의 **동일한 엔티티**를 찾아 전송합니다. 즉, 클라이언트의 `A Entity`에서 서버 실행 제어 함수를 호출하면, 서버에 존재하는 `A Entity`로 메시지가 전달됩니다. 그러나 **UI Entity**는 각 [followup] | UI Entity에서 입력된 데이터를 World Entity를 통해 서버로 전달하고, 서버에서 처리 후 다시 World Entity를 경유해 UI Entity로 결과를 돌려받는 mLua 코드 예제를 작성해 주세요. [followup_answer] | UI Entity에서 World Entity를 경유하여 서버와 통신하는 구조는 다음과 같은 2단계로 구성됩니다. 1. **클라이언트 (UI Entity)**: 입력 데이터를 World Entity의 `[client only]` 함수에 전달합니다. 2. **클라이언트 (World Entity)**: UI Entity로부터 받은 데이터를 서버의 `[server]` 함수로 전달합니다. 3. **서버 (World Entity)**: 데이터를 처리하고, 결과를 클라이언트의 World Entity `[client only]` 함수로 반환합니 [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 함수의 실행 공간을 설정하면 별도의 과정 없이 쉽게 클라이언트와 서버가 통신할 수 있습니다. 자동으로 처리하기 때문에 편리하지만, 몇몇 경우는 제약이 있어 크리에이터가 원하는 대로 동작하지 않을 수 있습니다. 일부는 로그가 나오지만, 어떤 것은 동작하지 않는 이유를 확인할 수 없을 수도 있습니다. 이번 가이드에서는 실행 제어를 사용할 수 없는 경우를 알아봅시다. # 매개 변수가 지원하지 않는 종류 함수에는 여러 종류의 매개 변수(parameter)가 있습니다. 이 매개 변수는 다른 공간에서 실행 제어를 사용

[task] | instruction_following [pass] | ⏳ 미판정 [title] | 행동 트리를 활용한 AI 만들기 [question] | Selector, RandomSelector, Parallel 노드의 실행 순서와 반환 값 처리 규칙을 비교하는 표로 정리하세요. [answer] | Selector, RandomSelector, Parallel 노드의 실행 순서와 반환 값 처리 규칙은 다음과 같습니다. | 노드 종류 | 실행 순서 | 반환 값 처리 규칙 | | :--- | :--- | :--- | | **Selector** | 자식 노드를 **순서대로** 실행 | 1. 자식 노드가 **Success**를 반환하면 즉시 실행을 멈추고 부모 노드에 **Success**를 반환.<br>2. 모든 자식 노드가 **Failure**를 반환하면 부모 노드에 **Failure**를 반환. | | **RandomSelect [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | **Selector Node**는 자식 노드를 순서대로 실행하다가 자식 노드가 Success를 반환하면 실행을 멈추고 부모 노드로 Success를 반환합니다. 모든 자식 노드가 Failure를 반환하면 부모 노드에 Failure를 반환합니다. ![[object Object]](https://mod-file.dn.nexoncdn.co.kr/bbs/17168858785873218b87041fd46df9756a267a30ce29e.png "SelectorNode") #### RandomSelector Node **RandomSelec

[task] | instruction_following [pass] | ⏳ 미판정 [title] | 행동 트리를 활용한 AI 만들기 [question] | RandomSelector Node의 확률 분포(0.2, 0.3, 0.5)와 난수(0.4, 0.9)에 따른 실행되는 노드를 단계별 번호 목록으로 설명하세요. [answer] | RandomSelector Node의 확률 분포와 난수 값에 따라 실행되는 노드는 다음과 같습니다. 1. **확률 분포 설정**: 자식 노드들의 선택 확률이 각각 0.2(20%), 0.3(30%), 0.5(50%)로 설정되어 있습니다. 2. **누적 확률 범위 계산**: * 1번째 노드: 0.0 ~ 0.2 * 2번째 노드: 0.2 ~ 0.5 (0.2 + 0.3) * 3번째 노드: 0.5 ~ 1.0 (0.5 + 0.5) 3. **난수 0.4가 결정된 경우**: 난수 0.4는 0.2 이상 0.5 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | **Selector Node**는 자식 노드를 순서대로 실행하다가 자식 노드가 Success를 반환하면 실행을 멈추고 부모 노드로 Success를 반환합니다. 모든 자식 노드가 Failure를 반환하면 부모 노드에 Failure를 반환합니다. ![[object Object]](https://mod-file.dn.nexoncdn.co.kr/bbs/17168858785873218b87041fd46df9756a267a30ce29e.png "SelectorNode") #### RandomSelector Node **RandomSelec

[task] | instruction_following [pass] | ⏳ 미판정 [title] | 행동 트리를 활용한 AI 만들기 [question] | Sequence Node와 Selector Node, RandomSelector Node, Parallel Node에서 자식 노드가 Running을 반환할 때의 실행 방식을 비교하여 4개의 행동을 표로 정리하세요. [answer] | Sequence Node, Selector Node, RandomSelector Node, Parallel Node에서 자식 노드가 Running을 반환할 때의 실행 방식은 다음과 같습니다. | 노드 유형 | Running 반환 시 실행 방식 | | :--- | :--- | | **Sequence Node** | Running을 반환한 자식 노드를 다음 프레임에 다시 실행합니다. Running 상태가 유지되는 동안 이후 자식 노드(C 노드 등)는 실행되지 않습니다. | | **Selector Node** | Running을 반환한 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 자식 노드가 Success 또는 Failure를 반환하면 부모 노드는 다음 자식 노드를 실행합니다. 그러나 자식 노드가 Running을 반환하면 부모 노드는 Running을 반환했던 자식 노드를 다음 프레임에 다시 실행합니다. 이 특성을 활용해 여러 프레임 동안 동작하는 노드를 만들 수 있습니다. 아래 그림과 같이 자식 노드 A, B, C가 있을 때 Sequence Node와 Selector Node의 경우 B 노드가 Running을 반환하는 동안 C 노드를 실행하지 않습니다. RandomSelector Node는 선택된 노드를 계

[task] | code [pass] | ⏳ 미판정 [title] | 행동 트리를 활용한 AI 만들기 [question] | AIComponent 를 활용하여 RandomSelectorNode 를 사용하여 여러 가지 공격 행동 중 하나를 무작위로 선택하게 하는 AI 스크립트를 작성해줘 [answer] | 주어진 참고 문서에는 `RandomSelectorNode`에 대한 API Reference 링크(`/apiReference?postId=457`)가 존재하는 것으로 언급되어 있으나, `RandomSelectorNode`의 생성 방법, 프로퍼티, 메서드 등 구체적인 사용법이 문서 본문에 포함되어 있지 않습니다. 또한, `AIComponent`의 `CreateLeafNode` 메서드 시그니처와 `BehaviourTreeStatus` 열거형 값은 예제 코드를 통해 확인되지만, `RandomSelectorNode` 자체를 인스턴스화하거나 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 행동 트리와 BTNodeType 개념을 이해하고, AIComponent를 활용해 Action Node를 생성하는 방법을 알아봅시다. [행동 트리 노드 만들기](/docs?postId=1155)에서 행동 트리 구현 방법과 예제를 소개합니다. ##### 참고 가이드 * [행동 트리 노드 만들기](/docs?postId=1155) * [Behaviour Tree Editor로 행동 트리 만들기](/docs?postId=1399) ##### 참고 API Reference * [BTNode](/apiReference

[task] | single_turn [pass] | ⏳ 미판정 [title] | 카드와 UI 만들기 [question] | CardPairGameLogic의 StartGame() 함수에서 self.CardPairGameUI.CardBoard로 접근할 때, CardPairGameUI 프로퍼티의 타입이 Entity여야 하는 이유와 이 접근 방식의 장점은 무엇인가요? [answer] | `CardPairGameUI` 프로퍼티의 타입이 `Entity`로 선언되어야 하는 이유는 메이플스토리 월드(mLua) 환경에서 UI 그룹, 개별 UI 컴포넌트, 또는 다른 엔티티를 참조하는 기본 방식이 엔티티 경로(Path)를 통해 이루어지기 때문입니다. 참고 문서의 예시처럼 `Property: [None] Entity CardPairGameUI = /ui/CardPairGameUI`와 같이 프로퍼티를 정의하면, 해당 프로퍼티는 지정된 경로에 있는 UI 엔티티를 가리키는 참조가 됩니다. mLua에서는 `GetComponent` 같 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 1. **CardBoard** 컴포넌트를 **CardPairGameUI** 그룹에 추가합니다. 2. **CardBoard** 컴포넌트를 선택해 스크립트 에디터를 엽니다. 3. **CardSpawnRoot** 프로퍼티를 추가하고, 반환 타입을 Entity로 변경합니다. 4. 엔티티는 **UI_Block_Group**으로 지정합니다. ```lua Property: [None] Entity CardSpawnRoot = /ui/CardParirGameUi/UI_Board/UI_Blocks/UI

[task] | single_turn [pass] | ⏳ 미판정 [title] | 행동 트리를 활용한 AI 만들기 [question] | Parallel 노드에서 한 개의 자식 노드만 Failure를 반환하면 나머지 자식 노드들의 실행은 즉시 중단되는지, 아니면 계속 수행되는지 알고 싶습니다. [answer] | 제공된 문서에는 Parallel 노드가 "모든 자식 노드를 동시에 실행"하며, 자식 노드 중 하나라도 Failure를 반환하면 부모 노드에 Failure를 반환한다고만 설명되어 있습니다. 다만, **한 자식 노드가 Failure를 반환했을 때 나머지 자식 노드들의 실행이 즉시 중단되는지, 아니면 현재 프레임/주기에 걸쳐 계속 수행되는지에 대한 구체적인 기술적 상세 내용은 문서에 명시되어 있지 않습니다.** 따라서 문서의 내용만으로는 실행 중단 여부(즉시 중단 vs. 지속 수행)를 확정적으로 답변드리기 어렵습니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | **Selector Node**는 자식 노드를 순서대로 실행하다가 자식 노드가 Success를 반환하면 실행을 멈추고 부모 노드로 Success를 반환합니다. 모든 자식 노드가 Failure를 반환하면 부모 노드에 Failure를 반환합니다. ![[object Object]](https://mod-file.dn.nexoncdn.co.kr/bbs/17168858785873218b87041fd46df9756a267a30ce29e.png "SelectorNode") #### RandomSelector Node **RandomSelec

[task] | single_turn [pass] | ⏳ 미판정 [title] | 행동 트리를 활용한 AI 만들기 [question] | RandomSelector 노드의 자식 확률 합이 1.0이 되지 않으면 어떤 오류나 문제가 발생하는지 궁금합니다. [answer] | 제공된 문서에는 RandomSelector 노드의 자식 노드 확률 합이 1.0이 되지 않을 경우 발생하는 구체적인 오류 메시지나 시스템적인 문제(예: 런타임 에러, 동작 중단 등)에 대한 설명이 포함되어 있지 않습니다. 문서에서는 RandomSelector Node가 "난수를 뽑아 해당 난수가 속한 범위의 확률을 가진 노드를 선택"하는 방식이라고만 설명하고 있으며, 확률 합이 1.0이 아닌 경우의 동작 방식이나 오류 처리에 대해서는 언급하고 있지 않습니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | **Selector Node**는 자식 노드를 순서대로 실행하다가 자식 노드가 Success를 반환하면 실행을 멈추고 부모 노드로 Success를 반환합니다. 모든 자식 노드가 Failure를 반환하면 부모 노드에 Failure를 반환합니다. ![[object Object]](https://mod-file.dn.nexoncdn.co.kr/bbs/17168858785873218b87041fd46df9756a267a30ce29e.png "SelectorNode") #### RandomSelector Node **RandomSelec

[task] | code [pass] | ⏳ 미판정 [title] | 카드와 UI 만들기 [question] | OnBeginPlay 시점에 UI_Block_Group에 자식으로 Model_Card를 소환하고, 각 카드의 TransformComponent.Position을 ScrollLayoutGroupComponent의 레이아웃 규칙에 따라 초기화하는 스크립트를 작성해줘 [answer] | 참고 문서에 제공된 정보를 바탕으로 답변드립니다. **주의사항:** 1. **`ScrollLayoutGroupComponent`가 자식의 `TransformComponent.Position`을 자동으로 배치하는지 여부**에 대해 참고 문서에는 **"자식 UI Entity들의 크기와 배치 간격 등을 일괄적으로 적용할 수 있다"**고 명시되어 있습니다. 이는 컴포넌트가 레이아웃을 관리한다는 의미이지만, **수동으로 각 카드의 Position을 레이아웃 규칙에 맞춰 초기화하는 구체적인 코드나 API**는 문서에 제공되지 않았습니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 이제 카드를 화면에 불러낼 차례입니다. 카드를 불러내기 위해선 **/ui/CardPairGameUI/UI_Board/UI_Blocks/UI_Block_Group**를 활용합니다. **UI_Block_Group**은 [ScrollLayoutGroupComponent](/apiReference?postId=382%7B%22target%22:%22_self%22%7D)를 활용했습니다. **ScollLayoutGroupComponent**는 여러 개의 엔티티를 펼쳐야할 때 사용합니다. 주로 상점이나, 인벤토리처럼 한 눈에 봐야하는 이미지

[task] | single_turn [pass] | ⏳ 미판정 [title] | 행동 트리를 활용한 AI 만들기 [question] | Parallel 노드에서는 자식 노드 중 일부가 Running을 반환하면 다음 프레임에 어떤 노드들만 실행되나요? [answer] | Parallel 노드에서는 자식 노드가 동시에 실행되는 특징이 있습니다. 따라서 한 프레임에서 일부 자식 노드가 Running을 반환하면, 다음 프레임에는 **Running을 반환했던 자식 노드들만** 다시 실행됩니다. Success나 Failure를 반환한 자식 노드는 이미 종료된 상태이므로 다음 프레임에 다시 실행되지 않습니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 자식 노드가 Success 또는 Failure를 반환하면 부모 노드는 다음 자식 노드를 실행합니다. 그러나 자식 노드가 Running을 반환하면 부모 노드는 Running을 반환했던 자식 노드를 다음 프레임에 다시 실행합니다. 이 특성을 활용해 여러 프레임 동안 동작하는 노드를 만들 수 있습니다. 아래 그림과 같이 자식 노드 A, B, C가 있을 때 Sequence Node와 Selector Node의 경우 B 노드가 Running을 반환하는 동안 C 노드를 실행하지 않습니다. RandomSelector Node는 선택된 노드를 계

[task] | single_turn [pass] | ⏳ 미판정 [title] | 행동 트리를 활용한 AI 만들기 [question] | 문서에서 스크립트보다 Behaviour Tree Editor 사용을 권장하는 이유는 무엇인가요? [answer] | 제공된 참고 문서에는 스크립트보다 Behaviour Tree Editor 사용을 권장하는 구체적인 **이유**가 명시되어 있지 않습니다. 문서에는 Action Node를 스크립트로 생성하고 연결하는 것보다 Behaviour Tree Editor에서 연결하는 방식을 **권장**한다고만 언급되어 있으며, 그 이유에 대한 설명은 포함되어 있지 않습니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | AI로 사용할 엔티티에는 **AIComponent 또는 확장한 AIComponent**가 포함되어 있어야 합니다. AIComponent는 BTNodeType에서 정의된 내용으로 Action Node를 별도의 객체로 생성하거나, 만들어진 행동 트리의 최상위 노드를 Root 노드로 설정하여 엔티티에 AI를 부여하기 때문입니다. Action Node를 만들 때는 AIComponent의 `CreateNode()`, `CreateLeafNode()`를 활용해 Action Node를 생성할 수 있습니다. > **Tip** > Action N

[task] | single_turn [pass] | ⏳ 미판정 [title] | 행동 트리를 활용한 AI 만들기 [question] | AIComponent 없이 일반 컴포넌트만 가진 엔티티에도 행동 트리를 적용할 수 있는지 궁금합니다. [answer] | 아니요, AIComponent 없이 일반 컴포넌트만 가진 엔티티에는 행동 트리를 적용할 수 없습니다. AI로 사용할 엔티티에는 **AIComponent** 또는 이를 확장한 컴포넌트가 반드시 포함되어 있어야 합니다. 행동 트리의 Root 노드를 설정하거나 Action Node를 생성하는 과정(`CreateNode()`, `CreateLeafNode()` 등)이 모두 AIComponent를 통해서만 수행되기 때문입니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | AI로 사용할 엔티티에는 **AIComponent 또는 확장한 AIComponent**가 포함되어 있어야 합니다. AIComponent는 BTNodeType에서 정의된 내용으로 Action Node를 별도의 객체로 생성하거나, 만들어진 행동 트리의 최상위 노드를 Root 노드로 설정하여 엔티티에 AI를 부여하기 때문입니다. Action Node를 만들 때는 AIComponent의 `CreateNode()`, `CreateLeafNode()`를 활용해 Action Node를 생성할 수 있습니다. > **Tip** > Action N

[task] | instruction_following [pass] | ⏳ 미판정 [title] | 행동 트리를 활용한 AI 만들기 [question] | CreateNode()와 CreateLeafNode()의 매개 변수 및 반환값을 비교하는 표로 정리하세요. [answer] | `CreateNode()`와 `CreateLeafNode()`의 매개 변수 및 반환값은 다음과 같습니다. | 구분 | CreateNode() | CreateLeafNode() | | :--- | :--- | :--- | | **매개 변수 1** | 생성될 **BTNodeType** (string) | 노드의 이름 (string) | | **매개 변수 2** | 노드의 이름 (string) | 노드 실행 시 호출될 함수 (function) | | **반환값** | 생성된 노드 객체 (BTNodeType) | 생성된 노드 객체 (Ac [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | AI로 사용할 엔티티에는 **AIComponent 또는 확장한 AIComponent**가 포함되어 있어야 합니다. AIComponent는 BTNodeType에서 정의된 내용으로 Action Node를 별도의 객체로 생성하거나, 만들어진 행동 트리의 최상위 노드를 Root 노드로 설정하여 엔티티에 AI를 부여하기 때문입니다. Action Node를 만들 때는 AIComponent의 `CreateNode()`, `CreateLeafNode()`를 활용해 Action Node를 생성할 수 있습니다. > **Tip** > Action N

[task] | single_turn [pass] | ⏳ 미판정 [title] | 행동 트리를 활용한 AI 만들기 [question] | 행동 트리에서 SelectorNode와 SequenceNode의 실행 방식이 어떻게 다른지 쉽게 설명해 줄 수 있나요? [answer] | 행동 트리에서 `SelectorNode`와 `SequenceNode`는 자식 노드들을 실행하는 방식이 정반대입니다. **1. SequenceNode (시퀀스 노드)** * **실행 방식:** 자식 노드들을 **왼쪽부터 오른쪽으로 순서대로** 실행합니다. * **성공 조건:** 모든 자식 노드가 성공(Success)해야만 해당 `SequenceNode`가 성공으로 처리됩니다. * **실패 조건:** 순서대로 실행하던 중 **하나라도 실패(Failure)** 하면 즉시 중단되고, 전체 `SequenceNode`도 실패로 처 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 행동 트리와 BTNodeType 개념을 이해하고, AIComponent를 활용해 Action Node를 생성하는 방법을 알아봅시다. [행동 트리 노드 만들기](/docs?postId=1155)에서 행동 트리 구현 방법과 예제를 소개합니다. ##### 참고 가이드 * [행동 트리 노드 만들기](/docs?postId=1155) * [Behaviour Tree Editor로 행동 트리 만들기](/docs?postId=1399) ##### 참고 API Reference * [BTNode](/apiReference

[task] | single_turn [pass] | ⏳ 미판정 [title] | 행동 트리를 활용한 AI 만들기 [question] | Composite Node와 Decorator Node는 자식 노드 개수 제한이 어떻게 다른지 차이점을 설명해 주실 수 있나요? [answer] | Composite Node와 Decorator Node의 자식 노드 개수 제한은 다음과 같이 다릅니다. **Decorator Node**는 반드시 **하나의 자식 노드**만 가질 수 있습니다. 이는 Decorator Node가 자식을 실행할지 말지 결정하거나 반환 값을 가공하는 역할을 수행하기 위한 구조적 특징입니다. Composite Node, Action Node를 자식으로 가질 수 있지만, 그 수는 항상 1개입니다. 반면, **Composite Node**(Selector, Parallel, RandomSelector, S [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | **Selector Node**는 자식 노드를 순서대로 실행하다가 자식 노드가 Success를 반환하면 실행을 멈추고 부모 노드로 Success를 반환합니다. 모든 자식 노드가 Failure를 반환하면 부모 노드에 Failure를 반환합니다. ![[object Object]](https://mod-file.dn.nexoncdn.co.kr/bbs/17168858785873218b87041fd46df9756a267a30ce29e.png "SelectorNode") #### RandomSelector Node **RandomSelec

[task] | single_turn [pass] | ⏳ 미판정 [title] | 행동 트리를 활용한 AI 만들기 [question] | Selector 노드와 RandomSelector 노드는 자식 노드가 Running을 반환했을 때 다음 프레임 동작 방식에서 어떤 차이가 있나요? [answer] | Selector 노드와 RandomSelector 노드는 자식 노드가 Running을 반환했을 때 다음 프레임의 동작 방식에 다음과 같은 차이가 있습니다. **Selector 노드** 자식 노드가 Running을 반환하면, 부모 Selector 노드는 해당 Running을 반환한 자식 노드를 다음 프레임에 다시 실행합니다. 이때 다른 자식 노드들은 실행되지 않습니다. 즉, 특정 자식 노드가 완료(Success 또는 Failure)될 때까지 같은 노드가 반복 실행됩니다. **RandomSelector 노드** RandomSelec [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 자식 노드가 Success 또는 Failure를 반환하면 부모 노드는 다음 자식 노드를 실행합니다. 그러나 자식 노드가 Running을 반환하면 부모 노드는 Running을 반환했던 자식 노드를 다음 프레임에 다시 실행합니다. 이 특성을 활용해 여러 프레임 동안 동작하는 노드를 만들 수 있습니다. 아래 그림과 같이 자식 노드 A, B, C가 있을 때 Sequence Node와 Selector Node의 경우 B 노드가 Running을 반환하는 동안 C 노드를 실행하지 않습니다. RandomSelector Node는 선택된 노드를 계

[task] | two_turn [pass] | ⏳ 미판정 [title] | 행동 트리를 활용한 AI 만들기 [question] | AIComponent를 활용해 행동 트리 기반 AI를 엔티티에 부여하는 기본 구조와 노드 생성 방식이 궁금합니다. [answer] | 메이플스토리 월드에서 행동 트리(Behaviour Tree) 기반 AI를 엔티티에 부여하려면 해당 엔티티에 **AIComponent** 또는 이를 확장한 컴포넌트가 반드시 포함되어 있어야 합니다. AIComponent는 행동 트리의 최상위 노드를 Root로 설정하거나, BTNodeType을 기반으로 Action Node를 객체로 생성하여 AI 동작을 제어하는 역할을 합니다. 노드를 생성하는 방식은 목적에 따라 두 가지로 나뉩니다. ### 1. BTNodeType 기반 노드 생성: `CreateNode()` 특정 BTNodeTyp [followup] | CreateNode()와 CreateLeafNode()를 사용할 때 각각 어떤 매개변수를 전달해야 하며, 스크립트로 노드를 연결하기보다 Behaviour Tree Editor를 권장하는 이유는 무엇인가요? [followup_answer] | `CreateNode()`와 `CreateLeafNode()`의 매개변수 차이와 Behaviour Tree Editor를 권장하는 이유는 다음과 같습니다. ### 1. 매개변수 차이 * **`CreateNode()`** * **목적:** **BTNodeType**을 기반으로 노드 객체를 생성할 때 사용합니다. * **매개변수:** 생성될 **BTNodeType**과 **이름**을 전달합니다. * **예시:** ```lua local node = self.Entity [scores] | [judge_reason] | [source_doc] | AI로 사용할 엔티티에는 **AIComponent 또는 확장한 AIComponent**가 포함되어 있어야 합니다. AIComponent는 BTNodeType에서 정의된 내용으로 Action Node를 별도의 객체로 생성하거나, 만들어진 행동 트리의 최상위 노드를 Root 노드로 설정하여 엔티티에 AI를 부여하기 때문입니다. Action Node를 만들 때는 AIComponent의 `CreateNode()`, `CreateLeafNode()`를 활용해 Action Node를 생성할 수 있습니다. > **Tip** > Action N

[task] | two_turn [pass] | ⏳ 미판정 [title] | 카드와 UI 만들기 [question] | CreateCardEntities 함수에서 Model_Card의 Entry ID를 local 변수에 할당하고 소환하는 로직을 구현하는 방법입니다 [answer] | `CreateCardEntities` 함수에서 `Model_Card`의 Entry ID를 local 변수에 할당하고 `_SpawnService:SpawnByModelId()`를 통해 카드를 소환하는 로직은 다음과 같이 구현합니다. 1. **Entry ID 복사**: 워크스페이스(Workspace)에서 `MyDesk - Models - Model_Card` 엔티티를 선택합니다. 콘텍스트 메뉴에서 **Copy Entry ID**를 선택하여 모델의 고유 식별자를 복사합니다. 2. **Local 변수 할당**: 복사한 Entry ID [followup] | Workspace에서 Model_Card의 Entry ID를 복사한 후, CreateCardEntities 함수의 local cardModelId 변수에 할당하고 _SpawnService:SpawnByModelId()를 통해 카드 엔티티를 생성하는 전체 코드 블록을 작성해주세요. [followup_answer] | Workspace에서 `Model_Card`의 Entry ID를 복사하여 `local cardModelId` 변수에 할당하고, `_SpawnService:SpawnByModelId()`를 호출하여 카드 엔티티를 생성하는 `CreateCardEntities` 함수의 전체 코드 블록은 다음과 같습니다. ```lua Method: [client only] void CreateCardEntities() { local cardModelId = "Model_Card EntryID" local card = _SpawnS [scores] | [judge_reason] | [source_doc] | 1. **CardBoard** 컴포넌트를 **CardPairGameUI** 그룹에 추가합니다. 2. **CardBoard** 컴포넌트를 선택해 스크립트 에디터를 엽니다. 3. **CardSpawnRoot** 프로퍼티를 추가하고, 반환 타입을 Entity로 변경합니다. 4. 엔티티는 **UI_Block_Group**으로 지정합니다. ```lua Property: [None] Entity CardSpawnRoot = /ui/CardParirGameUi/UI_Board/UI_Blocks/UI

[task] | single_turn [pass] | ⏳ 미판정 [title] | 행동 트리를 활용한 AI 만들기 [question] | Sequence 노드에서 자식 노드가 Running을 반환하면 나머지 자식 노드들은 왜 실행되지 않나요? [answer] | Sequence 노드의 동작 원리에 따라, 자식 노드가 Running 상태를 반환하면 부모 노드는 해당 자식 노드가 실행을 완료할 때까지 다음 자식 노드를 진행하지 않기 때문입니다. 구체적인 처리 흐름은 다음과 같습니다. 1. 자식 노드가 `Success` 또는 `Failure`를 반환할 경우: 부모 노드는 즉시 다음 자식 노드를 실행합니다. 2. 자식 노드가 `Running`을 반환할 경우: 부모 노드는 다음 프레임에서 실행을 계속하고 있는 해당 자식 노드만 다시 실행합니다. 이 기간 동안 나머지 자식 노드들은 실행되지 않습니다 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 자식 노드가 Success 또는 Failure를 반환하면 부모 노드는 다음 자식 노드를 실행합니다. 그러나 자식 노드가 Running을 반환하면 부모 노드는 Running을 반환했던 자식 노드를 다음 프레임에 다시 실행합니다. 이 특성을 활용해 여러 프레임 동안 동작하는 노드를 만들 수 있습니다. 아래 그림과 같이 자식 노드 A, B, C가 있을 때 Sequence Node와 Selector Node의 경우 B 노드가 Running을 반환하는 동안 C 노드를 실행하지 않습니다. RandomSelector Node는 선택된 노드를 계

[task] | two_turn [pass] | ⏳ 미판정 [title] | 카드와 UI 만들기 [question] | CardPairGameLogic 로직에서 게임 시작 시 카드가 화면에 나타나도록 하는 연결 구조가 어떻게 되어 있나요 [answer] | `CardPairGameLogic`에서 게임 시작 시 카드가 화면에 나타나도록 하는 연결 구조는 **UI 엔티티 참조 → UI 컴포넌트 접근 → 카드 생성 함수 호출**의 3단계로 이루어져 있습니다. 구체적인 연결 흐름은 다음과 같습니다. 1. **UI 엔티티 참조**: `CardPairGameLogic` 스크립트에서 `CardPairGameUI` 프로퍼티를 통해 UI 루트 엔티티(`/ui/CardPairGameUI`)를 참조합니다. 2. **UI 컴포넌트 접근**: 참조된 UI 엔티티에서 `CardBoard` 컴포넌트를 접 [followup] | CardPairGameLogic의 StartGame() 메서드에서 CardPairGameUI 엔티티를 통해 CardBoard 컴포넌트를 접근하고 SetCards()를 호출하는 코드 예시를 보여주세요. [followup_answer] | `CardPairGameLogic`의 `StartGame()` 메서드에서 `CardPairGameUI` 엔티티를 통해 `CardBoard` 컴포넌트를 접근하고 `SetCards()`를 호출하는 코드 예시는 다음과 같습니다. ```lua Method: [client only] void StartGame() { self.CardPairGameUI.Enable = true local cardboard = self.CardPairGameUI.CardBoard cardboard:SetCards() } ``` [scores] | [judge_reason] | [source_doc] | 1. **CardBoard** 컴포넌트를 **CardPairGameUI** 그룹에 추가합니다. 2. **CardBoard** 컴포넌트를 선택해 스크립트 에디터를 엽니다. 3. **CardSpawnRoot** 프로퍼티를 추가하고, 반환 타입을 Entity로 변경합니다. 4. 엔티티는 **UI_Block_Group**으로 지정합니다. ```lua Property: [None] Entity CardSpawnRoot = /ui/CardParirGameUi/UI_Board/UI_Blocks/UI

[task] | single_turn [pass] | ⏳ 미판정 [title] | 행동 트리를 활용한 AI 만들기 [question] | Decorator 노드를 직접 제작할 때 부모 노드와 자식 노드 사이의 반환 값을 어떻게 가공할 수 있는지 구체적인 예시가 있을까요? [answer] | Decorator 노드는 자식 노드의 실행 여부와 반환 값을 부모 노드에 전달하는 중간 단계에서 제어할 수 있습니다. 구체적으로 자식 노드가 반환한 `BehaviourTreeStatus` 값을 받아서, 개발자가 원하는 대로 다른 상태로 변환하여 부모 노드에 반환하는 방식으로 가공할 수 있습니다. 제공된 문서의 예시를 보면, `OnBehave` 메서드 내에서 `self.Child:Behave(delta)`를 호출하여 자식 노드의 실행 결과를 `result` 변수에 저장합니다. 이후 `if-elseif-else` 구조를 사용하여 특정 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | **Selector Node**는 자식 노드를 순서대로 실행하다가 자식 노드가 Success를 반환하면 실행을 멈추고 부모 노드로 Success를 반환합니다. 모든 자식 노드가 Failure를 반환하면 부모 노드에 Failure를 반환합니다. ![[object Object]](https://mod-file.dn.nexoncdn.co.kr/bbs/17168858785873218b87041fd46df9756a267a30ce29e.png "SelectorNode") #### RandomSelector Node **RandomSelec

[task] | code [pass] | ⏳ 미판정 [title] | 행동 트리를 활용한 AI 만들기 [question] | AIComponent 를 활용하여 BTNode 의 Action Node 를 직접 생성하여 특정 조건 충족 시 애니메이션 재생 행동을 수행하는 AI 스크립트를 작성해줘 [answer] | 참고 문서에는 `AIComponent`를 활용하여 `BTNode`의 Action Node를 생성하는 기본적인 구조와 `AIComponent`의 프로퍼티(`ParentAI`, `BlackBoard` 등) 및 메서드(`CreateLeafNode`) 사용 예시는 제공되고 있습니다. 그러나 질문에서 요구하는 **"특정 조건 충족 시 애니메이션 재생 행동"** 을 수행하기 위한 구체적인 API(예: 애니메이션을 재생하는 메서드, 애니메이션 ID를 지정하는 프로퍼티 등)는 제공된 참고 문서에 포함되어 있지 않습니다. 참고 문서의 예제 코드는 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 행동 트리와 BTNodeType 개념을 이해하고, AIComponent를 활용해 Action Node를 생성하는 방법을 알아봅시다. [행동 트리 노드 만들기](/docs?postId=1155)에서 행동 트리 구현 방법과 예제를 소개합니다. ##### 참고 가이드 * [행동 트리 노드 만들기](/docs?postId=1155) * [Behaviour Tree Editor로 행동 트리 만들기](/docs?postId=1399) ##### 참고 API Reference * [BTNode](/apiReference

[task] | single_turn [pass] | ⏳ 미판정 [title] | 행동 트리를 활용한 AI 만들기 [question] | Selector 노드와 RandomSelector 노드에서 자식 노드의 실행 순서와 결과 반환 방식이 어떻게 다른지 궁금합니다. [answer] | Selector 노드와 RandomSelector 노드는 자식 노드를 선택하고 실행하는 방식에서 명확한 차이가 있습니다. **1. Selector 노드** * **실행 순서:** 자식 노드를 **순서대로(첫 번째부터 차례로)** 실행합니다. * **결과 반환 방식:** * 실행 중인 자식 노드가 `Success`를 반환하면 즉시 실행을 중단하고, 부모 노드로 `Success`를 반환합니다. * 모든 자식 노드를 실행했는데 모두 `Failure`를 반환한 경우에만, 부모 노드로 `Failure`를 반환합 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | **Selector Node**는 자식 노드를 순서대로 실행하다가 자식 노드가 Success를 반환하면 실행을 멈추고 부모 노드로 Success를 반환합니다. 모든 자식 노드가 Failure를 반환하면 부모 노드에 Failure를 반환합니다. ![[object Object]](https://mod-file.dn.nexoncdn.co.kr/bbs/17168858785873218b87041fd46df9756a267a30ce29e.png "SelectorNode") #### RandomSelector Node **RandomSelec

[task] | single_turn [pass] | ⏳ 미판정 [title] | 행동 트리를 활용한 AI 만들기 [question] | MSW에서 제공하는 4가지 Composite Node 중 Random Selector Node는 Behaviour Tree Editor에서 사용할 수 없다는 팁이 있는데, 다른 노드들과는 달리 왜 에디터 지원이 안 되는 건가요? [answer] | 제공된 참고 문서에는 Random Selector Node가 Behaviour Tree Editor에서 사용할 수 없다는 사실만 명시되어 있으며, 다른 노드들과는 달리 에디터 지원이 되지 않는 구체적인 이유(기술적 한계, UI 설계 의도 등)에 대한 설명은 포함되어 있지 않습니다. 따라서 문서 내용에 기반하여 에디터 미지원의 원인을 설명해 드리는 것은 불가능합니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 행동 트리는 프레임마다 Root 노드에서 시작합니다. 그 후 순차적으로 실행됩니다. 실행 순서는 위에서 아래, 왼쪽에서 오른쪽입니다. 부모 노드가 자식 노드를 실행하며 실행 순서는 각 부모에 등록된 순서대로 실행됩니다. 부모 노드는 종류에 따라 자식 노드 실행 조건을 달리하며, 조건에 부합할 때 부모가 가진 자식 노드를 모두 순차적으로 실행합니다. 예를 들어 부모 노드에 자식 노드 A, B, C가 순차적으로 등록된 경우 A가 가장 좌측에, 노드 C가 가장 우측에 배치됩니다. 부모 노드 실행 시 자식 노드는 A, B, C 순으로 실행

[task] | code [pass] | ⏳ 미판정 [title] | 행동 트리를 활용한 AI 만들기 [question] | AIComponent 를 활용하여 ParallelNode 를 사용하여 이동 중에도 공격 판단 로직을 동시에 실행하는 AI 스크립트를 작성해줘 [answer] | 제공된 참고 문서에는 `ParallelNode`의 API 시그니처(생성자, 메서드, 프로퍼티)나 `AIComponent`에서 노드를 트리 구조로 연결하는 구체적인 방법(예: `AddChild`, `Attach` 등)이 포함되어 있지 않습니다. 문서에 있는 예제 코드에서는 `Parallel` 객체를 생성만 하고 있거나, `decorator.Child = childNode`처럼 일부 연결 방식을 보여줄 뿐, `ParallelNode`에 자식 노드를 어떻게 등록하는지 명시된 API가 없습니다. 따라서 제공된 문서 정보만으로 **Para [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 행동 트리와 BTNodeType 개념을 이해하고, AIComponent를 활용해 Action Node를 생성하는 방법을 알아봅시다. [행동 트리 노드 만들기](/docs?postId=1155)에서 행동 트리 구현 방법과 예제를 소개합니다. ##### 참고 가이드 * [행동 트리 노드 만들기](/docs?postId=1155) * [Behaviour Tree Editor로 행동 트리 만들기](/docs?postId=1399) ##### 참고 API Reference * [BTNode](/apiReference

[task] | single_turn [pass] | ⏳ 미판정 [title] | 행동 트리를 활용한 AI 만들기 [question] | CreateLeafNode를 사용할 때 함수가 반환해야 하는 값은 무엇이며, 왜 그런지 설명해 주세요. [answer] | `CreateLeafNode`에 전달하는 함수는 `BehaviourTreeStatus` 타입의 값을 반환해야 합니다. 이유는 행동 트리(Behaviour Tree)의 실행 결과가 부모 노드나 루트 노드로 전달되어 다음 동작을 결정해야 하기 때문입니다. 행동 트리는 각 노드의 실행 상태를 파악하여 분기 처리를 수행하므로, 함수가 현재 동작의 상태(성공, 실패, 진행 중 등)를 명확히 반환해야 합니다. 문서에 제시된 예제에서 반환되는 구체적인 값은 다음과 같습니다. ```lua local func = function() [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | AI로 사용할 엔티티에는 **AIComponent 또는 확장한 AIComponent**가 포함되어 있어야 합니다. AIComponent는 BTNodeType에서 정의된 내용으로 Action Node를 별도의 객체로 생성하거나, 만들어진 행동 트리의 최상위 노드를 Root 노드로 설정하여 엔티티에 AI를 부여하기 때문입니다. Action Node를 만들 때는 AIComponent의 `CreateNode()`, `CreateLeafNode()`를 활용해 Action Node를 생성할 수 있습니다. > **Tip** > Action N

[task] | single_turn [pass] | ⏳ 미판정 [title] | 행동 트리를 활용한 AI 만들기 [question] | Action Node는 자식 노드를 갖지 않는 Leaf Node라고 설명되어 있는데, 엔티티의 '대기' 상태와 '공격' 상태라는 조건 자체를 정의하는 것도 Action Node로 만들어야 하나요? [answer] | 네, 맞습니다. 엔티티의 '대기' 상태나 '공격' 상태와 같은 **행동의 조건**을 정의하는 것 또한 **Action Node**로 만들어야 합니다. Action Node는 자식 노드를 갖지 않는 Leaf Node로, 엔티티의 실질적인 행동뿐만 아니라 해당 행동을 수행하기 위한 **조건**까지 포함하여 정의하는 역할을 합니다. 따라서 특정 상태(예: 대기, 공격)일 때 실행되어야 하는 로직을 판단하는 조건부 로직도 별도의 Action Node로 구현한 후, 이 Action Node들을 Composite Node(Sequence, [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 행동 트리는 프레임마다 Root 노드에서 시작합니다. 그 후 순차적으로 실행됩니다. 실행 순서는 위에서 아래, 왼쪽에서 오른쪽입니다. 부모 노드가 자식 노드를 실행하며 실행 순서는 각 부모에 등록된 순서대로 실행됩니다. 부모 노드는 종류에 따라 자식 노드 실행 조건을 달리하며, 조건에 부합할 때 부모가 가진 자식 노드를 모두 순차적으로 실행합니다. 예를 들어 부모 노드에 자식 노드 A, B, C가 순차적으로 등록된 경우 A가 가장 좌측에, 노드 C가 가장 우측에 배치됩니다. 부모 노드 실행 시 자식 노드는 A, B, C 순으로 실행

[task] | single_turn [pass] | ⏳ 미판정 [title] | 효과음 만들기 [question] | SetCameraAsListener를 켜뒀는데도 소리가 특정 엔티티 기준으로만 들리는 이유는 무엇인가요? [answer] | `SetCameraAsListener` 프로퍼티를 활성화했음에도 소리가 특정 엔티티 기준으로 들리는 이유는, `SetListenerEntity` 함수를 통해 다른 리스너 엔티티가 이미 지정되어 있기 때문입니다. 이 경우 `SetCameraAsListener` 설정이 무시되고, `SetListenerEntity` 함수로 명시적으로 지정한 엔티티가 소리의 기준점(리스너)으로 사용됩니다. 따라서 화면 중앙(카메라)이 아닌, 해당 지정 엔티티와 음원 사이의 거리에 따라 소리 크기가 조절됩니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | **SetCameraAsListener** 프로퍼티를 활용하는 방법도 있습니다. **SoundComponent** 프로퍼티에서 설명했듯이 **SetCameraAsListener**를 활성화하면 화면 중앙과 음원 사이의 거리에 따라 소리 크기를 조절합니다. 간단하게 **SetCameraAsListener** 프로퍼티를 활용하는 방법을 살펴봅시다. 1. **Preset List**에서 아무 맵 오브젝트나 **Scene**에 배치한 뒤 **SpriteRendererComponent - SpriteRUID**에 아래의 **RUID**를

[task] | single_turn [pass] | ⏳ 미판정 [title] | 행동 트리를 활용한 AI 만들기 [question] | 행동 트리 노드가 반환하는 상태 값인 Running, Success, Failure 중 Running 상태가 반환되면 부모 노드가 다음 자식 노드를 실행하는지, 아니면 대기 상태로 유지하는지 어떻게 처리되나요? [answer] | 행동 트리 노드가 **Running** 상태 값을 반환하면, 부모 노드는 다음 자식 노드를 실행하지 않고 현재 프레임에서 대기 상태로 유지됩니다. 이는 행동 트리의 실행 흐름이 "위에서 아래, 왼쪽에서 오른쪽"으로 순차적으로 진행되지만, 각 부모 노드가 자식 노드가 반환하는 상태 값에 따라 다음 동작을 결정하기 때문입니다. 노드가 Running을 반환했다는 것은 해당 행동이 아직 완료되지 않고 진행 중임을 의미하므로, 부모 노드는 이 자식 노드가 Success 또는 Failure를 반환할 때까지 기다린 후 다음 판단을 내립니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 행동 트리는 프레임마다 Root 노드에서 시작합니다. 그 후 순차적으로 실행됩니다. 실행 순서는 위에서 아래, 왼쪽에서 오른쪽입니다. 부모 노드가 자식 노드를 실행하며 실행 순서는 각 부모에 등록된 순서대로 실행됩니다. 부모 노드는 종류에 따라 자식 노드 실행 조건을 달리하며, 조건에 부합할 때 부모가 가진 자식 노드를 모두 순차적으로 실행합니다. 예를 들어 부모 노드에 자식 노드 A, B, C가 순차적으로 등록된 경우 A가 가장 좌측에, 노드 C가 가장 우측에 배치됩니다. 부모 노드 실행 시 자식 노드는 A, B, C 순으로 실행

[task] | code [pass] | ⏳ 미판정 [title] | 행동 트리를 활용한 AI 만들기 [question] | AIComponent 를 활용하여 SelectorNode 와 SequenceNode 를 조합해 플레이어 접근 시 공격 행동을 수행하는 AI 스크립트를 작성해줘 [answer] | 제공된 참고 문서에는 `AIComponent`, `SelectorNode`, `SequenceNode`의 API 명세나 구체적인 생성/연결 메서드(예: `CreateSelectorNode`, `CreateSequenceNode`, `AddChild` 등)가 포함되어 있지 않습니다. 문서에서 확인 가능한 정보는 다음과 같습니다: 1. `self.Entity.AIComponent`를 통해 AI 컴포넌트에 접근할 수 있음. 2. `aiComponent:CreateLeafNode(name, function)` 메서드를 사용하여 리프 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 행동 트리와 BTNodeType 개념을 이해하고, AIComponent를 활용해 Action Node를 생성하는 방법을 알아봅시다. [행동 트리 노드 만들기](/docs?postId=1155)에서 행동 트리 구현 방법과 예제를 소개합니다. ##### 참고 가이드 * [행동 트리 노드 만들기](/docs?postId=1155) * [Behaviour Tree Editor로 행동 트리 만들기](/docs?postId=1399) ##### 참고 API Reference * [BTNode](/apiReference

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