前言
这篇学习,作用到(攻击/治愈/BUFF)到目标后的逻辑处理.
步骤
1 到子弹接触到目标后,会执行目标上AI脚本的BeHit方法
/// <summary>子弹打到目标,计算伤害值,根据玩家和敌人的属性,在子弹所有人身上计算出目标承受的伤害值</summary>
public virtual void BeHit(AttackBullteS bullte)
{
//健壮性判断
if (!CanProgramme()) return;
//判断技能的类型,将目标设置为施法者
if (targetObj == null && (bullte.skillData.attackType == SkillType.Attack || bullte.skillData.attackType == SkillType.None))
InputTargetObj(bullte.bullteOwner.gameObject);//如果没有目标,目标设为攻击者
//这里的操作是停掉所有协程
StopAllCoroutines();
//计算伤害
CostDamage(gameRoleProperty.DamageValue(bullte), bullte);
//计算buff
CostBuff(bullte);
//计算其他逻辑
}
2 计算伤害值,你需要施法者的数值和目标者的数值,进行计算得出,这里我们定义一个伤害值类,通过一个方法得出
public class BeHitClass
{
//数值
public int damageValue;
/// <summary> 伤害类型,0普通,1暴击,2治疗</summary>
public int damageType = 0;
public float repelValue = 0;
public BeHitClass(int damagevalue, int damagetype)
{
damageValue = damagevalue;
damageType = damagetype;
}
public BeHitClass CloneMe()
{
BeHitClass result = new BeHitClass(damageValue, damageType);
result.repelValue = repelValue;
return result;
}
}
public BeHitClass DamageValue(AttackBullteS bullte)
{
//new一个BeHit类
BeHitClass result = new GameRoleAI.BeHitClass(0, 0);
//通过子弹,得到施法者的数值
GameRoleProperty roleProperty = bullte.bullteOwner.GetComponent<GameRoleProperty>();
//计算总伤害值
result.damageValue = GetDamageAmount(roleProperty, this);//一个公式
//计算多端伤害的比值
result.damageValue = (int)(result.damageValue * roleProperty.skillList[bullte.skillIndex].damageList[bullte.damageIndex].damageRate);
//计算其他
return result;
}
/// <summary> 受到伤害减血或者加血 </summary>
public virtual void CostDamage(BeHitClass damageValue, AttackBullteS bullte)
{
//健壮性判断
if (bullte.skillData == null) return;
//决定数值类型,是skill中的参数,这点感觉有点别扭,保留意见
float parammean = -1;//该次伤害产生的效果,(0:hp-)(1:hp+)(2:施法者hp+)(3:施法者hp-)(4:)
///伤害类型 0 : 普通伤害
parammean = bullte.skillData.GetParamByParamMean(0);
BeHitClass tempbehit;