Browse Source

[unity] Auto-set advanced rendering settings.

pharan 8 years ago
parent
commit
87677c34e3
1 changed files with 36 additions and 25 deletions
  1. 36 25
      spine-unity/Assets/spine-unity/Editor/SpineEditorUtilities.cs

+ 36 - 25
spine-unity/Assets/spine-unity/Editor/SpineEditorUtilities.cs

@@ -1282,6 +1282,40 @@ namespace Spine.Unity.Editor {
 //			return true;
 //		}
 
+		public static void IngestAdvancedRenderSettings (SkeletonRenderer skeletonRenderer) {
+			const string PMAShaderQuery = "Spine/Skeleton";
+			const string TintBlackShaderQuery = "Tint Black";
+
+			if (skeletonRenderer == null) return;
+			var skeletonDataAsset = skeletonRenderer.skeletonDataAsset;
+			if (skeletonDataAsset == null) return;
+
+			bool pmaVertexColors = false;
+			bool tintBlack = false;
+			foreach (AtlasAsset atlasAsset in skeletonDataAsset.atlasAssets) {
+				if (!pmaVertexColors) {
+					foreach (Material m in atlasAsset.materials) {
+						if (m.shader.name.Contains(PMAShaderQuery)) {
+							pmaVertexColors = true;
+							break;
+						}
+					}
+				}
+
+				if (!tintBlack) {
+					foreach (Material m in atlasAsset.materials) {
+						if (m.shader.name.Contains(PMAShaderQuery)) {
+							tintBlack = true;
+							break;
+						}
+					}
+				}
+			}
+
+			skeletonRenderer.pmaVertexColors = pmaVertexColors;
+			skeletonRenderer.tintBlack = tintBlack;
+		}
+
 		public static SkeletonAnimation InstantiateSkeletonAnimation (SkeletonDataAsset skeletonDataAsset, string skinName, bool destroyInvalid = true) {
 			var skeletonData = skeletonDataAsset.GetSkeletonData(true);
 			var skin = skeletonData != null ? skeletonData.FindSkin(skinName) : null;
@@ -1308,19 +1342,7 @@ namespace Spine.Unity.Editor {
 			GameObject go = new GameObject(spineGameObjectName, typeof(MeshFilter), typeof(MeshRenderer), typeof(SkeletonAnimation));
 			SkeletonAnimation newSkeletonAnimation = go.GetComponent<SkeletonAnimation>();
 			newSkeletonAnimation.skeletonDataAsset = skeletonDataAsset;
-
-//			{
-//				bool requiresNormals = false;
-//				foreach (AtlasAsset atlasAsset in skeletonDataAsset.atlasAssets) {
-//					foreach (Material m in atlasAsset.materials) {
-//						if (m.shader.name.Contains("Lit")) {
-//							requiresNormals = true;
-//							break;
-//						}
-//					}
-//				}
-//				newSkeletonAnimation.calculateNormals = requiresNormals;
-//			}
+			IngestAdvancedRenderSettings(newSkeletonAnimation);
 
 			try {
 				newSkeletonAnimation.Initialize(false);
@@ -1374,18 +1396,7 @@ namespace Spine.Unity.Editor {
 
 			SkeletonAnimator anim = go.GetComponent<SkeletonAnimator>();
 			anim.skeletonDataAsset = skeletonDataAsset;
-
-			// Detect "Lit" shader and automatically enable calculateNormals.
-//			bool requiresNormals = false;
-//			foreach (AtlasAsset atlasAsset in anim.skeletonDataAsset.atlasAssets) {
-//				foreach (Material m in atlasAsset.materials) {
-//					if (m.shader.name.Contains("Lit")) {
-//						requiresNormals = true;
-//						break;
-//					}
-//				}
-//			}
-//			anim.calculateNormals = requiresNormals;
+			IngestAdvancedRenderSettings(anim);
 
 			SkeletonData data = skeletonDataAsset.GetSkeletonData(true);
 			if (data == null) {