2023-11-01 TIL(Unity 최종 프로젝트 8일차)
오늘은 어제 연결했던 플레이어의 상태 UI가 연결이 제대로 안 된 것 같아서 좀 더 테스트해보고 수정할 부분을 수정하는 것을 먼저 했다.
우선적으로, 만들어두었던 UI들이 PlayerConditions와 호환이 안되는 것인지 hunger수치를 계속 소모하도록 설정을 했는데도 감소하지 않는 현상이 있었어서 연결을 잘못했나 싶었는데 코드의 문제였다.
PlayerConditions 수정
public void Subtract(float amount)
{
curValue = Mathf.Max(curValue- amount, 0.0f);
}
0.0f가 아니라 maxValue가 들어가 있어서 감소하지 않는 것이었다.
해당 버그는 수정하였고, 구르기를 할 때마다 스태미나가 감소하도록 구현을 하고 싶었는데 스테이트 머신에서 해당 기능을 추가해야 할 부분을 찾는 것에 시간을 많이 썼다. 아직 각각의 스크립트마다 정확히 어떤 기능부터 어떤 기능까지 구현이 가능할지 잘 모르고 있어서 그랬던 것 같다.
구르기를 하는 시점에서 스태미나가 감소하는 것이기 때문에 RollState의 enter에서 스태미나가 감소해야 하는 것이고, 해당 UseStamina를 참조하기 위해서 스테이트 머신의 플레이어의 플레이어컨디션까지 거슬러 올라가서 UseStamina를 가져오는 것이다. (stateMachine.Player.Playerconditions.UseStamina(); )
해당 코드 한줄을 추가할 부분을 찾는 것에 굉장히 오랜 시간이 걸렸기 때문에 그 과정에서 스테이트 머신에 대해서 다시금 공부하면서 여러 가지 코드를 뜯어보기도 하고 스테이트 머신 대신 간단하게 다시 로직을 짜볼까도 고민해 보았지만, 스테이트 머신의 장점 중 하나인 상태의 독립성을 고려해 보자면 현재까지 진행한 로직을 잘 끌고 가면서 필요한 부분을 추가적으로 구현하는 것이 더 적절하다고 판단되었다.
플레이어의 구현은 이것으로 끝났고 내일부터는 다른 작업을 도전해 보아야겠다.
PlayerRollState 수정
public override void Enter()
{
// 생략
stateMachine.Player.Playerconditions.UseStamina(10);
}
PlayerConditions 수정
public bool UseStamina(float rollStaminaCost)
{
if(stamina.curValue - rollStaminaCost < 0)
return false;
stamina.Subtract(rollStaminaCost);
return true;
}