일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 스파르타내일배움캠프
- FSM
- unity
- 프로그래머스
- 인터페이스
- LINQ
- 스택
- 자료구조
- 직렬화
- 효과음
- BGM
- 메서드
- ObjectPool
- InputManager
- 람다식
- invokec#events
- delegate
- c#
- skybox
- 코루틴
- inputsystem
- soundmanager
- UI
- Generic
- 장애물달리기
- 배열
- 유니티
- 비선형자료구조
- 유한상태머신
- script
- Today
- Total
Unity 개발일지
[Unity] Behaviour Tree 이론편 본문
[Behaviour Tree란?]
간단히 말하면 Behaviour(행동)을 Tree 구조로 만들어 AI의 행동을 제어하는 것이다. BT라고 줄여서 쓰기도 한다.
Tree는 Node를 저장하는 하나의 컨테이너로
Node는 int, float, string, char 등의 기본적인 타입을 저장하는 공간이라고 생각하는 경우가 많은데,
Node는 사용자가 정의할 수 있는, 혹은 미리 정의된 모든 타입이 저장될 수 있다.
즉, Behaviour Tree의 Node 내부에 저장되는 것은 행동이라 말하는 코드조각들을 저장하는 것이다.
<탐색 순서>
Behaviour Tree에는 Tree의 Root역할을 하는 Task가 존재하며, 깊이 우선 순위(DFS)로 작업을 실행
작업의 순서는 왼쪽에서 시작하여 -> 오른쪽 순서로 진행
<구성 요소>
1. 루트(root) - 현재 상태를 정해주는 역할
2. 흐름 제어 노드 (flow-control node)
자식 노드들을 왼쪽에서 오른쪽 순으로 진행
먼저 진행해야 할 자식 노드가 왼쪽에 위치해야 한다.
자식 노드들 중에서 실패(Failure)한 노드가 있을 때까지 진행
여러 행동을 순서대로 진행해야 할 때 사용하기 좋다.
- Sequence node : and 역할을 하는 노드
- Selector node : or 역할을 하는 노드
3. 리프 노드(leaf node, action node 라고도 함) : 실제 행동이 들어가 있는 노드
루트에서 여러 흐름제어 노드를 타고 내려가 최종적으로 리프 노드에 도달하는 형태
때문에 트리의 리프 노드는 항상 Action을 담고 있어야 하고 루트와 리프를 제외하고는 전부 흐름 제어 노드들이 차지한다.
<노드 상태>
각 노드는 3가지 상태중 하나를 가질 수 있으며 어떻게 구성했냐에 따라 다르겠지만 대부분 아래 3가지로 구분한다.
- Success
- Failure
- Running
<다양한 AI 행동패턴 설계방법 참고>
[기타 참고]
'Unity 개발' 카테고리의 다른 글
[Unity] 네트워크 이론 (0) | 2024.07.24 |
---|---|
[Unity] 멀티스레드(Thread) & GPU (1) | 2024.07.23 |
[Unity] Json과 직렬화 실습하기 (0) | 2024.07.22 |
[Unity] 최적화 실습하기 (1) | 2024.07.17 |
[Unity] 코루틴(Coroutine) 실습하기 (수정필요) (1) | 2024.07.16 |