Why is my rocket taking damage away from all objects?

I have 2 tanks and when I shoot them it takes health away from both of them instead of the one that I hit.

using UnityEngine;

public class Rocket_Bullet : MonoBehaviour
{
public float bulletForce = 300f;

public float explosivePower = 5.0f;
public float radius = 10f;
public float vDamageAmmount = 34f;

public AudioClip explosionSound;
public Transform explosionPre; 

bool rocketFired = true;

void Start () 
{

}

void FixedUpdate () 
{
	ForceOnBullet ();
}

void Update () 
{
	if (rocketFired) 
	{
		Destroy (gameObject, 10f);
	}
}

void OnCollisionEnter (Collision col) 
{
	if (col.gameObject) 
	{
		Instantiate (explosionPre, gameObject.transform.position, gameObject.transform.rotation);
		GetComponent<Renderer> ().enabled = false; 
		GetComponent<CapsuleCollider> ().enabled = false;
		GetComponent<AudioSource>().PlayOneShot (explosionSound, 1f);
		Destroy (gameObject, 3f);
	}

	if (col.gameObject.tag == "Player") 
	{
		AimAnim.aimAnimInstance.health-= 100;
	}

	if (col.gameObject.tag == "Vehicle") 
	{
		ApplyVehicleDamage ();
		print ("rocket hit vehicle");
	}

	Vector3 explosionPos = transform.position;

	Collider[] colliders = Physics.OverlapSphere (explosionPos, radius);
	foreach (Collider hit in colliders) 
	{
		Rigidbody rb = hit.GetComponent<Rigidbody> ();

		if (rb != null)
			rb.AddExplosionForce (explosivePower, explosionPos, radius);
	}
}

void ForceOnBullet () 
{
	GetComponent<Rigidbody>().AddForce (transform.forward * bulletForce);
}

void ApplyVehicleDamage () 
{
	Vehicle.vInstance.vehicleHealth -= vDamageAmmount;
}

}

How do I fix it so I only take health away from the only one that the rocket hit?

The problem lies in the way you’re trying to declare your vehicle instances. Rather than using Vehicle as the definition for each Vehicle object, you’re using it as a container for a single one.

To make this cleaner and more versatile, here’s my recommendation:

// First, you need a non-static vehicle
// Extend MonoBehaviour to allow it to attach to the vehicle.
public class Vehicle : MonoBehaviour
{
	// Next, include your health inside here.
	// This allows it to be specific to each vehicle instance
	// Making the variable private isn't necessary, but can be a good habit
	private float health;
	public float startingHealth; // define as intended

	void Start()
	{
		health = startingHealth; // Make sure the tank has health to begin with
	}

	// With a private health variable, you'll need a way for
	// a projectile to tell it to take damage
	// (the function name will make more sense when it's used)
	void DealDamage(float damageAmount)
	{
		health -= damageAmount;
	}
}

// Now, when the projectile hits the vehicle,
// you can tell the vehicle that you're damaging it
public class Rocket_Bullet : MonoBehaviour
{
	void OnCollisionEnter (Collision col) 
	{
		if (col.gameObject.tag == "Vehicle") 
		{
			Vehicle targetHit = col.gameObject.GetComponent<Vehicle>();
			ApplyVehicleDamage(targetHit);
			print ("rocket hit vehicle");
		}
	}

	void ApplyVehicleDamage(Vehicle target) 
	{
		target.DealDamage(vDamageAmmount);
	}
}

It’s a bit to cover all at once if you’re not already familiar with the concepts, but these should function adequately as a baseline for how to get started.

Neither the projectile nor the vehicle are static classes and none of what they do in my example need static variables. When the projectile hits the vehicle, it requests the script from what it hits ( Vehicle targetHit = col.gameObject.GetComponent<Vehicle>(); ).

With the script acquired in a temporary variable, you can now communicate to the target vehicle that it should take damage, through target.DealDamage(vDamageAmmount);.