diff --git a/Scripts/ModifiedMaterial.cs b/Scripts/ModifiedMaterial.cs index ecc4e30..b1601ab 100644 --- a/Scripts/ModifiedMaterial.cs +++ b/Scripts/ModifiedMaterial.cs @@ -7,13 +7,13 @@ namespace Coffee.UIParticleExtensions { private static readonly List s_Entries = new List(); - public static Material Add(Material baseMat, Texture texture, int id) + public static Material Add(Material baseMat, Texture texture, int id, int props) { MatEntry e; for (var i = 0; i < s_Entries.Count; i++) { e = s_Entries[i]; - if (e.baseMat != baseMat || e.texture != texture || e.id != id) continue; + if (e.baseMat != baseMat || e.texture != texture || e.id != id || e.props != props) continue; ++e.count; return e.customMat; } @@ -24,6 +24,7 @@ namespace Coffee.UIParticleExtensions baseMat = baseMat, texture = texture, id = id, + props = props, customMat = new Material(baseMat) { name = $"{baseMat.name}_{id}", @@ -64,6 +65,7 @@ namespace Coffee.UIParticleExtensions public int count; public Material customMat; public int id; + public int props; public Texture texture; } } diff --git a/Scripts/UIParticleRenderer.cs b/Scripts/UIParticleRenderer.cs index ba55265..5df30f7 100644 --- a/Scripts/UIParticleRenderer.cs +++ b/Scripts/UIParticleRenderer.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using Coffee.UIParticleExtensions; +using UnityEditor; using UnityEngine; using UnityEngine.Profiling; using UnityEngine.Rendering; @@ -200,7 +201,12 @@ namespace Coffee.UIExtensions // var id = _parent.m_AnimatableProperties.Length == 0 ? 0 : GetInstanceID(); - modifiedMaterial = ModifiedMaterial.Add(modifiedMaterial, texture, id); +#if UNITY_EDITOR + var props = EditorJsonUtility.ToJson(modifiedMaterial).GetHashCode(); +#else + var props = 0; +#endif + modifiedMaterial = ModifiedMaterial.Add(modifiedMaterial, texture, id, props); ModifiedMaterial.Remove(_modifiedMaterial); _modifiedMaterial = modifiedMaterial; @@ -443,6 +449,17 @@ namespace Coffee.UIExtensions // Update animatable material properties. Profiler.BeginSample("[UIParticleRenderer] Update Animatable Material Properties"); + +#if UNITY_EDITOR + if (_modifiedMaterial != material) + { + _renderer.GetSharedMaterials(s_Materials); + material = s_Materials[_isTrail ? 1 : 0]; + s_Materials.Clear(); + SetMaterialDirty(); + } +#endif + UpdateMaterialProperties(); if (_parent.useMeshSharing) {