前言
这篇学习,作用到(攻击/治愈/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;

本文介绍了Unity3D中RPG2.0战斗框架的目标被击处理流程,从子弹接触目标执行AI的BeHit方法,到计算伤害值,再到Animator显示伤害数值。同时,文章探讨了BUFF系统的概念,如击退、石化等效果,并阐述了BUFF作为组件的实现方式,包括BUFFBase、BUFF_XX和BUFFMgr等关键脚本的角色。
最低0.47元/天 解锁文章
6501

被折叠的 条评论
为什么被折叠?



