public void RegisterUndoable()
 {
     Management.GameManager.I.Utils.RegisterInstantiate(this.gameObject, (object[] data) => {
         Destroy();                 // destory set
     }, (object[] data) => {
         // on changed
         RemoveFromGrid();
         UndoUtil.UndoData undodata = (UndoUtil.UndoData)data.Find <UndoUtil.UndoData>();
         PlaceAtPos(undodata.Position);                 // place last pos
         transform.rotation   = undodata.Rotation;
         transform.localScale = undodata.LocalScale;
         OnUpdateGrid();
     });
 }
 public void RegisterUndoable()
 {
     Management.GameManager.I.Utils.RegisterInstantiate(this.gameObject, (object[] ToDestoy) => {
         // on destroy remove self from parent
         Destroy();
     }, (object[] Data) => {
         // on changed
         RemoveFromGrid();                 // remove from grid
         UndoUtil.UndoData undodata = (UndoUtil.UndoData)Data.Find <UndoUtil.UndoData>();
         PlaceAtPos(undodata.Position);    // place last pos
         transform.rotation   = undodata.Rotation;
         transform.localScale = undodata.LocalScale;
         OnUpdateGrid();                 // update grid
     });
 }