Hey guys,
I’m working on refining a lock-on script I have for a school project I’m working on.
Right now, it works as it should locking onto enemies and cycling through them. When I kill one of these enemies though, then walk into a spawn point we have, set up. The enemies spawn, but I cannot lock onto them, even though they are tagged the same as the previous and are being found just like the enemies we have spawn at the start of the game…
Is there a way to solve this?
Here’s the Lock-on code which has been edited and adapted from BurgZerg Arcades targetting system.
//The start of the lock-on system
public void AddAllEnemies()
{
GameObject[] go = GameObject.FindGameObjectsWithTag("Enemy");
foreach(GameObject enemy in go)
AddTarget(enemy.transform);
}
public void AddTarget(Transform enemy)
{
targets.Add (enemy);
}
public void RemoveTarget(Transform enemy)
{
targets.Remove (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));
});
}
public void TargetEnemy()
{
if(selectedTarget)
{
SortTargetsByDistance();
selectedTarget = targets[0];
}
else
{
int index = targets.IndexOf (selectedTarget);
if(index < targets.Count - 1)
{
index++;
}
else
{
index = 0;
}
selectedTarget = targets[index];
}
if(lockOn == true && selectedTarget == true)
{
GameObject[] lockOnTransforms = GameObject.FindGameObjectsWithTag("LockOn");
foreach(GameObject lockOnTransform in lockOnTransforms)
{
Destroy(lockOnTransform);
}
Transform lockOnClone = Instantiate(lockOn, transform.position, Quaternion.identity) as Transform;
lockOnClone.position = selectedTarget.position + new Vector3(0f, 4.5f, 0f);
lockOnClone.parent = selectedTarget.transform;
}
}
void DeselectTarget()
{
selectedTarget = null;
LockedOn = false;
}
IEnumerator DeselectEnemy()
{
deselectTimer = false;
yield return new WaitForSeconds(0.5f);
deselectTimer = true;
LockedOn = false;
}