Laravel.io
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Tower : MonoBehaviour {

    Transform turretTransform;

    public float range = 10f;
    public GameObject bulletPrefab;

    float fireCoolDown = 0.5f;
    float fireCoolDownLeft = 0;

    public float damage = 1;

    public int ammo = 1;

    // Use this for initialization
    void Start () {
        turretTransform = transform.Find("Base").transform.Find("Turret");
	}
	
	// Update is called once per frame
	void Update () {
        SolMinion[] solMinions = GameObject.FindObjectsOfType<SolMinion>();

        SolMinion nearestMinion = null;
        float dist = Mathf.Infinity;

        foreach(SolMinion e in solMinions)
        {
            float d = Vector3.Distance(this.transform.position, e.transform.position);
            if(nearestMinion == null || d < dist)
            {
                nearestMinion = e;
                dist = d;
            }
        }

        if(nearestMinion == null)
        {
            Debug.Log("No minions?");
            return;
        }

        Vector3 dir = nearestMinion.transform.position - this.transform.position;
        Quaternion lookRot = Quaternion.LookRotation(dir);
        turretTransform.rotation = Quaternion.Euler(0, lookRot.eulerAngles.y, 0);

        fireCoolDownLeft -= Time.deltaTime;

        if(fireCoolDownLeft <=0 && dir.magnitude <= range && ammo == 1)
        {
            ammo = 0;
            fireCoolDownLeft = fireCoolDown;
            ShootAt(nearestMinion);
        }
	}

    void ShootAt(SolMinion solMinion)
    {
        GameObject bulletGO = (GameObject)Instantiate(bulletPrefab, this.transform.position, this.transform.rotation);

        Bullet b = bulletGO.GetComponent<Bullet>();
        b.target = solMinion.transform;
        b.damage = damage;
    }
}

Please note that all pasted data is publicly available.