RPG2.0战斗框架学习5之目标被击处理

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

前言


这篇学习,作用到(攻击/治愈/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.skillD
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值