public void Fire(float speed) { // Grab object from pool _soundbank.Play(); ++_bulletIndex; if (_bulletIndex >= _maxBullets) { _bulletIndex = 0; } GameObject bullet = _bullets[_bulletIndex]; bullet.SetActive(true); // Bullet Logic Vector2 pos = _transform.position + _transform.up * _fireOffset; bullet.transform.position = pos; bullet.transform.up = _transform.up; Vector2 vel = _transform.up; float angle = Vector2.Angle(Vector2.zero, vel); angle += UnityEngine.Random.Range(-_deviation, _deviation); Quaternion r = Quaternion.AngleAxis(angle, _transform.forward); vel = ((Vector2)(r * _transform.right)).normalized * speed; Rigidbody2D bulletRigid = bullet.GetComponent <Rigidbody2D>(); bulletRigid.velocity = vel; bulletRigid.angularVelocity = UnityEngine.Random.value * _rotationSpeed; _particles[_bulletIndex].transform.position = pos; _particles[_bulletIndex].gameObject.SetActive(true); _particles[_bulletIndex].Play(); Debug.DrawRay(_transform.position, _transform.up, Color.blue, 1.0f); }