- Home /
Array of GameObjects
Hi All.
I'm having some trouble adding and especially retrieving GameObjects from an array. Here is a code sample:
var balls = new Array();
function Start() {
// Instantiate ball for test-purpose
var newBall : GameObject = GameObject.Instantiate(ballPrefab,Vector3(10.0,0.0,10.0),Quaternion.identity) as GameObject;
balls.Add(newBall);
}
function findClosestBall(ball_x : int, ball_y : int) : GameObject {
for (var i=0; balls.length; i++){ var ball : GameObject = balls[i] as GameObject; // THIS MAKES ERROR var ballVector : Vector3 = (ball.transform.position); }
return null;
}
The error I'm getting is: NullReferenceException: Object reference not set to an instance of an object
What am I doing wrong? What is the correct way to store an array of GameObjects?
Thanks, Jonas
Answer by Jonas · Apr 15, 2010 at 09:15 AM
Problem is solved. Answer can be found at http://forum.unity3d.com/viewtopic.php?t=49078
In short, here is the code:
var balls : ArrayList;
function Start() { balls = new ArrayList();
// Instantiate ball for test-purpose var newBall = Instantiate(ballPrefab,Vector3(10.0,0.0,10.0),Quaternion.identity); balls.Add(newBall.gameObject); // Notice .gameObject }
function findClosestBall(ball_x : int, ball_y : int) : GameObject {
var closestBall : GameObject; var shortestDistance : float = 9999; var ballPos : Vector3; var coordinatePos : Vector3; var distanceVector : Vector3;
for(var ball : GameObject in balls){ ballPos = ball.transform.position; coordinatePos = Vector3(ball_x, GameController.y_height, ball_y); distanceVector = ballPos - coordinatePos;
if (distanceVector.magnitude < shortestDistance){
closestBall = ball;
shortestDistance = distanceVector.magnitude;
}
} return closestBall; }
Answer by duck · Apr 09, 2010 at 09:55 AM
your for statement has an error. It says:
for (var i=0; balls.length; i++) {
when it should say:
for (var i=0; i < balls.length; i++){
Answer by Shadamer · Nov 30, 2013 at 03:43 PM
No, he's right. That would cause the error. If balls.length is not zero, that expression evaluates to true, no matter what iteration you're on. You'll eventually hit the end of the array and be out of objects, hence the null reference.
Answer by ScottPeal · Jan 25, 2014 at 05:28 PM
I like to use
for (var i=0; i < balls.length - 1; i++)
Your answer
Follow this Question
Related Questions
Storing objects in arrays 2 Answers
Removing objects from an array 2 Answers
finding an objects index in a multi dimensional static array? 1 Answer
How to remove objects from a list ? 3 Answers