예제 #1
0
    private Transform MainEnemy;//射中的敌人
    /// <summary>
    /// 大范围爆炸
    /// </summary>
    //修改Physics2D.Raycast
    void ExplosionHitEffect()
    {
        Collider2D[] colliders = Physics2D.OverlapCircleAll(new Vector2(transform.position.x, transform.position.y), ExplosionRadius, layer);//Physics.OverlapSphere():球形范围内的碰撞器
        for (int i = 0; i < colliders.Length; i++)
        {
            EnemyContral hitEnemyContral = null;
            switch (colliders[i].transform.gameObject.layer)
            {
            //敌人护盾
            case 18:
                hitEnemyContral = hitPoint[i].transform.GetComponent <ShieldProtect>().GetEnemyControl();
                break;

            //敌人内部
            case 11:
                hitEnemyContral = hitPoint[i].transform.GetComponent <EnemyContral>();
                break;

            //紫水晶与零件箱
            case 19:
            case 20:
                hitPoint[i].transform.GetComponent <HitCheckBase>().Broken();
                break;
            }

            if (hitEnemyContral != null)
            {
                hitEnemyContral.GetDamage(Convert.ToInt32(ExplosionDemage), Convert.ToInt32(ExplosionDemage));
                //硬直
                hitEnemyContral.SetDelay(2, 4);
                //击退
                hitEnemyContral.SetKnockback(transform.position, 0.5f, 4);
            }
        }
    }
예제 #2
0
    void OnTriggerExit2D(Collider2D c2d)
    {
        #region 敌人

        EnemyContral EC = c2d.GetComponent <EnemyContral>();
        if (EC != null)
        {
            EC.GetBackToYourPosition();
        }

        #endregion
    }
예제 #3
0
    public void SetEnable(bool enable)
    {
        SR.enabled   = enable;
        BC2D.enabled = enable;
        isEnable     = enable;

        if (enable == false)
        {
            EC     = null;
            target = null;
        }

        print("啊啊啊啊" + enable);
        //2018.6.13 ZMK添加
        //修改武器collider状态
        WeaponManager.Instance.ChangeWeaponManegerCollider(!enable);
    }
예제 #4
0
    private Transform MainEnemy;//射中的敌人
    /// <summary>
    /// 大范围爆炸
    /// </summary>
    //修改Physics2D.Raycast
    void ExplosionHitEffect()
    {
        EnemyIDList.Clear();
        Collider2D[] colliders = Physics2D.OverlapCircleAll(new Vector2(transform.position.x, transform.position.y), ExplosionRadius, layer);//Physics.OverlapSphere():球形范围内的碰撞器
        for (int i = 0; i < colliders.Length; i++)
        {
            EnemyContral hitEnemyContral = null;
            switch (colliders[i].transform.gameObject.layer)
            {
            //敌人护盾
            case 18:
                if (EnemyIDList.Contains(colliders[i].transform.GetComponent <ShieldProtect>().ProtectAimGameObject.GetInstanceID()))
                {
                    continue;
                }
                hitEnemyContral = colliders[i].transform.GetComponent <ShieldProtect>().GetEnemyControl();
                EnemyIDList.Add(colliders[i].transform.GetComponent <ShieldProtect>().ProtectAimGameObject.GetInstanceID());
                break;

            //敌人内部
            case 11:
                if (EnemyIDList.Contains(colliders[i].transform.GetInstanceID()))
                {
                    continue;
                }
                hitEnemyContral = colliders[i].transform.GetComponent <EnemyContral>();
                EnemyIDList.Add(colliders[i].transform.GetInstanceID());
                break;

            //紫水晶与零件箱
            case 19:
            case 20:
                colliders[i].transform.GetComponent <HitCheckBase>().Broken();
                break;
            }
            if (hitEnemyContral != null)
            {
                hitEnemyContral.GetDamage(Convert.ToInt32(ExplosionDemage), Convert.ToInt32(ExplosionDemage));
                //硬直
                hitEnemyContral.SetDelay(2, (int)HardStraight);
                //击退
                hitEnemyContral.SetKnockback(transform.position, 0.5f, (int)BeatBack);
            }
        }
    }
예제 #5
0
    void Start()
    {
        m_CircleCollider2D = GetComponent <CircleCollider2D>();

        switch (m_ProtectAimShieldType)
        {
        //玩家护盾
        case ShieldType.Player:
            m_PlayerRobotContral = ProtectAimGameObject.GetComponent <PlayerRobotContral>();
            break;

        //敌人护盾
        case ShieldType.Enemy:
            m_EnemyRobotContral = ProtectAimGameObject.GetComponent <EnemyContral>();
            break;
        }

        transform.parent = null;
    }
예제 #6
0
    void OnTriggerEnter2D(Collider2D c2d)
    {
        //敌人
        if (c2d.gameObject.layer == 11)
        {
            target       = c2d.gameObject;
            EC           = target.GetComponent <EnemyContral>();
            EC.Contral   = false;
            isRetern     = true;
            BC2D.enabled = false;
        }
        //地形
        else if (c2d.gameObject.layer == 12)
        {
            target = c2d.gameObject;

            isRetern     = true;
            BC2D.enabled = false;
        }
    }
예제 #7
0
    /// <summary>
    /// 敌人伤害
    /// </summary>
    private void EnemyDamage(Collider2D[] AllCollider2D, int DamageNums)
    {
        for (int i = 0; i < AllCollider2D.Length; i++)
        {
            EnemyContral hitEnemyContral = null;
            switch (AllCollider2D[i].transform.gameObject.layer)
            {
            //敌人护盾
            case 18:
                hitEnemyContral = AllCollider2D[i].transform.GetComponent <ShieldProtect>().GetEnemyControl();
                break;

            //敌人内部
            case 11:
                hitEnemyContral = AllCollider2D[i].transform.GetComponent <EnemyContral>();
                break;

            //紫水晶与零件箱
            case 19:
            case 20:
                AllCollider2D[i].transform.GetComponent <HitCheckBase>().Broken();
                break;
            }

            if (hitEnemyContral != null)
            {
                hitEnemyContral.GetDamage(DamageNums, DamageNums);
                //硬直
                hitEnemyContral.SetDelay(2, 4);
                //击退
                hitEnemyContral.SetKnockback(transform.position, 0.5f, 4);
            }
        }

        var shakePreset = ProCamera2DShake.Instance.ShakePresets[2];

        ProCamera2DShake.Instance.Shake(shakePreset);
    }
예제 #8
0
 // Use this for initialization
 void Start()
 {
     EC  = transform.parent.GetComponent <EnemyContral>();
     PRC = FindObjectOfType <PlayerRobotContral>();
     SR  = GetComponent <SpriteRenderer>();
 }
예제 #9
0
    /// <summary>
    /// 普通攻击  碰撞后产生伤害
    /// 打在护盾上或者是人物身上
    /// </summary>
    protected virtual void GenerateDemage()
    {
        //伤害取整
        int Damage = Convert.ToInt32(DemageNums);

        for (int i = 0; i < hitPoint.Length; i++)
        {
            EnemyContral hitEnemyContral = null;
            switch (hitPoint[i].transform.gameObject.layer)
            {
            //击中玩家护盾
            case 17:
                //对玩家进行伤害(应该是扣mp)
                hitPoint[i].transform.GetComponent <ShieldProtect>().GetPlayerControl().GetDamage(Damage, Damage);
                break;

            //击中玩家内部
            case 10:
                //对玩家进行伤害(应该是扣hp)
                print(hitPoint[i].transform.name);
                hitPoint[i].transform.GetComponent <PlayerRobotContral>().GetRealDamage(Damage);
                break;

            //击中敌人护盾
            case 18:
                //对敌人进行伤害(应该是扣mp)
                hitEnemyContral = hitPoint[i].transform.GetComponent <ShieldProtect>().GetEnemyControl();
                hitEnemyContral.GetDamage(Damage, Damage);
                break;

            //击中敌人内部
            case 11:
                //对敌人进行伤害(应该是扣hp)
                hitEnemyContral = hitPoint[i].transform.GetComponent <EnemyContral>();
                hitEnemyContral.GetRealDamage(Damage);
                break;

            //紫水晶与零件箱
            case 19:
            case 20:
                hitPoint[i].transform.GetComponent <HitCheckBase>().Broken();
                break;
            }

            //设置硬直击退
            if (hitEnemyContral != null)
            {
                hitEnemyContral.SetDelay(0.5f, (int)HardStraight);
                hitEnemyContral.SetKnockback(transform.position, 0.5f, (int)BeatBack);
            }
            //-----------------------------------------------------------------------------------------------------------------
            //核心攻击 AOE + 特殊效果
            //当前是否核心攻击 && 是否打中敌人护盾/敌人内部
            if (isCoreAttack && hitEnemyContral != null)
            {
                //不同的核心产生不同的效果
                switch (m_CurrentCoreAttribute)
                {
                case CoreAttribute.Initial:
                    break;

                case CoreAttribute.Fire:
                    //燃烧效果,敌人持续减血
                    hitEnemyContral.ER.AddAbnormalState(new AbnormalState_Burn(hitEnemyContral.ER, 3));
                    break;

                case CoreAttribute.Amethyst:
                    //todo 无视MP,修改紫水晶子弹检测layer,不添加敌人护盾检测,直接打在敌人身上
                    break;

                case CoreAttribute.Frozen:
                    //冰冻效果,敌人持续减速
                    hitEnemyContral.ER.AddAbnormalState(new AbnormalState_Frozen(hitEnemyContral.ER, 3));
                    break;
                }
            }
        }
    }