행동을 위한 스테미나 사용을 구현해보자!
EquipManager에서 공격 버튼 입력에 대한 이벤트를 뿌리면 EquipTool에서 호출받아 공격을 처리한다. 그리고 공격에 대한 OnAttackInput은 Equip에 선언되어 있기 때문에, 공격 시 스테미나를 사용하도록 수정해보자.
EquipTool에서는 Equip을 상속받아 OnAttackInput를 Override해서 사용하기 때문에 Equip.cs에 있는 OnAttackInput을 수정해주면 EquipTool에서도 사용할 수 있다.
public virtual void OnAttackInput(PlayerConditions conditions)
{
}
Equip.cs에서 OnAttackInput이 Player의 Condition을 받아와서 스테미나를 사용할 수 있도록 매개변수에 PlayerConditions을 추가해준다.
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);
}
}
}
마지막으로 Equip의 OnAttackInput을 호출하던 EquipManager.cs 수정해주면 된다.
// 공격 버튼 클릭 시(좌측 마우스 클릭 시)
public void OnAttackInput(InputAction.CallbackContext context)
{
// 공격 버튼이 입력 중일 때, 현재 장비한 아이템이 있으면서 플레이어가 볼 수 있을 때
if(context.phase == InputActionPhase.Performed && curEquip != null && controller.canLook)
{
curEquip.OnAttackInput(conditions); // 공격 시 PlayerConditions 넘겨주기
}
}
이제 Unity로 돌아와서 EquipTool에서 선언한 useStamina를 채워주도록 하자.
Axe는 10, Sword는 15 정도로 수정해주자.