- Home /
FindGameObjectsWithTag check gameObject disabled?
Hello! I use scpipt below for automatic aiming at the nearest target. But when i disabled(or destroy) my target, unity report me "IndexOutOfRangeException: Array index is out of range."
I guess, that i need add check disabled or not my target, but i don't understant how do that, if i try check player2.active == false - it always write "true", even if i destroy it, help me please!!!
var waypoints: GameObject[] ;
var player2: GameObject[] ;
var player3: GameObject[] ;
function Update () {
player2 = GameObject.FindGameObjectsWithTag("Player2");
player3 = GameObject.FindGameObjectsWithTag("Player3");
var waypoints = new GameObject[player2.length + player3.length];
waypoints[0] = player2[0] ;
waypoints[1] = player3[0] ;
var closest: GameObject;
var closestDist = Mathf.Infinity;
for (waypoint in waypoints) {
if(waypoint == "ComputerCar"){print("sefef");}
var dist = (transform.position - waypoint.transform.position).sqrMagnitude;
if (dist < closestDist) {
closestDist = dist;
closest = waypoint;
}
}
transform.LookAt(closest.transform);
Destroy script
function Detonate () {
gameObject.active = false;
Invoke("RecoverDelay", 2);
Invoke("HealtDelay", 5);
// Create the explosion
if (explosion)
Instantiate (explosion, transform.position, transform.rotation);
}
function RecoverDelay (){
gameObject.active = true;
}
function HealtDelay (){
hitPoints = 100.0;
}
this code doesnt contain the part where you destroy or disable the object....can you upload that?
Sure! I etid my post. I add part, wich disabled gameObject
Answer by PAEvenson · Jan 10, 2013 at 08:20 PM
replace
waypoints[0] = player2[0] ;
waypoints[1] = player3[0] ;
with
if(player2 != null) waypoints[0] = player2[0] ; //waypoints[0] = player2[0] ;
if(player3 != null) waypoints[1] = player3[0] ; //waypoints[0] = player2[0] ;
I would even Change FindObjectsWithTag to FindWithTag, because I am assuming there will only be 1 player2 instance and 1 player3 instance in the scene.
The FindWithTag function will return null if no object is found(FindObjectsWithTag works the same way too, it returns null if no objects are found). It will not find disabled objects either.
Here is the reference: http://docs.unity3d.com/Documentation/ScriptReference/GameObject.FindWithTag.html
Yeah, it helps, thanks!) But for now unity report another error, when my object was disabled:
NullReferenceException: Object reference not set to an instance of an object LookAt.Update()
in this line (var dist = (transform.position - waypoint.transform.position).sqr$$anonymous$$agnitude;)
Looks like i understand how fix it - if == null - just put some other existing object=) Thank you very much!!))
player2 = GameObject.FindGameObjectsWithTag("Player2");
player3 = GameObject.FindGameObjectsWithTag("Player3");
var waypoints = new GameObject[2];
if(player2 != null) waypoints[0] = player2[0] ;
if(player3 != null) waypoints[1] = player3[0] ;
var closest: GameObject;
var closestDist = $$anonymous$$athf.Infinity;
for (waypoint in waypoints) {
if(waypoint == null) continue;
if(waypoint == "ComputerCar"){print("sefef");}
var dist = (transform.position - waypoint.transform.position).sqr$$anonymous$$agnitude;
if (dist < closestDist) {
closestDist = dist;
closest = waypoint;
}
}
if(closest != null) transform.LookAt(closest.transform);
Your answer
Follow this Question
Related Questions
If GameObject with tags not on scene 1 Answer
FindGameObjectsWithTag works only to first tagged 1 Answer
How add and mark next object? 0 Answers
Object reference not set to an instance of an object? 0 Answers
making Enemy detecting script unlimited 0 Answers