public void Add(XmlBullet xmlBullet) { BtlBullet battleBullet = new BtlBullet(); battleBullet.parent = this; battleBullet.bulletName = xmlBullet.prefabs; battleBullet.xmlBullet = xmlBullet; battleBullet.fireCoolDown = xmlBullet.coolDown; this.btlBulletList.Add(battleBullet); }
//开火 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; } } }