[unity] Fix Drag and Drop menu for SkeletonGraphic + hierarchy icons.

This commit is contained in:
pharan 2016-08-09 19:51:50 +08:00
parent ddb7e52a41
commit 384889cf7a
2 changed files with 21 additions and 45 deletions

View File

@ -208,12 +208,10 @@ namespace Spine.Unity.Editor {
skeletonUtilityBoneTable = new Dictionary<int, SkeletonUtilityBone>();
boundingBoxFollowerTable = new Dictionary<int, BoundingBoxFollower>();
#if SPINE_HIERARCHY_ICONS
EditorApplication.hierarchyWindowChanged -= HierarchyWindowChanged;
EditorApplication.hierarchyWindowChanged += HierarchyWindowChanged;
EditorApplication.hierarchyWindowItemOnGUI -= HierarchyWindowItemOnGUI;
EditorApplication.hierarchyWindowItemOnGUI += HierarchyWindowItemOnGUI;
#endif
HierarchyWindowChanged();
initialized = true;
@ -327,24 +325,31 @@ namespace Spine.Unity.Editor {
Vector3 spawnPoint = MousePointToWorldPoint2D(mousePos, sceneview.camera, plane);
var menu = new GenericMenu();
// SkeletonAnimation
menu.AddItem(new GUIContent("SkeletonAnimation"), false, HandleSkeletonComponentDrop, new SpawnMenuData {
skeletonDataAsset = skeletonDataAsset,
spawnPoint = spawnPoint,
instantiateDelegate = (data) => InstantiateSkeletonAnimation(data)
instantiateDelegate = (data) => InstantiateSkeletonAnimation(data),
isUI = false
});
foreach (var spawnType in additionalSpawnTypes) {
menu.AddItem(new GUIContent(spawnType.menuLabel), false, HandleSkeletonComponentDrop, new SpawnMenuData {
skeletonDataAsset = skeletonDataAsset,
spawnPoint = spawnPoint,
instantiateDelegate = spawnType.instantiateDelegate,
isUI = spawnType.isUI
});
// SkeletonGraphic
var skeletonGraphicInspectorType = System.Type.GetType("Spine.Unity.Editor.SkeletonGraphicInspector");
if (skeletonGraphicInspectorType != null) {
var graphicInstantiateDelegate = skeletonGraphicInspectorType.GetMethod("SpawnSkeletonGraphicFromDrop", BindingFlags.Static | BindingFlags.Public);
if (graphicInstantiateDelegate != null)
menu.AddItem(new GUIContent("SkeletonGraphic (UI)"), false, HandleSkeletonComponentDrop, new SpawnMenuData {
skeletonDataAsset = skeletonDataAsset,
spawnPoint = spawnPoint,
instantiateDelegate = System.Delegate.CreateDelegate(typeof(InstantiateDelegate), graphicInstantiateDelegate) as InstantiateDelegate,
isUI = true
});
}
#if SPINE_SKELETONANIMATOR
menu.AddSeparator("");
// SkeletonAnimator
menu.AddItem(new GUIContent("SkeletonAnimator"), false, HandleSkeletonComponentDrop, new SpawnMenuData {
skeletonDataAsset = skeletonDataAsset,
spawnPoint = spawnPoint,

View File

@ -49,40 +49,6 @@ namespace Spine.Unity.Editor {
SkeletonGraphic thisSkeletonGraphic;
static SpineEditorUtilities.InstantiateDelegate instantiateDelegate;
static SkeletonGraphicInspector () {
if (!SpineEditorUtilities.initialized)
return;
if (instantiateDelegate == null)
instantiateDelegate = new SpineEditorUtilities.InstantiateDelegate(SpawnSkeletonGraphicFromDrop);
// Drag and Drop Instantiate menu item
var spawnTypes = SpineEditorUtilities.additionalSpawnTypes;
UnityEngine.Assertions.Assert.IsFalse(spawnTypes == null);
bool menuItemExists = false;
foreach (var spawnType in spawnTypes) {
if (spawnType.instantiateDelegate == SkeletonGraphicInspector.instantiateDelegate) {
menuItemExists = true;
break;
}
}
if (!menuItemExists) {
SpineEditorUtilities.additionalSpawnTypes.Add(new SpineEditorUtilities.SkeletonComponentSpawnType {
menuLabel = "SkeletonGraphic (UI)",
instantiateDelegate = SkeletonGraphicInspector.instantiateDelegate,
isUI = true
});
}
}
static public Component SpawnSkeletonGraphicFromDrop (SkeletonDataAsset data) {
return InstantiateSkeletonGraphic(data);
}
void OnEnable () {
var so = this.serializedObject;
thisSkeletonGraphic = target as SkeletonGraphic;
@ -198,6 +164,11 @@ namespace Spine.Unity.Editor {
return true;
}
// SpineEditorUtilities.InstantiateDelegate. Used by drag and drop.
public static Component SpawnSkeletonGraphicFromDrop (SkeletonDataAsset data) {
return InstantiateSkeletonGraphic(data);
}
public static SkeletonGraphic InstantiateSkeletonGraphic (SkeletonDataAsset skeletonDataAsset, string skinName) {
return InstantiateSkeletonGraphic(skeletonDataAsset, skeletonDataAsset.GetSkeletonData(true).FindSkin(skinName));
}