Parcourir la source

[unity] Fixed drag&drop instantiation using last hierarchy node as parent when dopping over empty hierarchy area below last item. Closes #1641.
Also fixed a null reference exception in TextureModificationWarningProcessor reported by a user.

Harald Csaszar il y a 5 ans
Parent
commit
b86333b11a

+ 21 - 2
spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/SpineEditorUtilities.cs

@@ -327,6 +327,9 @@ namespace Spine.Unity.Editor {
 									} else if (isDropEvent) {
 										var parentGameObject = DragAndDrop.GetGenericData(GenericDataTargetID) as UnityEngine.GameObject;
 										Transform parent = parentGameObject != null ? parentGameObject.transform : null;
+										// when dragging into empty space in hierarchy below last node, last node would be parent.
+										if (IsLastNodeInHierarchy(parent))
+											parent = null;
 										DragAndDropInstantiation.ShowInstantiateContextMenu(skeletonDataAsset, Vector3.zero, parent);
 										UnityEditor.DragAndDrop.AcceptDrag();
 										current.Use();
@@ -338,6 +341,21 @@ namespace Spine.Unity.Editor {
 					}
 				}
 			}
+
+			internal static bool IsLastNodeInHierarchy (Transform node) {
+				if (node == null)
+					return false;
+
+				while (node.parent != null) {
+					if (node.GetSiblingIndex() != node.parent.childCount - 1)
+						return false;
+					node = node.parent;
+				}
+
+				var rootNodes = UnityEngine.SceneManagement.SceneManager.GetActiveScene().GetRootGameObjects();
+				bool isLastNode = (rootNodes.Length > 0 && rootNodes[rootNodes.Length - 1].transform == node);
+				return isLastNode;
+			}
 		}
 	}
 
@@ -347,8 +365,9 @@ namespace Spine.Unity.Editor {
 		{
 			if (SpineEditorUtilities.Preferences.textureImporterWarning) {
 				foreach (string path in paths) {
-					if (path.EndsWith(".png.meta", System.StringComparison.Ordinal) ||
-						path.EndsWith(".jpg.meta", System.StringComparison.Ordinal)) {
+					if ((path != null) &&
+						(path.EndsWith(".png.meta", System.StringComparison.Ordinal) ||
+						 path.EndsWith(".jpg.meta", System.StringComparison.Ordinal))) {
 
 						string texturePath = System.IO.Path.ChangeExtension(path, null); // .meta removed
 						string atlasPath = System.IO.Path.ChangeExtension(texturePath, "atlas.txt");