게임 AI 모듈 디자인 - 행동 트 리
5037 단어 유한 상태 기와 행동 트 리
게임 AI 모듈 디자인
OCT 10TH, 2013 | COMMENTS
개술
현재 새로운 괴물 AI 수요 에 맞 춰 괴물 AI 스 크 립 트 작성 을 간소화 하고, 괴물 AI 운영 효율 성 을 높이 며, AI 프레임 구 조 를 추상 화하 고 프레임 의 유연성 및 확장 성 을 강화 하 는 동시에 설계 자가 괴물 AI 를 빠르게 개발 할 수 있 도록 한다.
수요
이전의 몬스터 AI 에 비해 현재 새로운 몬스터 AI 는 상대 적 으로 간단 하 며 주로 이동, 공격 등 기본 적 인 행위 로 구성 된다.
AI 구현 방식
게임 에서 몬스터 AI 의 기 존 디자인 방법 은 다음 과 같다.
직접 인 코딩 하거나 모든 특정한 괴물 에 게 특정한 스 크 립 트 를 걸 어 줍 니 다. 현재 우리 게임 의 상당 부분 은 이렇게 이 루어 집 니 다.
유한 상태 기 (FSM), 몬스터 는 여러 상태 에서 게임 세계 에서 발생 하 는 특정한 사건 에 따라 특정한 게임 행 위 를 하 는 동시에 몬스터 는 새로운 상태 에 들어간다.
행동 트 리 (Behavior Tree), 몬스터 AI 는 여러 가지 유형의 노드 로 구 성 된 트 리 구조 로 각 노드 는 선행 조건 을 포함 하고 있 으 며, 현재 설정 조건 이 충족 되면 이 노드 를 실행 합 니 다.
각 몬스터 에 게 직접 스 크 립 트 를 걸 어 주 는 형식 은 AI 개발 자 에 게 작업량 이 번 거 롭 고 반복 적 인 노동 을 초래 하기 쉬 우 므 로 제 한 된 상태 기기 와 행위 트 리 를 논술 한다.
유한 상태 기
유한 상태 기 (finite - state machine, 줄 임 말: FSM) 는 유한 상태 자동 동기 라 고도 부 르 는데 상태 기 라 고 부 르 며 유한 한 상태 와 이런 상태 에서 의 전이 와 동작 등 행 위 를 나타 내 는 수학 모델 로 유한 상태 기 는 하나의 관계 식 으로 설명 할 수 있다.
State(S) x Event(E) -> Action(A), State(NS)
이러한 관 계 는 다음 과 같이 해석 된다. 만약 에 우리 가 상태 S 에 있 고 사건 E 가 발생 하면 우 리 는 동작 A 를 실행 하고 상 태 를 NS 로 전환 해 야 한다.
현재 게임 에서 몬스터 AI 는 대부분 FSM 을 바탕 으로 이 루어 집 니 다. 예 를 들 어 작은 몬스터 를 순찰 하 는 AI 는 다음 과 같이 표시 할 수 있 습 니 다.
행동 트 리
행동 트 리 (행동 트 리, see) 말 그대로 몇 개의 키 노드 로 구 성 된 나무 구조 입 니 다. 다음 그림 과 같 습 니 다.
그 중에서 잎 노드 는 행위 노드 이 고 행위 노드 는 게임 과 관련 된 것 이다. 서로 다른 게임 은 서로 다른 행위 노드 를 정의 할 수 있 고 행위 노드 는 보통 두 가지 허용 상태 로 나 뉜 다.
실행 중 (Running) 이 행 위 는 아직 처리 중 입 니 다.
완료 (Finished), 이 행위 처리 완료;
나머지 노드 는 통제 노드 이다. 우 리 는 행위 트 리 에 다양한 통제 노드 (이것 도 행위 트 리 가 재 미 있 는 곳 중 하나) 를 정의 할 수 있다. 일반적으로 자주 사용 하 는 통제 노드 는 다음 과 같은 세 가지 가 있다.
(Selector) 를 선택 하고 하위 노드 의 특정한 실행 을 선택 하 십시오.
시퀀스 (Sequence) 는 모든 하위 노드 를 순서대로 실행 합 니 다. 즉, 현재 의 반환 '완료' 상태 에서 먼저 하위 노드 를 실행 합 니 다.
병렬 (Parallel), 모든 하위 노드 를 한 번 씩 실행 합 니 다.
AI 가 결정 할 때 나무의 뿌리 노드 에서 위 에서 아래로 (depth - first search), 일부 조건 을 통 해 이 나 무 를 검색 하여 필요 한 행동 (잎 노드) 을 최종 적 으로 확인 하고 해당 동작 을 수행 합 니 다.
행동 트 리 구현
Task = {
update = function(args) end,
on_enter = function(args) end,
on_exit = function(args) end,
}
BehaviorNode = {
nodes = {},
status = 0,
task = nil,
tick = function(args)
return task:update(args)
end,
}
BehaviorTree = {
object = nil,
root = nil,
tick = function(args)
if root then
root:tick(args)
end
end,
}
이전 순찰 몬스터 AI 용 행동 트 리 는 다음 과 같이 표시 할 수 있 습 니 다.
어떻게 하위 노드 를 선택 합 니까?
어떻게 하위 노드 에서 선택 합 니까?선택의 근 거 는 무엇 입 니까?여기 서 다른 개념 을 도입 해 야 한다. 일반적으로 선행 조건 이나 전제 (Precondition) 라 고 부른다. 모든 노드 는 행위 노드 든 통제 노드 든 하나의 전제 부분 을 포함한다. 다음 과 같다.
-- lua code
local behavior_node = {
precondition = function() return true end,
action = function()
-- do something
end,
}
위 에서 아래로 행위 트 리 를 검색 할 때 각 하위 노드 의 전 제 를 차례대로 테스트 하고 만족 하면 이 하위 노드 에 들 어가 다음 노드 를 계속 선택 하고 최종 적 으로 특정한 행위 노드 로 돌아 가기 때문에 현재 행위 노드 의 전 제 는 다음 과 같다.
Precondition[CurrNode] = Precondition[CurrNode.Parent] and Precondition[CurrNode.Parent.Parent] and ... and Precondition[RootNode]
행위 트 리 는 행위 노드, 통제 노드, 그리고 각 노드 의 전 제 를 통 해 전체 AI 의 의사 결정 논 리 를 묘사 한 것 으로 매번 의 Tick 에 대해 다음 과 같은 절차 로 설명 할 수 있다.
action = root.FindNextAction(input)
if action is not empty then
action.Execute(request, input) --request
else
print "no action is available"
end
유한 상태 기기 에 비해 행위 트 리 구 조 는 비교적 간단 하 다. 그리고 개념 적 으로 볼 때 행위 트 리 는 비교적 간단 하지만 AI 프로그래머 에 게 는 흡인력 이 있다. 그의 일부 특성, 예 를 들 어 시각 화 된 의사 결정 논리, 재 활용 가능 한 제어 노드, 논리 와 실현 의 낮은 결합 등 은 전통 적 인 상태 기기 에 비해모두 우리 가 신속 하고 편리 하 게 우리 의 행동 결정 을 조직 하 는 데 큰 도움 을 줄 수 있다.행동 트 리 의 시각 화 된 의사 결정 논리의 특성 에 따라 유사 한 흐름 도 를 보 내 는 편집 기 를 열 수 있 으 며, 끌 어 당 기 는 방식 으로 괴물 AI 논 리 를 맞 추고, 각 노드 의 전제 적 발걸음 과 행동 노드 의 게임 논 리 를 작성 하 는 동시에 lua 스 크 립 트 를 내 보 낼 수 있 습 니 다.
행동 트 리 에 대한 자세 한 설명 은 여기 있 습 니 다.
현재 행동 트 리 를 사용 하 는 게임
Halo 3 & ODST
League of Legends 슬라이드 참조 AI 모듈 디자인
AI 모듈 은 블랙 박스 로 서 특정한 입력 에 의존 하여 의사 결정 을 하고 특정한 요 구 를 출력 한다. 전체적인 구 조 는 다음 과 같다.
INPUT, AI 입력 데 이 터 는 게임 에서 발생 하 는 각종 이벤트 로 구성 되 는데 주로 다음 과 같다.
충돌 사건 스 킬 이벤트
AI Module, 행동 트 리 로 구 성 된 AI 의사 결정 모듈;
AI 출력, AI 의사 결정 결 과 는 주로 다음 과 같다.
이동: 이동 모듈 을 목표 지점 으로 이동 요청 스 킬 모듈: 피 조물 통과: useskill (args) 기술 직접 사용
Lua 스 크 립 트 통합
행위 트 리 각 노드 의 전제 (Precondition), 진입, 종료, 동작 등 은 게임 과 관련 된 것 으로 게임 논리 와 밀접 한 관 계 를 가 진 부분 을 lua 스 크 립 트 로 실현 하고 모든 행위 트 리 노드 는 다음 과 같이 표시 합 니 다.
follow_base = {
precondition = function()
-- check condition
end,
behavior = function()
-- do something
end,
on_enter = function()
-- do something
end,
on_exit = function()
-- do something
end,
}
행동 트 리 편집기
다음 과 같은 시각 화 된 AI 행동 트 리 편집기 구현:
From “Three Ways of Cultivating Game AI”
A plugin for Unity Editor
CryENGINE 3