Hi guys, i have this Enemy Script where my enemys should follow my playerparts(snakelike player)
the segments get instantiated while playing so i have to get a reference to it in ‘update function’ i quess?! If the enemys are in range they attack the player parts and destroy them. BUT NOW if they had destroyed one part they just keep standing and not following anymore. I think they are stuck on the old reference of the last part they worked on so how can i let them search for a new part to follow?! Also i have the problem if there more then one part of the same type they just following the first one, is there maybe an easy solution? I just figured out to make an array of all segment positions and look what range is the shortest but im not really sure how to work that out right now.
Transform Head;
Transform segpos1;
Transform segpos2;
Transform segpos3;
Transform segpos4;
float speed = 1.8f;
float minDistance = 0.5f;
float rangehead;
float rangeseg1 = 100;
float rangeseg2 = 100;
float rangeseg3 = 100;
float rangeseg4 = 100;
void Start()
{
Head = GameObject.FindGameObjectWithTag("Head").transform;
}
void Update()
{
if (Head != null)
{
rangehead = Vector2.Distance(transform.position, Head.position);
if (rangehead < rangeseg1 && rangehead < rangeseg2 && rangehead < rangeseg3 && rangehead < rangeseg4)
{
if (rangehead > minDistance)
{
transform.position = Vector2.MoveTowards(transform.position, Head.position, speed * Time.deltaTime);
}
}
}
if (segpos1) { }
else
{
if (GameObject.FindWithTag("seg1"))
{
segpos1 = GameObject.FindWithTag("seg1").transform;
}
}
if (segpos1 != null)
{
rangeseg1 = Vector2.Distance(transform.position, segpos1.position);
if (rangeseg1 < rangehead && rangeseg1 < rangeseg2 && rangeseg1 < rangeseg3 && rangeseg1 < rangeseg4)
{
if (rangeseg1 > minDistance )
{
transform.position = Vector2.MoveTowards(transform.position, segpos1.position, speed * Time.deltaTime);
}
}
}
if (segpos2) { }
else
{
if (GameObject.FindWithTag("seg2").transform)
{
segpos2 = GameObject.FindWithTag("seg2").transform;
}
}
if (segpos2 != null)
{
rangeseg2 = Vector2.Distance(transform.position, segpos2.position);
if (rangeseg2 < rangehead && rangeseg2 < rangeseg3 && rangeseg2 < rangeseg4 && rangeseg2 < rangeseg1)
{
if (rangeseg2 > minDistance )
{
transform.position = Vector2.MoveTowards(transform.position, segpos2.position, speed * Time.deltaTime);
}
}
}
if (segpos3) { }
else
{
if (GameObject.FindWithTag("seg3").transform)
{
segpos3 = GameObject.FindWithTag("seg3").transform;
}
}
if (segpos3 != null)
{
rangeseg3 = Vector2.Distance(transform.position, segpos3.position);
if (rangeseg3 < rangehead && rangeseg3 < rangeseg2 && rangeseg3 < rangeseg1 && rangeseg3 < rangeseg4)
{
if (rangeseg3 > minDistance)
{
transform.position = Vector2.MoveTowards(transform.position, segpos3.position, speed * Time.deltaTime);
}
}
}
if (segpos4) { }
else
{
if (GameObject.FindWithTag("seg4").transform)
{
segpos4 = GameObject.FindWithTag("seg4").transform;
}
}
if (segpos4 != null)
{
rangeseg4 = Vector2.Distance(transform.position, segpos4.position);
if (rangeseg4 < rangeseg1 && rangeseg4 < rangeseg2 && rangeseg4 < rangeseg3 && rangeseg4 < rangehead)
{
if (rangeseg4 > minDistance)
{
transform.position = Vector2.MoveTowards(transform.position, segpos4.position, speed * Time.deltaTime);
}
}
}
if (segpos1 = null)
{rangeseg1 = 100f; }
else if (segpos2 = null)
{ rangeseg2 = 100f; }
else if (segpos3 = null)
{ rangeseg3 = 100f; }
else if (segpos4 = null)
{ rangeseg4 = 100f; }
}