diff --git a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/AssetUtility.cs b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/AssetUtility.cs index 924cc3850..7542516bb 100644 --- a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/AssetUtility.cs +++ b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/AssetUtility.cs @@ -213,6 +213,14 @@ namespace Spine.Unity.Editor { binary = null; } + internal static AtlasAssetBase GetMatchingAtlas (List requiredPaths, string skeletonName, + List atlasAssets) { + atlasAssets.Sort((a, b) => ( + string.CompareOrdinal(b.name, skeletonName) + - string.CompareOrdinal(a.name, skeletonName))); + return GetMatchingAtlas(requiredPaths, atlasAssets); + } + internal static AtlasAssetBase GetMatchingAtlas (List requiredPaths, List atlasAssets) { AtlasAssetBase atlasAssetMatch = null; @@ -384,13 +392,30 @@ namespace Spine.Unity.Editor { IngestSpineProject(loadedAsset, null); #else string skeletonName = Path.GetFileNameWithoutExtension(skeletonPath); - var atlasesForSkeleton = FindAtlasesAtPath(dir); + List requiredPaths = GetRequiredAtlasRegions(skeletonPath); + + List atlasesForSkeleton = FindAtlasesAtPath(dir); atlasesForSkeleton = atlasesForSkeleton.Union(newAtlases).ToList(); - var requiredPaths = GetRequiredAtlasRegions(skeletonPath); - atlasesForSkeleton.Sort((a, b) => ( - string.CompareOrdinal(b.name, skeletonName) - - string.CompareOrdinal(a.name, skeletonName))); - var atlasMatch = GetMatchingAtlas(requiredPaths, atlasesForSkeleton); + List atlasesInSameDir = atlasesForSkeleton.Where( + atlas => AssetDatabase.GetAssetPath(atlas).Contains(dir)).ToList(); + + AtlasAssetBase atlasMatch = GetMatchingAtlas(requiredPaths, skeletonName, atlasesInSameDir); + if (atlasMatch == null && atlasesInSameDir.Count > 0) { + AtlasAssetBase firstAtlas = atlasesInSameDir[0]; + Debug.LogWarning(string.Format( + "'{0}' atlas found in skeleton directory does not contain all required attachments", + firstAtlas.name), firstAtlas); + + List atlasesInOtherDir = atlasesForSkeleton.Except(atlasesInSameDir).ToList(); + atlasMatch = GetMatchingAtlas(requiredPaths, skeletonName, atlasesInOtherDir); + if (atlasMatch != null) { + Debug.Log(string.Format( + "Using suitable atlas '{0}' of other imported directory. If this is the " + + "wrong atlas asset, please assign the correct one at the SkeletonData asset.", + atlasMatch.name), atlasMatch); + } + } + if (atlasMatch != null || requiredPaths.Count == 0) { IngestSpineProject(loadedAsset, atlasMatch); } else {