continuously Find closest with tag, in update.
How can I continue to update the closest object with tag? I want to know what object is closest at all times, but it never changes, just sets the closest once and it stays at the same spot.
I appreciate any help here. Thanks
using UnityEngine; using System.Collections; using UnityEngine.Networking;
public class ESportBallMovement : MonoBehaviour {
GameObject[] ballWayPoints;
GameObject closest;
private Vector3 targetPos;
float distance = Mathf.Infinity;
public float speed;
float step;
void Start()
{
ballWayPoints = GameObject.FindGameObjectsWithTag("ballWaypoint");
step = speed * Time.deltaTime;
}
void Update ()
{
FindClosestWaypoint ();
//sets the target position and moves toward it
targetPos = (closest.transform.position);
transform.position = Vector3.MoveTowards (transform.position, targetPos, step);
}
GameObject FindClosestWaypoint()
{
//populates the array of ballWaypoints
foreach (GameObject ballWayPoint in ballWayPoints)
{
//finds the distance between ball and the ballWaypoints
Vector3 diff = ballWayPoint.transform.position - transform.position;
float curDistance = diff.sqrMagnitude;
//finds the closest ballWaypoint
if (curDistance < distance)
{
closest = ballWayPoint;
distance = curDistance;
}
}
Debug.Log (" Current Waypoint:" + closest.name);
return closest;
}
}
Answer by TheyLeftMe4Dead · Feb 24, 2017 at 04:33 AM
The problem is in your FindClosestWaypoint method. I would add a variables called smallestDistance and get rid of line 31 completely. I would change your if statement to...
if (diff < smallestDistance)
{
closest = ballWayPoint;
smallestDistance = diff;
}
Answer by DustinBoyle · Feb 24, 2017 at 06:40 PM
Thanks for the reply @TheyLeftMe4Dead, I ended up finding the solution, I was never resetting the distance. Here is the code with the fix. GameObject FindClosestWaypoint() { //reset distance distance = Mathf.Infinity; //populates the array of ballWaypoints foreach (GameObject ballWayPoint in ballWayPoints) { //finds the distance between ball and the ballWaypoints Vector3 diff = ballWayPoint.transform.position - transform.position; float curDistance = diff.sqrMagnitude; //finds the closest ballWaypoint if (curDistance < distance) { closest = ballWayPoint; distance = curDistance; } } //Debug.Log (" Closest:" + closest.name); return closest; }
Your answer
Follow this Question
Related Questions
Find with tag not working 2 Answers
checking if gameobject exists 1 Answer
How can I count the number of prefab clones? 0 Answers
NullReferenceException randomly occurs 2 Answers
How to use FindGameObjectsWithTag to return individual components 0 Answers