Difficulty in referencing a waypoint from an array

Hello all,

Let me start off by saying that I started out as a noob to programming/scripting before touching Unity, so apologies if this is a simple question.

In my game, I’m trying to make a vehicle follow waypoints. To do this, I made a gameobject (called Circuit), with a script attached that manages the waypoints. The script builds an array of all waypoints (children of the gameobject ‘Circuit’) and has a public Transform that references the transform component of the currently active waypoint.

The script references the first waypoint correctly, but I’m encountering a NullReferenceException as soon as the vehicle moves in range of the first waypoint, and the script attempts to reference the second waypoint. I’m getting a NullReferenceException, which is a common error, I gather. However, none of the explanations or examples online seem to help me resolve my issue.

The code is attached below:
using UnityEngine;
using System.Collections;

public class WaypointManager : MonoBehaviour {
	private Transform[] waypointArray1;  // First array used to load all children of gameobject that has all the waypoints as children.
	private Transform[] waypointArray2;  // Second array used to load all children minus the gameobject itself.
	public int childCount;               // The number of waypoints.
	private float waypointTimer;         // Not yet used.
	public Rigidbody Vehicle;            // The vehicle that follows the waypoints.
	public int activeWaypointNo;         // The current waypoint number.
	public Transform activeWaypoint;     // References the current waypoint. 
	public float tagDistanceSqr;         // The distance at which a waypoint is seen as 'tagged', and the next waypoint becomes active.

	// Use this for initialization
	void Start () {
		childCount = GetComponentsInChildren<Transform>().Length-1;
		activeWaypointNo = childCount-1;
		Transform[] waypointArray2 = new Transform[childCount];
		Transform[] waypointArray1 = GetComponentsInChildren<Transform>();
		for (int i = 1; i < childCount+1f; i++) {
			waypointArray2 [i - 1] = waypointArray1 *;*
  •  	}*
    
  •  activeWaypoint = waypointArray2 [activeWaypointNo].transform;*
    
  • }*

  • // Update is called once per frame*

  • void FixedUpdate () {*

  •  if (((Mathf.Pow ((activeWaypoint.position.x - Vehicle.position.x), 2f)) + (Mathf.Pow ((activeWaypoint.position.y - Vehicle.position.y), 2f))) <= tagDistanceSqr && activeWaypointNo > 0) {  //This checks if the vehicle is within distance of the waypoint, signalling the next waypoint to become active.*
    
  •  	activeWaypointNo = activeWaypointNo - 1;*
    
  •  	activeWaypoint = waypointArray2[activeWaypointNo];   // Exception is thrown at this line:  'System.NullReferenceException has been thrown'*
    
  •  }*
    
  • }*
    }

Thanks in advance for any help!

The NullReference exception indicates that waypointArray2 is uninitialized. This is because, inside of Start(), you’re creating local variables with the same name as your fields, instead of initializing the fields.

Remove the Transform in front of waypointArray2 and waypointArray1 and you’ll see the NullRef go away.