private async Task <Sprite> LoadSpriteAsync(string basePath, JObject spriteNode, ResourceLoadContext context) { if (spriteNode.ContainsKey("texturePath")) { //sprite node is an importable sprite object var sd = SpriteData.FromJObject(spriteNode); if (sd.TextureIsResource) { Debug.LogWarning("TextureIsResource will break in FacingSpriteAssetImporter, use resource:path instead"); } return((Sprite)await SpriteAssetImporter.LoadSpriteAsync(basePath, context, sd)); } else if (spriteNode.ContainsKey("spritePath")) { //sprite node references an asset on disk string path; if (spriteNode.ContainsKey("pathIsAbsolute") && spriteNode["pathIsAbsolute"].ToObject <bool>()) { path = spriteNode["spritePath"].ToString(); } else { path = Path.Combine(Path.GetDirectoryName(basePath), spriteNode["spritePath"].ToString()); } return((Sprite)await context.ResourceLoader.LoadAsync(path, new ResourceLoadContext() { AttemptingSyncLoad = false, ResourceLoader = context.ResourceLoader, ResourceManager = context.ResourceManager })); } else if (spriteNode.ContainsKey("resource")) { //sprite node references a resource string path; if (spriteNode.ContainsKey("pathIsAbsolute") && spriteNode["pathIsAbsolute"].ToObject <bool>()) { path = spriteNode["resource"].ToString(); } else { path = Path.Combine(Path.GetDirectoryName(basePath), spriteNode["resource"].ToString()); } return(context.ResourceManager.GetResource <Sprite>(path, false)); } throw new NotSupportedException(); }