예제 #1
0
    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);
    }