mirror of
https://github.com/EsotericSoftware/spine-runtimes.git
synced 2026-03-26 22:49:01 +08:00
[unity] Fixed new atlas format import after atlas format changes (see commit f8d6359). Replaced hardcoded first pass of dual-pass atlas loading with proper Atlas method calls.
This commit is contained in:
parent
93695d5eed
commit
1a431045c6
@ -487,18 +487,14 @@ namespace Spine.Unity.Editor {
|
|||||||
protectFromStackGarbageCollection.Add(atlasAsset);
|
protectFromStackGarbageCollection.Add(atlasAsset);
|
||||||
atlasAsset.atlasFile = atlasText;
|
atlasAsset.atlasFile = atlasText;
|
||||||
|
|
||||||
//strip CR
|
|
||||||
string atlasStr = atlasText.text;
|
|
||||||
atlasStr = atlasStr.Replace("\r", "");
|
|
||||||
|
|
||||||
string[] atlasLines = atlasStr.Split('\n');
|
|
||||||
List<string> pageFiles = new List<string>();
|
List<string> pageFiles = new List<string>();
|
||||||
for (int i = 0; i < atlasLines.Length - 1; i++) {
|
Atlas atlas = atlasAsset.GetAtlas(onlyMetaData : true);
|
||||||
if (atlasLines[i].Trim().Length == 0)
|
if (atlas != null) {
|
||||||
pageFiles.Add(atlasLines[i + 1].Trim());
|
foreach (var page in atlas.Pages)
|
||||||
|
pageFiles.Add(page.name);
|
||||||
}
|
}
|
||||||
|
|
||||||
var populatingMaterials = new List<Material>(pageFiles.Count);//atlasAsset.materials = new Material[pageFiles.Count];
|
var populatingMaterials = new List<Material>(pageFiles.Count);
|
||||||
|
|
||||||
for (int i = 0; i < pageFiles.Count; i++) {
|
for (int i = 0; i < pageFiles.Count; i++) {
|
||||||
string texturePath = assetPath + "/" + pageFiles[i];
|
string texturePath = assetPath + "/" + pageFiles[i];
|
||||||
@ -555,7 +551,8 @@ namespace Spine.Unity.Editor {
|
|||||||
Debug.Log(string.Format("{0} :: Imported with {1} material", atlasAsset.name, atlasAsset.materials.Length), atlasAsset);
|
Debug.Log(string.Format("{0} :: Imported with {1} material", atlasAsset.name, atlasAsset.materials.Length), atlasAsset);
|
||||||
|
|
||||||
// Iterate regions and bake marked.
|
// Iterate regions and bake marked.
|
||||||
Atlas atlas = atlasAsset.GetAtlas();
|
atlasAsset.Clear();
|
||||||
|
atlas = atlasAsset.GetAtlas(onlyMetaData: false);
|
||||||
if (atlas != null) {
|
if (atlas != null) {
|
||||||
FieldInfo field = typeof(Atlas).GetField("regions", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.NonPublic);
|
FieldInfo field = typeof(Atlas).GetField("regions", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.NonPublic);
|
||||||
var regions = (List<AtlasRegion>)field.GetValue(atlas);
|
var regions = (List<AtlasRegion>)field.GetValue(atlas);
|
||||||
|
|||||||
@ -39,6 +39,6 @@ namespace Spine.Unity {
|
|||||||
|
|
||||||
public abstract bool IsLoaded { get; }
|
public abstract bool IsLoaded { get; }
|
||||||
public abstract void Clear ();
|
public abstract void Clear ();
|
||||||
public abstract Atlas GetAtlas ();
|
public abstract Atlas GetAtlas (bool onlyMetaData = false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -123,14 +123,14 @@ namespace Spine.Unity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <returns>The atlas or null if it could not be loaded.</returns>
|
/// <returns>The atlas or null if it could not be loaded.</returns>
|
||||||
public override Atlas GetAtlas () {
|
public override Atlas GetAtlas (bool onlyMetaData = false) {
|
||||||
if (atlasFile == null) {
|
if (atlasFile == null) {
|
||||||
Debug.LogError("Atlas file not set for atlas asset: " + name, this);
|
Debug.LogError("Atlas file not set for atlas asset: " + name, this);
|
||||||
Clear();
|
Clear();
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (materials == null || materials.Length == 0) {
|
if (!onlyMetaData && (materials == null || materials.Length == 0)) {
|
||||||
Debug.LogError("Materials not set for atlas asset: " + name, this);
|
Debug.LogError("Materials not set for atlas asset: " + name, this);
|
||||||
Clear();
|
Clear();
|
||||||
return null;
|
return null;
|
||||||
@ -139,7 +139,12 @@ namespace Spine.Unity {
|
|||||||
if (atlas != null) return atlas;
|
if (atlas != null) return atlas;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
atlas = new Atlas(new StringReader(atlasFile.text), "", new MaterialsTextureLoader(this));
|
TextureLoader loader;
|
||||||
|
if (!onlyMetaData)
|
||||||
|
loader = new MaterialsTextureLoader(this);
|
||||||
|
else
|
||||||
|
loader = new NoOpTextureLoader();
|
||||||
|
atlas = new Atlas(new StringReader(atlasFile.text), "", loader);
|
||||||
atlas.FlipV();
|
atlas.FlipV();
|
||||||
return atlas;
|
return atlas;
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
@ -207,6 +212,11 @@ namespace Spine.Unity {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class NoOpTextureLoader : TextureLoader {
|
||||||
|
public void Load (AtlasPage page, string path) {}
|
||||||
|
public void Unload (object texture) {}
|
||||||
|
}
|
||||||
|
|
||||||
public class MaterialsTextureLoader : TextureLoader {
|
public class MaterialsTextureLoader : TextureLoader {
|
||||||
SpineAtlasAsset atlasAsset;
|
SpineAtlasAsset atlasAsset;
|
||||||
|
|
||||||
|
|||||||
@ -97,14 +97,14 @@ namespace Spine.Unity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <returns>The atlas or null if it could not be loaded.</returns>
|
/// <returns>The atlas or null if it could not be loaded.</returns>
|
||||||
public override Atlas GetAtlas () {
|
public override Atlas GetAtlas (bool onlyMetaData = false) {
|
||||||
if (spriteAtlasFile == null) {
|
if (spriteAtlasFile == null) {
|
||||||
Debug.LogError("SpriteAtlas file not set for SpineSpriteAtlasAsset: " + name, this);
|
Debug.LogError("SpriteAtlas file not set for SpineSpriteAtlasAsset: " + name, this);
|
||||||
Clear();
|
Clear();
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (materials == null || materials.Length == 0) {
|
if (!onlyMetaData && (materials == null || materials.Length == 0)) {
|
||||||
Debug.LogError("Materials not set for SpineSpriteAtlasAsset: " + name, this);
|
Debug.LogError("Materials not set for SpineSpriteAtlasAsset: " + name, this);
|
||||||
Clear();
|
Clear();
|
||||||
return null;
|
return null;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user