/// <summary>
    /// 计算物理普通攻击伤害
    /// </summary>
    /// <param name="weaponTypeByPlayerState">武器类型</param>
    /// <param name="iAttribute">攻击时的状态数据</param>
    /// <param name="innerOrder">当前攻击的阶段</param>
    /// <param name="target">攻击的目标</param>
    private bool CalculateNormalActionHurt(EnumWeaponTypeByPlayerState weaponTypeByPlayerState, IAttributeState _iAttribute, int innerOrder, GameObject target)
    {
        if (target == null)
        {
            return(true);
        }
        InteractiveAsMonster interactiveAsMonster = target.GetComponent <InteractiveAsMonster>();

        if (interactiveAsMonster == null)
        {
            return(true);
        }
        IPlayerState    iPlayerState = GameState.Instance.GetEntity <IPlayerState>();
        IAttributeState iAttribute   = ((AttributeStateAdditional)_iAttribute).Clone();

        switch (weaponTypeByPlayerState)
        {
        case EnumWeaponTypeByPlayerState.SingleHandedSword:
            if (innerOrder == 3)
            {
                iAttribute.PhysicsAttacking *= 1.2f;
            }
            break;

        case EnumWeaponTypeByPlayerState.TwoHandedSword:
            if (innerOrder == 3)
            {
                iAttribute.PhysicsAttacking *= 0.7f;
            }
            break;

        case EnumWeaponTypeByPlayerState.Arch:
            if (innerOrder == 3)
            {
                iAttribute.PhysicsAttacking *= 2f;
            }
            break;
        }
        AttackHurtStruct attackHurtStruct = new AttackHurtStruct()
        {
            hurtTransferNum    = 0,
            hurtType           = EnumHurtType.NormalAction,
            attributeState     = iAttribute,
            hurtFromObj        = iPlayerState.PlayerObj,
            PhysicAttackFactor = new PhysicAttackFactor()
            {
                IncreaseRatioInjuryFactor = iPlayerState.SelfRoleOfRaceInfoStruct.physicAttackToDamageRateRatio,
                MinimumDamageFactor       = iPlayerState.SelfRoleOfRaceInfoStruct.physicQuickToMinDamageRatio
            }
        };

        CalculateHurt.Result hurtResult = interactiveAsMonster.GiveAttackHurtStruct(attackHurtStruct);
        if (hurtResult.IsCrit || hurtResult.hurtRate > 0.2f)
        {
            iPlayerState.SetVibration(0.1f, 0.6f, 0.6f);//设置手柄震动
        }
        //如果命中了则自身的动画造成0.1秒的延迟
        IAnimatorState iAnimatorState = GameState.Instance.GetEntity <IAnimatorState>();

        if (weaponTypeByPlayerState != EnumWeaponTypeByPlayerState.Arch)
        {
            iAnimatorState.PhysicHitMonsterAnimDelay = true;
        }
        //停止持续
        iAnimatorState.SkillSustainable = false;
        //设置命中声音
        WeaponPhysicHit = (int)weaponTypeByPlayerState;
        //判断武器类型
        switch (weaponTypeByPlayerState)//根据武器类型判断是否还需要下次检测
        {
        case EnumWeaponTypeByPlayerState.Arch:
            return(false);

        default:
            return(true);
        }
    }
    /// <summary>
    /// 计算物理技能伤害
    /// </summary>
    /// <param name="skillType">技能类型</param>
    /// <param name="weaponTypeByPlayerState">武器类型</param>
    /// <param name="physicsSkillStateStruct">物理技能数据</param>
    /// <param name="innerOrder">当前攻击的阶段</param>
    /// <param name="target">攻击的目标</param>
    private bool CalculatePhysicSkillHurt(EnumSkillType skillType, EnumWeaponTypeByPlayerState weaponTypeByPlayerState, PhysicsSkillStateStruct physicsSkillStateStruct, int innerOrder, GameObject target)
    {
        if (target == null)
        {
            return(true);
        }
        InteractiveAsMonster interactiveAsMonster = target.GetComponent <InteractiveAsMonster>();

        if (interactiveAsMonster == null)
        {
            return(true);
        }
        IPlayerState     iPlayerState     = GameState.Instance.GetEntity <IPlayerState>();
        AttackHurtStruct attackHurtStruct = new AttackHurtStruct()
        {
            hurtTransferNum    = 0,
            hurtType           = EnumHurtType.PhysicSkill,
            attributeState     = physicsSkillStateStruct.AttributeState,
            hurtFromObj        = iPlayerState.PlayerObj,
            PhysicAttackFactor = new PhysicAttackFactor()
            {
                IncreaseRatioInjuryFactor = iPlayerState.SelfRoleOfRaceInfoStruct.physicAttackToDamageRateRatio,
                MinimumDamageFactor       = iPlayerState.SelfRoleOfRaceInfoStruct.physicQuickToMinDamageRatio
            }
        };

        CalculateHurt.Result hurtResult = interactiveAsMonster.GiveAttackHurtStruct(attackHurtStruct);
        if (hurtResult.IsCrit || hurtResult.hurtRate > 0.2f)
        {
            iPlayerState.SetVibration(0.1f, 0.7f, 0.7f);//设置手柄震动
        }
        //如果命中了则自身的动画造成0.1秒的延迟
        IAnimatorState iAnimatorState = GameState.Instance.GetEntity <IAnimatorState>();

        if (weaponTypeByPlayerState != EnumWeaponTypeByPlayerState.Arch)
        {
            iAnimatorState.PhysicHitMonsterAnimDelay = true;
        }
        //停止持续
        iAnimatorState.SkillSustainable = false;
        //如果是冲锋则停止任务
        switch (skillType)
        {
        case EnumSkillType.ZS03:
            runTaskStruct_Charge.StopTask();
            break;
        }
        //设置命中声音
        WeaponPhysicHit = (int)weaponTypeByPlayerState;
        //判断技能类型,有些紧只需要判断一次
        switch (skillType)
        {
        case EnumSkillType.GJS03:
        case EnumSkillType.SSS03:
        case EnumSkillType.ZS03:
            return(false);

        default:
            return(true);
        }
    }
    /// <summary>
    /// 计算魔法组合技能的伤害
    /// </summary>
    /// <param name="_iAttributeState">伤害计算时使用的属性</param>
    /// <param name="collisionHitCallbackStruct">碰撞到的对象</param>
    /// <param name="thisUsedMana">本次技能的耗魔值</param>
    /// <param name="statusLevelDataInfos">本次技能附加的特殊效果数组</param>
    /// <param name="skills">本次技能组合</param>
    /// <returns></returns>
    private bool CalculateCombineMagicHurt(IAttributeState _iAttributeState, CollisionHitCallbackStruct collisionHitCallbackStruct, float thisUsedMana, StatusDataInfo.StatusLevelDataInfo[] statusLevelDataInfos, EnumSkillType[] skills)
    {
        if (collisionHitCallbackStruct.targetObj == null)
        {
            return(false);
        }
        InteractiveAsMonster interactiveAsMonster = collisionHitCallbackStruct.targetObj.GetComponent <InteractiveAsMonster>();

        if (interactiveAsMonster == null)
        {
            return(false);
        }
        IPlayerState    iPlayerState    = GameState.Instance.GetEntity <IPlayerState>();
        IAttributeState iAttributeState = ((AttributeStateAdditional)_iAttributeState).Clone();

        //根据技能设置平摊伤害
        if (skills.Length >= 2)
        {
            switch (skills[1])
            {
            case EnumSkillType.YSX01:    //火元素
                switch (skills[0])
                {
                case EnumSkillType.FS02:
                    iAttributeState.BaseMagicDamage /= 4;
                    break;

                case EnumSkillType.MFS05:
                    iAttributeState.BaseMagicDamage /= 2.5f;
                    break;
                }
                break;

            case EnumSkillType.YSX02:    //水元素
                switch (skills[0])
                {
                case EnumSkillType.FS02:
                    iAttributeState.BaseMagicDamage /= 1.8f;
                    break;

                case EnumSkillType.MFS05:
                    iAttributeState.BaseMagicDamage /= 0.85f;
                    break;
                }
                break;

            case EnumSkillType.YSX03:    //土元素
                switch (skills[0])
                {
                case EnumSkillType.FS02:
                    iAttributeState.BaseMagicDamage /= 1.4f;
                    break;

                case EnumSkillType.MFS05:
                    iAttributeState.BaseMagicDamage /= 2.5f;
                    break;
                }
                break;

            case EnumSkillType.YSX04:    //风元素
                switch (skills[0])
                {
                case EnumSkillType.FS02:
                    iAttributeState.BaseMagicDamage /= 4;
                    break;

                case EnumSkillType.MFS05:
                    iAttributeState.BaseMagicDamage /= 4;
                    break;
                }
                break;

            case EnumSkillType.SM06:    //冰元素
                switch (skills[0])
                {
                case EnumSkillType.FS02:
                    iAttributeState.BaseMagicDamage /= 1.2f;
                    break;

                case EnumSkillType.MFS05:
                    iAttributeState.BaseMagicDamage /= 1.2f;
                    break;
                }
                break;

            case EnumSkillType.SM07:    //雷元素
                switch (skills[0])
                {
                case EnumSkillType.FS02:
                    iAttributeState.BaseMagicDamage /= 5.5f;
                    break;

                case EnumSkillType.MFS05:
                    iAttributeState.BaseMagicDamage /= 6;
                    break;
                }
                break;

            case EnumSkillType.DSM03:    //光元素
                switch (skills[0])
                {
                case EnumSkillType.FS02:
                    iAttributeState.BaseMagicDamage /= 1;
                    break;

                case EnumSkillType.MFS05:
                    iAttributeState.BaseMagicDamage /= 1;
                    break;
                }
                break;

            case EnumSkillType.DSM04:    //暗元素
                switch (skills[0])
                {
                case EnumSkillType.FS02:
                    iAttributeState.BaseMagicDamage /= 1;
                    break;

                case EnumSkillType.MFS05:
                    iAttributeState.BaseMagicDamage /= 1;
                    break;
                }
                break;
            }
        }
        AttackHurtStruct attackHurtStruct = new AttackHurtStruct()
        {
            hurtTransferNum      = 0,
            hurtType             = EnumHurtType.Magic,
            attributeState       = iAttributeState,
            thisUsedMana         = thisUsedMana,
            hurtFromObj          = iPlayerState.PlayerObj,
            statusLevelDataInfos = statusLevelDataInfos,
            MagicAttackFactor    = new MagicAttackFactor()
            {
                IncreaseRatioInjuryFactor = iPlayerState.SelfRoleOfRaceInfoStruct.magicAttackToDamageRateRatio
            }
        };

        CalculateHurt.Result hurtResult = interactiveAsMonster.GiveAttackHurtStruct(attackHurtStruct);
        if (hurtResult.IsCrit || hurtResult.hurtRate > 0.2f)
        {
            iPlayerState.SetVibration(0.1f, 0.8f, 0.8f);//设置手柄震动
        }
        //设置声音
        if (skills.Length >= 2)//说明有二阶段技能
        {
            MagicTypeHit = (int)skills[1];
        }
        else
        {
            MagicTypeHit = (int)EnumSkillType.MagicCombinedLevel2Start;
        }
        return(true);
    }