Как правильно создать экземпляр класса для ссылки в других классах. Unity C # - PullRequest
0 голосов
/ 04 сентября 2018

В настоящее время я работаю над проектом, в котором у меня есть 2 отдельных «Менеджера». Один был успешно создан для создания экземпляра при запуске, и я могу без проблем ссылаться на все его методы. Я понял, насколько это было полезно, поэтому теперь я пытаюсь перенастроить моего другого менеджера, чтобы он следовал тому же шаблону создания экземпляров, но всякий раз, когда я вызываю один из его методов из другого класса, я получаю «объектную ссылку, не установленную для экземпляра объекта. ошибка объекта на контрольной линии.

Вот менеджер, который работает при его инициализации:

using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using DG.Tweening;

// this class will take care of switching turns
public class TurnManager : MonoBehaviour {


// for Singleton Pattern
public static TurnManager Instance;

void Awake()
{
    Instance = this;
}

Вот (успешный) вызов метода внутри TurnManager из другого класса:

TurnManager.Instance.StopTheTimer();

А вот раздел другого менеджера, который не может успешно создать экземпляр:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
using DG.Tweening;

public class DialogueManager : MonoBehaviour
{
public static DialogueManager Instance;

public delegate void VoidWithNoArguments();
public event VoidWithNoArguments DialogueEndEvent;


public AudioSource speechSounds;
public AudioClip speechSound;
public Image headshot;
public Text dialogueText;
public DeckSO deckForFight;

public Animator animator;

public bool dialogueActive;
private Queue<NPCAtributes> speakers;
private Queue<string> sentences;
private Queue<DialogueArray> lines;
private bool fightStart;
private PlayerController thePlayer;
private static bool UIExists;



// Use this for initialization
void awake()
{
Instance = this;

}

void Start()
{
    if (!UIExists) {
        DontDestroyOnLoad (transform.gameObject);
    UIExists = true;
    } else
        Destroy (gameObject);
    speakers = new Queue<NPCAtributes> ();
    sentences = new Queue<string>();
    lines = new Queue<DialogueArray> ();
    thePlayer = FindObjectOfType<PlayerController> ();
}

Строка, в которой я получу ошибку ссылки на объект во время выполнения:

DialogueManager.Instance.DialogueEndEvent += SpawnDave;

Любая помощь будет потрясающей. Спасибо.

1 Ответ

0 голосов
/ 04 сентября 2018

Я идиот. Все это время, «A» моего «активного» метода не было написано заглавными буквами, и он запускался как метод, определенный пользователем. Я отменил все изменения, чтобы попытаться их решить, и вернулся к строке instance=this. Спасибо всем за помощь, я бы никогда этого не понял, если бы вы не указали, как не вызывали Awake.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...