Экземпляр Singleton 'ConversationManager' уже уничтожен.Возвращает ноль - PullRequest
0 голосов
/ 17 февраля 2019

Я делаю проект игры для удовольствия, и у меня возникла проблема с синглтоном, который работает для моей диалоговой системы, работает нормально, когда я загружаю сцену с помощью диалоговой системы, но если я меняю сцену и затем возвращаюсь [Синглтон]Экземпляр 'ConversationManager' уже уничтожен.Возвращает ноль.

/// <summary>
/// Access singleton instance through this propriety.
/// </summary>
public static T Instance
{
    get
    {
        if (m_ShuttingDown)
        {
            Debug.LogWarning("[Singleton] Instance '" + typeof(T) +
                "' already destroyed. Returning null.");
            return null;
        }

        lock (m_Lock)
        {
            if (m_Instance == null)
            {
                // Search for existing instance.
                m_Instance = (T)FindObjectOfType(typeof(T));

                // Create new instance if one doesn't already exist.
                if (m_Instance == null)
                {
                    // Need to create a new GameObject to attach the singleton to.
                    var singletonObject = new GameObject();
                    m_Instance = singletonObject.AddComponent<T>();
                    singletonObject.name = typeof(T).ToString() + " (Singleton)";

                    // Make instance persistent.
                    DontDestroyOnLoad(singletonObject);
                }
            }

            return m_Instance;
        }
    }
}


public void TriggerConversation()
{
    ConversationManager.Instance.StartConversation(conversation);
}

1 Ответ

0 голосов
/ 18 февраля 2019

Вы должны убедиться, что не уничтожить при ударе нагрузки.Ваша логика здесь ошибочна.Работайте задом наперед и увидите, что внизу не разрушится при загрузке сцены.Если вы заменяете игровой объект, убедитесь, что он имеет те же значения.

 void Awake()
    {
        //Check if instance already exists
        if (instance == null)

            //if not, set instance to this
            instance = this;

        //If instance already exists and it's not this:
        else if (instance != this)

            //Then destroy this. This enforces our singleton pattern, meaning there can only ever be one instance of a GameManager.
            Destroy(gameObject);    

        //Sets this to not be destroyed when reloading scene
        DontDestroyOnLoad(gameObject);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...