Why at end of this function I have a null O.o ?!

private void CreateCustomGameConfiguration () {
        GameConfiguration confuguration = new GameConfiguration ();
        confuguration.playerPosition = new Vector3 (-40, 5, -40);
        confuguration.playerRotation = new Quaternion (0, 44, 0, 0);
        confuguration.enemyConfigurations = new EnemyConfiguration[5];
        confuguration.enemyConfigurations [0] = new EnemyConfiguration ();
        confuguration.enemyConfigurations [0].coordinate_x = 0;
        confuguration.enemyConfigurations [0].coordinate_y = 2;
        confuguration.enemyConfigurations [0].coordinate_z = 0;
        confuguration.enemyConfigurations [0].rotation = 0;
        confuguration.enemyConfigurations [0].life = 10;
        confuguration.enemyConfigurations [0].state = Constants.EnemyState.Patroling;
        confuguration.enemyConfigurations [0].character = 0;

        confuguration.enemyConfigurations [1] = new EnemyConfiguration ();
        confuguration.enemyConfigurations [1].coordinate_x = 30;
        confuguration.enemyConfigurations [1].coordinate_y = 2;
        confuguration.enemyConfigurations [1].coordinate_z = -50;
        confuguration.enemyConfigurations [1].rotation = 0;
        confuguration.enemyConfigurations [1].life = 10;
        confuguration.enemyConfigurations [1].state = Constants.EnemyState.Patroling;
        confuguration.enemyConfigurations [1].character = 1;

        confuguration.enemyConfigurations [2] = new EnemyConfiguration ();
        confuguration.enemyConfigurations [2].coordinate_x = 30;
        confuguration.enemyConfigurations [2].coordinate_y = 2;
        confuguration.enemyConfigurations [2].coordinate_z = -50;
        confuguration.enemyConfigurations [2].rotation = 10;
        confuguration.enemyConfigurations [2].life = 10;
        confuguration.enemyConfigurations [2].state = Constants.EnemyState.Patroling;
        confuguration.enemyConfigurations [2].character = 2;

        confuguration.enemyConfigurations [3] = new EnemyConfiguration ();
        confuguration.enemyConfigurations [3].coordinate_x = 30;
        confuguration.enemyConfigurations [3].coordinate_y = 2;
        confuguration.enemyConfigurations [3].coordinate_z = -50;
        confuguration.enemyConfigurations [3].rotation = 20;
        confuguration.enemyConfigurations [3].life = 10;
        confuguration.enemyConfigurations [3].state = Constants.EnemyState.Patroling;
        confuguration.enemyConfigurations [3].character = 3;

        confuguration.enemyConfigurations [4] = new EnemyConfiguration ();
        confuguration.enemyConfigurations [4].coordinate_x = 30;
        confuguration.enemyConfigurations [4].coordinate_y = 2;
        confuguration.enemyConfigurations [4].coordinate_z = -50;
        confuguration.enemyConfigurations [4].rotation = 30;
        confuguration.enemyConfigurations [4].life = 10;
        confuguration.enemyConfigurations [4].state = Constants.EnemyState.Patroling;
        confuguration.enemyConfigurations [4].character = 4;

        Debug.Log ("check" + (confuguration.enemyConfigurations [0] == null)); //this is null

        savingManager.SaveState (confuguration);
    }

Someone can say me why I have a null here?

Thanks

Is EnemyConfiguration a MonoBehaviour?

yes

You shouldn’t instantiate a MonoBehaviour. Instead you should add it to the scene on a GameObject using AddComponent.

There’s two Unity-specific things going on here:

  • as @jvo3dc said, MonoBehaviours can’t be properly instantiated with their constructor. The MonoBehaviour is a class that manipulates the GameObject it’s attached to, so it needs to be attached to a GameObject.
  • Unity “helpfully” returns true for “x == null” if x has been destroyed (so if you called Destroy on it, it was in a scene you unloaded, etc.). MonoBehaviours that are created through their constructor are considered destroyed, so the code returns true, even though you just created the object.

To me, it looks like EnemyConfiguration doesn’t have to be a MonoBehaviour. Instead, it could be an object that you give to a MonoBehaviour for it to act on. Without knowing more about your code, it’s hard to help more than that.

Thanks