Преглед изворни кода

Merge branch '4.1' into 4.2-beta

Harald Csaszar пре 2 година
родитељ
комит
8e1101ad9b

+ 41 - 23
spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/BlendModeMaterialsUtility.cs

@@ -203,40 +203,58 @@ namespace Spine.Unity.Editor {
 					var renderableAttachment = entry.Attachment as IHasTextureRegion;
 					if (renderableAttachment != null) {
 						var originalRegion = (AtlasRegion)renderableAttachment.Region;
-						Sequence sequence = null;
-						if (originalRegion == null && (sequence = renderableAttachment.Sequence) != null) {
-							if (sequence.Regions != null && sequence.Regions.Length > 0)
-								originalRegion = (AtlasRegion)sequence.Regions[0];
-						}
-						bool replacementExists = replacementMaterials.Exists(
-							replacement => replacement.pageName == originalRegion.page.name);
-						if (!replacementExists) {
-							bool createdNewMaterial;
-							var replacement = CreateOrLoadReplacementMaterial(originalRegion, materialTemplate, materialSuffix, out createdNewMaterial);
-							if (replacement != null) {
-								replacementMaterials.Add(replacement);
-								anyReplacementMaterialsChanged = true;
-								if (createdNewMaterial) {
-									Debug.Log(string.Format("Created blend mode Material '{0}' for SkeletonData asset '{1}'.",
-										replacement.material.name, skeletonDataAsset), replacement.material);
+						if (originalRegion != null) {
+							anyCreationFailed |= CreateForRegion(
+								ref replacementMaterials, ref anyReplacementMaterialsChanged,
+								originalRegion, materialTemplate, materialSuffix, skeletonDataAsset);
+						} else {
+							Sequence sequence = renderableAttachment.Sequence;
+							if (sequence != null && sequence.Regions != null) {
+								for (int i = 0, count = sequence.Regions.Length; i < count; ++i) {
+									originalRegion = (AtlasRegion)sequence.Regions[i];
+									anyCreationFailed |= CreateForRegion(
+										ref replacementMaterials, ref anyReplacementMaterialsChanged,
+										originalRegion, materialTemplate, materialSuffix, skeletonDataAsset);
 								}
-							} else {
-								Debug.LogError(string.Format("Failed creating blend mode Material for SkeletonData asset '{0}'," +
-									" atlas page '{1}', template '{2}'.",
-									skeletonDataAsset.name, originalRegion.page.name, materialTemplate.name),
-									skeletonDataAsset);
-								anyCreationFailed = true;
 							}
 						}
 					}
 				}
 			}
-
 			skeletonDataAsset.isUpgradingBlendModeMaterials = false;
 			EditorUtility.SetDirty(skeletonDataAsset);
 			return !anyCreationFailed;
 		}
 
+		protected static bool CreateForRegion (ref List<BlendModeMaterials.ReplacementMaterial> replacementMaterials,
+			ref bool anyReplacementMaterialsChanged,
+			AtlasRegion originalRegion, Material materialTemplate, string materialSuffix,
+			SkeletonDataAsset skeletonDataAsset) {
+
+			bool anyCreationFailed = false;
+			bool replacementExists = replacementMaterials.Exists(
+				replacement => replacement.pageName == originalRegion.page.name);
+			if (!replacementExists) {
+				bool createdNewMaterial;
+				var replacement = CreateOrLoadReplacementMaterial(originalRegion, materialTemplate, materialSuffix, out createdNewMaterial);
+				if (replacement != null) {
+					replacementMaterials.Add(replacement);
+					anyReplacementMaterialsChanged = true;
+					if (createdNewMaterial) {
+						Debug.Log(string.Format("Created blend mode Material '{0}' for SkeletonData asset '{1}'.",
+							replacement.material.name, skeletonDataAsset), replacement.material);
+					}
+				} else {
+					Debug.LogError(string.Format("Failed creating blend mode Material for SkeletonData asset '{0}'," +
+						" atlas page '{1}', template '{2}'.",
+						skeletonDataAsset.name, originalRegion.page.name, materialTemplate.name),
+						skeletonDataAsset);
+					anyCreationFailed = true;
+				}
+			}
+			return anyCreationFailed;
+		}
+
 		protected static string GetBlendModeMaterialPath (AtlasPage originalPage, string materialSuffix) {
 			var originalMaterial = originalPage.rendererObject as Material;
 			var originalPath = AssetDatabase.GetAssetPath(originalMaterial);

+ 11 - 1
spine-unity/Assets/Spine/Runtime/spine-unity/Utility/MaterialChecks.cs

@@ -96,7 +96,12 @@ namespace Spine.Unity {
 			"\nWarning: 'Canvas Group Tint Black' is enabled at SkeletonGraphic but not 'CanvasGroup Compatible' at the Material!\n\nPlease\n"
 			+ "a) enable 'CanvasGroup Compatible' at the Material or\n"
 			+ "b) disable 'Canvas Group Tint Black' at the SkeletonGraphic component under 'Advanced'.\n"
-			+ "You may want to duplicate the 'SkeletonGraphicDefault' material and change settings at the duplicate to not affect all instances.";
+			+ "You may want to duplicate the 'SkeletonGraphicTintBlack' material and change settings at the duplicate to not affect all instances.";
+		public static readonly string kCanvasGroupCompatibleDisabledMessage =
+			"\nWarning: 'CanvasGroup Compatible' is enabled at the Material but 'Canvas Group Tint Black' is disabled at SkeletonGraphic!\n\nPlease\n"
+			+ "a) disable 'CanvasGroup Compatible' at the Material or\n"
+			+ "b) enable 'Canvas Group Tint Black' at the SkeletonGraphic component under 'Advanced'.\n"
+			+ "You may want to duplicate the 'SkeletonGraphicTintBlack' material and change settings at the duplicate to not affect all instances.";
 
 		public static bool IsMaterialSetupProblematic (SkeletonRenderer renderer, ref string errorMessage) {
 			var materials = renderer.GetComponent<Renderer>().sharedMaterials;
@@ -152,6 +157,11 @@ namespace Spine.Unity {
 					isProblematic = true;
 					errorMessage += kCanvasGroupCompatibleMessage;
 				}
+				if (settings.tintBlack == true && settings.canvasGroupTintBlack == false
+					&& IsCanvasGroupCompatible(material)) {
+					isProblematic = true;
+					errorMessage += kCanvasGroupCompatibleDisabledMessage;
+				}
 			}
 			return isProblematic;
 		}