Przeglądaj źródła

Merge pull request #1939 from sr4dev/fix_multiple_nested_prefab_override_issue

[unity] Fix multiple nested prefab override issue.
Harald Csaszar 4 lat temu
rodzic
commit
80973bc1aa

+ 23 - 2
spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonRenderer.cs

@@ -83,10 +83,26 @@ namespace Spine.Unity {
 				if (meshFilter == null)
 					meshFilter = gameObject.AddComponent<MeshFilter>();
 			}
-			if (fixPrefabOverrideViaMeshFilter)
+			if (fixPrefabOverrideViaMeshFilter) {
+			#if NEW_PREFAB_SYSTEM
+				if (UnityEditor.PrefabUtility.IsPartOfAnyPrefab(meshFilter)) {
+					var instanceRoot = UnityEditor.PrefabUtility.GetOutermostPrefabInstanceRoot(meshFilter);
+					if (instanceRoot != null) {
+						var objectOverrides = UnityEditor.PrefabUtility.GetObjectOverrides(instanceRoot);
+						foreach (UnityEditor.SceneManagement.ObjectOverride objectOverride in objectOverrides) {
+							if (objectOverride.instanceObject == meshFilter) {
+								objectOverride.Revert(UnityEditor.InteractionMode.AutomatedAction);
+								break;
+							}
+						}
+					}
+				}
+			#endif
 				meshFilter.hideFlags = HideFlags.DontSaveInEditor;
-			else
+			}
+			else {
 				meshFilter.hideFlags = HideFlags.None;
+			}
 		}
 		#endif
 		/// <summary>Flip X and Y to use when the Skeleton is initialized.</summary>
@@ -304,6 +320,11 @@ namespace Spine.Unity {
 		}
 	#endif
 
+		void OnEnable() {
+			if (!Application.isPlaying)
+				LateUpdate();
+		}
+
 		void OnDisable () {
 			if (clearStateOnDisable && valid)
 				ClearState();