数据部分
在WeaponItem里新增体力衰减的数据
[Header("Weapon Stamina")]
public float baseStamina; //20
public float lightAttackMultiplier; //1
public float heavyAttackMultiplier; //2
逻辑实现
我们的PlayerStats记录了玩家的各个数据,包括血量以及体力等。
PlayerAttacker是实现玩家攻击的脚本。
WeaponSlotManager是管理Item的脚本。
在WeaponSlotManager中进行实际的逻辑执行
#region Handle Stamina Drainage
public void DrainStaminaLightAttack()
{
playerStats.TakeStaminaDamage(Mathf.RoundToInt(attackingWeapon.baseStamina * attackingWeapon.lightAttackMultiplier));
}
public void DrainStaminaHeavyAttack()
{
playerStats.TakeStaminaDamage(Mathf.RoundToInt(attackingWeapon.baseStamina * attackingWeapon.heavyAttackMultiplier));
}
#endregion
在PlayerStats中完成数值计算
public void TakeStaminaDamage(int damage)
{
currentStamina = currentStamina - damage;
//Set Bar
staminaBar.SetCurrentStamina(currentStamina);
}
在StaminaBar中完成UI的更新
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class StaminaBar : MonoBehaviour
{
public Slider slider;
private void Start()
{
slider = GetComponent<Slider>();
}
public void SetMaxStamina(int maxStamina)
{
slider.maxValue = maxStamina;
slider.value = maxStamina;
}
public void SetCurrentStamina(int currentStamina)
{
slider.value = currentStamina;
}
}