- Home /
Weird Error when performing Undo through code?
I am working on a level editor and I have encountered the following error:
InvalidOperationException: Operation is not valid due to the current state of the object System.Collections.Generic.Stack`1[System.Boolean].Pop ()
What I'm doing is that I want to prevent an object from being placed, if there already exists one at that position. The problem is that before I instantiate the object, I make an Undo Group, so I can revert the creation of the object. Now for specific reasons, I need to instantiate the object either way and in case the object shouldn't be placed, I perform an Undo through code (I tried just deleting it, but then I always need to undo every step where an object failed to be created and I don't want that).
Anyway, all of that works great, but whenever an object can't be created I get this error, even though everything seems to work (It was the same when I was just deleting the object).
I hope anyone can tell me what the issue is here. Thanks in advance.
For clarity I'm just gonna post the important part of my code here:
GameObject go;
Undo.IncrementCurrentGroup();
Undo.SetCurrentGroupName("Create " + prefab.name);
go = (GameObject)PrefabUtility.InstantiatePrefab(prefab);
//Here I initialize the object.
if (hit && [...]) //if the object should be deleted
{
Undo.RegisterCreatedObjectUndo(go, "Create" + go.name);
Undo.RevertAllInCurrentGroup();
return;
}
Answer by DasNanda · Oct 18, 2017 at 03:33 PM
Fixed it!
I don't really know why that error showed up, but I fixed it in a way that even improved my editor. The code I'm using was reused a lot and when I first wrote it I was learning editor scripting. The Undo group is completely unnecessary. All I do now is to do this at the end of my script (When the object is successfully created and shouldn't be removed).
Undo.RegisterCreatedObjectUndo(go, "Create" + go.name);
In the if statement instead of any Undo stuff, I just delete the object with:
DestroyImmediate(go);
Now in my Level Editor, I can Undo everything I drew in one mouse press at once.
Hope this helps someone in the future <3
Your answer
Follow this Question
Related Questions
Why is play mode reverting my scriptableobject to a previous serialized state? 2 Answers
Undo.RecordObject is too slow on large arrays, alternatives? 1 Answer
Undo SetSiblingIndex for root objects? 1 Answer
How to undo removing components in an editor extension? 0 Answers
Is there a way to register undo for all ColorField changes, or name the individual undos? 0 Answers