진행한 것들
캐릭터 상태머신
아래 글에서 진행한대로 플레이어 애니메이션과 관련된 부분은 상태머신으로 관리하기로 했다. 상태머신은 내가 의도한대로 플레이어가 동작 하도록 하기 위해 적용했다.
https://jcdevelop98.tistory.com/349
내일배움캠프 40일차 TIL - FSM
오늘의 학습 키워드 Finite State Machine 공부한 내용 Finite State Machine 한 번에 한 개의 상태만 가질 수 있고 다른 상태로 전이가 가능한 모델을 FSM(유한 상태 머신)이라고 부른다. 게임에서는 애니메
jcdevelop98.tistory.com
모든 State는 IState를 상속받고
public interface IState
{
void Enter();
void Exit();
void UpdateState();
void PhysicsUpdateState();
void OnDead();
}
StateMachine에서 현재 IState인 _currentState를 ChangeState(IState newState)로 바꿔준다.
public class StateMachine
{
private IState _currentState;
public PlayerController PlayerController { get; private set; }
public PlayerMoveState MovementState { get; private set; }
public PlayerJumpState JumpState { get; private set; }
public StateMachine(PlayerController playerController)
{
PlayerController = playerController;
MovementState = new PlayerMoveState(this);
}
public void Init()
{
ChangeState(MovementState);
}
public void ChangeState(IState newState)
{
_currentState?.Exit();
_currentState = newState;
_currentState?.Enter();
}
public void Update()
{
_currentState.UpdateState();
}
public void PhysicsUpdate()
{
_currentState.PhysicsUpdateState();
}
}
각 State는 애니메이션을 동작시키는데 예를 들어 PlayerMoveState가 있으면 Enter에서 플레이어의 애니메이션 bool 파라미터를 true로 만들고 Exit에서 false로 만들게끔 했다.
public class PlayerMoveState : PlayerStateBase
{
public PlayerMoveState(StateMachine stateMachine) : base(stateMachine)
{
}
public override void Enter()
{
playerController.Animator.SetBool(animationsData.MoveParameterHash, true);
}
public override void UpdateState()
{
base.UpdateState();
playerController.Animator.SetFloat(animationsData.SpeedRatioParameterHash, speedRatio);
}
public override void Exit()
{
playerController.Animator.SetBool(animationsData.MoveParameterHash, false);
}
public override void OnDead()
{
base.OnDead();
}
}
애니메이션은 블렌드 트리를 사용하였다.
오늘의 이슈 / 내일 할 것
이슈 : Mixamo에서 가져온 Animation에서 humanoid로 변경 후 Import Message Warning이 뜸
시도한 것 : 'Take001'이라는 애니메이션이 문제여서 Animation 탭의 Clips에서 제거함, 그러나 왜인지 Source Take 부분에는 남아 있고 Import Message Warning도 존재함
내일 할 것 : 캐릭터 점프, 슬라이딩
오늘의 회고
오늘은 캐릭터 점프와 슬라이딩 쪽을 구현할 예정이었으나 캐릭터 상태머신과 애니메이션이 더 필요하다고 하여 상태머신 쪽을 먼저 구현하게 되었다. Input을 받아와 이동에 적용하는데 구조를 변경하는 작업이 동반되어서 시간이 좀 걸렸던 것 같다. 리팩토링은 할 땐 귀찮은데 하고 나면 괜히 뿌듯한 작업인 것 같다. 내일도 파이팅!
'스파르타 Unity 1기' 카테고리의 다른 글
DevLog - 이그라엘(IGRAL) 빌드와 이동 버그 수정 (1) | 2023.10.30 |
---|---|
DevLog - 이그라엘(IGRAL) 플레이어 더블 점프와 구르기 (0) | 2023.10.27 |
DevLog - 이그라엘(IGRAL) 플레이어 이동과 회전 (0) | 2023.10.25 |
DevLog - 이그라엘(IGRAL) 기획과 플레이어 데이터 (0) | 2023.10.24 |
DevLog - 이그라엘(IGRAL) 기획(1) (1) | 2023.10.23 |