Part60:Character stats(P89-91)
1:效果和操作
操作:用Stats脚本来负责启动,负责承受伤害数据等效果数据统计
效果:设置血量和攻击力,在遇到攻击时(player/enemy)会根据DoDamage()将计算之后的数据作为攻击力和modifiers伤害加成传递给TakeDamage()进行掉血处理
2:代码改变
//新增脚本Stats(用来对血量,伤害值等运算,如添加buff伤害等)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[System.Serializable]
public class Stats
{
[SerializeField] private int baseValue;
public List<int> modifiers;//用来存技能buff伤害加成
public int GetValue()//获取伤害值(若有其他加成则修)
{
int finalValue = baseValue;
foreach (int modifier in modifiers)
{
finalValue += modifier;
}
return finalValue;//采用函数返回值的方式提供数据
}
public void AddModifier(int _modifier)
{
modifiers.Add(_modifier);
}
public void RemoveModifier(int _modifier)
{
modifiers.RemoveAt(_modifier);
}
}
//新增脚本CharacterStats(用于保存角色的血量,状态以及其状态改变方法)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CharacterStats : MonoBehaviour
{
public Stats strength;//攻击强度
public Stats damage;//伤害
public Stats maxHealth;//最大生命值
[SerializeField] private int currentHealth;//目前生命值
protected virtual void Start()
{
currentHealth = maxHealth.GetValue();
}
public virtual void DoDamage(CharacterStats _targetStats)//括号属性为受到伤害的目标状态
{
int totleDamage = damage.GetValue() + strength.GetValue();//计算基础攻击+额外攻击
Debug.Log(totleDamage);
_targetStats.TakeDamage(totleDamage);//目标状态扣去总伤害造成的血量减少数
}
protected virtual void TakeDamage(int _damage)//血量减少
{
currentHealth -= _damage;
Debug.Log(_damage);
if (currentHealth < 0)
Die();
}
protected virtual void Die()//死亡,后续绑定死亡动画和销毁等操作
{
}
}
//PlayerAnimationTrigger脚本改变(EnemyAnimationTrigger变化基本相同)
private void AttackTrigger()
{
foreach (var hit in colliders)
{
if (hit.GetComponent<Enemy>() != null)
{
EnemyStat _target = hit.GetComponent<EnemyStat>();
player.stats.DoDamage(_target);
}
}
}
//新增脚本EnemyStats
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class EnemyStat : CharacterStats
{
private Enemy enemy;
public override void DoDamage(CharacterStats _targetStats)
{
base.DoDamage(_targetStats);
}
protected override void Die()
{
base.Die();
}
protected override void Start()
{
enemy = GetComponent<Enemy>();
base.Start();
}
protected override void TakeDamage(int _damage)
{
base.TakeDamage(_damage);
enemy.DamageEffect();
}
}
//新增脚本PlayerStats
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerStat : CharacterStats
{
private Player player;
public override void DoDamage(CharacterStats _targetStats)
{
base.DoDamage(_targetStats);
}
protected override void Die()
{
base.Die();
}
protected override void Start()
{
player = GetComponent<Player>();
base.Start();
}
protected override void TakeDamage(int _damage)
{
base.TakeDamage(_damage);
player.DamageEffect();
}
3:效果图
(分别表示,攻击强度:基础值+加成 伤害:基础值+加成 最大(初始)生命值:基础值 当前血量)
(假设设定敌人强度的Base Value为10 Damage的Base Value为5 最大生命值为100 则进行一次攻击后结果如下)