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()); }
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); }
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(); } }
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); }