Is there a better way to do this? (finding scripts of different names but running function with same name regardless)

Trying to get whatever I shoot to run its TakeDamage function. So far this is just two things but it might be more. Is this the best way to do it or should I make each thing a take damage script and use that for anything that gets shot? I hope there is a way to just call the function from a script found on the shot game object. Thanks for any help!

        EnemyManager enemyManager = shootHit.collider.GetComponent<EnemyManager>();
        SpawnerManager spawnerManager = shootHit.collider.GetComponent<SpawnerManager>();

        // If there is an enemy manager script...
        if (enemyManager != null)
        {
            //... and if the enemy or spawner is not dead
            if (!enemyManager.isDead)
            {
                // ... the enemy should take damage.                                       
                enemyManager.TakeDamage(damage);
            }
        }
        //same thing with spawner manager
        // probably a better way to organize these two things, especially if it comes out to be more than 2 things
        if (spawnerManager != null)
        {
            
            if (!spawnerManager.isDead)
            {
                                                    
                spawnerManager.TakeDamage(damage);
            }
        }

http://answers.unity3d.com/answers/427817/view.html

Of course is not the best way. What you can do is make an interface like this:

 public interface IObjectThatCanGetDamage
 {
      void TakeDamage(float damage);
      bool IsDead { get;set; }
 }

And implement that interface in all your objects that can get damage.

Then in your collision detection:

 private void OnCollisionEnter2D(Collision2D collision)
 {
        var collisionObtained = collision.transform.GetComponent<IObjectThatCanGetDamage>(); 

        if(collisionObtained is IObjectThatCanGetDamage)
        {
          if(!collisionObtained.IsDead)
            collisionObtained.TakeDamage(10f);//Set a random damage...
        }
 }

But in your code i can see that you are using RaycastHit, is almost the same

private void SetDamage()
{
      var collisionObtained = shootHit.collider.GetComponent<IObjectThatCanGetDamage>(); 

        if(collisionObtained is IObjectThatCanGetDamage)
        {
            if(!collisionObtained.IsDead)
              collisionObtained.TakeDamage(10f);//Set a random damage...
        }
}