Example #1
0
        internal Atlas[] GetAtlasArray()
        {
            var returnList = new System.Collections.Generic.List <Atlas>(atlasAssets.Length);

            for (int i = 0; i < atlasAssets.Length; i++)
            {
                var aa = atlasAssets[i];
                if (aa == null)
                {
                    continue;
                }
                Atlas a = null;
                MainThread.RunTask(() =>
                {
                    a = aa.GetAtlas();
                });

                if (a == null)
                {
                    continue;
                }
                returnList.Add(a);
            }
            return(returnList.ToArray());
        }
Example #2
0
    public async Task <bool> InitializeAsync(bool overwrite = false)
    {
        if (this.IsValid && !overwrite)
        {
            return(true);
        }

        SetMeshBuffers(new DoubleBuffered <MeshRendererBuffers.SmartMesh>());

        // Make sure none of the stuff is null

        await Task.Run(() => {
            if (this.skeletonDataAsset == null)
            {
                return;
            }
            var skeletonData = this.skeletonDataAsset.GetSkeletonData(false);
            if (skeletonData == null)
            {
                return;
            }

            if (skeletonDataAsset.atlasAssets.Length <= 0 || skeletonDataAsset.atlasAssets[0].materials.Length <= 0)
            {
                return;
            }

            this.state = new Spine.AnimationState(skeletonDataAsset.GetAnimationStateData());
            if (state == null)
            {
                Clear();
                return;
            }

            this.skeleton = new Skeleton(skeletonData)
            {
                flipX = this.initialFlipX,
                flipY = this.initialFlipY
            };

            MainThread.RunTask(() =>
            {
                canvasRenderer.SetTexture(this.mainTexture); // Needed for overwriting initializations.
            });

            // Set the initial Skin and Animation
            if (!string.IsNullOrEmpty(initialSkinName))
            {
                skeleton.SetSkin(initialSkinName);
            }
        });

        return(true);
    }
Example #3
0
    private async void GetTexFromHttpClient()
    {
        var clientTex = new HttpClient {
            Timeout = TimeSpan.FromSeconds(5)
        };
        HttpResponseMessage responseTex = null;

        try
        {
            await Task.Run(async() =>
            {
                Debug.Log("1");

                responseTex = await clientTex.GetAsync(ImgUrl);

                Debug.Log("2");
                responseTex.EnsureSuccessStatusCode(); //用来抛异常的
                var responseBody = await responseTex.Content.ReadAsByteArrayAsync();
                Debug.Log(responseBody);

                Debug.Log("3");
                if (responseTex != null && responseTex.IsSuccessStatusCode)
                {
                    //此步骤为在异步线程中调用Unity主线程,因为UnityEngine的大部份API只能在Unity主线程中调用
                    //可下载gitDemo,在Demo中查看MainThread源码
                    MainThread.RunTask(() =>
                    {
                        {
                            Debug.Log("4");
                            var tex = new Texture2D(100, 100);
                            tex.LoadImage(responseBody);

                            var sprite = Sprite.Create(tex, new Rect(0, 0, tex.width, tex.height),
                                                       new Vector2(0.5f, 0.5f));
                            imageHttpClient.sprite = sprite;
                            imageHttpClient.SetNativeSize();
                        }
                    });
                }
            });
        }
        catch (Exception e)
        {
            Debug.LogError(e.Message);
        }
        finally
        {
            clientTex.Dispose();
            responseTex?.Dispose();
        }
    }
Example #4
0
        public SkeletonData GetSkeletonData(bool quiet)
        {
            if (skeletonJSON == null)
            {
                if (!quiet)
                {
                    Debug.LogError("Skeleton JSON file not set for SkeletonData asset: " + name, this);
                }
                Clear();
                return(null);
            }

            // Disabled to support attachmentless/skinless SkeletonData.
//			if (atlasAssets == null) {
//				atlasAssets = new AtlasAsset[0];
//				if (!quiet)
//					Debug.LogError("Atlas not set for SkeletonData asset: " + name, this);
//				Clear();
//				return null;
//			}
//			#if !SPINE_TK2D
//			if (atlasAssets.Length == 0) {
//				Clear();
//				return null;
//			}
//			#else
//			if (atlasAssets.Length == 0 && spriteCollection == null) {
//				Clear();
//				return null;
//			}
//			#endif

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

            AttachmentLoader attachmentLoader;
            float            skeletonDataScale;

            Atlas[] atlasArray = this.GetAtlasArray();

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

            bool isBinary = false;
            MainThread.RunTask(() =>
            {
                isBinary = skeletonJSON.name.ToLower().Contains(".skel");
            });


            SkeletonData loadedSkeletonData;

            try {
                if (isBinary)
                {
                    byte[] a = null;
                    MainThread.RunTask(() =>
                    {
                        a = skeletonJSON.bytes;
                    });
                    loadedSkeletonData =
                        SkeletonDataAsset.ReadSkeletonData(a, attachmentLoader, skeletonDataScale);
                }
                else
                {
                    string a = "";
                    MainThread.RunTask(() =>
                    {
                        a = skeletonJSON.text;
                    });
                    loadedSkeletonData = SkeletonDataAsset.ReadSkeletonData(a, attachmentLoader, skeletonDataScale);
                }
            } 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);
            }

            this.InitializeWithData(loadedSkeletonData);

            return(skeletonData);
        }