상태 그래프를 이용한 상태 전환 작업

상태(States)는 오브젝트가 특정 상태에 있을 때 어떻게 행동해야 하는지를 규정하는 것이다. 상태(State)는 주로 인공지능(AI) 행동, 씬이나 레벨 구조 또는 상태 전환을 위해 요구되는 씬의 어떤 측면에 사용된다.

 

예를 들어, 적이면서 비 비플레이어 캐릭터의 상태 머신(state machine)은 "순찰(Patrolling)", "추적(Chasing)", "공격(Attacking)", "도피(Fleeing)" 네 개의 상태를 가질 수 있고, 문의 상태 기계은 "잠김(Locked)", "잠금 해제(Unlocked)", "열림(Open)" 세 개의 상태를 가질 수 있다.

 

그래프에 추가할 수 있는 상태 타입은 스크립트 상태(Script State)와 수퍼 상태(Super State) 두 가지가 있다. 스크립트 상태(Script State)는 중첩된(nested) 스크립트 그래프(script graph)로 구성되며, 수퍼 상태(Super State)에는 중첩된(nested) 상태 그래프(state graph)로 구성된다.

 

(역자주-이후 부터는 상태라는 말 대신 State(스테이트)라고 사용하겠다. 텍스트가 번역된 것이 아니기 때문에 스테이트를 머릿속에서 상태라고 번역해 가며 읽지 않기 때문에 스테이트라고 바로 읽는 것이 더 자연스럽다.)

 

참고: State는 트랜지션(Transitions)을 통해 다른 State로 연결(전환)된다.

 

Script State와 Super State 두 가지 모두 "nesters" 형태인데 이는 머신(Machine)과 똑같은 원리로 동작한다는 것을 의미한다. 즉, 해당 하위 그래프(Sub-graph)는 내장시키는 임배드(embed)로 작업하거나 참조형으로 연결시키는 그래프(graph)로 작업할 수 있다. Super State의 인스펙터(Inspector)도 같은 방식으로 보이고 동작한다.



State Machine(스테이트 머신)


State 그래프는 State Machine에 저장된다. Add Component를 하고 State Machine을 선택하면 State Machine이 생성된다. 그래프를 편집하려면 State Machine을 저장해야한다.


State Machine
State Machine


State(상태) 생성하기


State를 생성하는 메뉴를 표시하려면 State Graph의 빈 곳에 마우스 오른쪽 버튼을 클릭한다.


Create New State
Create New State

Script Graph의 유닛(Unit)들 처럼 새로운 State가 생성되는데 입력 값이 없기 때문에 흐리게 표시되어져 있다. 새로운 State가 흐리게 표시되지 않게 하려면 도구 모음(toolbar)에서 Dim을 비활성화하면 된다.



Start State(s)


하나 또는 두 개 이상의 Start State를 만들어서 그래프가 시작 되는 싯점의 상태를 규정할 수 있다. 이렇게 하려면 State 유닛 위에 마우스 오른쪽 버튼을 누르고 Toggle Start을 선택한다. Start State 유닛의 상단이 녹색으로 강조 표시된다.


Toggle Start
Toggle Start

일반적인 유한 상태 기계(FSM) 도구와 달리 비주얼 스크립팅은 다중 Start State를 지원한다. 이는 같은 그래프에서 병렬적으로 FSM을 실행하거나, 어떤 포인트에서 병렬적인 상태진입이 가능하다는 것이다. 하지만 대부분은 한 개의 Start State면 충분하다.



Any State


현재 어떤 상태에 놓여 있는 것과는 상관없이 무조건 다른 상태로 전환을 하려면 Any State를 생성한다.

참고: 이 상태는 어떤 트랜지션(transition)을 받을 수 없으며, 어떤 실행도 할 수 없다.


Any State
Any State


State 제목과 요약 작성하기


State Title
State Title & Summary


State의 제일 상단에 헤더(header)가 있다. 이는 그래프의 제목(Title)과 요약(Summary)을 표시하며 기능에는 영향을 미치지 않는다. 즉, 헤더는 State를 구분할 수 있는 제목이나 간략 설명을 작성할 수 있는 곳이다. Script Graph 아이콘은 Script State 아이콘과 동일하게 보인다.

 

State 인스펙터(Inspector)는 머신(Machine)과 동일한 형태와 방식으로 동작한다. State Graph의 내용을 확인하거나 편집하기 위해서는 Edit Graph 버튼을 클릭하거나 State 노드를 더블클릭하면 된다.



Script State


Script State의 본체는 중첩된 스크립트 그래프내부에서 사용 중인 모든 Event 목록을 표시한다. 디폴트로, 새로운 Script State를 생성하면 On Enter State, Update 그리고 On Exit State Event가 자동 생성된다.

  • On Enter State는 상위(부모) 상태에 전환이 발생했을 때 즉 그 상태가 시작될 때 호출된다.
  • On Exit State는 다른 상태로 전환되어 일어날 때, 즉 그 상태가 종료될 때 호출된다.
  • Update는 그 상태가 활성화되어 있을 때 매 프레임마다 호출된다.

스크립트 그래프에 추가된 이벤트는 상위 State가 활성 상태인 경우에만 수신할 수 있다.

 

예: 왼쪽 상단에 있는 탐색바(breadcrumbs)는 현재의 뷰가 게임 오브젝트의 State 그래프 내부에 있는 Start State에 있다는 것을 표시하고 있다.


Breadcrumbs
Breadcrumbs

언제든지 상위 그래프로 돌아가려면 도구 모음의 해당 부분을 클릭하면 된다. 노드를 선택하지 않은 경우 그래프 인스펙터 상단에서 현재 State의 제목 및 요약을 작성할 수 있다.


Script Graph Title & Summary
Script Graph Title & Summary

수퍼 유닛(Super Unit)을 포함하여 사용할 수 있는 유닛에는 제한이 없다.



Super State


Super State는 Script State처럼 생성되고 편집된다. 가장 큰 차이점은 그래프가 Script Graph가 아니라 다른 State Graph라는 것이다. Super State에 진입하게 되면, 그 Super State 내부에 있는 그래프들의 모든 Start State가 발동된다. Super State가 종료되면 그 Super State 내에 있는 모든 그래프의 상태나 전환이 비활성화 된다.



Transitions(전환)


트랜지션은 활성 상태를 전환시키는 상태들 간의 연결이다.


Transitions
Transitions



State Units


State Unit은 Super Unit과 매우 유사하다. 하지만, Script Graph가 아닌 State Graph에서 이용된다. State Unit은 Script Graph 내부에서 State Graph를 감사는 역할을 한다.


 

<원문>

https://docs.unity3d.com/Packages/com.unity.visualscripting@1.7/manual/vs-state.html

댓글

이 블로그의 인기 게시물

EMACS - 파일 열기, 저장, 도움말

EMACS - 검색 및 바꾸기

EMACS, CLISP, SLIME 설치