В 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>();
}
Я удалил вызов PlayerPrefs без видимых изменений, но мне нужен другой вызов, чтобы фактически перезапустить уровень.
Другая ошибка, которая, по-видимому, не имеет значения, такова:
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());
}
Я действительно считаю, что вы можете сделать несколько ошибок здесь:
transform.parent.gameObject.transform.parent.gameObject.AddComponent() следует заменить общедоступной переменной, чтобы удержать этот GameObject, вызывающий AddComponent на нем, а также заменить ваш AddComponent включенным, как было упомянуто в комментариях, также будет работать.
Вы уничтожаете объект при паузе. Вы должны опубликовать больше кода, чтобы дать контекст здесь, но вы не хотите использовать OnDestroy для управления состоянием игры, как кажется, что вы есть. Вы можете использовать обмен сообщениями или ссылки, последнее быстрее, но первое прекрасно, когда вы не используете его слишком часто (читайте: повторно в OnUpdate)
Я думаю, что самая вероятная возможность здесь - объект, который вы вызываете AddComponent, может быть уничтожен, когда вы пытаетесь добавить компонент. Было бы очень сложно отладить здесь, потому что вы поднимаетесь по иерархии вручную. Кроме того, попробуйте полностью удалить компонент AddComponent, похоже, вам нужно SetActive.
transform.parent.gameObject.transform.parent.gameObject.AddComponent<GameOverScript>();
вызывает проблему. Я подозреваю, что экземплярGameObject
, к которому вы обращаетесь, «заблокирован» на протяжении всего процесса уничтожения, хотя я не совсем уверен в этом. Что произойдет, если вы закомментируете эту строку внутриOnDestroy()
?