diff --git a/spine-unity/Assets/spine-unity/Editor/SpineEditorUtilities.cs b/spine-unity/Assets/spine-unity/Editor/SpineEditorUtilities.cs index 733c83093..c70c30d83 100644 --- a/spine-unity/Assets/spine-unity/Editor/SpineEditorUtilities.cs +++ b/spine-unity/Assets/spine-unity/Editor/SpineEditorUtilities.cs @@ -274,9 +274,13 @@ public class SpineEditorUtilities : AssetPostprocessor { imagePaths.Add(str); break; case ".json": - TextAsset spineDataFile = (TextAsset)AssetDatabase.LoadAssetAtPath(str, typeof(TextAsset)); - if (IsValidSpineData(spineDataFile)) { + if (IsValidSpineData((TextAsset)AssetDatabase.LoadAssetAtPath(str, typeof(TextAsset)))) skeletonPaths.Add(str); + break; + case ".bytes": + if (str.ToLower().EndsWith(".skel.bytes")) { + if (IsValidSpineData((TextAsset)AssetDatabase.LoadAssetAtPath(str, typeof(TextAsset)))) + skeletonPaths.Add(str); } break; } @@ -426,7 +430,7 @@ public class SpineEditorUtilities : AssetPostprocessor { static bool CheckForValidAtlas (string atlasPath) { - return false; + return false; //////////////DEPRECATED - always check for new atlas data now /* string dir = Path.GetDirectoryName(atlasPath); @@ -565,13 +569,23 @@ public class SpineEditorUtilities : AssetPostprocessor { return (AtlasAsset)obj; } - public static List GetRequiredAtlasRegions (string jsonPath) { + static void AddRequiredAtlasRegionsFromBinary (string skeletonDataPath, List requiredPaths) { + SkeletonBinary binary = new SkeletonBinary(new AtlasRequirementLoader(requiredPaths)); + TextAsset data = (TextAsset)AssetDatabase.LoadAssetAtPath(skeletonDataPath, typeof(TextAsset)); + MemoryStream input = new MemoryStream(data.bytes); + binary.ReadSkeletonData(input); + binary = null; + } + + public static List GetRequiredAtlasRegions (string skeletonDataPath) { List requiredPaths = new List(); - // FIXME - This doesn't work for a binary skeleton file! - if (jsonPath.Contains(".skel")) return requiredPaths; + if (skeletonDataPath.Contains(".skel")) { + AddRequiredAtlasRegionsFromBinary(skeletonDataPath, requiredPaths); + return requiredPaths; + } - TextAsset spineJson = (TextAsset)AssetDatabase.LoadAssetAtPath(jsonPath, typeof(TextAsset)); + TextAsset spineJson = (TextAsset)AssetDatabase.LoadAssetAtPath(skeletonDataPath, typeof(TextAsset)); StringReader reader = new StringReader(spineJson.text); var root = Json.Deserialize(reader) as Dictionary; @@ -585,7 +599,7 @@ public class SpineEditorUtilities : AssetPostprocessor { if ((string)data["type"] == "boundingbox") { continue; } - + } if (data.ContainsKey("path")) requiredPaths.Add((string)data["path"]); @@ -809,7 +823,7 @@ public class SpineEditorUtilities : AssetPostprocessor { Object.DestroyImmediate(root); } - mesh = (Mesh)AssetDatabase.LoadAssetAtPath(bakedPrefabPath, typeof(Mesh)); + mesh = (Mesh)AssetDatabase.LoadAssetAtPath(bakedPrefabPath, typeof(Mesh)); Material mat = null; mesh = atlasAsset.GenerateMesh(region.name, mesh, out mat); @@ -825,7 +839,7 @@ public class SpineEditorUtilities : AssetPostprocessor { AssetDatabase.SaveAssets(); AssetDatabase.Refresh(); } - + prefab.GetComponent().sharedMaterial = mat; @@ -1112,4 +1126,30 @@ public class SpineEditorUtilities : AssetPostprocessor { } } + public class AtlasRequirementLoader : AttachmentLoader { + + List requirementList; + public AtlasRequirementLoader (List requirementList) { + this.requirementList = requirementList; + } + + public RegionAttachment NewRegionAttachment (Skin skin, string name, string path) { + requirementList.Add(path); + return new RegionAttachment(name); + } + + public MeshAttachment NewMeshAttachment (Skin skin, string name, string path) { + requirementList.Add(path); + return new MeshAttachment(name); + } + + public SkinnedMeshAttachment NewSkinnedMeshAttachment (Skin skin, string name, string path) { + requirementList.Add(path); + return new SkinnedMeshAttachment(name); + } + + public BoundingBoxAttachment NewBoundingBoxAttachment (Skin skin, string name) { + return new BoundingBoxAttachment(name); + } + } } diff --git a/spine-unity/Assets/spine-unity/SkeletonDataAsset.cs b/spine-unity/Assets/spine-unity/SkeletonDataAsset.cs index bb616ebca..d378a338c 100644 --- a/spine-unity/Assets/spine-unity/SkeletonDataAsset.cs +++ b/spine-unity/Assets/spine-unity/SkeletonDataAsset.cs @@ -107,7 +107,7 @@ public class SkeletonDataAsset : ScriptableObject { skeletonDataScale = scale; #else if (spriteCollection != null) { - attachmentLoader = new SpriteCollectionAttachmentLoader(spriteCollection) + attachmentLoader = new SpriteCollectionAttachmentLoader(spriteCollection); skeletonDataScale = (1.0f / (spriteCollection.invOrthoSize * spriteCollection.halfTargetHeight) * scale) * 100f; } else { if (atlasArr.Length == 0) {