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