So basically I have a VERY simple combat system in place where when you click it draws a ray in front of you, if you hit a game object you damage game object, you tab through to target the right enemy then click to attack and damage, the problem is that when I tab through to a target, no matter what enemy I attack I hit the one targeted no matter where it is. My Scripts. Targetting: Code (csharp): using UnityEngine; using System.Collections; using System.Collections.Generic; public class Targetting : MonoBehaviour { public List<Transform> targets; public Transform selectedTarget; private Transform myTransform; // Use this for initialization void Start () { targets = new List<Transform>(); selectedTarget = null; myTransform = transform; AddAllEnemys(); } public void AddAllEnemys() { GameObject[] go = GameObject.FindGameObjectsWithTag("Enemy"); foreach(GameObject enemy in go) AddTarget(enemy.transform); } public void AddTarget(Transform enemy) { targets.Add (enemy); } private void SortTargetsByDistance() { targets.Sort(delegate(Transform t1, Transform t2) { return Vector3.Distance(t1.position, myTransform.position).CompareTo(Vector3.Distance(t2.position, myTransform.position)); }); } private void TargetEnemy() { if(selectedTarget == null) { SortTargetsByDistance(); selectedTarget = targets[0]; } else { int index = targets.IndexOf(selectedTarget); if(index < targets.Count - 1) { index++; } else { index = 0; } DeselectTarget(); selectedTarget = targets[index]; } SelectTarget(); } public void SelectTarget() { selectedTarget.renderer.material.color = Color.red; PlayerAttack pa = (PlayerAttack)GetComponent("PlayerAttack"); pa.target = selectedTarget.gameObject; } private void DeselectTarget() { selectedTarget.renderer.material.color = Color.blue; selectedTarget = null; } // Update is called once per frame void Update () { if(Input.GetKeyUp(KeyCode.Tab)) { // var ray1 = new Ray( transform.position, transform.forward ); // var int_HitRadiusDistance = 4; // if (Physics.Raycast (ray1, int_HitRadiusDistance )) // { TargetEnemy(); } } } PlayerAttack: Code (csharp): using UnityEngine; using System.Collections; public class PlayerAttack : MonoBehaviour { public GameObject target; public float attackTimer; public float coolDown; private Transform myTransform; // Use this for initialization void Start () { attackTimer = 0; coolDown = 1f; } // Update is called once per frame void Update () { // makes sure it does devide by zero and destroy the universe. if(attackTimer > 0) attackTimer -= Time.deltaTime; if(attackTimer < 0) attackTimer = 0; //controlls the actual attacking. if(Input.GetKeyUp(KeyCode.Mouse0)) { if(attackTimer == 0) { var ray1 = new Ray( transform.position, transform.forward ); var int_HitRadiusDistance = 4; if (Physics.Raycast (ray1, int_HitRadiusDistance, SelectTarget )) { Attack(); attackTimer = coolDown; } } } } //finally does the damage. private void Attack(){ EnemyHealth eh = (EnemyHealth)target.GetComponent("EnemyHealth"); eh.AddjustCurrentHealth(-10); } } What ya'll think? I know I'm missing something here, also if ya'll want enemy AI and player/enemy health scripts lemmie know.