在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());
}
答案 0 :(得分:0)
我实际上相信你可能在这里犯了一些错误:
transform.parent.gameObject.transform.parent.gameObject.AddComponent()应该替换为一个公共变量来保存GameObject,它上面调用AddComponent,也替换你的AddComponent,如同在评论也可以。
你在暂停时摧毁了一个物体。您应该发布更多代码以在此处提供上下文,但您不希望使用OnDestroy以您所看到的方式管理游戏状态。您可以使用消息传递或引用,后者更快,但前者在您不经常使用它时很好(在OnUpdate中反复阅读)
我认为这里最有可能的是你正在调用AddComponent的对象可能会在你尝试添加组件时被破坏。在这里进行调试是一项非常困难的事情,因为您需要手动攀爬层次结构。另外,尝试完全删除AddComponent,听起来你需要SetActive。