Skip to content

Commit

Permalink
[unity] Fixed incorrect reloading behaviour (especially of deform tim…
Browse files Browse the repository at this point in the history
…eline) at Domain Reload. (Fix of previous commit 0820bd7). Closes #2066.
  • Loading branch information
HaraldCsaszar committed Apr 13, 2022
1 parent 0820bd7 commit 70277b8
Show file tree
Hide file tree
Showing 6 changed files with 35 additions and 12 deletions.
Expand Up @@ -154,7 +154,7 @@ public class SkeletonDataAssetInspector : UnityEditor.Editor {

void Clear () {
preview.Clear();
targetSkeletonDataAsset.Clear();
SpineEditorUtilities.ClearSkeletonDataAsset(targetSkeletonDataAsset);
targetSkeletonData = null;
}

Expand Down
Expand Up @@ -462,7 +462,7 @@ public class AtlasRequirementLoader : AttachmentLoader {
}

Debug.LogFormat("Changes to '{0}' or atlas detected. Clearing SkeletonDataAsset: {1}", skeletonJSONPath, localPath);
skeletonDataAsset.Clear();
SpineEditorUtilities.ClearSkeletonDataAsset(skeletonDataAsset);

string guid = AssetDatabase.AssetPathToGUID(AssetDatabase.GetAssetPath(skeletonDataAsset));
string lastHash = EditorPrefs.GetString(guid + "_hash");
Expand Down Expand Up @@ -947,7 +947,7 @@ public class AtlasRequirementLoader : AttachmentLoader {
AssetDatabase.CreateAsset(skeletonDataAsset, filePath);
} else {
skeletonDataAsset.atlasAssets = atlasAssets;
skeletonDataAsset.Clear();
SpineEditorUtilities.ClearSkeletonDataAsset(skeletonDataAsset);
}
var skeletonData = skeletonDataAsset.GetSkeletonData(true);
if (skeletonData != null)
Expand Down
Expand Up @@ -96,7 +96,7 @@ protected class TemplateMaterials {
}
}

skeletonDataAsset.Clear();
SpineEditorUtilities.ClearSkeletonDataAsset(skeletonDataAsset);
skeletonData = skeletonDataAsset.GetSkeletonData(true);
if (anyMaterialsChanged)
ReloadSceneSkeletons(skeletonDataAsset);
Expand Down Expand Up @@ -164,7 +164,7 @@ protected class TemplateMaterials {

var skinEntries = new List<Skin.SkinEntry>();

skeletonDataAsset.Clear();
SpineEditorUtilities.ClearSkeletonDataAsset(skeletonDataAsset);
skeletonDataAsset.isUpgradingBlendModeMaterials = true;
SkeletonData skeletonData = skeletonDataAsset.GetSkeletonData(true);

Expand Down
Expand Up @@ -91,8 +91,7 @@ public static class DataReloadHandler {
}

foreach (var skeletonDataAsset in skeletonDataAssetsToReload) {
skeletonDataAsset.Clear();
skeletonDataAsset.GetSkeletonData(true);
ReloadSkeletonDataAsset(skeletonDataAsset, false);
}

foreach (var skeletonRenderer in activeSkeletonRenderers)
Expand All @@ -119,14 +118,24 @@ public static class DataReloadHandler {
}
}

public static void ClearAnimationReferenceAssets (SkeletonDataAsset skeletonDataAsset) {
ForEachAnimationReferenceAsset(skeletonDataAsset, (referenceAsset) => referenceAsset.Clear());
}

public static void ReloadAnimationReferenceAssets (SkeletonDataAsset skeletonDataAsset) {
ForEachAnimationReferenceAsset(skeletonDataAsset, (referenceAsset) => referenceAsset.Initialize());
}

private static void ForEachAnimationReferenceAsset (SkeletonDataAsset skeletonDataAsset,
System.Action<AnimationReferenceAsset> func) {

string[] guids = UnityEditor.AssetDatabase.FindAssets("t:AnimationReferenceAsset");
foreach (string guid in guids) {
string path = UnityEditor.AssetDatabase.GUIDToAssetPath(guid);
if (!string.IsNullOrEmpty(path)) {
var referenceAsset = UnityEditor.AssetDatabase.LoadAssetAtPath<AnimationReferenceAsset>(path);
if (referenceAsset.SkeletonDataAsset == skeletonDataAsset)
referenceAsset.Initialize();
func(referenceAsset);
}
}
}
Expand Down
Expand Up @@ -266,14 +266,23 @@ public partial class SpineEditorUtilities : AssetPostprocessor {
ReinitializeComponent(component);
}

public static void ReloadSkeletonDataAsset (SkeletonDataAsset skeletonDataAsset) {
if (skeletonDataAsset != null) {
public static void ClearSkeletonDataAsset (SkeletonDataAsset skeletonDataAsset) {
skeletonDataAsset.Clear();
DataReloadHandler.ClearAnimationReferenceAssets(skeletonDataAsset);
}

public static void ReloadSkeletonDataAsset (SkeletonDataAsset skeletonDataAsset, bool clearAtlasAssets = true) {
if (skeletonDataAsset == null)
return;

if (clearAtlasAssets) {
foreach (AtlasAssetBase aa in skeletonDataAsset.atlasAssets) {
if (aa != null) aa.Clear();
}
skeletonDataAsset.Clear();
}
ClearSkeletonDataAsset(skeletonDataAsset);
skeletonDataAsset.GetSkeletonData(true);
DataReloadHandler.ReloadAnimationReferenceAssets(skeletonDataAsset);
}

public static void ReinitializeComponent (SkeletonRenderer component) {
Expand Down
Expand Up @@ -48,11 +48,16 @@ public class AnimationReferenceAsset : ScriptableObject, IHasSkeletonDataAsset {
if (animation == null)
Initialize();
#endif

return animation;
}
}

/// <summary>Clears the cached animation corresponding to a loaded SkeletonData object.
/// Use this to force a reload for the next time Animation is called.</summary>
public void Clear () {
animation = null;
}

public void Initialize () {
if (skeletonDataAsset == null) return;
SkeletonData skeletonData = skeletonDataAsset.GetSkeletonData(AnimationReferenceAsset.QuietSkeletonData);
Expand Down

0 comments on commit 70277b8

Please sign in to comment.