美文网首页
攻击控制

攻击控制

作者: APP4x | 来源:发表于2020-01-02 18:50 被阅读0次

    攻击需要不同的武器,提取出WeaponBase进行武器攻击

    攻击拆分为两种状态:
    1.没有目标,靠近敌人
    2.有目标,进行攻击

    对于武器,攻击框架:
    1.获取武器的配置信息
    2.获取配置中的攻击次数,进行遍历
    3.先播放攻击动画,显示特效,进行攻击移动
    4.等待配置中的被击时间,使用协程
    5.根据配置中的攻击角度和攻击距离,寻找扇形范围内的目标,进行攻击算伤害,被击移动
    6.等待配置中的攻击剩余时间,类似后摇
    7.如果没有目标,自动停止连招,否则继续连招

    protected virtual IEnumerator StartAutoAttack()
    {
        while (this._bAutoAttacking)
        {
            int count = this.weaponData.attackCount;
            for (int i = 0; i < count; i++)
            {
                //抬手动作
                this.DoPreAttack(i);
                float hittedTime = this.weaponData.hittedTimes[i];
                yield return CoroutineTaskManager.Get(hittedTime);
                
                //计算伤害
                this.DoFindTargets(i);
                if (this.HasTarget())
                {
                    this.DoRealAttack(i);
                }
                
                //恢复动作
                float attackTime = this.weaponData.attackTimes[i];
                yield return CoroutineTaskManager.Get(attackTime - hittedTime);
    
                //没目标停止攻击
                this.DoFindTargets(i);
                if (!this.HasTarget())
                {
                    this._bAutoAttacking = false;
                    this._entityBase.SetIdle();
                    yield break;
                }
            }
        }
    }
    

    武器配置:
    攻击、防御、暴击率、闪避率、攻击检测范围、攻击真实范围
    攻击移动时间、攻击移动距离
    攻击次数、每次攻击时间、攻击生成的道具、计算伤害的时间、攻击的角度
    攻击要显示的特效、特效要显示的时间

    攻击检测范围和真实范围:
    检测范围是触发攻击的范围,比如有敌人是跳过去劈砍
    在哪开始跳,是检测范围
    在哪算伤害,是真实范围

    攻击生成的道具:
    弓箭兵,真实算伤害时,实例化出弓箭道具
    通过碰撞检测,进行伤害计算

    范围检测:
    距离:
    Vector3.Distance
    角度:
    通过获取自身的前向量,我指向敌人的向量。
    配置的是角度120度,先求点积,通过Acos反向求得弧度,乘以Rad2Deg转为弧度
    再乘以2,和配置度数比较
    坑:两个向量指向同一方向,就会求不出,直接返回在范围内即可。

    伤害计算:
    攻击力-防御力
    有可能格挡和暴击

    根据不同的Id创建武器
    不需要使用工厂进行判断,如果是1001,创建Weapon1001
    直接通过反射创建,符合开闭原则

    string typeName = "Weapon" + weaponId;
    Type type = Type.GetType(typeName);
    this._weaponBase = type.Assembly.CreateInstance(typeName) as WeaponBase;
    this._weaponBase.Init(this._entityBase);
    

    其他

    特效:
    都是美术直接做好的,直接显示即可,注意旋转

    武器换装:
    1.是直接挂在骨骼节点上的,删除原来的替换新的
    2.在模型上就有一堆武器,需要哪个就显示哪个

    相关文章

      网友评论

          本文标题:攻击控制

          本文链接:https://www.haomeiwen.com/subject/lkiooctx.html