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 *as GameObject; // THIS MAKES ERROR*
 *var ballVector : Vector3 = (ball.transform.position);*
*}*
*return null;*
*```*
*<p>}</p>*
*<p>The error I'm getting is:*
*<em>NullReferenceException: Object reference not set to an instance of an object</em></p>*
*<p>What am I doing wrong? What is the correct way to store an array of GameObjects?</p>*
*<p>Thanks,*
*Jonas</p>*

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++){

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; }

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.

I like to use

for (var i=0; i < balls.length - 1; i++)