[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.
This commit is contained in:
Harald Csaszar 2020-03-11 15:29:02 +01:00
parent fef881730d
commit 4ebd9917b4

View File

@ -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");