Object reference not set to an instance of an object?

Okay. I have 2 prefabs for characters. In main menu you have models of them which can be selected which one of these you want by deactivating the other one. I made this

    void Awake()
    {
            DontDestroyOnLoad(Character);
            DontDestroyOnLoad(GCharacter);
    }

I have button that load other scene and by this code I detect which prefab I want to spawn but don’t working

using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
using System.Collections;
using System;

public class Spawner : MonoBehaviour
{
    public GameObject CharacterMainMen;
    public GameObject GCharacterMainMen;

    public Transform Spawnpoint;
    public Transform SpawnpointG;
    public GameObject CharacterPrefab;
    public GameObject GCharacterPrefab;

    void Start ()
    {
        CharacterMainMen = GameObject.FindWithTag("CharacterMainMen");
        GCharacterMainMen = GameObject.FindWithTag("GCharacterMainMen");

        if (CharacterMainMen.activeSelf == true)
        {
            SpawnB();
        }

        if (GCharacterMainMen.activeSelf == true)
        {
            SpawnG();
        }
    }
	
	void Update ()
    {

    }

    void SpawnB()
    {
        Instantiate(CharacterPrefab, Spawnpoint.position, Spawnpoint.rotation);
    }

    void SpawnG()
    {
        Instantiate(GCharacterPrefab, SpawnpointG.position, SpawnpointG.rotation);
    }
}

It works only if I selected The Character Model in the main menu and in unity says this error:
NullReferenceException: Object reference not set to an instance of an object Spawner.Start () (at Assets/Scenes/Spawner.cs:27)
NullReferenceException: Object reference not set to an instance of an object Spawner.Start () (at Assets/Scenes/Spawner.cs:22)

GameObject.FindWithTag only finds active GameObjects. I recommend avoiding it whenever possible for this and other reasons.

Instead, you could add static variablesto your first script:

public GameObject _character;
public GameObject _gCharacter;
public static GameObject Character;
public static GameObject GCharacter;

void Awake()
{
    DontDestroyOnLoad(_character);
    DontDestroyOnLoad(_gCharacter);

    Character = _character;
    GCharacter = _gCharacter;
}

Static variables are not bound to objects, so their values don’t “die” with this script when the other scene loads. It also means that two instances of this script cannot have different values for the variables, but that’s fine in this case.

Now, you can access these variables like this:

CharacterMainMen = NameOfTheMainMenuScript.Character;

As you can see, this method does not depend on a string (namely the tag) of an object, and neither does it depend on GameObject.FindWithTag.