GOAP

JJW·2025년 5월 27일
0

Unity

목록 보기
31/34

오늘은 GOAP에 대해 알아보겠습니다.


GOAP란 무엇인가??

  • 에이전트가 여러 가능한 행동중에서 주어진 목표를 달성하기 위해 어떤 순서로 무엇을 해야할까? 라는 경로 찾기입니다.
  • FSM의 수많은 상태 전이를 일일이 정의하거나 행위 트리에 복잡한 조건을 달지 않고도 액션과 목표를 선언해두면 런타임에 플래너가 최적의 순서를 짜줍니다.

GOAP의 핵심 구성요소

World State

  • 키 - 값 쌍으로 이루어진 현재 세계의 상태 집합입니다.
    집안일을 예시로들면 지금 집안이 어떤 상태인지 보여주는 리스트라고 생각하면 됩니다.
    ex) 설거지가 안된 그릇 3개, 세탁이 필요한 옷, 바닥이 더러움

Goal State

  • 에이전트가 바라는 최종 상태입니다.
    위와 같이 예시를 들면 오늘 저녁까지 집을 깨끗하게 만들겠다 라는 바람입니다.

Action

  • Preconditions : 실행 전 세계 상태에 반드시 만족해야 할 조건
  • Effects : 실행 후 세계 상태에 적용될 변화
  • Cost : 이 행동이 얼마나 비싼가를 수치화한 값
    위와 같이 예시를 들면
    Preconditions -> 세탁기 전원이 켜져있어야 세탁을 돌릴 수 있다.
    Effects -> 설거지 -> 그릇 3개가 깨끗해진다.
    Cost -> 손이 얼마나 많이 가는지, 시간이 얼마나 가는지를 정량화한 값입니다.

Planner

  • 지금 상태와 원하는 목표를 보고 가능한 행동을 조합하여 가장 적은 노력으로 목표를 달성할 수 있는 순서를 계산해줍니다.
    위와 같이 예시를 들면 설거지 -> 빨래 -> 마르는 동안 바닥 청소등에 순서입니다.

GOAP의 장점

  1. 모듈성 & 재사용성
    • 각 액션은 독립적인 모듈이며 새로운 행동 추가 및 삭제가 자유롭고 여러 에이전트 간에 공유가 가능합니다.
  2. 목표 중심 설계
    • 액션이 아닌 목표 설계에 집중
  3. 유연한 대응
    • 환경 변화에 따라 자동으로 재계획
  4. 최적화된 행동 순서
    • 비용 기반 A* 탐색
  5. 복잡도 제어
    • 대규모 FSM에서 파생되는 폭발하는 상태 전이 문제 해소

FSM과의 차이점

구분FSMGOAP
아이디어지금 상태 -> 다음 상태로 어떻게 넘어갈까에 대한 내용을 미리 그려놓음무슨 목표를 달성할까만 정해놓고 런타임에 자동으로 행동 순서를 찾음
설계 방식모든 상태와 전이를 일일이 손으로 맵핑상태나 전이를 사용하지 않고 행동을 선언만 하면 플래너가 조합해서 계획을 만듬
유연성상태가 늘어나면 전이도 폭발적으로 늘어남행동만 잘 정의해두면 새로운 목표나 행동 추가 시 코드 변경이 적음
유지보수성상태별로 수십~수백개의 전이를 다루어야 할 수 있음독립적인 행동 모듈을 관리하므로 하나 고치면 전체에 적용됨
동적대응예외 상황마다 별도 분기 코드를 넣어야 함환경 벽화나 실패가 생기면 플래너가 자동으로 재계획
예시지하철 노선도GPS

테스트 영상

Github Code

GOAP


FSM말고 GOAP는 처음 접해보았습니다.
구현하면서 든 생각은 FSM보다 좀 더 유연하게 동작하고 여러 예외사항에도 플래너가 계획해주니 좋다는 생각이 들었습니다. 방치형 게임에 적용해보면 좋을 것 같다는 생각이 들었습니다.

profile
Unity 게임 개발자를 준비하는 취업준비생입니다..

0개의 댓글