이번주 안으로 프로토타입을 완성하고 중간발표준비도 해야 하기 때문에 플레이어에게서 소소하게 존재하던 버그들을 픽스하고 스킬 부분의 효과를 확실히 넣는 작업을 해야 한다. 아직 스킬키를 입력 시 해당 애니메이션이 출력되는 것까지는 완성하였지만, 전투스킬에 대미지를 넣는 것과 궁극기 스킬에 버프를 넣는 기능은 추가하지 않았기 때문에 프로토타입에서는 완성이 되어있어야 하므로 최대한 오늘 안에 완성을 시키려고 했다.
버그리포트
RunState 애니메이션 수정
Idlestate 에서 달리기 키인 shift키를 먼저 누른 채로 이동을 하면 캐릭터가 굳은 채로 미끄러지는 버그가 있었는데, Idle상태에서 Run으로 바뀌는 애니메이션 direction을 설정을 안 했었다. 해당 부분을 추가하고 나니 캐릭터의 움직임이 유기적으로 잘 연결되어 있다는 느낌을 받았다.
PlayerRollState 수정
public override void Update()
{
base.Update();
// 애니메이션 이름이 "Roll"이고 애니메이션이 끝났을 때 상태를 변경
if (stateMachine.Player.Animator.GetCurrentAnimatorStateInfo(0).IsName("Roll") &&
stateMachine.Player.Animator.GetCurrentAnimatorStateInfo(0).normalizedTime >= 1.0f)
{
stateMachine.ChangeState(stateMachine.IdleState);
}
}
그리고 새롭게 추가했던 RollState, SkillState, PowerUpState의 애니메이션이 작동이 되고 나서 IdleState로 빠져나가지 못했었는데, 이 부분을 내가 여태까지 잘 못 알고있었기 때문이었다. StateMachine의 코드를 살펴보자면
public abstract class StateMachine
{
protected IState currentState;
public void ChangeState(IState newState)
{
currentState?.Exit();
currentState = newState;
currentState?.Enter();
}
ChangeState로 새로운 스테이트로 진입하는 것을 정의해 놓았는데, 이 부분이 바로 핵심이었다.
새로운 스테이트를 받았을 경우 Exit으로 현재의 스테이트를 빠져나가고 새로운 스테이트로 Enter가 되는 것이 구조의 짜임이었는데, 내가 짰던 스테이트인 Roll, Skill, PowerUP은 모두 Enter를 통해서 들어오지만 다른 상태로 나가기 위한 ChangeState가 따로 설정이 안 되어있었기 때문에 해당 스테이트에 진입 후 다른 상태로 변경되질 못했던 것이다.
한마디로 Exit이 있다고 해서 애니메이션이 끝나면 나가는 게 아니라 다른 스테이트가 들어올 때 빠져나갈 수 있도록 만든 것이 Exit이고 빠져나가는 조건 또한 직접 작성을 했어야 했다. 각각의 스테이트에 Update를 추가하여 애니메이션이 작동이 끝나면 자동으로 IdleState로 빠져나가도록 조건을 설정했더니 이제야 내가 원했던 애니메이션이 완전하게 완성되었다.
PlayerSkillState 수정
public override void Update()
{
base.Update();
// 애니메이션 이름이 "Skill"이고 애니메이션이 끝났을 때 상태를 변경
if (stateMachine.Player.Animator.GetCurrentAnimatorStateInfo(0).IsName("Skill") &&
stateMachine.Player.Animator.GetCurrentAnimatorStateInfo(0).normalizedTime >= 1.0f)
{
stateMachine.ChangeState(stateMachine.IdleState);
}
}
PlayerPowerUpState 수정
public override void Update()
{
base.Update();
// 애니메이션 이름이 "PowerUp"이고 애니메이션이 끝났을 때 상태를 변경
if (stateMachine.Player.Animator.GetCurrentAnimatorStateInfo(0).IsName("PowerUp") &&
stateMachine.Player.Animator.GetCurrentAnimatorStateInfo(0).normalizedTime >= 1.0f)
{
stateMachine.ChangeState(stateMachine.IdleState);
}
}
'TIL (since 2023.08.07 ~ )' 카테고리의 다른 글
2023-11-08 TIL(Unity 최종 프로젝트 13일차) (1) | 2023.11.08 |
---|---|
2023-11-07 TIL(Unity 최종 프로젝트 12일차) (0) | 2023.11.07 |
2023-11-03 TIL(Unity 최종 프로젝트 10일차) (0) | 2023.11.03 |
2023-11-02 TIL(Unity 최종 프로젝트 9일차) (0) | 2023.11.02 |
2023-11-01 TIL(Unity 최종 프로젝트 8일차) (0) | 2023.11.01 |