Hi ,
I found some problems with leaks when destroy gameobject.
And I find. If I don't use atlasAsset.GetAtlas() .No memory leaks so far.
AtlasAsset atlasAsset = null;
var task = EnjoyLoading.LoadFileAsync(path, null, 1, null, isOpenMini);
if (task != null)
yield return task.WaitForFinish();
if (task != null && task.asset != null)
{
atlasAsset = task.asset as AtlasAsset;
Atlas atlas = atlasAsset.GetAtlas();
Skin defaultSkin = data.defaultSkin;
AtlasAttachmentLoader loader = new AtlasAttachmentLoader(atlas);
float scaleMultiplier = skelAnim.skeletonDataAsset.scale;
foreach (SLua.LuaTable.TablePair pair in groupSlots)
{
try
{
var slot = pair.value.ToString();
var check = skeleton.FindSlot(slot);
if (check == null)
{
continue;
}
AtlasRegion region = atlasAsset.GetAtlas().FindRegion(slot);
if (region == null)
{
if (repack == true) continue;
if (dressgroup != "Face")
region = atlasAsset.GetAtlas().FindRegion("_black");
}
MeshAttachment parentMesh = LinkedMeshUtilities.FindAttachment(skeleton, slot, "default", slot) as MeshAttachment;
if (parentMesh != null)
{
if (region != null)
{
var newLinkedMesh = LinkedMeshUtilities.NewLinkedMeshAttachment("(New)" + slot, region, parentMesh);
if (newLinkedMesh == null)
{
AtlasRegion region_black = atlasAsset.GetAtlas().FindRegion("_black");
newLinkedMesh = LinkedMeshUtilities.NewLinkedMeshAttachment("_black", region_black, parentMesh);
}
var slotIndexint = skeleton.FindSlotIndex(slot);
myDynamicSkin.AddAttachment(slotIndexint, slot, newLinkedMesh);
}
}
else
{
if (atlasAsset.GetAtlas().FindRegion(slot) == null)
{
continue;
}
int slotIndex = skelAnim.skeleton.FindSlotIndex(slot);
var regionAttachment = loader.NewRegionAttachment(null, slot, slot);
if (regionAttachment == null) continue;
regionAttachment.Width = regionAttachment.RegionOriginalWidth * scaleMultiplier;
regionAttachment.Height = regionAttachment.RegionOriginalHeight * scaleMultiplier;
var fingersAttachment = defaultSkin.GetAttachment(slotIndex, slot) as RegionAttachment; // attachment name
if (fingersAttachment != null)
{
regionAttachment.x = fingersAttachment.x;
regionAttachment.y = fingersAttachment.y;
regionAttachment.rotation = fingersAttachment.rotation;
}
regionAttachment.UpdateOffset();
myDynamicSkin.AddAttachment(slotIndex, slot, regionAttachment);
}
}
catch (Exception e)
{
Debug.LogWarning(e);
}
}
skelAnim.skeleton.SetSkin(myDynamicSkin); // Set the skin.
skelAnim.skeleton.SetSlotsToSetupPose();
skelAnim.Update(0);
}
public static void ClearAvatarTexture()
{
//SpriteAtlasRegionExtensions.ClearCache();
Resources.UnloadUnusedAssets();
System.GC.Collect();
}
Unity : 5.6.6f2
Spine : 3.5.43