diff --git a/CHANGELOG.md b/CHANGELOG.md index 0b48a02..d159ce3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +# [3.0.0-preview.20](https://github.com/mob-sakai/ParticleEffectForUGUI/compare/v3.0.0-preview.19...v3.0.0-preview.20) (2020-08-28) + + +### Features + +* automatically update ([96a868b](https://github.com/mob-sakai/ParticleEffectForUGUI/commit/96a868b60a3f36d761d58b5082aa9d37666e63a3)) + # [3.0.0-preview.19](https://github.com/mob-sakai/ParticleEffectForUGUI/compare/v3.0.0-preview.18...v3.0.0-preview.19) (2020-08-28) diff --git a/Scripts/UIParticle.cs b/Scripts/UIParticle.cs index c06c61a..7fc2fe3 100755 --- a/Scripts/UIParticle.cs +++ b/Scripts/UIParticle.cs @@ -15,7 +15,7 @@ namespace Coffee.UIExtensions [ExecuteInEditMode] [RequireComponent(typeof(RectTransform))] [RequireComponent(typeof(CanvasRenderer))] - public class UIParticle : MaskableGraphic + public class UIParticle : MaskableGraphic, ISerializationCallbackReceiver { [HideInInspector] [SerializeField] bool m_IsTrail = false; @@ -114,6 +114,13 @@ namespace Coffee.UIExtensions { GetComponentsInChildren(particles); + foreach (var ps in particles) + { + var tsa = ps.textureSheetAnimation; + if (tsa.mode == ParticleSystemAnimationMode.Sprites && tsa.uvChannelMask == (UVChannelFlags) 0) + tsa.uvChannelMask = UVChannelFlags.UV0; + } + particles.Exec(p => p.GetComponent().enabled = !enabled); particles.SortForRendering(transform); @@ -258,12 +265,11 @@ namespace Coffee.UIExtensions private void InitializeIfNeeded() { - if (0 < particles.Count) return; + if (!this || 0 < particles.Count) return; - if (m_IsTrail - || transform.parent && transform.parent.GetComponentInParent()) + if (m_IsTrail) { - gameObject.SetActive(false); + UnityEngine.Debug.LogWarningFormat("[UIParticle] Remove this UIParticle: {0}\nReason: UIParticle for trails is no longer needed.", name); if (Application.isPlaying) Destroy(gameObject); else @@ -271,13 +277,41 @@ namespace Coffee.UIExtensions return; } + if (transform.parent && transform.parent.GetComponentInParent()) + { + UnityEngine.Debug.LogWarningFormat("[UIParticle] Remove this UIParticle: {0}\nReason: The parent UIParticle exists.", name); + if (Application.isPlaying) + Destroy(this); + else + DestroyImmediate(this); + return; + } + // refresh. #if UNITY_EDITOR if (!Application.isPlaying) - UnityEditor.EditorApplication.delayCall += RefreshParticles; + UnityEditor.EditorApplication.delayCall += () => + { + if (this) RefreshParticles(); + }; else #endif RefreshParticles(); } + +#if UNITY_EDITOR + void ISerializationCallbackReceiver.OnBeforeSerialize() + { + InitializeIfNeeded(); + } + + void ISerializationCallbackReceiver.OnAfterDeserialize() + { + UnityEditor.EditorApplication.delayCall += () => + { + if (this) InitializeIfNeeded(); + }; + } +#endif } } diff --git a/package.json b/package.json index ca188cd..8c58b82 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "com.coffee.ui-particle", "displayName": "UI Particle", "description": "This plugin provide a component to render particle effect for uGUI.\nThe particle rendering is maskable and sortable, without Camera, RenderTexture or Canvas.", - "version": "3.0.0-preview.19", + "version": "3.0.0-preview.20", "unity": "2018.2", "license": "MIT", "repository": {