레플리
글 수 57

FSM, 몬스터 인공지능의 구현

조회 수 2704 추천 수 0 2016.03.19 03:45:15


K-1.jpg

 

소스코드 및 실행 : 첨부파일

 

 

 

FSM(Finite State Machine) - 게임 인공지능의 전통적인 방법

 

게임에서 적들의 움직임을 인공지능적으로 구현하기 위해 기존의 게임들에서 자주 사용되던 방법중 하나가 바로 FSM, 즉유한상태기계이다. FSM은 오래전부터 다양한 방법으로 널리 쓰여온 컴퓨터공학 / 수학적 개념인데, 용어 뜻 그대로 유한한 개수의 상태들로 구성된 하나의 간단한 기계를 말한다. 여기서 하나의 상태(State)라는 것은 그냥 하나의 조건을 뜻한다고 생각하면 된다.

 

FSM은 크게 현재상태, 입력, 출력상태, 전이함수의 4가지 요소로 나눌 수 있다. 현재상태는 말그대로 현재 FSM의 상태를 말하고, 입력은 FSM에 들어온 입력정보, 출력상태는 다음 단계의 상태, 전이함수는 입력정보와 현재상태를 기반으로 출력상태를 결정하는 함수라 할 수 있다.

 

요약하자면, FSM이라는 것은 유한한 개수의 상태들을 가진 하나의 기계이고, 그 상태들 중 하나가 현재 상태인 것이다. FSM은 입력을 받고 어떠한 상태전이함수에 기반해서 현재상태로부터 출력상태로의 상태전이를 일으킨다. 그리고 출력상태는 새로운 현재 상태가 된다. 컴퓨터 역시 크게 보면 FSM의 한 예라 할 수 있다.

 

 

 

FSM을 사용한 몬스터의 행동 인공지능

 

이런한 FSM은 게임내에서 인공지능을 구현하기 위해 다양하게 사용될 수 있는데, 그 중 대표적인 사용예가 적 몬스터의 행동을 결정하는 인공지능의 구현이라 할 수 있다. FSM의 각각의 상태를 몬스터의 감정이라서 하면, 이는 현재 상태와 FSM으로의 입력에 따라 변하며, 어떤 식으로 변할 것인지는 상태전이 규칙들에 의해 결정된다. 몬스터의 감정에 기반해서 서로 다른 행동을 수행하는 코드를 만들면 몬스터가 마치 감정을 가진 실제 괴물처럼 움직이게 될 것이다.

 

복잡한 캐릭터라면 훨씬 더 많은 상태들과 입력들, 그리고 상태전이 규칙들을 가질 것이다. 어떤 상태들과 입력들을 구분할 것이며 그것들이 어떤 방식으로 전이될 것인지를 결정하는 것이 바로 FSM에 기반한 인공지능을 만드는 기본적인 과정이다.

 

 

 

실제 FSM의 게임 인공지능 구현, FSM Monster Hunter

 

위의 방법을 사용해서 간단한 게임을 만들어 보았다. Java Applet을 기반으로 작성하였고, 게임의 목적은 플레이어를 조정해서 몬스터를 물리치는 것이다. 이때 몬스터의 움직임을 몬스터의 현재상태에 따라 결정된다. 몬스터의 상태와 그에따른 행동은 다음과 같다

 

     REST(안정)   - 랜덤하게 움직이며 공격을 하지 않는다
     ANGRY(화남) - 이동속도가 두배로 빨라진다. 나머진 REST와 동일
     RAGE(분노)   - 플레이어가 주변에 있으면 공격수행. 없다면 플레이어를 향해 이동. 이동속도는 두배
 

현재상황, 즉 FSM의 입력은 다음과 같다

 

     플레이어 접근     - 플레이어가 몬스터 근처에 있음
     플레이어 멀어짐   - 플레이어가 몬스터에게서 떨어져 있음
     플레이어 공격      - 플레이어가 몬스터에게 공격
 

이를 이용해 상태전이과정을 도표로 그리면 다음과 같다

 

fsmgraph.jpg

 

 

 

[참고자료]

    - Game Programming Gems 1권, p.319 ~ p.332

 

 

 

< 인공지능 개발자 모임 >

- 페이스북 그룹에 가입하시면 인공지능에 대한 최신 정보를 쉽게 받으실 수 있습니다.

https://www.facebook.com/groups/AIDevKr/

 

List of Articles
제목 글쓴이 날짜sort 조회 수
삼성SDS의 SAIDA팀이 만든 스타크래프트 인공지능 깊은바다 2018-12-07 2009
A* 알고리즘 데모 file 깊은바다 2018-08-18 1886
FPS 전투가 가능한 인공지능 [5] 사지방컴 2018-05-13 1842
블레이드 앤 소울과 게임 AI [1] 깊은바다 2018-03-14 1457
인공지능과 게임 file 깊은바다 2018-03-02 1550
FSM를 활용한 FPS게임 [2] 사지방컴 2017-10-02 2845
넷마블 AI Lab 인터뷰 깊은바다 2017-09-29 1081
강화학습 기반 NPC AI 깊은바다 2017-09-11 1205
온라인 게임 속 로봇 경제와 내몰리는 인간 [1] 깊은바다 2017-05-16 606
딥러닝으로 게임 콘텐츠 제작하기 file 깊은바다 2017-05-11 1891
유용한 게임 AI 기법 정리 깊은바다 2017-05-04 8420
다가오는 4차 산업혁명 시대의 게임개발 깊은바다 2017-04-27 532
초보자를 위한 A* 알고리즘 file 깊은바다 2017-04-16 1562
딥러닝으로 스타크래프트 유닛 컨트롤 학습 깊은바다 2017-04-14 1354
FSM을 사용한 인공지능 구현 예제 file [1] 깊은바다 2017-04-13 7785