개발일지
article thumbnail

#FSM

FSM(Finite State Machine)은 유한 상태 기계라고도 불리며, 객체의 동작을 상태(State)로 분류하고, 이러한 상태들 간의 전이(Transition)를 규칙(Condition)에 따라 처리하는 모델링 기법입니다.

FSM은 기본적으로 다음과 같이 구성됩니다.

 

State 객체의 동작을 상태(State)로 분류합니다. 예를 들어, 캐릭터의 상태를 "Idle", "Run", "Jump"와 같이 나눌 수 있습니다.

 

Transition 상태(State)와 상태(State) 간의 전이(Transition)를 정의합니다. 예를 들어, 캐릭터가 "Idle" 상태에서 "Run" 상태로 전이될 때, "Run" 상태로 전이될 때의 조건(Condition)을 지정합니다.

 

Action 상태(State)에서 실행될 동작(Action)을 정의합니다. 예를 들어, 캐릭터가 "Run" 상태에서 움직이는 동작(Action)을 구현할 수 있습니다.

 

FSM을 사용하면 객체의 동작을 상태(State)와 전이(Transition)로 나누어 구성하고, 이를 통해 객체의 동작을 관리할 수 있습니다. FSM은 게임 개발에서 AI, NPC, 플레이어 등 다양한 캐릭터의 동작을 구현하는 데 사용됩니다.


Unity에서 FSM(Finite State Machine)을 구현할 때 다양한 방법이 있지만 이번에는 StageMachineBehaviour을 사용하여 만들게습니다. StageMachineBehaviour은 Animator에서 제공하는 기능으로, 상태(State)와 전이(Transition)를 이용하여 FSM을 구현할 수 있습니다.

 

#Animator Controller 생성

우선 Animator Controller을 생성하고 아래와 같이 State를 추가합니다.

이 Animtor Controller의 구조는 아래와 같습니다.

 

#StageMachineBehaviour 추가

이와 같은 방법으로 StageMachineBehaviour 스크립트를 추가합니다.

using UnityEngine;

public class Enemy_Idle : StateMachineBehaviour
{
    // OnStateEnter is called when a transition starts and the state machine starts to evaluate this state
    //override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
    //{
    //    
    //}

    // OnStateUpdate is called on each Update frame between OnStateEnter and OnStateExit callbacks
    //override public void OnStateUpdate(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
    //{
    //    
    //}

    // OnStateExit is called when a transition ends and the state machine finishes evaluating this state
    //override public void OnStateExit(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
    //{
    //    
    //}

    // OnStateMove is called right after Animator.OnAnimatorMove()
    //override public void OnStateMove(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
    //{
    //    // Implement code that processes and affects root motion
    //}

    // OnStateIK is called right after Animator.OnAnimatorIK()
    //override public void OnStateIK(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
    //{
    //    // Implement code that sets up animation IK (inverse kinematics)
    //}
}

코드를 보면 StateMachineBehaviour를 상속받고 있고 5개의 함수가 있지만 보통 3개의 함수만 사용합니다.

OnStateEnter : 해당 애니메이션으로 전이 된 후 한번만 실행됨

OnStateUpdate : 매 프래임 마다 실행

OnStateExit : 전이되기전 마지막에 실행됨

StateMachineBehaviour 함수들은 콜라이더에 있는 Enter, Stay, Exit 와비슷하다.

 

#코드 작성

이제 코드를 작성하여서 제어해 주면 된다.

'프로그래밍 > UNITY' 카테고리의 다른 글

[Unity] UI Toolkit 커스텀 토글  (0) 2023.10.24
[Unity] Timeline  (0) 2023.08.05
[Unity] Vector에 대하여  (0) 2023.04.28
[Unity] Mathf 클래스  (0) 2023.03.28
[Unity] 유니티 애니매이션 블렌드 트리  (0) 2023.03.11
profile

개발일지

@damin06

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!