protected override void KeyEvent() { base.KeyEvent(); if (GUIUtility.keyboardControl != treeViewControlID) { return; } if (Event.current.type != EventType.KeyDown) { return; } if (GetSelection().Count <= 0) { return; } SpriteAtlasData atlas = null; SpriteAtlasData.SpriteInfo sprite = null; Sprite origin = null; if (!GetSelectAtlas(out atlas, out sprite, out origin)) { return; } if (Event.current.keyCode == KeyCode.Space) { if (sprite != null && origin == null) { if (sprite.delete || _refInfo.GetRefCount(sprite.packed) == 0) { sprite.delete = !sprite.delete; Repaint(); } } } if (Event.current.keyCode == KeyCode.Delete || Event.current.keyCode == KeyCode.Backspace) { if (origin != null) { if (origin.name != sprite.name) { sprite.RemoveOrigin(origin); Reload(); } } else if (sprite != null) { if (Event.current.control && sprite.packed == null && sprite.delete) { atlas.RemoveSprite(sprite); Reload(); } else { sprite.delete = true; Repaint(); } } else if (atlas) { // _manager.RemoveAtlas(atlas, true); // Reload(); } } int use = 0; if (Event.current.keyCode == KeyCode.F5) { use = 1; } else if (Event.current.keyCode == KeyCode.F6) { use = 2; } if (use != 0 && origin != null && origin == sprite.origin) { Sprite from = (use == 1) ? origin : sprite.packed; Sprite to = (use == 1) ? sprite.packed : origin; if (from == null || to == null || from == to) { return; } List <GameObject> objInfo = _delegate.GetReserenceObjects(from); if (objInfo.Count > 0) { List <GameObject> objs = new List <GameObject>(); try { for (int i = 0; i < objInfo.Count; i++) { var obj = objInfo[i]; EditorUtility.DisplayProgressBar("replace", AssetDatabase.GetAssetPath(obj), i / objInfo.Count); if (obj != null && obj.GetType() == typeof(GameObject)) { GameObject go = obj as GameObject; SpriteReferenceInfo.ScanGameObject(go, (c, p) => { SpriteReferenceInfo.ReplaceSprite(c, from, to); }); EditorUtility.SetDirty(go); objs.Add(go); } } foreach (GameObject go in objs) { SpriteReferenceInfo.Instance.Reload(go); } } catch (System.Exception e) { Debug.LogError(e); } finally { EditorUtility.ClearProgressBar(); } Reload(); } } }