public void RegisterUndo(UnityEngine.Object[] objs, string name) { if (cmdCur != cmdCounter.Cur - cmdOffset) { syncCmd(); } #if UNITY_4_1 Undo.IncrementCurrentEventIndex(); #endif Array.Resize <UnityEngine.Object>(ref objs, objs.Length + 1); objs[objs.Length - 1] = cmdCounter; ManagedCmd cmd = new ManagedCmd(objs, name); cmdList.Add(cmd); cmdCur++; #if UNITY_4_3 || UNITY_4_5 || UNITY_4_6 Undo.RegisterCompleteObjectUndo(objs, name); #elif (UNITY_3_0 || UNITY_3_1 || UNITY_3_2 || UNITY_3_3 || UNITY_3_4 || UNITY_3_5 || UNITY_3_6 || UNITY_3_7 || UNITY_3_8 || UNITY_3_9) Undo.RegisterUndo(objs, name); #else Undo.RecordObjects(objs, name); #endif cmdCounter.Cur++; }
// 添加cmd 并执行一次 public void AddCmd(ICmd cmd) { if (cmdCur != cmdCounter.Cur - cmdOffset) { syncCmd(); } #if UNITY_4_1 Undo.IncrementCurrentEventIndex(); #endif // 清除当前位置之后的cmd if (cmdList.Count > cmdCur) { cmdList.RemoveRange(cmdCur, cmdList.Count - cmdCur); } cmdList.Add(cmd); cmd.execute(); cmdCur++; #if UNITY_4_3 || UNITY_4_5 || UNITY_4_6 Undo.RegisterCompleteObjectUndo(cmdCounter, cmd.CmdName); #elif (UNITY_3_0 || UNITY_3_1 || UNITY_3_2 || UNITY_3_3 || UNITY_3_4 || UNITY_3_5 || UNITY_3_6 || UNITY_3_7 || UNITY_3_8 || UNITY_3_9) Undo.RegisterUndo(cmdCounter, cmd.CmdName); #else Undo.RecordObject(cmdCounter, cmd.CmdName); #endif cmdCounter.Cur++; }
public void RegisterSnapshot() { LayoutEditorWindow.Instance.SetCurLayoutDirty(); #if UNITY_4_1 Undo.IncrementCurrentEventIndex(); #endif ManagedCmd cmd = new ManagedCmd(snapshotTarget, targetCmdName); cmdList.Add(cmd); cmdCur++; cmdCounter.Cur++; #if UNITY_4_1 Undo.RegisterSnapshot(); #endif }
public static void Draw_Handles() { selection = kSelect.OBJECT; Mesh _selectMesh = kSelect.MESH; if (_selectMesh == null || selection == null) { FREEZE = false; return; } Undo.SetSnapshotTarget(_selectMesh, "MeshEdit"); _verts = _selectMesh.vertices; Transform root = selection.transform; /* int controlIDBeforeHandle = -1, * controlIDAfterHandle = -1; * bool isEventUsedByHandle = false, * isEventUsedBeforeHandle = false, * setDirty = false, * isDrawn = false;*/ bool setDirty = false; // Vert Labels if (KP_info._SHOW_TRIAS) { for (int i = 0; i < _verts.Length; i++) { Vector3 v1 = root.TransformPoint(_verts[i]); Handles.Label(v1, new GUIContent("" + i)); } } // int someHashCode = kPoly2Tool.instance.GetHashCode(); switch (E_MODE) { case MODE.Point: setDirty = ModifiVerticies_points(); break; case MODE.Edge: setDirty = ModifiVerticies_edges(); break; case MODE.Triangle: setDirty = ModifiVerticies_tris(); break; case MODE.Quad: setDirty = ModifiVerticies_quad(); break; case MODE.All: setDirty = ModifiVerticies_all(); break; } if (setDirty && selection != null) { Undo.IncrementCurrentEventIndex(); _selectMesh.vertices = _verts; _selectMesh.RecalculateNormals(); _selectMesh.RecalculateBounds(); Undo.IncrementCurrentEventIndex(); selection.GetComponent <MeshCollider>().sharedMesh = null; selection.GetComponent <MeshCollider>().sharedMesh = _selectMesh; kPoly2Tool.instance.Repaint(); SceneView.RepaintAll(); } }