[TIL] Unity - 스태미나 추가

MINO·2024년 8월 20일
post-thumbnail

2024-08-20


피드백 수용

유저 테스트 시, 체력 UI 가 구석에 작게 위치해 있어 전투 시, HP 를 잘 확인하지 못해 불편하다는 제보가 들어왔다.


실제로 테스트를 하며, HP 를 확인하지 못하고 죽은 경우가 많았기에 이를 개선하고자 했다.

레퍼런스 참고하기

던전앤 파이터의 구형 체력 UI 나 다크앤다커 초창기 체력 UI 를 참고하려고 했다.

던전앤 파이터 체력 UI다크앤다커 초창기 체력 UI

에셋의 부재

일렁이는듯한 그라데이션이 포함된 원형 말고, 단순히 빨간색으로만 표현해봤는데
느낌이 안나 포기하게 되었다.

+ 창작의 고통

좌측 상단중앙 하단중앙 하단 + 초상화

기존 에셋 활용하기

기존에 구매했던 에셋 중 괜찮아보이는 UI 스프라이트가 있어 활용해보기로 했다.

그러나, 바바리안은 마나 대신 HP 를 소모해 스킬을 사용하기 때문에
쓸모 없는 칸이 2개나 존재해 문제가 되었다.

적용 초기 모습을 보면,
왼쪽 상단의 사각형 틀, 오른쪽 상단의 사각형 틀, 하단의 사각형 틀이 비워져 있다.

구상하기

기존에는 바바리안이 달리거나 도약(대쉬)을 할 때, 따로 소모되는 값이 없었다.
도약에는 쿨타임이 존재하는 게 다 였기에, 스태미나를 추가하여 기획적인 부분과
해당 UI 를 더욱 잘 활용할 수 있을 것 같았다.

  1. 현재 캐릭터가 공격 자세인지 아닌지 표시
  2. 플레이어의 닉네임
  3. 스태미나 바

스태미나 추가하기

기존의 PlayerStat 에서 사용하던 Condition 클래스를 활용해 Stamina 를 추가해주었다.

Condition 클래스를 통해, 최댓값과 현재값, 그리고 덧셈, 뺄셈을 위한 메서드를 사용할 수 있다.

public class Condition
{
    public float curValue;
    public float maxValue;
	
    ...
}

public Condition Stamina;

달리기와 도약 시, 스태미나를 감소시켜주고,
스태미나가 부족하다면, 해당 행동을 수행하지 못하게 코드를 추가해주면 된다.


Run State

플레이어가 일반 상태에서 Shift 를 누르면 달리는 Run State 에서 Update 문에서 지속적으로 스태미나를 감소 시켜준다.

if (stateMachine.player.playerStat.Stamina.curValue < leastRunStamina)
    stateMachine.ChangeState(stateMachine.WalkState);

 stateMachine.player.playerStat.Stamina.SubtractCurValue(runStamina);

Dash State

플레이어가 공격 상태(X 키를 눌러 무기를 들고) 에서 Shift 를 누르면 도약하는 Dash State 를 진입하기 전, 도약에 필요한 스태미나가 있는지 확인하고,
충분하다면 스태미나를 감소 시키고 Dash State 로 넘어간다.
부족하다면 상태 변환이 일어나지 않는다.

stateMachine.player.playerStat.Stamina.SubtractCurValue(needDashStamina);
stateMachine.ChangeState(stateMachine.DashState);

Base State

플레이어가 Run State 가 아닐 때, 스태미나가 지속적으로 회복되어야 한다.
모든 State 마다 회복되는 코드를 적어줄 수 없기 때문에
모든 State 가 상속 받고 있는 Base State 의 Update 문에 추가해주었다.

public virtual void Update()
{
	if (stateMachine.currentState != stateMachine.RunState)
		stateMachine.player.playerStat.Stamina.AddCurValue(recoveryStamina);
}

UI 적용

기존 Player HP UI 를 조정하던 스크립트를 수정해
PlayerConditionUI 스크립트로 수정해주었다.

public void UpdateStaminaSlider()
{
	if (staminaSlider != null)
	{
		staminaSlider.fillAmount = player.playerStat.Stamina.curValue/ player.playerStat.Stamina.maxValue;
	}
}

ETC

이외에도 공격 자세로 넘어갈 때 표시해주는 UI,
플레이어의 닉네임을 표시해주는 부분도 스크립트로 추가해주었다.


결과물

  1. 달리기 시, 스태미나 소모

  2. 도약 시, 스태미나 소모 + 공격 상태 전환 표시


TIL 마무리

간단해보이는 Stat 추가 였지만, 생각보다 예외 처리를 해줘야할 곳이 많았다.
반복 테스트를 통해, 적당한 소모 값과 회복 값을 정해준 것 같다.
기존의 체력 UI 보다 눈에도 잘 띄고, 덕분에 스태미나라는 새로운 시스템을 추가해줄 수 있어
유저 테스트를 하길 잘 했다는 생각이 든다.

profile
안녕하세요 게임 개발하는 MINO 입니다.

0개의 댓글