Spawning game objects at random positions without them to overlap

Now i searched a lot for my question but nothing worked. I wanted to spawn a list of game objects (nodes / images) at random positions and for obvious overlapping does occurs. My program spawns a list of game objects and then check for overlapping objects. If objects overlaps then my code will move away the game object from other object it overlapped with by a certain amount to remove this overlapping. All this done then game objects will destroy themselves after 3 seconds and again spawn the another list of game objects as same and process repeats.

Doing the same with spawning the game objects again and again till i get my result could be very taxing, so i choose this approach. The problem is that when i put the method to reposition the overlapping game objects then it shows an error of “NullReferenceException: Object reference not set to an instance of an object”.

My method to reposition the overlapping objects is down here,

private void RepositionTheNodes(ref List<GameObject> blankList, float gap, bool run = true)
    {
        while (true)
        {
            if (blankList.Count == 0) return;
            if (!run) return;
            run = false;

            foreach (GameObject node in blankList)
            {
                Collider2D[] results = new Collider2D[blankList.Count];
                var size = Physics2D.OverlapCircleNonAlloc(node.transform.position, GetThePrefabDimension.Height * 0.5f, results);

                if (size <= 0) continue;
                run = true;
                foreach (Collider2D other in results)
                {
                    var position = node.transform.position;
                    Vector3 directionVector = position - other.transform.position;
                    float offset = Mathf.Abs(GetThePrefabDimension.Height - Vector3.Magnitude(directionVector) + gap);
                    directionVector = directionVector.normalized * offset;
                    position += directionVector;
                    if (WithinBounds(position)) node.transform.position = position;
                }
            }
        }
    }

It does not even remotely matter what you are trying to do when this happens.

The answer is always the same… ALWAYS. It is the single most common error ever.

Don’t waste your life spinning around and round on this error. Instead, learn how to fix it fast… it’s EASY!!

Some notes on how to fix a NullReferenceException error in Unity3D

  • also known as: Unassigned Reference Exception
  • also known as: Missing Reference Exception
  • also known as: Object reference not set to an instance of an object

http://plbm.com/?p=221

The basic steps outlined above are:

  • Identify what is null
  • Identify why it is null
  • Fix that.

Expect to see this error a LOT. It’s easily the most common thing to do when working. Learn how to fix it rapidly. It’s easy. See the above link for more tips.

You need to figure out HOW that variable is supposed to get its initial value. There are many ways in Unity. In order of likelihood, it might be ONE of the following:

  • drag it in using the inspector
  • code inside this script initializes it
  • some OTHER external code initializes it
  • ? something else?

This is the kind of mindset and thinking process you need to bring to this problem:

https://discussions.unity.com/t/814091/4

Step by step, break it down, find the problem.

Here is a clean analogy of the actual underlying problem of a null reference exception:

https://discussions.unity.com/t/840647/7