/// <summary> /// Shoot a single bullet at the specified position (relative to the emitter) and pass in the specified bullet logic /// </summary> /// <param name="bullet">Bullet prefab to shoot</param> /// <param name="logic">List of BulletLogic to pass to the instantiated bullet</param> /// <param name="localPosition">The position relative to this Emitter's transform to shoot the bullet. /// Zero vector by default.</param> /// <param name="localRotation">The rotation to shoot the bullet relative to the reference frame of the /// emitter's rotation. Zero Quaternion by default.</param> protected void Shoot(Bullet bullet, List <BulletLogic> logic, Vector3 localPosition = default, Quaternion localRotation = default) { if (bullet == null) { throw new Exception("Trying to shoot a null bullet!"); } Transform t = transform; Quaternion r = t.rotation; // Apply the local rotation to the local position vector Vector3 rotatedLocalPosition = r * localRotation * localPosition; Bullet spawnedBullet = Instantiate(bullet, t.position + rotatedLocalPosition, r * localRotation, GameController.Instance.ShotBucket); SpawnedBullets.Add(spawnedBullet); spawnedBullet.AssignBulletLogic(logic); }