C# 为什么我';我得到一个例外,对象被破坏了,但我';我正在尝试访问它?

C# 为什么我';我得到一个例外,对象被破坏了,但我';我正在尝试访问它?,c#,unity3d,C#,Unity3d,不是什么例外,而是为什么我会得到它 MissingReferenceException:“PlayConversations”类型的对象已被销毁,但您仍在尝试访问它。 您的脚本应该检查它是否为null,或者不应该销毁对象 这是运行游戏前的屏幕截图。脚本PlayConversations仅附加到对象对话触发器: 在游戏的某一点运行游戏后,它试图使用PlayConversations脚本,我得到了一个例外。我看了很多次,都找不到任何被毁的东西,也找不到没有连接、被毁或丢失的东西 这是游戏运行后的屏

不是什么例外,而是为什么我会得到它

MissingReferenceException:“PlayConversations”类型的对象已被销毁,但您仍在尝试访问它。 您的脚本应该检查它是否为null,或者不应该销毁对象

这是运行游戏前的屏幕截图。脚本PlayConversations仅附加到对象对话触发器:

在游戏的某一点运行游戏后,它试图使用PlayConversations脚本,我得到了一个例外。我看了很多次,都找不到任何被毁的东西,也找不到没有连接、被毁或丢失的东西

这是游戏运行后的屏幕截图,它正在创建玩家的克隆,我仍然可以看到PlayConversations脚本:

以下是脚本:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayConversations : MonoBehaviour
{
    private static ConversationTrigger conversationTrigger;
    private static PlayConversations instance;

    private void Awake()
    {
        conversationTrigger = GetComponent<ConversationTrigger>();
        instance = this;
    }

    public static void AddConversationToPlay(int index)
    {
        ConversationTrigger.conversationsToPlay.Add(index);
    }

    public static void PlayMultipleConversations()
    {
        instance.StartCoroutine(conversationTrigger.PlayConversations());
    }

    public static void PlaySingleConversation(int ConversationIndex)
    {
        instance.StartCoroutine(conversationTrigger.PlayConversation(ConversationIndex));
    }  
}

实例似乎为空。

看起来您正在对conversationTrigger使用一个静态变量,您为实例设置了唤醒

您是否可能在游戏中有此组件的多个实例,并且Awake正在为不同实例中的变量分配null


我建议在唤醒通话中添加一些记录,并在作业中记录一些信息。如果这是问题所在,您应该能够单击日志并跳转到场景中的对象。

如果
实例
不为空,您应该在唤醒时引发异常,因为您的设计只允许一个实例。也就是说,您可能不应该创建这样的静态类。。。通过使用多个实例,您可以看到这是如何出错的。这个班的学生。看看你的类是否真的应该是静态的。将日志添加到
OnDestroy()
,这样您就可以调试实例将为null的原因。此外,您不应该给类命名为PlayConversations,类名应该是名词,而不是动作/动词,所以ConversationPlayer,就像使用触发器一样:)
instance.StartCoroutine(conversationTrigger.PlayConversation(ConversationIndex));