我如何正确地实例一个要在其他类中引用的类。 Unity C#

时间:2018-09-03 22:31:57

标签: c# unity3d static instance

我目前正在一个项目中,我有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 :(得分:1)

我是个白痴。在整个过程中,我的“清醒”方法的“ A”没有大写,而是作为用户定义的方法运行。我还原了所有更改以尝试解决它,然后回到instance=this行。感谢大家的帮助,如果您没有指出没有被叫醒的话,我永远不会弄清楚。