Question by
drdunson · Mar 18 at 10:28 PM ·
script error
The enemy ignores the targets. This is the code that I am using:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
public class EnemyMove : MonoBehaviour
{
private NavMeshAgent Nav;
private Animator Anim;
private Transform TheTarget;
private float DistanceToTarget;
private int TargetNumber = 1;
[SerializeField] float StopDistance = 2.0f;
[SerializeField] int MaxTargets = 16;
[SerializeField] Transform Target1;
[SerializeField] Transform Target2;
[SerializeField] Transform Target3;
[SerializeField] Transform Target4;
[SerializeField] Transform Target5;
[SerializeField] Transform Target6;
[SerializeField] Transform Target7;
[SerializeField] Transform Target8;
[SerializeField] Transform Target9;
[SerializeField] Transform Target10;
[SerializeField] Transform Target11;
[SerializeField] Transform Target12;
[SerializeField] Transform Target13;
[SerializeField] Transform Target14;
[SerializeField] Transform Target15;
[SerializeField] Transform Target16;
// Start is called before the first frame update
void Start()
{
Nav = GetComponent<NavMeshAgent>();
Anim = GetComponent<Animator>();
TheTarget = Target1;
}
// Update is called once per frame
void Update()
{
DistanceToTarget = Vector3.Distance(TheTarget.position, transform.position);
if(DistanceToTarget > StopDistance)
{
Nav.SetDestination(TheTarget.position);
}
if (DistanceToTarget < StopDistance)
{
TargetNumber++;
if(TargetNumber > MaxTargets)
{
TargetNumber = 1;
}
SetTarget();
}
}
void SetTarget()
{
if(TargetNumber == 1)
{
TheTarget = Target1;
}
if (TargetNumber == 2)
{
TheTarget = Target2;
}
if (TargetNumber == 3)
{
TheTarget = Target3;
}
if (TargetNumber == 4)
{
TheTarget = Target4;
}
if (TargetNumber == 5)
{
TheTarget = Target5;
}
if (TargetNumber == 6)
{
TheTarget = Target6;
}
if (TargetNumber == 7)
{
TheTarget = Target7;
}
if (TargetNumber == 8)
{
TheTarget = Target8;
}
if (TargetNumber == 9)
{
TheTarget = Target9;
}
if (TargetNumber == 10)
{
TheTarget = Target10;
}
if (TargetNumber == 11)
{
TheTarget = Target11;
}
if (TargetNumber == 12)
{
TheTarget = Target12;
}
if (TargetNumber == 13)
{
TheTarget = Target13;
}
if (TargetNumber == 14)
{
TheTarget = Target14;
}
if (TargetNumber == 15)
{
TheTarget = Target15;
}
if (TargetNumber == 16)
{
TheTarget = Target16;
}
}
}
Comment
This code does the same but is much shorter and easier to understand imho:
public class EnemyMove : MonoBehaviour
{
[SerializeField] NavMeshAgent navAgent = null;// fill this in the inspector
[SerializeField] Animator animator = null;// fill this in the inspector
[SerializeField] float stopDistance = 2.0f;// fill this in the inspector
[SerializeField] Transform[] targets = null;// fill this in the inspector
int targetIndex = 0;
Transform target = null;
void Start ()
{
target = targets[targetIndex];
}
void Update ()
{
float distance = Vector3.Distance( transform.position , target.position );
if( distance>stopDistance )
{
navAgent.SetDestination( target.position );
}
else
{
targetIndex = (targetIndex+1)%(targets.Length-1);
target = targets[targetIndex];
}
}
}