[csharp]
using UnityEngine;
using System.Collections;
using System.Collections.Generic; // which include 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;
AddAllEnemies();
}
// Get a list of enemies
public void AddAllEnemies () {
GameObject[] go = GameObject.FindGameObjectsWithTag("Enemy");
foreach(GameObject enemy in go)
AddTarget(enemy.transform);
}
public void AddTarget(Transform enemy) {
targets.Add(enemy);
}
// Sort by distance in descending order
private void SortTargetsByDistance () {
targets.Sort(delegate(Transform t1, Transform t2) {
return Vector3.Distance(t1.position, myTransform.position).CompareTo(Vector3.Distance(t2.position, myTransform.position));
});
}
// Some sets
private void TargetEnemy () {
if (selectedTarget == null) {
SortTargetsByDistance();
selectedTarget = targets[0];
}
else {
// Loop switcher in List<Transform> targets
int index = targets.IndexOf(selectedTarget);
if (index < targets.Count - 1)
index++;
else
index = 0;
DselectTarget();
selectedTarget = targets[index];
}
SelectTarget();
}
// Render the selectedTarget
private void SelectTarget () {
selectedTarget.renderer.material.color = Color.red;
}
private void DselectTarget () {
selectedTarget.renderer.material.color = Color.blue;
}
// Update is called once per frame
void Update () {
if (Input.GetKeyDown(KeyCode.Tab)) {
TargetEnemy();
}
}
}
作者:janpylx