Unity!IsDestroying()错误

时间:2014-07-21 21:13:19

标签: c# unity3d destroy

在Unity中,我目前收到的错误是之前没有错误,或者如果他们这样做,那似乎并不重要。

每当我摧毁某些东西并重新启动游戏中的关卡时,游戏会在中途停止加载并出现此错误:

!IsDestroying()
UnityEngine.GameObject:AddComponent()
EggScript:OnDestroy() (at Assets/Scripts/GameScripts/EggScript.cs:85)

它正在谈论的功能:

void OnDestroy()
{
    PlayerPrefs.SetInt("Game Paused", 1);
    transform.parent.gameObject.transform.parent.gameObject.AddComponent<GameOverScript>();
}

我已将PlayPrefs调用删除无效,但我需要另一个调用来实际重启该级别。

另一个似乎不重要的错误是:

batchDelete.reservedObjectCount >= batchDelete.objectCount

我不太确定我在哪里创建,因为我正在处理的是一些教程的集合,但我不认为它是相关的这个特殊的错误。

GameOverScript代码如下(虽然它听起来不像是错误):

void Start()
{
    GameManagerScript.Instance.pauseGame();
    //gameObject.BroadcastMessage("saveScore", null, SendMessageOptions.DontRequireReceiver);
    if (PlayerPrefs.GetString("curLevel") == "Tutorial" || PlayerPrefs.GetString("curLevel") == "Tutorial1" || PlayerPrefs.GetString("curLevel") == "Tutorial2")
    {
        //Do nothing
    }
    else
    {
        //We're in an infinite level, so we save the score
        gameObject.BroadcastMessage("saveScore");
    }

    PauseScript.displayMenu();
    //gameObject.AddComponent<FrontmostClickCheckerScript>();

    //HighScoreManager._instance.SaveHighScore("You", (System.Int32)PlayerPrefs.GetFloat("LatestScore"));
    HighScoreManager._instance.SaveHighScore("You", GameManagerScript.Instance.getScore());
}

1 个答案:

答案 0 :(得分:0)

我实际上相信你可能在这里犯了一些错误:

  • transform.parent.gameObject.transform.parent.gameObject.AddComponent()应该替换为一个公共变量来保存GameObject,它上面调用AddComponent,也替换你的AddComponent,如同在评论也可以。

  • 你在暂停时摧毁了一个物体。您应该发布更多代码以在此处提供上下文,但您不希望使用OnDestroy以您所看到的方式管理游戏状态。您可以使用消息传递或引用,后者更快,但前者在您不经常使用它时很好(在OnUpdate中反复阅读)

我认为这里最有可能的是你正在调用AddComponent的对象可能会在你尝试添加组件时被破坏。在这里进行调试是一项非常困难的事情,因为您需要手动攀爬层次结构。另外,尝试完全删除AddComponent,听起来你需要SetActive。