- Home /
Why does my null reference become instantiated?
I create an array of Player with length of 2. I instantiate 1 of the 2 Player references and I set the other one to null. I run the game, and, as expected, I get alternating Logs of "100" and "NULL". If I go to Visual Studio and edit the script (i.e. add and then remove a blank line), then when I go back to Unity, I only get Logs of "100" for both Player objects. Why does players[0] become instantiated?
using UnityEngine;
using System.Collections;
public class Test : MonoBehaviour {
Player[] players;
void Start()
{
players = new Player[2];
players[0] = null;
players[1] = new Player();
}
void Update()
{
for (int i = 0; i < 2; i++)
{
if (players[i] == null)
{
Debug.Log("NULL");
}
else
{
Debug.Log(players[i].health);
}
}
}
}
[System.Serializable]
public class Player
{
public int health = 100;
}
Answer by LVBen · May 19, 2013 at 10:56 PM
After spending several hours across multiple days, I found some good information about this. Apparently, the issue is with the Unity serialization, in that Unity just doesn't serialize null references for all classes.
If I make Player inherit from ScriptableObject, then Unity will serialize both objects and null references for that class.
This thread was quite helpful: http://forum.unity3d.com/threads/140666-Serialization-of-list-of-classes