유니티 엔진 2021.3.9f1 버전에서는 맵 아이템을 그린 후 undo 시 에디터 crash 발생
유니티 엔진 2021.3.6f1 버전에서는 정상 작동
Tool Window class
private void Paint(Vector2Int cellPos)
{
...
{
...
Undo.DestroyObjectImmediate(targetGrid.GetItem(cellPos).gameObject);
...
}
...
Undo.RegisterCreatedObjectUndo(target.gameObject, "Create map object");
...
}
private void Erase(Vector2Int cellPos)
{
if (targetGrid.IsItemExist(cellPos))
{
...
Undo.DestroyObjectImmediate(targetGrid.GetItem(cellPos).gameObject);
...
}
}
오브젝트가 만들어지고 삭제되는 부분들을 Undo 함수로 교체하여
유니티의 Undo 시스템에 등록하여야 한다.
private void OnEnable()
{
...
Undo.undoRedoPerformed -= OnUndoRedoPerformed;
Undo.undoRedoPerformed += OnUndoRedoPerformed;
}
private void OnUndoRedoPerformed()
{
targetGrid.RetrieveAll();
}
OnEnable에서 undoRedoPerformed에 undo 시 실행할 이벤트 함수를 등록
Custom Grid class
public void RetrieveAll()
{
Items.Clear();
var mapObjects = FindObjectsOfType<MapObejct>();
if (mapObjects == null)
{
return;
}
for (int i = 0; i < mapObjects.Length; i++)
{
Items.Add(mapObjects[i].cellPos, mapObjects[i]);
}
}
CustomGrid 클래스에서는 undo가 발생하면 dictionary를 비우고 다시 새롭게 입력