From 01459b06b850324b0fff67cf884fb5a668d6064d Mon Sep 17 00:00:00 2001 From: mob-sakai Date: Sat, 11 Jun 2022 22:32:14 +0900 Subject: [PATCH] refactor --- Scripts/Editor/UIParticleEditor.cs | 6 ------ Scripts/UIParticle.cs | 23 +++++++++++++---------- Scripts/UIParticleRenderer.cs | 12 +++++++++--- Scripts/UIParticleUpdater.cs | 13 +++++++++++-- 4 files changed, 33 insertions(+), 21 deletions(-) diff --git a/Scripts/Editor/UIParticleEditor.cs b/Scripts/Editor/UIParticleEditor.cs index ef446d4..c753dea 100644 --- a/Scripts/Editor/UIParticleEditor.cs +++ b/Scripts/Editor/UIParticleEditor.cs @@ -223,13 +223,7 @@ namespace Coffee.UIExtensions .ToArray(); // Animated properties - EditorGUI.BeginChangeCheck(); AnimatedPropertiesEditor.DrawAnimatableProperties(m_AnimatableProperties, mats); - if (EditorGUI.EndChangeCheck()) - { - foreach (UIParticle t in targets) - t.SetMaterialDirty(); - } // Target ParticleSystems. _ro.DoLayoutList(); diff --git a/Scripts/UIParticle.cs b/Scripts/UIParticle.cs index 55e188a..38a3adb 100644 --- a/Scripts/UIParticle.cs +++ b/Scripts/UIParticle.cs @@ -194,7 +194,7 @@ namespace Coffee.UIExtensions for (var i = 0; i < m_Renderers.Count; i++) { - GetRenderer(i).Clear(); + GetRenderer(i).Clear(i); } var j = 0; @@ -206,21 +206,24 @@ namespace Coffee.UIExtensions GetRenderer(j++).Set(this, particles[i], true); } } - } - public void UpdateRenderers() + internal void UpdateTransformScale() { - var newScale = Vector3.one; + //var newScale = Vector3.one; //if (uiScaling) - { - newScale = transform.parent.lossyScale.Inverse(); - } + //{ + // newScale = transform.parent.lossyScale.Inverse(); + //} + var newScale = transform.parent.lossyScale.Inverse(); if (transform.localScale != newScale) { transform.localScale = newScale; } + } + internal void UpdateRenderers() + { var bakeCamera = GetBakeCamera(); for (var i = 0; i < m_Renderers.Count; i++) { @@ -248,7 +251,7 @@ namespace Coffee.UIExtensions { _tracker.Clear(); UIParticleUpdater.Unregister(this); - m_Renderers.ForEach(r=>r.Clear()); + m_Renderers.ForEach(r => r.Clear()); UnregisterDirtyMaterialCallback(UpdateRendererMaterial); base.OnDisable(); @@ -282,11 +285,11 @@ namespace Coffee.UIExtensions } } - private UIParticleRenderer GetRenderer(int index) + internal UIParticleRenderer GetRenderer(int index) { if (m_Renderers.Count <= index) { - m_Renderers.Add(UIParticleRenderer.AddRenderer(this)); + m_Renderers.Add(UIParticleRenderer.AddRenderer(this, index)); } return m_Renderers[index]; } diff --git a/Scripts/UIParticleRenderer.cs b/Scripts/UIParticleRenderer.cs index cb02a51..b62ea99 100644 --- a/Scripts/UIParticleRenderer.cs +++ b/Scripts/UIParticleRenderer.cs @@ -15,13 +15,14 @@ namespace Coffee.UIExtensions { private static readonly CombineInstance[] s_CombineInstances = new CombineInstance[] { new CombineInstance() }; private static ParticleSystem.Particle[] s_Particles = new ParticleSystem.Particle[2048]; - private static List s_Materials = new List(2); + private static readonly List s_Materials = new List(2); private static MaterialPropertyBlock s_Mpb; private ParticleSystemRenderer _renderer; private ParticleSystem _particleSystem; //private ParticleSystem _emitter; private UIParticle _parent; + private int _index; private bool _isTrail; private Material _modifiedMaterial; private Vector3 _prevScale; @@ -46,7 +47,7 @@ namespace Coffee.UIExtensions } } - public static UIParticleRenderer AddRenderer(UIParticle parent) + public static UIParticleRenderer AddRenderer(UIParticle parent, int index) { // Create renderer object. var go = new GameObject("UIParticleRenderer", typeof(UIParticleRenderer)) @@ -65,6 +66,7 @@ namespace Coffee.UIExtensions // Add renderer component. var renderer = go.GetComponent(); renderer._parent = parent; + renderer._index = index; return renderer; } @@ -96,7 +98,7 @@ namespace Coffee.UIExtensions return modifiedMaterial; } - public void Clear() + public void Clear(int index = -1) { if (_renderer) { @@ -105,6 +107,10 @@ namespace Coffee.UIExtensions _parent = null; _particleSystem = null; _renderer = null; + if (0 <= index ) + { + _index = index; + } //_emitter = null; material = null; diff --git a/Scripts/UIParticleUpdater.cs b/Scripts/UIParticleUpdater.cs index 0ccaed6..306df07 100644 --- a/Scripts/UIParticleUpdater.cs +++ b/Scripts/UIParticleUpdater.cs @@ -10,6 +10,14 @@ namespace Coffee.UIExtensions static readonly List s_ActiveParticles = new List(); private static int frameCount = 0; + public static int uiParticleCount + { + get + { + return s_ActiveParticles.Count; + } + } + public static void Register(UIParticle particle) { if (!particle) return; @@ -41,16 +49,17 @@ namespace Coffee.UIExtensions Profiler.BeginSample("[UIParticle] Refresh"); for (var i = 0; i < s_ActiveParticles.Count; i++) { + var uip = s_ActiveParticles[i]; try { - s_ActiveParticles[i].UpdateRenderers(); + uip.UpdateTransformScale(); + uip.UpdateRenderers(); } catch (Exception e) { Debug.LogException(e); } } - Profiler.EndSample(); } }