Пример #1
0
    public SkeletonData GetSkeletonData(bool quiet)
    {
        if (atlasAssets == null) {
            atlasAssets = new AtlasAsset[0];
            if (!quiet)
                Debug.LogError("Atlas not set for SkeletonData asset: " + name, this);
            Reset();
            return null;
        }

        if (skeletonJSON == null) {
            if (!quiet)
                Debug.LogError("Skeleton JSON file not set for SkeletonData asset: " + name, this);
            Reset();
            return null;
        }

        #if !SPINE_TK2D
        if (atlasAssets.Length == 0) {
            Reset();
            return null;
        }
        #else
        if (atlasAssets.Length == 0 && spriteCollection == null) {
            Reset();
            return null;
        }
        #endif

        Atlas[] atlasArr = new Atlas[atlasAssets.Length];
        for (int i = 0; i < atlasAssets.Length; i++) {
            if (atlasAssets[i] == null) {
                Reset();
                return null;
            }
            atlasArr[i] = atlasAssets[i].GetAtlas();
            if (atlasArr[i] == null) {
                Reset();
                return null;
            }
        }

        if (skeletonData != null)
            return skeletonData;

        AttachmentLoader attachmentLoader;
        float skeletonDataScale;

        #if !SPINE_TK2D
        attachmentLoader = new AtlasAttachmentLoader(atlasArr);
        skeletonDataScale = scale;
        #else
        if (spriteCollection != null) {
            attachmentLoader = new SpriteCollectionAttachmentLoader(spriteCollection);
            skeletonDataScale = (1.0f / (spriteCollection.invOrthoSize * spriteCollection.halfTargetHeight) * scale);
        } else {
            if (atlasArr.Length == 0) {
                Reset();
                if (!quiet) Debug.LogError("Atlas not set for SkeletonData asset: " + name, this);
                return null;
            }
            attachmentLoader = new AtlasAttachmentLoader(atlasArr);
            skeletonDataScale = scale;
        }
        #endif

        try {
            //var stopwatch = new System.Diagnostics.Stopwatch();
            if (skeletonJSON.name.ToLower().Contains(".skel")) {
                var input = new MemoryStream(skeletonJSON.bytes);
                var binary = new SkeletonBinary(attachmentLoader);
                binary.Scale = skeletonDataScale;
                //stopwatch.Start();
                skeletonData = binary.ReadSkeletonData(input);
            } else {
                var input = new StringReader(skeletonJSON.text);
                var json = new SkeletonJson(attachmentLoader);
                json.Scale = skeletonDataScale;
                //stopwatch.Start();
                skeletonData = json.ReadSkeletonData(input);
            }
            //stopwatch.Stop();
            //Debug.Log(stopwatch.Elapsed);
        } catch (Exception ex) {
            if (!quiet)
                Debug.LogError("Error reading skeleton JSON file for SkeletonData asset: " + name + "\n" + ex.Message + "\n" + ex.StackTrace, this);
            return null;
        }

        stateData = new AnimationStateData(skeletonData);
        FillStateData();

        return skeletonData;
    }
Пример #2
0
    public SkeletonData GetSkeletonData(bool quiet)
    {
        if (atlasAssets == null)
        {
            atlasAssets = new AtlasAsset[0];
            if (!quiet)
            {
                Debug.LogError("Atlas not set for SkeletonData asset: " + name, this);
            }
            Reset();
            return(null);
        }

        if (skeletonJSON == null)
        {
            if (!quiet)
            {
                Debug.LogError("Skeleton JSON file not set for SkeletonData asset: " + name, this);
            }
            Reset();
            return(null);
        }

#if !SPINE_TK2D
        if (atlasAssets.Length == 0)
        {
            Reset();
            return(null);
        }
#else
        if (atlasAssets.Length == 0 && spriteCollection == null)
        {
            Reset();
            return(null);
        }
#endif

        Atlas[] atlasArr = new Atlas[atlasAssets.Length];
        for (int i = 0; i < atlasAssets.Length; i++)
        {
            if (atlasAssets[i] == null)
            {
                Reset();
                return(null);
            }
            atlasArr[i] = atlasAssets[i].GetAtlas();
            if (atlasArr[i] == null)
            {
                Reset();
                return(null);
            }
        }

        if (skeletonData != null)
        {
            return(skeletonData);
        }

        AttachmentLoader attachmentLoader;
        float            skeletonDataScale;

#if !SPINE_TK2D
        attachmentLoader  = new AtlasAttachmentLoader(atlasArr);
        skeletonDataScale = scale;
#else
        if (spriteCollection != null)
        {
            attachmentLoader  = new SpriteCollectionAttachmentLoader(spriteCollection);
            skeletonDataScale = (1.0f / (spriteCollection.invOrthoSize * spriteCollection.halfTargetHeight) * scale) * 100f;
        }
        else
        {
            if (atlasArr.Length == 0)
            {
                Reset();
                if (!quiet)
                {
                    Debug.LogError("Atlas not set for SkeletonData asset: " + name, this);
                }
                return(null);
            }
            attachmentLoader  = new AtlasAttachmentLoader(atlasArr);
            skeletonDataScale = scale;
        }
#endif

        try {
            //var stopwatch = new System.Diagnostics.Stopwatch();
            if (skeletonJSON.name.ToLower().Contains(".skel"))
            {
                var input  = new MemoryStream(skeletonJSON.bytes);
                var binary = new SkeletonBinary(attachmentLoader);
                binary.Scale = skeletonDataScale;
                //stopwatch.Start();
                skeletonData = binary.ReadSkeletonData(input);
            }
            else
            {
                var input = new StringReader(skeletonJSON.text);
                var json  = new SkeletonJson(attachmentLoader);
                json.Scale = skeletonDataScale;
                //stopwatch.Start();
                skeletonData = json.ReadSkeletonData(input);
            }
            //stopwatch.Stop();
            //Debug.Log(stopwatch.Elapsed);
        } catch (Exception ex) {
            if (!quiet)
            {
                Debug.LogError("Error reading skeleton JSON file for SkeletonData asset: " + name + "\n" + ex.Message + "\n" + ex.StackTrace, this);
            }
            return(null);
        }

        stateData = new AnimationStateData(skeletonData);
        FillStateData();

        return(skeletonData);
    }
Пример #3
0
    public SkeletonData GetSkeletonData(bool quiet)
    {
        if (atlasAssets == null)
        {
            atlasAssets = new AtlasAsset[0];
            if (!quiet)
            {
                Debug.LogError("Atlas not set for SkeletonData asset: " + name, this);
            }
            Reset();
            return(null);
        }

        if (skeletonJSON == null)
        {
            if (!quiet)
            {
                Debug.LogError("Skeleton JSON file not set for SkeletonData asset: " + name, this);
            }
            Reset();
            return(null);
        }

#if !SPINE_TK2D
        if (atlasAssets.Length == 0)
        {
            Reset();
            return(null);
        }
#else
        if (atlasAssets.Length == 0 && spriteCollection == null)
        {
            Reset();
            return(null);
        }
#endif

        Atlas[] atlasArr = new Atlas[atlasAssets.Length];
        for (int i = 0; i < atlasAssets.Length; i++)
        {
            if (atlasAssets[i] == null)
            {
                Reset();
                return(null);
            }
            atlasArr[i] = atlasAssets[i].GetAtlas();
            if (atlasArr[i] == null)
            {
                Reset();
                return(null);
            }
        }

        if (skeletonData != null)
        {
            return(skeletonData);
        }


#if UNITY_EDITOR || !RELEASE
        var  stopwatch = System.Diagnostics.Stopwatch.StartNew();
        bool isBinary  = false;
#endif

        AttachmentLoader attachmentLoader;
        float            skeletonDataScale;

#if !SPINE_TK2D
        attachmentLoader  = new AtlasAttachmentLoader(atlasArr);
        skeletonDataScale = scale;
#else
        if (spriteCollection != null)
        {
            attachmentLoader  = new SpriteCollectionAttachmentLoader(spriteCollection);
            skeletonDataScale = (1.0f / (spriteCollection.invOrthoSize * spriteCollection.halfTargetHeight) * scale) * 100f;
        }
        else
        {
            if (atlasArr.Length == 0)
            {
                Reset();
                if (!quiet)
                {
                    Debug.LogError("Atlas not set for SkeletonData asset: " + name, this);
                }
                return(null);
            }
            attachmentLoader  = new AtlasAttachmentLoader(atlasArr);
            skeletonDataScale = scale;
        }
#endif

        try {
            if (skeletonJSON.name.ToLower().Contains(".skel"))
            {
#if UNITY_EDITOR || !RELEASE
                isBinary = true;
#endif
                var input  = new MemoryStream(skeletonJSON.bytes);
                var binary = new SkeletonBinary(attachmentLoader);
                binary.Scale = skeletonDataScale;
                skeletonData = binary.ReadSkeletonData(input);
            }
            else
            {
                // tsteil - added this error
                Debug.LogError("Spine animation using json text, it should use binary! " + name);
                var input = new StringReader(skeletonJSON.text);
                var json  = new SkeletonJson(attachmentLoader);
                json.Scale   = skeletonDataScale;
                skeletonData = json.ReadSkeletonData(input);
            }
        } catch (Exception ex) {
            if (!quiet)
            {
                Debug.LogError("Error reading skeleton JSON file for SkeletonData asset: " + name + "\n" + ex.Message + "\n" + ex.StackTrace, this);
            }
            return(null);
        }

        stateData = new AnimationStateData(skeletonData);
        FillStateData();

#if UNITY_EDITOR || !RELEASE
        // tsteil - added some perf tracking
        stopwatch.Stop();
        if (isBinary == false)
        {
            Debug.LogWarning(string.Format("Spine SkeletonDataAsset: {0} ({2}) created in {1:N4} seconds.", name, stopwatch.Elapsed.TotalSeconds, isBinary ? "binary" : "text"));
        }
#endif

        return(skeletonData);
    }