|
@@ -31,6 +31,10 @@
|
|
#define NEW_PREFAB_SYSTEM
|
|
#define NEW_PREFAB_SYSTEM
|
|
#endif
|
|
#endif
|
|
|
|
|
|
|
|
+#if UNITY_2018_2_OR_NEWER
|
|
|
|
+#define HAS_GET_SHARED_MATERIALS
|
|
|
|
+#endif
|
|
|
|
+
|
|
using System.Collections.Generic;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using UnityEngine;
|
|
|
|
|
|
@@ -59,20 +63,28 @@ namespace Spine.Unity.Examples {
|
|
|
|
|
|
private Dictionary<Material, Material> replacementMaterialDict = new Dictionary<Material, Material>();
|
|
private Dictionary<Material, Material> replacementMaterialDict = new Dictionary<Material, Material>();
|
|
private Material[] sharedMaterials = new Material[0];
|
|
private Material[] sharedMaterials = new Material[0];
|
|
|
|
+#if HAS_GET_SHARED_MATERIALS
|
|
|
|
+ private List<Material> parentMaterials = new List<Material>();
|
|
|
|
+#endif
|
|
|
|
|
|
#if UNITY_EDITOR
|
|
#if UNITY_EDITOR
|
|
private void Reset () {
|
|
private void Reset () {
|
|
if (referenceRenderer == null) {
|
|
if (referenceRenderer == null) {
|
|
- referenceRenderer = this.transform.parent.GetComponentInParent<MeshRenderer>();
|
|
|
|
- if (!referenceRenderer)
|
|
|
|
- return;
|
|
|
|
|
|
+ if (this.transform.parent)
|
|
|
|
+ referenceRenderer = this.transform.parent.GetComponentInParent<MeshRenderer>();
|
|
|
|
+ if (referenceRenderer == null) return;
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+#if HAS_GET_SHARED_MATERIALS
|
|
|
|
+ referenceRenderer.GetSharedMaterials(parentMaterials);
|
|
|
|
+ int parentMaterialsCount = parentMaterials.Count;
|
|
|
|
+#else
|
|
Material[] parentMaterials = referenceRenderer.sharedMaterials;
|
|
Material[] parentMaterials = referenceRenderer.sharedMaterials;
|
|
- if (replacementMaterials.Length != parentMaterials.Length) {
|
|
|
|
- replacementMaterials = new MaterialReplacement[parentMaterials.Length];
|
|
|
|
|
|
+ int parentMaterialsCount = parentMaterials.Length;
|
|
|
|
+#endif
|
|
|
|
+ if (replacementMaterials.Length != parentMaterialsCount) {
|
|
|
|
+ replacementMaterials = new MaterialReplacement[parentMaterialsCount];
|
|
}
|
|
}
|
|
- for (int i = 0; i < parentMaterials.Length; ++i) {
|
|
|
|
|
|
+ for (int i = 0; i < parentMaterialsCount; ++i) {
|
|
replacementMaterials[i].originalMaterial = parentMaterials[i];
|
|
replacementMaterials[i].originalMaterial = parentMaterials[i];
|
|
replacementMaterials[i].replacementMaterial = parentMaterials[i];
|
|
replacementMaterials[i].replacementMaterial = parentMaterials[i];
|
|
}
|
|
}
|
|
@@ -82,9 +94,15 @@ namespace Spine.Unity.Examples {
|
|
#endif
|
|
#endif
|
|
|
|
|
|
void Awake () {
|
|
void Awake () {
|
|
|
|
+ ownRenderer = this.GetComponent<MeshRenderer>();
|
|
|
|
+ ownMeshFilter = this.GetComponent<MeshFilter>();
|
|
|
|
+
|
|
if (referenceRenderer == null) {
|
|
if (referenceRenderer == null) {
|
|
- referenceRenderer = this.transform.parent.GetComponentInParent<MeshRenderer>();
|
|
|
|
|
|
+ if (this.transform.parent != null)
|
|
|
|
+ referenceRenderer = this.transform.parent.GetComponentInParent<MeshRenderer>();
|
|
|
|
+ if (referenceRenderer == null) return;
|
|
}
|
|
}
|
|
|
|
+ referenceMeshFilter = referenceRenderer.GetComponent<MeshFilter>();
|
|
|
|
|
|
// subscribe to OnMeshAndMaterialsUpdated
|
|
// subscribe to OnMeshAndMaterialsUpdated
|
|
SkeletonAnimation skeletonRenderer = referenceRenderer.GetComponent<SkeletonAnimation>();
|
|
SkeletonAnimation skeletonRenderer = referenceRenderer.GetComponent<SkeletonAnimation>();
|
|
@@ -93,9 +111,6 @@ namespace Spine.Unity.Examples {
|
|
skeletonRenderer.OnMeshAndMaterialsUpdated += UpdateOnCallback;
|
|
skeletonRenderer.OnMeshAndMaterialsUpdated += UpdateOnCallback;
|
|
updateViaSkeletonCallback = true;
|
|
updateViaSkeletonCallback = true;
|
|
}
|
|
}
|
|
- referenceMeshFilter = referenceRenderer.GetComponent<MeshFilter>();
|
|
|
|
- ownRenderer = this.GetComponent<MeshRenderer>();
|
|
|
|
- ownMeshFilter = this.GetComponent<MeshFilter>();
|
|
|
|
|
|
|
|
InitializeDict();
|
|
InitializeDict();
|
|
}
|
|
}
|
|
@@ -131,6 +146,10 @@ namespace Spine.Unity.Examples {
|
|
}
|
|
}
|
|
|
|
|
|
void UpdateMaterials () {
|
|
void UpdateMaterials () {
|
|
|
|
+#if UNITY_EDITOR
|
|
|
|
+ if (!referenceRenderer) return;
|
|
|
|
+ if (!referenceMeshFilter) Reset();
|
|
|
|
+#endif
|
|
ownMeshFilter.sharedMesh = referenceMeshFilter.sharedMesh;
|
|
ownMeshFilter.sharedMesh = referenceMeshFilter.sharedMesh;
|
|
|
|
|
|
Material[] parentMaterials = referenceRenderer.sharedMaterials;
|
|
Material[] parentMaterials = referenceRenderer.sharedMaterials;
|