Good Evening All! I've got some code here that is not having any compiler errors, but it's not functioning correctly. I am able to tab target (somewhat reliably), however, my text stating my distance from the target will either function if I manually drag my target into the inspector, or give me a "AnotherTransform has not been assigned". This makes sense as I can physically see it empty, but I've tried to give it a null setting, I've tried to wait until I can tab target, and none of them seem to work unless I put a specific object in there first. So I get tab targeting, but my distance is always to the object I placed in there in the inspector. From "private void ShowSelectedTarget" down is really where I think the issue is that I can't seem to mix around any which way with any success. Any and all help would be most appreciated! Code (CSharp): using UnityEngine; using System.Collections; using System.Collections.Generic; public class targeting : MonoBehaviour { public Transform OneTransform; public Transform AnotherTransform; public UnityEngine.UI.Text distLabel; // <-- Assign the Text element in the Inspector view. public List<Transform> targets; public Transform selectedTarget; public string targetTag = "Targetable"; private Transform myTransform; void Start () { targets = new List<Transform>(); selectedTarget = null; myTransform = transform; AddAllTargetables(); } public void AddAllTargetables() { GameObject[] go = GameObject.FindGameObjectsWithTag("Targetable"); 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 TargetTargetable() { if(selectedTarget == null) { SortTargetsByDistance(); selectedTarget = targets[0]; } //// EDIT: Add this code; now we can jump 2 all the found enemy's by pressing TAB else { int index = targets.IndexOf(selectedTarget); // because it starts at 0 so that's acually already 1 if (index < targets.Count -1) { index++; } // if we are at the LAST enemy in ar found list, jump back to the first enemy in the list else { index = 0; } ShowDeSelectedTarget(); selectedTarget = targets[index]; } ShowSelectedTarget(); } private void ShowSelectedTarget() { Transform AnotherTransform = selectedTarget.FindChild ("Name"); Transform name = selectedTarget.FindChild ("Name"); if (name == null) { Debug.LogError ("Could not find the Name on " + selectedTarget.name); return; } name.GetComponent<TextMesh> ().text = selectedTarget.GetComponent<ring>().name; name.GetComponent<MeshRenderer> ().enabled = true; } private void ShowDeSelectedTarget() { selectedTarget.FindChild("Name").GetComponent<MeshRenderer> ().enabled = false; // name.GetComponent<MeshRenderer> ().enabled = false; selectedTarget = null; } void Update () { if (OneTransform) { // Transform AnotherTransform = selectedTarget; float dist = Vector3.Distance(OneTransform.position, AnotherTransform.position); distLabel.text = dist.ToString("Tgt: 0.0ft"); } if(Input.GetKeyDown(KeyCode.Tab)) { Transform AnotherTransform = selectedTarget; TargetTargetable(); } } }
Anybody have any ideas? Do I need to provide more information? Narrow something down? Please let me know what you need in order to help my helplessness