How to make this enemy script shoot upwards?

Hey,

I’m new to unity and I have this script for one of my enemies. The only problem is that I’ve been trying to make them shoot upwards when I jump in the air. They only seem to shoot straight and not on the Y axis. I’ve been looking for a solution on the internet for a couple of days now, but without any luck so I decided to try here.

Thank you for your time!

private var target : Transform; 
    var rotateSpeed = 20;
    var moveSpeed = 5;
	var hitPoints = 10;
    var bulletDEAD : Transform;
    var explosionDEAD :  Transform;
	private var dead : boolean = false;
	private var currentHitPoints = hitPoints;
	var liftForce = 50;
    var projectile : Rigidbody;
    var Points1 : GameObject;
	var Points2 : GameObject;
	var ScoreAmount = 10;
    var force = 12.0;
	var damage = 5.0;
    var bulletsPerClip = 60;
    static var clips = 20;
    var reloadTime = 0.5;
    var hitParticles : ParticleEmitter;
    var muzzleFlash : Renderer;
	public var triggerTime = 0.05f;
    private var bulletsLeft : int = 0;
    private var nextFireTime = 0.0;
    private var m_LastFrameShot = -1;
	var bulletVelocity = 40;


    function Start () {
	// get the ParticleEmitter component from the object
	hitParticles = GetComponentInChildren(ParticleEmitter);
	
	// emit particles only when we hit something.
	if (hitParticles)
		hitParticles.emit = false;
	bulletsLeft = bulletsPerClip;
	
	// search for the player tagger "player"
	if (target == null && GameObject.FindWithTag("Player"))  
		    target = GameObject.FindWithTag("Player").transform;
        currentHitPoints = hitPoints;
         
    }
	
	// function to destroy the object if it gets out of bounds
	function ColliderBoundDamage (damage : float) {	
	var spawner : SpawnManager = GetComponent(SpawnManager);

		if (currentHitPoints <= 0)
			return;

		currentHitPoints -= damage;

		if (!dead && currentHitPoints <= 0) {
            dead = true;                              // changes the "dead" boolean option to true
            Destroy(gameObject);                 // destroy the gameObject
			spawner.amountEnemies -= 1;      // inform the spawn manager about the object's death

		}
	}

    // function for getting killed by a bullet
	function ApplyBulletDamage (damage : float) {     
	var spawner : SpawnManager = GetComponent(SpawnManager);

		if (currentHitPoints <= 0)
			return;

		currentHitPoints -= damage;

		if (!dead && currentHitPoints <= 0) {
            dead = true;
            Destroy(gameObject);
			Instantiate(Points1, transform.position, Quaternion.identity);     // spawn a 3d text containing information about points
			Instantiate(bulletDEAD, transform.position, transform.rotation); // spawn a dead replacement of the object 
			spawner.amountEnemies -= 1;      // inform the spawn manager about the object's death
			GUIController.MyScoreCounter += ScoreAmount;  // Add scores!

		}
	}
	
	//function for getting killed by an explosion
	function ApplyExplosionDamage (damage : float) {  
		var spawner : SpawnManager = GetComponent(SpawnManager);

		if (currentHitPoints <= 0)
			return;

		currentHitPoints -= damage;

		if (!dead && currentHitPoints <= 0) {
            dead = true;
            Destroy(gameObject);
			Instantiate(Points2, transform.position, Quaternion.identity);     // spawn a 3d text containing information about points
			Instantiate(explosionDEAD, transform.position, transform.rotation); // spawn a dead replacement of the object 
			spawner.amountEnemies -= 1;      // inform the spawn manager about the object's death
			GUIController.MyScoreCounter += ScoreAmount;  // Add scores!
		}
	}
	

    function FixedUpdate () {
	    if (target == null)
		    return;
		
		var direction  = transform.TransformDirection(Vector3.forward);
		var hit : RaycastHit;


         // the climb object part
        if (Physics.Raycast(transform.position, direction, hit, 3)) {  // raycast 3 units ahead of the object
            if (hit.transform.tag == "Climb" && !dead) {           // if the raycast hits an object tagged "Climb"
                transform.rigidbody.AddForce(Vector3.up *liftForce);    // lift the object up until it overcomes the obstacle
            }
        }
                   
			
	    // the rotate part
	    if (target && !dead) {
            var rot = Quaternion.LookRotation(target.position - transform.position);
            var rotationX = rot.eulerAngles.y;
            var xQuaternion = Quaternion.AngleAxis(rotationX, Vector3(0, 1l, 0));
        
		    transform.localRotation = Quaternion.Slerp(transform.localRotation, xQuaternion, Time.deltaTime * rotateSpeed);
            }
		// the shoot part
		// detect the distance between the player and the enemy
        var dist = Vector3.Distance(target.position, transform.position);     
		if ( dist < Random.Range(20, 30) )    // if in range, shoot!
        Fire();
	 
		else 
        // if not, keep walking!
        if ( dist < Random.Range(50, 60)  )
        transform.rigidbody.MovePosition(transform.rigidbody.position + transform.TransformDirection(0, 0, moveSpeed) * Time.deltaTime);
    
	}
	
function LateUpdate() {
	if (muzzleFlash) {
		if (m_LastFrameShot == Time.frameCount) {
			muzzleFlash.enabled = true;

			
		} else {
		// Don't show muccle flash if we're not firing
			muzzleFlash.enabled = false;
			enabled = false;
			
			// Play Gunfire sound
			if (audio)
			audio.Play();
			audio.loop = false;
			
				
			
		}
	}
}

//the fire part
function Fire () {
		var fireRate = Random.Range(0.1, 0.2);  // give a small range of fireRate values to the enemies
		

	// Keep firing until we used up the fire time
	while( nextFireTime < Time.time && bulletsLeft != 0) {
		FireOneShot();
		nextFireTime += fireRate;
		}
}

function FireOneShot () {
	var direction = transform.TransformDirection(Random.Range(-0.05f, 0.05f) * triggerTime, Random.Range(-0.05f, 0.05f) * triggerTime, 1);
	var hit : RaycastHit;
	var clone : Rigidbody;
	
audio.Play(); // play the shoot sound
// instantiate a projectile
clone = Instantiate(projectile, transform.position, transform.rotation);
// and make it shoot forward by giving it a velocity
clone.velocity = transform.TransformDirection (Vector3.forward * bulletVelocity);
// ignore collision with the roof collider so that the enemy doesnt hurt itself from shooting
Physics.IgnoreCollision( clone.collider, transform.root.collider );

	// raycasts forward
	if (Physics.Raycast (transform.position, direction, hit)) {
		// Apply a force to the rigidbody we hit
		if (hit.rigidbody)
			hit.rigidbody.AddForceAtPosition(force * direction, hit.point);
			
        
		// spawn hit particle effects to the normals we hit
		if (hitParticles) {
			hitParticles.transform.position = hit.point;
			hitParticles.transform.rotation = Quaternion.FromToRotation(Vector3.up, hit.normal);
			hitParticles.Emit();
			
			
           
		}

		// Send a damage message to the hit object			
		hit.collider.SendMessageUpwards("ApplyPlayerDamage", damage, SendMessageOptions.DontRequireReceiver);
		hit.collider.SendMessageUpwards("ApplyPropsDamage", damage, SendMessageOptions.DontRequireReceiver);

	}
	// get bullets left
	bulletsLeft--;

	// Register that we shot this frame,
	// so that the LateUpdate function enabled the muzzleflash renderer for one frame
	m_LastFrameShot = Time.frameCount;
	enabled = true;
	
	// Reload gun in reload Time		
	 if (bulletsLeft == 0)
      Reload();
      return;	
}
  
// a reload function to make sure the enemy isn't overpowered by giving it a brief reload time every 
// time it shoots
function Reload (){ 
// wait for a specific amount of time
yield WaitForSeconds(reloadTime); 
   
   clips--;
	bulletsLeft = bulletsPerClip; 
}

here is your problem i think:

// and make it shoot forward by giving it a velocity
clone.velocity = transform.TransformDirection (Vector3.forward * bulletVelocity);

you should do something like:

var ShootDir : Vector3;

if (!InJump) {
     ShootDir = Vector3.forward;
} else {
     // Change 0.3 to what fits you.
     ShootDir = Vector3.forward + Vector3(0,0.3,0);
}

clone.velocity = transform.TransformDirection (ShootDir * bulletVelocity);

The InJump is a boolean you can change in your jump code. You would also have to update your raycast direction with the same value, i think. PS.: I`m usually coding in c#.