Unity - State Machine) 복습을 위해 작성하는 글 2023-05-05

rizz·2023년 5월 5일
0

Unity

목록 보기
3/4

📒 갈무리 - State Machine

📌 State Machine

- 여러 가지 상태(State)가 있고 각 상태에는 동작이 있다.

- 각 상태 사이에는 조건(Transition)이 있고 그 조건에 만족하면 그 상태가 된다.

- 조건은 하나인 것이 유지보수에 유리하다.

- 캐릭터나 몬스터 AI 등에 사용하면 굉장히 편리하게 만들 수 있다.

 

📌 State Machine EX


📌 FSM(Finite State Machine) : 유한 상태 머신

- 주어진 모든 시간에서 처해 있을 수 있는 유한개의 상태를 가지고 주어지는 입력에 따라 어떤 상태에서 다른 상태로 전환하거나 이벤트를 발생시키게 하는 장치 또는 그런 장치를 나타낸 모델이다.

장점

- AI 개념을 프로그래머 외에 기획자 또는 제 3자가 이해하기 쉽게 설계할 수 있다.

단점

- 확장이 힘들다.

 

📌 State Class

- Behavior를 상속받은 State Class는 현재 State를 업데이트 시켜주는 역할을 한다.

- 입력값 혹은 이벤트가 발생했는지 체크

- StateMachine과 통신하며 조건에 만족했는지 체크

 

📌 State Machine Flow

Entry(진입) -> UpdateLoop(동작) -> Exit(빠져나가기)

```cs
// Unity C# Script

public virtual void Enter()
{
	// 진입
}

public virtual void HandleInput()
{
	// 입력받았을 때
	// 조건 체크
}

public virtual void LogicUpdate()
{
	// 로직 상 업데이트
	// 보통 Update에서 사용
}

public virtual void PhysicsUpdate()
{
	// 피직스 업데이트
	// 보통 Fixed Update에서 사용 (기기 성능에 구애받지 않음)
}

public virtual void Exit()
{
	// 빠져나갈 때
}

사용 예시

// 시작할 때 가져야 할 상태를 받음
public void Initialize(State startingState)
{
	CurrentState = startingState; // 받은 상태로 시작
	startingState.Enter(); // 시작 상태의 엔터 호출
}

public void ChangeState(State newState) // 새로운 상태를 받음
{
	CurrentState.Exit(); // 기존 상태에서 빠져나옴
	
	CurrentState = newState; // 새로운 상태로 초기화
	newState.Enter(); // 새로운 상태의 엔터 호출
}
profile
복습하기 위해 쓰는 글

0개의 댓글