示例#1
0
    public bool IsInAttackRange(ActorBase enemy, DBSkillDamageConf damage)
    {
        //伤害中心
        Vector3 damageCenter = Vector3.zero;
        Vector3 t            = damage.damageCenterPos;

        if (damage.damageCenterType == EmDamageCenterType.Attacker)
        {
            if (!actor.objectbase.isFacingRight)
            {
                t.x = -t.x;
            }
            damageCenter = actor.objectbase.realPos + t;
        }
        else if (damage.damageCenterType == EmDamageCenterType.Target)
        {
            damageCenter = enemy.objectbase.realPos + damage.damageCenterPos;
        }
        else if (damage.damageCenterType == EmDamageCenterType.AttackObject)
        {
            damageCenter = eo.effectObject.realPos + damage.damageCenterPos;
        }
        else
        {
            Debug.LogError("damage.damageCenterType is none");
        }

        //球形区域不用判断
        if (damage.damageArenaType == EmDamageArenaType.FrontArena)
        {
            if (!actor.objectbase.IsInFrontOfMe(enemy.objectbase.realLocalPos))
            {
                return(false);
            }
        }
        //伤害区域这样处理是以伤害中心为球心的球
        //todo,中心为Target和AttackObject作为球体处理,Attacker才具有多样化,因为attacker可以获取到朝向。其他的朝向都是未知/变动的。
        //float dist = (damageCenter - enemy.objectbase.realLocalPos).sqrMagnitude;
        //Debug.Log(dist);
        //if(dist > damage.damageDistance * damage.damageDistance)
        //	return false;

        //伤害区域这样处理是以伤害中心为中心的立方体
        return(ColliderManager.IsCollision(damageCenter, new Vector3(damage.damageArenaRadius, damage.damageArenaRadius, damage.damageArenaRadius),
                                           enemy.objectbase.realLocalPos + new Vector3(0, enemy.actorConf.size.y * 0.5f, 0), enemy.actorConf.size));

        //return true;
    }
示例#2
0
    void Update_Collide()
    {
        if (attackConf.damageMode != 2)
        {
            return;
        }

        //目前只与怪物做碰撞
        List <ActorBase> enemyList = GameMain.curSceneManager.GetEnemyList(actor);

        foreach (ActorBase a in enemyList)
        {
            if (ColliderManager.IsCollision(eo.effectObject.realPos, new Vector3(1, 1, 1),
                                            a.objectbase.realPos, a.objectcollider.size))
            {
                isInCollision        = true;
                isAttackObjectMoving = false;        //不让攻击物继续移动了
                isLifeTimeEnd        = true;         //碰撞后即消失
                eo.x2dEffect.Stop();
                Debug.Log("isInCollision");
                break;
            }
        }
    }