← 목록

mLua · Nemotron-CC 리프레이즈 (CPT)

총 8,200개 · 페이지 250/274
🔀 랜덤
불러오는 중…

[task] | distill [title] | 행동 트리 노드 만들기 [category] | Guides [rephrased] | Root Node 설정 완료 시 `AIComponent`가 동작합니다. ### 트리 구성 코드 예제 `OnBeginPlay`에서 복합 노드(`SequenceNode`, `SelectorNode` 등)와 액션 노드를 생성한 후 `AttachChild`로 연결합니다. ```lua [server only] void OnBeginPlay() { -- CREATE COMPOSITE NODE local sequence = SequenceNode("Sequence") local sequenceA = SequenceNode("Sequen [original] | Root Node 설정까지 마치면, 만든 행동 트리를 기반으로 AIComponent가 동작합니다. ```lua [server only] void OnBeginPlay() { --CREATE COMPOSITE NODE local sequence = SequenceNode("Sequence") local sequenceA = SequenceNode("SequenceA") local sequenceB = SequenceNode("SequenceB") local sequenceC = SequenceNode("SequenceC" [chunk_id] | Guides:1155:3

[task] | extract_knowledge [title] | UI 엔티티 제어하기 [category] | Guides [rephrased] | # UI 엔티티 노출 제어 (`SetEnable`) ## 개념 설명 mLua에서 UI 엔티티의 가시성(노출/숨김)을 제어하기 위해 `SetEnable()` 함수를 사용합니다. 이 함수는 UI 엔티티가 화면에 표시되는지 여부를 논리값(`true`/`false`)으로 설정합니다. UI를 제작할 때 기능적으로 묶여 있는 UI 요소들은 계층 구조를 활용하여 **부모-자식 관계**로 구성하는 것이 권장됩니다. 특정 UI 엔티티를 최상위(부모)로 두고 나머지 UI 엔티티를 그 자식으로 포함시켜야 합니다. 이를 통해 부모 엔티티의 `Enab [original] | `SetEnable()` 함수를 사용해 UI의 노출을 제어할 수 있습니다. 아래 그림과 같이 팝업창을 직접 제작하고 동일 계층으로 UI를 만들었을 경우를 살펴봅시다. 이 팝업창은 동시에 나타나고 사라져야 하므로 모든 엔티티의 **Enable**을 별도로 설정해야 합니다. ```lua void ShowPopupUI() { local PopupUIEntity_1 = _EntityService:GetEntityByPath("/ui/DefaultGroup/MODImage_1") local PopupUIEntity_2 = [chunk_id] | Guides:1154:1

[task] | distill [title] | 행동 트리 노드 만들기 [category] | Guides [rephrased] | ### AIPatrolComponent 제작 가이드 **1. 컴포넌트 생성 및 배치** * **Workspace > BaseEnvironment > NativeScripts > Component > AIComponent**를 Extend하여 **AIPatrolComponent**로 생성합니다. * 맵 내 몬스터 엔티티에 해당 컴포넌트를 추가합니다. **2. 감지 범위 시각화 (`DrawRange`)** `PolygonRendererComponent`를 활용하여 감지 범위를 시각화합니다. ```lua Property: [ [original] | 1. **Workspace - BaseEnvironment - NativeScripts - Component - AIComponent**를 선택해 Extend합니다. 이름을 **AIPatrolComponent**로 변경합니다. 2. 맵에 배치한 몬스터에 AIPatrolComponent를 추가합니다. 3. `DrawRange()` 함수를 추가합니다. **PolygonRendererComponent**를 활용해 몬스터가 플레이어를 감지할 수 있는 범위를 보여줄 수 있도록 아래와 같이 작성합니다. ```lua Pr [chunk_id] | Guides:1155:5

[task] | knowledge_list [title] | 행동 트리 노드 만들기 [category] | Guides [rephrased] | 제시된 문서 내용에만 기반하여 핵심 사실을 추출한 목록입니다. 1. AI 행동 트리 노드 컴포넌트는 `Workspace - BaseEnvironment - NativeScripts - Component - AIComponent` 경로의 컴포넌트를 확장하여 생성하며, 컴포넌트 이름은 `AIPatrolComponent`로 지정해야 합니다. 2. 생성된 `AIPatrolComponent`는 맵에 배치된 몬스터 엔티티에 추가하여 적용해야 합니다. 3. 몬스터의 플레이어 감지 범시를 시각화하기 위해 `DrawRange` 함수를 구현하며, [original] | 1. **Workspace - BaseEnvironment - NativeScripts - Component - AIComponent**를 선택해 Extend합니다. 이름을 **AIPatrolComponent**로 변경합니다. 2. 맵에 배치한 몬스터에 AIPatrolComponent를 추가합니다. 3. `DrawRange()` 함수를 추가합니다. **PolygonRendererComponent**를 활용해 몬스터가 플레이어를 감지할 수 있는 범위를 보여줄 수 있도록 아래와 같이 작성합니다. ```lua Pr [chunk_id] | Guides:1155:5

[task] | wikipedia [title] | 행동 트리 노드 만들기 [category] | Guides [rephrased] | Root Node 설정이 완료되면, 작성된 행동 트리(Behavior Tree) 구조를 기반으로 `AIComponent`가 AI의 동작을 제어하기 시작합니다. 행동 트리를 구성하는 주요 방법으로는 복합 노드(Composite Node)와 액션 노드(Action Node)를 생성하고, 이를 `AttachChild` 메서드를 통해 트리 구조로 연결하는 과정이 있습니다. 아래 코드는 `OnBeginPlay` 이벤트 핸들러 내에서 `SequenceNode`, `SelectorNode`, `RandomSelectorNode`, `Paral [original] | Root Node 설정까지 마치면, 만든 행동 트리를 기반으로 AIComponent가 동작합니다. ```lua [server only] void OnBeginPlay() { --CREATE COMPOSITE NODE local sequence = SequenceNode("Sequence") local sequenceA = SequenceNode("SequenceA") local sequenceB = SequenceNode("SequenceB") local sequenceC = SequenceNode("SequenceC" [chunk_id] | Guides:1155:3

[task] | knowledge_list [title] | 행동 트리 노드 만들기 [category] | Guides [rephrased] | 제시된 문서의 내용을 바탕으로 추출한 핵심 사실 목록입니다. * `DetectPlayer()` 메서드는 `[server only]` 실행 공간에서 동작하며, `self.DetectionRange` 값을 초기 최소 거리(`minDist`)로 설정하고, `self.Entity.TransformComponent.WorldPosition:ToVector2()`를 통해 자신의 2D 좌표를 획득합니다. * `DetectPlayer()` 메서드는 `_UserService.UserEntities` 테이블을 `pairs`로 순회하며 각 유 [original] | ```lua [server only] void DetectPlayer() { local target = nil local minDist = self.DetectionRange local myPos = self.Entity.TransformComponent.WorldPosition:ToVector2() local users = _UserService.UserEntities for userId, user in pairs(users) d [chunk_id] | Guides:1155:6

[task] | distill [title] | 행동 트리 노드 만들기 [category] | Guides [rephrased] | ## 행동 트리 노드 구현: 플레이어 감지 및 메모리 관리 ### 1. 플레이어 감지 로직 (`DetectPlayer`) `[server only]` 환경에서 `DetectionRange` 내 가장 가까운 유저를 탐색하여 `Memory`에 저장합니다. * **동작 규칙**: * `self.Entity.TransformComponent.WorldPosition:ToVector2()`로 현재 위치를 2D 좌표로 변환. * `_UserService.UserEntities`를 순회하며 `:Distance()`로 [original] | ```lua [server only] void DetectPlayer() { local target = nil local minDist = self.DetectionRange local myPos = self.Entity.TransformComponent.WorldPosition:ToVector2() local users = _UserService.UserEntities for userId, user in pairs(users) d [chunk_id] | Guides:1155:6

[task] | extract_knowledge [title] | 행동 트리 노드 만들기 [category] | Guides [rephrased] | # 행동 트리 데코레이터 노드 (Decorator Node) ## 1. 개념 설명 행동 트리(Behavior Tree)에서 **Decorator Node**는 자식 노드(Child Node)의 실행 결과를 변환하거나 제어하는 역할을 수행합니다. mLua에서는 표준화된 Decorator 클래스가 제공되지 않으므로, 개발자가 `BTNodeType`을 직접 정의하여 구현해야 합니다. Decorator 노드를 구현하기 위한 핵심 구조적 요구사항은 다음과 같습니다. 1. **프로퍼티 정의**: 자식 노드를 참조하기 위해 `any` 타입 [original] | Decorator Node는 BTNodeType을 활용해 생성할 수 있습니다. 새 BTNodeType을 생성하고, 프로퍼티로 any 타입의 **Child** 또는 **child**를 추가해 Decorator Node로 만들 수 있습니다. 자식 노드를 실행하고 싶을 때는 `Behave()` 함수를 호출합니다. ```lua Property: [None] any Child = nil Method: any OnBehave(number delta) { if self.Child == nil then return Behaviou [chunk_id] | Guides:1155:2

[task] | diverse_qa [title] | 행동 트리 노드 만들기 [category] | Guides [rephrased] | 질문: `DetectPlayer()` 함수 내에서 가장 가까운 플레이어를 찾기 위해 어떤 서비스와 프로퍼티를 사용하고 있나요? 답변: `_UserService` 서비스의 `UserEntities` 프로퍼티를 사용하여 모든 유저를 순회하며, 각 유저의 `TransformComponent.WorldPosition`을 `Vector2`로 변환하여 현재 엔티티의 위치와 거리를 비교하고 있습니다. 질문: `DetectPlayer()` 함수에서 플레이어를 찾지 못했을 때 `Memory`에 어떤 값을 저장하나요? 답변: `target`이 `n [original] | ```lua [server only] void DetectPlayer() { local target = nil local minDist = self.DetectionRange local myPos = self.Entity.TransformComponent.WorldPosition:ToVector2() local users = _UserService.UserEntities for userId, user in pairs(users) d [chunk_id] | Guides:1155:6

[task] | distill [title] | 행동 트리 노드 만들기 [category] | Guides [rephrased] | # BTNodeType 만들기 `BTNodeType` 스크립트 컴포넌트를 이용해 행동 트리(Behaviour Tree) 노드를 생성합니다. 아래 예제는 맵에서 이동하고 플레이어를 추적하는 몬스터를 위한 8개의 노드를 정의합니다. ### 노드 역할 정의 | 노드 이름 | 설명 | | :--- | :--- | | `ActionChangeStateAlert` | 머티리얼을 변경하고 감지 범위 색상을 빨간색으로 설정 | | `ActionChangeStateCalm` | 머티리얼을 원복하고 감지 범위 색상을 초록색으로 설정 | | `A [original] | ## BTNodeType 만들기 BTNodeType을 활용해 아래의 트리 구조를 만들어 봅시다. 예제에서 만들 BTNodeType은 총 8개입니다. 이 노드들이 서로 동작하며 맵에서 움직이고, 플레이어를 추적하게 됩니다. 1. **Workspace - MyDesk - Create Scripts - BTNodeType**을 선택해 새로운 8개의 BTNodeType을 만듭니다. 8개의 BTNodeType은 아래와 같이 각기 다른 역할을 합니다. | 노드 | 설명 | | --- | --- | | ActionChangeStateA [chunk_id] | Guides:1155:7

[task] | diverse_qa [title] | 행동 트리 노드 만들기 [category] | Guides [rephrased] | 질문: AIPatrolComponent를 생성하기 위해 어떤 경로의 컴포넌트를 선택하여 Extend해야 하는가? 답변: Workspace - BaseEnvironment - NativeScripts - Component - AIComponent 경로의 컴포넌트를 선택하여 Extend해야 합니다. 질문: AIPatrolComponent의 이름을 변경할 때 지어야 하는 이름은 무엇인가? 답변: AIPatrolComponent로 이름을 변경해야 합니다. 질문: DrawRange() 함수에서 몬스터의 감지 범위를 시각화하기 위해 추가하 [original] | 1. **Workspace - BaseEnvironment - NativeScripts - Component - AIComponent**를 선택해 Extend합니다. 이름을 **AIPatrolComponent**로 변경합니다. 2. 맵에 배치한 몬스터에 AIPatrolComponent를 추가합니다. 3. `DrawRange()` 함수를 추가합니다. **PolygonRendererComponent**를 활용해 몬스터가 플레이어를 감지할 수 있는 범위를 보여줄 수 있도록 아래와 같이 작성합니다. ```lua Pr [chunk_id] | Guides:1155:5

[task] | wikipedia [title] | 행동 트리 노드 만들기 [category] | Guides [rephrased] | # AIComponent 확장 및 행동 트리 노드 구현 본 가이드는 메이플스토리 월드(MapleStory Worlds)의 mLua 스크립트 언어를 사용하여 AIComponent를 확장하고, 몬스터의 탐지 및 이동 로직을 구현하는 과정을 설명합니다. 이 과정은 기본 제작 가이드의 '게임 로직/시스템 > 게임 로직 행동 트리 노드 만들기' 섹션에 해당합니다. ## 1. AIPatrolComponent 생성 및 배치 먼저 워크스페이스(Workspace)에서 `BaseEnvironment - NativeScripts - Compone [original] | 1. **Workspace - BaseEnvironment - NativeScripts - Component - AIComponent**를 선택해 Extend합니다. 이름을 **AIPatrolComponent**로 변경합니다. 2. 맵에 배치한 몬스터에 AIPatrolComponent를 추가합니다. 3. `DrawRange()` 함수를 추가합니다. **PolygonRendererComponent**를 활용해 몬스터가 플레이어를 감지할 수 있는 범위를 보여줄 수 있도록 아래와 같이 작성합니다. ```lua Pr [chunk_id] | Guides:1155:5

[task] | diverse_qa [title] | 행동 트리 노드 만들기 [category] | Guides [rephrased] | 질문: BTNodeType을 만들 때 워크스페이스의 어떤 경로에서 생성해야 하나요? 답변: Workspace - MyDesk - Create Scripts - BTNodeType 경로를 선택해 생성합니다. 질문: 이 가이드 예제에서 총 몇 개의 BTNodeType 노드가 사용되나요? 답변: 총 8개의 BTNodeType 노드가 사용됩니다. 질문: ActionChangeStateAlert 노드의 주요 기능은 무엇인가요? 답변: 몬스터의 머티리얼을 Rainbow 머티리얼로 변경하고, 감지 범위를 나타내는 PolygonRenderer [original] | ## BTNodeType 만들기 BTNodeType을 활용해 아래의 트리 구조를 만들어 봅시다. 예제에서 만들 BTNodeType은 총 8개입니다. 이 노드들이 서로 동작하며 맵에서 움직이고, 플레이어를 추적하게 됩니다. 1. **Workspace - MyDesk - Create Scripts - BTNodeType**을 선택해 새로운 8개의 BTNodeType을 만듭니다. 8개의 BTNodeType은 아래와 같이 각기 다른 역할을 합니다. | 노드 | 설명 | | --- | --- | | ActionChangeStateA [chunk_id] | Guides:1155:7

[task] | wikipedia [title] | 행동 트리 노드 만들기 [category] | Guides [rephrased] | # 게임 로직 행동 트리 노드 만들기 이 섹션은 `mLua` 스크립트에서 게임 로직 행동 트리 노드를 구현하기 위한 구체적인 코드 작성 절차를 설명합니다. 아래 단계들은 플레이어 감지, 상태 저장, 그리고 초기화 과정을 포함하며, 각 단계마다 필요한 메서드와 프로퍼티를 정의합니다. ## 1. 플레이어 감지 로직 구현 `DetectPlayer()` 메서드는 서버에서 실행되며, 지정된 범위 내의 가장 가까운 플레이어를 찾아 메모리에 저장합니다. 이 메서드는 `[server only]` 어노테이션으로 지정되어 서버 측에서만 실행됩니 [original] | ```lua [server only] void DetectPlayer() { local target = nil local minDist = self.DetectionRange local myPos = self.Entity.TransformComponent.WorldPosition:ToVector2() local users = _UserService.UserEntities for userId, user in pairs(users) d [chunk_id] | Guides:1155:6

[task] | distill [title] | 행동 트리 노드 만들기 [category] | Guides [rephrased] | # 게임 로직 행동 트리 노드 만들기 행동 트리 노드는 `OnInt` (초기화)와 `OnBehave` (실행) 메서드를 통해 동작합니다. `OnBehave`는 매 프레임 `delta`를 인자로 받으며, `BehaviourTreeStatus` (`Running`, `Success`, `Failure`)를 반환합니다. ## Wait (대기) 지정된 시간(`Time`)이 경과하기 전까지 `Running`, 경과 후 `Success`를 반환합니다. ```lua Property: [None] number ElapsedTime = 0 [ [original] | 일정 시간 동안 동작을 멈추고 대기합니다. 일정 시간이 경과하기 전까지 Running을 반환하고, 시간이 경과하면 Success를 반환하도록 아래와 같이 작성합니다. ```lua Property: [None] number ElapsedTime = 0 [None] number Time = 0 Method: void OnInt() { self.ElapsedTime = 0 } any OnBehave(number delta) { self.ElapsedTime += delta if self.ElapsedTime [chunk_id] | Guides:1155:9

[task] | wikipedia [title] | 행동 트리 노드 만들기 [category] | Guides [rephrased] | # 행동 트리 노드(BTNodeType) 만들기 `BTNodeType` 컴포넌트를 사용하여 행동 트리 구조를 구성하는 방법입니다. 본 가이드에서는 총 8개의 `BTNodeType` 노드를 만들어 맵에서 몬스터가 움직이고 플레이어를 추적하는 로직을 구현합니다. ## 노드 구성 및 역할 작업 공간의 `Workspace - MyDesk - Create Scripts - BTNodeType` 경로를 통해 8개의 `BTNodeType` 스크립트를 생성합니다. 각 노드는 다음과 같은 고유한 역할을 수행하며, 서로 협력하여 행동 트리의 흐 [original] | ## BTNodeType 만들기 BTNodeType을 활용해 아래의 트리 구조를 만들어 봅시다. 예제에서 만들 BTNodeType은 총 8개입니다. 이 노드들이 서로 동작하며 맵에서 움직이고, 플레이어를 추적하게 됩니다. 1. **Workspace - MyDesk - Create Scripts - BTNodeType**을 선택해 새로운 8개의 BTNodeType을 만듭니다. 8개의 BTNodeType은 아래와 같이 각기 다른 역할을 합니다. | 노드 | 설명 | | --- | --- | | ActionChangeStateA [chunk_id] | Guides:1155:7

[task] | distill [title] | 행동 트리 노드 만들기 [category] | Guides [rephrased] | # 게임 로직 행동 트리 노드 만들기 행동 트리 노드는 `OnBehave(number delta)` 메서드를 통해 상태(`BehaviourTreeStatus`)를 반환하며, `self.ParentAI`를 통해 AI 엔티티에 접근합니다. ### 플레이어 추적 범위 내 플레이어(`AIPatrolComponent:GetMemory("PlayerInRange")`)가 없으면 `Failure`, 있으면 방향을 계산해 이동하며 `Running` 반환. 도달 시 `Success`. ```lua Method: any OnBehave(numb [original] | 범위 안에 플레이어가 들어왔을 때 플레이어를 추적할 수 있도록 아래와 같이 작성합니다. 감지된 플레이어를 확인하기 위해 `AIPatrolComponent:GetMemory()`를 사용합니다. ```lua Method: any OnBehave(number delta) { ---@type AIPatrolComponent local parentAI = self.ParentAI local transform = parentAI.Entity.TransformComponent local target = parent [chunk_id] | Guides:1155:8

[task] | knowledge_list [title] | 행동 트리 노드 만들기 [category] | Guides [rephrased] | 제공된 원문 문서의 내용만 기반으로 핵심 사실을 추출하여 목록으로 정리했습니다. * **BTNodeType 생성 위치**: 새로운 BTNodeType 스크립트는 `Workspace - MyDesk - Create Scripts - BTNodeType` 경로를 통해 생성해야 합니다. * **ActionChangeStateAlert 노드 기능**: 이 노드는 몬스터의 머티리얼을 변경하여 감지 범위를 빨간색으로 표시하는 역할을 수행합니다. * **ActionChangeStateAlert 실행 로직**: `Method: any [original] | ## BTNodeType 만들기 BTNodeType을 활용해 아래의 트리 구조를 만들어 봅시다. 예제에서 만들 BTNodeType은 총 8개입니다. 이 노드들이 서로 동작하며 맵에서 움직이고, 플레이어를 추적하게 됩니다. 1. **Workspace - MyDesk - Create Scripts - BTNodeType**을 선택해 새로운 8개의 BTNodeType을 만듭니다. 8개의 BTNodeType은 아래와 같이 각기 다른 역할을 합니다. | 노드 | 설명 | | --- | --- | | ActionChangeStateA [chunk_id] | Guides:1155:7

[task] | knowledge_list [title] | 행동 트리 노드 만들기 [category] | Guides [rephrased] | 주어진 문서에서 추출한 핵심 사실 목록입니다. 1. `Delay` 노드는 `OnInt` 메서드에서 `self.ElapsedTime`을 0으로 초기화하며, `OnBehave(number delta)` 메서드에서 매 프레임 `delta` 값을 `self.ElapsedTime`에 누적합니다. 2. `Delay` 노드의 `OnBehave` 메서드는 `self.ElapsedTime`이 `self.Time` 속성에 설정된 값 이상일 때 `BehaviourTreeStatus.Success`를 반환하고, 그 이전에는 `BehaviourTreeS [original] | 일정 시간 동안 동작을 멈추고 대기합니다. 일정 시간이 경과하기 전까지 Running을 반환하고, 시간이 경과하면 Success를 반환하도록 아래와 같이 작성합니다. ```lua Property: [None] number ElapsedTime = 0 [None] number Time = 0 Method: void OnInt() { self.ElapsedTime = 0 } any OnBehave(number delta) { self.ElapsedTime += delta if self.ElapsedTime [chunk_id] | Guides:1155:9

[task] | diverse_qa [title] | 행동 트리 노드 만들기 [category] | Guides [rephrased] | 질문: 대기(Delay) 동작을 구현하는 노드에서 `OnBehave` 메서드가 일정 시간 경과 전과 후 각각 어떤 값을 반환해야 하나요? 답변: 일정 시간 경과 전까지는 `BehaviourTreeStatus.Running`을 반환하고, 시간이 경과하면 `BehaviourTreeStatus.Success`를 반환해야 합니다. 질문: 아래 코드는 어떤 기능을 수행하나요? ```lua any OnBehave(number delta) { self.ElapsedTime += delta if self.ElapsedTime > [original] | 일정 시간 동안 동작을 멈추고 대기합니다. 일정 시간이 경과하기 전까지 Running을 반환하고, 시간이 경과하면 Success를 반환하도록 아래와 같이 작성합니다. ```lua Property: [None] number ElapsedTime = 0 [None] number Time = 0 Method: void OnInt() { self.ElapsedTime = 0 } any OnBehave(number delta) { self.ElapsedTime += delta if self.ElapsedTime [chunk_id] | Guides:1155:9

[task] | wikipedia [title] | 행동 트리 노드 만들기 [category] | Guides [rephrased] | # 게임 로직 행동 트리 노드 만들기 행동 트리(Behaviour Tree) 노드는 AI가 특정 조건을 판단하거나 동작을 실행하는 로직을 정의하는 데 사용됩니다. 아래에서는 시간 기반 대기, 플레이어 감지 상태에 따른 분기 처리를 위한 노드 구현 방법을 소개합니다. ## 시간 대기 노드 일정 시간 동안 동작을 멈추고 대기하는 노드는 `OnBehave` 메서드를 통해 매 프레임마다 경과 시간을 누적하고, 지정된 시간이 지날 때까지는 `Running` 상태를, 시간이 지나면 `Success` 상태를 반환하도록 구현합니다. 이 과정 [original] | 일정 시간 동안 동작을 멈추고 대기합니다. 일정 시간이 경과하기 전까지 Running을 반환하고, 시간이 경과하면 Success를 반환하도록 아래와 같이 작성합니다. ```lua Property: [None] number ElapsedTime = 0 [None] number Time = 0 Method: void OnInt() { self.ElapsedTime = 0 } any OnBehave(number delta) { self.ElapsedTime += delta if self.ElapsedTime [chunk_id] | Guides:1155:9

[task] | diverse_qa [title] | 행동 트리 노드 만들기 [category] | Guides [rephrased] | 질문: `AIPatrolComponent:GetMemory()` 메서드는 주로 어떤 목적으로 사용됩니까? 답변: 감지된 플레이어(타겟)를 확인하기 위해 사용됩니다. 질문: 아래 코드가 `BehaviourTreeStatus.Failure`를 반환하는 조건은 무엇입니까? ```lua local target = parentAI:GetMemory("PlayerInRange") if target == nil then return BehaviourTreeStatus.Failure end ``` 답변: `PlayerInRange`라는 [original] | 범위 안에 플레이어가 들어왔을 때 플레이어를 추적할 수 있도록 아래와 같이 작성합니다. 감지된 플레이어를 확인하기 위해 `AIPatrolComponent:GetMemory()`를 사용합니다. ```lua Method: any OnBehave(number delta) { ---@type AIPatrolComponent local parentAI = self.ParentAI local transform = parentAI.Entity.TransformComponent local target = parent [chunk_id] | Guides:1155:8

[task] | distill [title] | 행동 트리 노드 만들기 [category] | Guides [rephrased] | **AIPatrolComponent**에 `CreateBehaviourTree()` 메서드를 추가하여 행동 트리를 구성하고, `OnBeginPlay()`에서 호출합니다. ### 1. `CreateBehaviourTree()` 구현 트리 노드를 생성하고 연결하여 루트 노드를 설정합니다. ```lua [server only] void CreateBehaviourTree() { local root = SelectorNode("Root") -- 공격 시퀀스 local seqAttack = SequenceN [original] | 1. **AIPatrolComponent**에 새로운 `CreateBehaviourTree()` 함수를 추가합니다. 트리 구조를 생성할 수 있도록 아래와 같이 작성합니다. ```lua [server only] void CreateBehaviourTree() { local root = SelectorNode("Root") local seqAttack = SequenceNode("Attack") local actAlertState = self:Create [chunk_id] | Guides:1155:10

[task] | knowledge_list [title] | 행동 트리 노드 만들기 [category] | Guides [rephrased] | ```lua -- 문서에 명시된 핵심 사실 목록 ``` 1. 플레이어 감지 상태 확인을 위해 `AIPatrolComponent` 인스턴스의 `GetMemory(key)` 메서드를 사용하며, 매개변수 `key`는 문자열(예: "PlayerInRange")이고, 감지된 대상이 없으면 `nil`을 반환한다. 2. 행동 트리 노드의 기본 동작 함수는 `OnBehave(number delta)`로 정의되며, 매개변수 `delta`는 숫자 타입이고, 반환 타입은 `any`이지만 실제로는 `BehaviourTreeStatus` 열거형 값(`F [original] | 범위 안에 플레이어가 들어왔을 때 플레이어를 추적할 수 있도록 아래와 같이 작성합니다. 감지된 플레이어를 확인하기 위해 `AIPatrolComponent:GetMemory()`를 사용합니다. ```lua Method: any OnBehave(number delta) { ---@type AIPatrolComponent local parentAI = self.ParentAI local transform = parentAI.Entity.TransformComponent local target = parent [chunk_id] | Guides:1155:8

[task] | extract_knowledge [title] | 행동 트리 노드 만들기 [category] | Guides [rephrased] | # 행동 트리 노드: 플레이어 감지 및 상태 관리 ## 개념 설명 행동 트리(Behavior Tree)는 엔티티의 의사결정 로직을 구성하는 시스템입니다. 이 절에서는 서버 사이드에서 플레이어를 감지하고(`DetectPlayer`), 해당 감지 결과를 컴포넌트 내부 메모리에 저장하는(`SetMemory`, `GetMemory`) 방법을 다룹니다. `OnUpdate` 루프를 통해 주기적으로 플레이어 거리를 계산하며, 가장 가까운 플레이어를 타겟으로 설정합니다. ## API 사용법 ### 1. 플레이어 감지 (`DetectPlaye [original] | ```lua [server only] void DetectPlayer() { local target = nil local minDist = self.DetectionRange local myPos = self.Entity.TransformComponent.WorldPosition:ToVector2() local users = _UserService.UserEntities for userId, user in pairs(users) d [chunk_id] | Guides:1155:6

[task] | extract_knowledge [title] | 행동 트리 노드 만들기 [category] | Guides [rephrased] | # 행동 트리 노드 만들기 ## 개념 설명 행동 트리(Behavior Tree)는 `AIComponent`가 동작하는 기반 구조입니다. 루트 노드(Root Node) 설정이 완료되면, 정의된 행동 트리에 따라 AI의 의사결정과 행동이 실행됩니다. 행동 트리는 복합 노드(Composite Node)와 액션 노드(Action Node)로 구성되며, `AttachChild` 메서드를 통해 노드 간 위계 관계를 설정합니다. ## API 사용법 행동 트리 구성에 사용되는 주요 API는 다음과 같습니다. 1. **복합 노드 생성** [original] | Root Node 설정까지 마치면, 만든 행동 트리를 기반으로 AIComponent가 동작합니다. ```lua [server only] void OnBeginPlay() { --CREATE COMPOSITE NODE local sequence = SequenceNode("Sequence") local sequenceA = SequenceNode("SequenceA") local sequenceB = SequenceNode("SequenceB") local sequenceC = SequenceNode("SequenceC" [chunk_id] | Guides:1155:3

[task] | wikipedia [title] | 행동 트리 노드 만들기 [category] | Guides [rephrased] | # 게임 로직 행동 트리 노드 만들기 게임 로직 시스템에서 행동 트리(Behaviour Tree)를 구성하기 위해 `AIPatrolComponent` 컴포넌트에 `CreateBehaviourTree()` 함수를 추가하고, 해당 함수를 초기화 과정에 통합하는 과정을 설명합니다. ## 행동 트리 구조 생성 `AIPatrolComponent`에 새로운 `CreateBehaviourTree()` 함수를 정의합니다. 이 함수는 서버에서만 실행되며, 선택자(Selector)와 순서(Sequence) 노드를 조합하여 AI의 공격 및 순찰 [original] | 1. **AIPatrolComponent**에 새로운 `CreateBehaviourTree()` 함수를 추가합니다. 트리 구조를 생성할 수 있도록 아래와 같이 작성합니다. ```lua [server only] void CreateBehaviourTree() { local root = SelectorNode("Root") local seqAttack = SequenceNode("Attack") local actAlertState = self:Create [chunk_id] | Guides:1155:10

[task] | wikipedia [title] | 행동 트리 노드 만들기 [category] | Guides [rephrased] | # 행동 트리 노드 만들기 행동 트리(Behaviour Tree)는 AI의 의사결정 구조를 정의하는 데 사용됩니다. 본 섹션에서는 플레이어 감지 시 추적, 무작위 방향 이동, 정지 및 대기 기능을 수행하는 기본 동작 액션(Action) 노드를 구현하는 방법을 설명합니다. 각 노드는 `self.ParentAI`를 통해 상위 AI 컴포넌트와 상호작용하며, `BehaviourTreeStatus` 열거형의 값을 반환하여 행동 트리의 흐름을 제어합니다. ## 플레이어 추적 (Player Tracking) 범위 안에 플레이어가 진입했을 [original] | 범위 안에 플레이어가 들어왔을 때 플레이어를 추적할 수 있도록 아래와 같이 작성합니다. 감지된 플레이어를 확인하기 위해 `AIPatrolComponent:GetMemory()`를 사용합니다. ```lua Method: any OnBehave(number delta) { ---@type AIPatrolComponent local parentAI = self.ParentAI local transform = parentAI.Entity.TransformComponent local target = parent [chunk_id] | Guides:1155:8

[task] | distill [title] | IP의 구체적인 활용 가능 범위 [category] | Guides [rephrased] | # 바람의나라 IP 사용 가이드 **핵심 원칙**: 바람의나라 IP를 활용한 **'2D RPG 콘텐츠'**는 넥슨코리아 퍼블리싱 게임과 동일/유사한 것으로 간주되어 제한됩니다. **허용 범위**: **2003. 06. 03. ver 5.50 환상의섬 업데이트(한국 시점 기준)** 까지의 IP만 활용 시 CGC 제작 및 게시가 허용됩니다. ### 예외 및 세부 적용 기준 RPG 장르 외의 콘텐츠 또는 특정 조건 하에 기준 시점 이후 리소스 사용이 가능합니다. * **제한 대상 아님 (허용)**: 1. **비-RPG [original] | # 바람의나라 바람의나라 IP를 활용한 '2D RPG 콘텐츠'는 원칙적으로 ㈜넥슨코리아가 퍼블리싱 하고 있는 바람의나라 게임과 동일하거나 상당히 높은 정도로 유사한 것으로 간주합니다. 다만, 위의 '2D RPG 콘텐츠'라고 하더라도 '2003. 06. 03. ver 5.50 환상의섬 업데이트(한국 시점 기준) ' 까지의 IP만을 활용하는 경우에는 CGC 제작 및 게시가 허용됩니다. 1. **한국 시점 기준, '바람의나라 2003년 6월 3일 환상의섬 업데이트' 이후 모든 리소스 사용이 불가한가요?** RPG 장르의 콘텐츠를 [chunk_id] | Guides:1161:1

[task] | wikipedia [title] | IP의 구체적인 활용 가능 범위 [category] | Guides [rephrased] | # 바람의나라 IP 사용 가이드 바람의나라 지식재산권(IP)을 활용하여 제작된 '2D RPG 콘텐츠'는, 원칙적으로 ㈜넥슨코리아가 퍼블리싱하는 바람의나라 게임과 동일하거나 상당히 높은 수준의 유사성을 가진 것으로 간주됩니다. 이러한 제한에도 불구하고, 해당 '2D RPG 콘텐츠'가 한국 시점 기준 2003년 6월 3일 버전 5.50 '환상의섬 업데이트' 시점까지의 IP만을 활용하는 경우에는 콘텐츠 크리에이터(CGC)의 제작 및 게시가 허용됩니다. RPG 장르의 콘텐츠를 제작하거나 출시할 경우,上述 가이드에서 명시된 제한적인 범위 [original] | # 바람의나라 바람의나라 IP를 활용한 '2D RPG 콘텐츠'는 원칙적으로 ㈜넥슨코리아가 퍼블리싱 하고 있는 바람의나라 게임과 동일하거나 상당히 높은 정도로 유사한 것으로 간주합니다. 다만, 위의 '2D RPG 콘텐츠'라고 하더라도 '2003. 06. 03. ver 5.50 환상의섬 업데이트(한국 시점 기준) ' 까지의 IP만을 활용하는 경우에는 CGC 제작 및 게시가 허용됩니다. 1. **한국 시점 기준, '바람의나라 2003년 6월 3일 환상의섬 업데이트' 이후 모든 리소스 사용이 불가한가요?** RPG 장르의 콘텐츠를 [chunk_id] | Guides:1161:1

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