Unity 숙련주차 - Survival 게임 스테미나 사용하기

Amberjack·2024년 2월 3일
0

Unity

목록 보기
31/44

행동을 위한 스테미나 사용을 구현해보자!

😫 공격 시 스테미나를 사용하도록 수정하자!

EquipManager에서 공격 버튼 입력에 대한 이벤트를 뿌리면 EquipTool에서 호출받아 공격을 처리한다. 그리고 공격에 대한 OnAttackInput은 Equip에 선언되어 있기 때문에, 공격 시 스테미나를 사용하도록 수정해보자.

👨‍💻 Equip.cs 수정

EquipTool에서는 Equip을 상속받아 OnAttackInput를 Override해서 사용하기 때문에 Equip.cs에 있는 OnAttackInput을 수정해주면 EquipTool에서도 사용할 수 있다.

public virtual void OnAttackInput(PlayerConditions conditions)
{

}

Equip.cs에서 OnAttackInput이 Player의 Condition을 받아와서 스테미나를 사용할 수 있도록 매개변수에 PlayerConditions을 추가해준다.

👨‍💻 EquipTool.cs 수정

Equip이 수정되었기 때문에 Equip을 상속받던 EquipTool 또한 수정되어야 한다.
EquipTool에서 Player의 스테미나를 받아와서 OnAttackInput()에서 스테미나를 체크하도록 수정하자.

// EquipTool.cs

...

public float useStamina;	// 장비 사용 시 필요한 스테미나

...

public override void OnAttackInput(PlayerConditions conditions)
{
    // 공격 중이 아닐 경우
    if (!attacking)
    {
        // 스테미나가 있을 때만 공격하도록.
        if (conditions.UseStamina(useStamina))
        {
            attacking = true;
            animator.SetTrigger("Attack");
            // 공격 딜레이를 주어서 공격을 실행한다.
            Invoke("OnCanAttack", attackRate);
        }
    }
}

👨‍💻 EquipManager.cs 수정

마지막으로 Equip의 OnAttackInput을 호출하던 EquipManager.cs 수정해주면 된다.

// 공격 버튼 클릭 시(좌측 마우스 클릭 시)
public void OnAttackInput(InputAction.CallbackContext context)
{
    // 공격 버튼이 입력 중일 때, 현재 장비한 아이템이 있으면서 플레이어가 볼 수 있을 때
    if(context.phase == InputActionPhase.Performed && curEquip != null && controller.canLook)
    {
        curEquip.OnAttackInput(conditions);		// 공격 시 PlayerConditions 넘겨주기
    }
}

🪓 Equip 프리팹 수정하기

이제 Unity로 돌아와서 EquipTool에서 선언한 useStamina를 채워주도록 하자.
Axe는 10, Sword는 15 정도로 수정해주자.

확인해보기!

  1. 공격 시 스테미나가 닳는 것을 확인할 수 있다.
  2. 스테미나가 부족하면 공격이 되지 않는 것을 확인할 수 있다...(마우스는 열심히 누르는 중임)
  3. 스테미나가 회복되는 것을 볼 수 있다! → 이전에 PlayerConditions를 작성하면서 처리했었음

0개의 댓글