Exemplo n.º 1
0
    void OnTriggerEnter2D(Collider2D otherCollider)
    {
        //敌方子弹造成伤害,并销毁子弹
        BtlBulletMove btlBulletMove = otherCollider.gameObject.GetComponent <BtlBulletMove> ();

        if (null != btlBulletMove)
        {
            BtlPlane plane = this.parent;
            if (!plane.IsInvincible())
            {
                if (plane.hp <= btlBulletMove.parent.xmlBullet.damage)
                {
                    plane.hp = 0;

                    #region 掉落物品
                    {
                        GameObject prefabs = (GameObject)Resources.Load("Prefabs/Anim/crystal-big_1");
                        if (null == prefabs)
                        {
                            Debug.LogErrorFormat("Prefabs/Anim/crystal-big_1未找到");
                        }
                        GameObject gameObject = Instantiate(prefabs, plane.gameObject.transform.position, plane.gameObject.transform.rotation);
                        //gameObject.transform.SetParent(userPlane.gameObject.transform);
                        gameObject.layer = (int)EnumLayer.DropItem;
                    }
                    #endregion

                    Destroy(plane.gameObject);
                }
                else
                {
                    plane.hp -= btlBulletMove.parent.xmlBullet.damage;
                }
            }

            Destroy(btlBulletMove.gameObject);
            return;
        }
    }
Exemplo n.º 2
0
    //开火
    public void Fire()
    {
        BtlPlane plane = this.parent;

        if (!plane.CanFire())
        {
            return;
        }
        foreach (var bullet in plane.btlBulletMgr.btlBulletList)
        {
            if (!bullet.CanFire())
            {
                continue;
            }
            bool is_user_plane = false;
            if (plane.isUser())
            {
                is_user_plane = true;
            }
            bullet.fireCoolDown = bullet.xmlBullet.coolDown;

            GameObject bulletPrefabs = (GameObject)Resources.Load(bullet.bulletName);
            if (null == bulletPrefabs)
            {
                Debug.LogErrorFormat("开火失败{0}", bullet.bulletName);
                return;
            }

            BtlBullet newBullet = new BtlBullet();
            newBullet.camp      = plane.camp;
            newBullet.xmlBullet = bullet.xmlBullet;

            #region 计算子弹的偏移量,得出发射的初始位置
            Vector3 newBulletPosition = new Vector3();
            newBulletPosition.x = transform.position.x + bullet.xmlBullet.positionOffsetX;
            newBulletPosition.y = transform.position.y + bullet.xmlBullet.positionOffsetY;
            #endregion

            #region 计算出子弹到目标飞机的距离
            BtlPlane userPlane = Global.Instance.btlMgr.GetUserPlane();
            float    x         = newBulletPosition.x - userPlane.gameObject.transform.position.x;
            float    y         = newBulletPosition.y - userPlane.gameObject.transform.position.y;
            #endregion

            #region 旋转子弹
            float angleOfLine = (float)(System.Math.Atan2((-x), (y)) * 180 / System.Math.PI);
            if (!is_user_plane)
            {
                angleOfLine -= 180.0f;
            }
            Vector3    rotation   = new Vector3(0, 0, angleOfLine);
            Quaternion quaternion = new Quaternion();
            quaternion = Quaternion.Euler(rotation);
            #endregion

            newBullet.gameObject = Instantiate(bulletPrefabs, newBulletPosition, quaternion);
            #region 此处设置,飞机销毁,子弹也会随父节点销毁
            //bulletPrefab.transform.SetParent(plane.gameObject.transform);
            #endregion

            Rigidbody2D rigidbody2D = newBullet.gameObject.AddComponent <Rigidbody2D>();
            rigidbody2D.gravityScale = 0;
            BoxCollider2D boxCollider2D = newBullet.gameObject.AddComponent <BoxCollider2D>();

            BtlBulletMove btlBulletMove = newBullet.gameObject.AddComponent <BtlBulletMove>();
            if (null == btlBulletMove)
            {
                Debug.LogErrorFormat("开火失败 BattleBulletMove");
                return;
            }
            btlBulletMove.parent        = newBullet;
            newBullet.btlMove.moveTrace = EnumMoveTrace.Line;
            newBullet.btlMove.speed.x   = bullet.xmlBullet.speed;
            newBullet.btlMove.speed.y   = bullet.xmlBullet.speed;

            if (is_user_plane)
            {
                newBullet.gameObject.layer    = (int)EnumLayer.UserBullet;
                newBullet.btlMove.direction.x = bullet.xmlBullet.directionOffsetX;
                newBullet.btlMove.direction.y = bullet.xmlBullet.directionOffsetY;
            }
            else
            {
                newBullet.gameObject.layer    = (int)EnumLayer.EnemyBullet;
                newBullet.btlMove.direction.x = -x * bullet.xmlBullet.directionOffsetX;
                newBullet.btlMove.direction.y = y * bullet.xmlBullet.directionOffsetY;
            }
        }
    }