From 859fa20d297c3f44e3361f20dbb7ce966407e03e Mon Sep 17 00:00:00 2001 From: Minhyuk Kim Date: Wed, 8 Apr 2026 16:55:51 +0900 Subject: [PATCH 1/7] fix: add `meshCleared` flag to optimize mesh clearing --- Packages/src/Runtime/UIParticleRenderer.cs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Packages/src/Runtime/UIParticleRenderer.cs b/Packages/src/Runtime/UIParticleRenderer.cs index 814c137..e152777 100644 --- a/Packages/src/Runtime/UIParticleRenderer.cs +++ b/Packages/src/Runtime/UIParticleRenderer.cs @@ -30,6 +30,7 @@ namespace Coffee.UIExtensions private int _index; private bool _isPrevStored; private bool _isTrail; + private bool _meshCleared; private Bounds _lastBounds; private Material _materialForRendering; private Material _modifiedMaterial; @@ -285,10 +286,14 @@ namespace Coffee.UIExtensions || (_isTrail && !_particleSystem.trails.enabled) // Trail, but it is not enabled. ) { + // Skip clearing the mesh if it's already cleared. + if (_meshCleared) return; + Profiler.BeginSample("[UIParticleRenderer] Clear Mesh"); workerMesh.Clear(); canvasRenderer.SetMesh(workerMesh); _lastBounds = new Bounds(); + _meshCleared = true; Profiler.EndSample(); return; @@ -312,6 +317,7 @@ namespace Coffee.UIExtensions // customData.SetVector(ParticleSystemCustomData.Custom2, 3, 0); // } + _meshCleared = false; var main = _particleSystem.main; var scale = GetWorldScale(); var psPos = _particleSystem.transform.position; From a5ee6878212be2fc4d7b48879426f239e8753009 Mon Sep 17 00:00:00 2001 From: tako Date: Tue, 21 Apr 2026 10:46:13 +0900 Subject: [PATCH 2/7] fix: fix Unity6.5 compile errors and warnings close #400 --- Packages/src/Editor/AnimatablePropertyEditor.cs | 9 +++++++++ Packages/src/Runtime/Internal/Utilities/Misc.cs | 4 +++- .../src/Runtime/Internal/Utilities/ObjectRepository.cs | 6 +++--- Packages/src/Runtime/UIParticleRenderer.cs | 6 +++--- .../src/Runtime/Utilities/ParticleSystemExtensions.cs | 4 ++-- 5 files changed, 20 insertions(+), 9 deletions(-) diff --git a/Packages/src/Editor/AnimatablePropertyEditor.cs b/Packages/src/Editor/AnimatablePropertyEditor.cs index 38bdec9..f3e5de1 100644 --- a/Packages/src/Editor/AnimatablePropertyEditor.cs +++ b/Packages/src/Editor/AnimatablePropertyEditor.cs @@ -78,10 +78,19 @@ namespace Coffee.UIExtensions var mat = mats[j]; if (mat == null || mat.shader == null) continue; +#if UNITY_6000_5_OR_NEWER + for (var i = 0; i < mat.shader.GetPropertyCount(); i++) +#else for (var i = 0; i < ShaderUtil.GetPropertyCount(mat.shader); i++) +#endif { +#if UNITY_6000_5_OR_NEWER + var name = mat.shader.GetPropertyName(i); + var type = (AnimatableProperty.ShaderPropertyType)mat.shader.GetPropertyType(i); +#else var name = ShaderUtil.GetPropertyName(mat.shader, i); var type = (AnimatableProperty.ShaderPropertyType)ShaderUtil.GetPropertyType(mat.shader, i); +#endif if (!s_Names.Add(name)) continue; AddMenu(gm, sp, new ShaderProperty(name, type), true); diff --git a/Packages/src/Runtime/Internal/Utilities/Misc.cs b/Packages/src/Runtime/Internal/Utilities/Misc.cs index 58769e9..353abe6 100644 --- a/Packages/src/Runtime/Internal/Utilities/Misc.cs +++ b/Packages/src/Runtime/Internal/Utilities/Misc.cs @@ -20,7 +20,9 @@ namespace Coffee.UIParticleInternal { public static T[] FindObjectsOfType() where T : Object { -#if UNITY_2023_1_OR_NEWER +#if UNITY_6000_5_OR_NEWER + return Object.FindObjectsByType(FindObjectsInactive.Include); +#elif UNITY_2023_1_OR_NEWER return Object.FindObjectsByType(FindObjectsInactive.Include, FindObjectsSortMode.None); #else return Object.FindObjectsOfType(); diff --git a/Packages/src/Runtime/Internal/Utilities/ObjectRepository.cs b/Packages/src/Runtime/Internal/Utilities/ObjectRepository.cs index 9797789..9f47e16 100644 --- a/Packages/src/Runtime/Internal/Utilities/ObjectRepository.cs +++ b/Packages/src/Runtime/Internal/Utilities/ObjectRepository.cs @@ -130,7 +130,7 @@ namespace Coffee.UIParticleInternal newEntry.hash = hash; newEntry.reference = 1; _cache[hash] = newEntry; - _objectKey[newObject.GetInstanceID()] = hash; + _objectKey[newObject.GetHashCode()] = hash; Logging.Log(_name, $"Add(total#{count}): {newEntry}"); Release(ref obj); obj = newObject; @@ -146,7 +146,7 @@ namespace Coffee.UIParticleInternal // Find and release the entry. Profiler.BeginSample("(COF)[ObjectRepository] Release"); - var id = obj.GetInstanceID(); + var id = obj.GetHashCode(); if (_objectKey.TryGetValue(id, out var hash) && _cache.TryGetValue(hash, out var entry)) { @@ -175,7 +175,7 @@ namespace Coffee.UIParticleInternal Profiler.BeginSample("(COF)[ObjectRepository] Remove"); _cache.Remove(entry.hash); - _objectKey.Remove(entry.storedObject.GetInstanceID()); + _objectKey.Remove(entry.storedObject.GetHashCode()); _pool.Push(entry); entry.reference = 0; Logging.Log(_name, $"Remove(total#{_cache.Count}): {entry}"); diff --git a/Packages/src/Runtime/UIParticleRenderer.cs b/Packages/src/Runtime/UIParticleRenderer.cs index e152777..f6c0162 100644 --- a/Packages/src/Runtime/UIParticleRenderer.cs +++ b/Packages/src/Runtime/UIParticleRenderer.cs @@ -206,9 +206,9 @@ namespace Coffee.UIExtensions } var hash = new Hash128( - modifiedMaterial ? (uint)modifiedMaterial.GetInstanceID() : 0, - texture ? (uint)texture.GetInstanceID() : 0, - 0 < _parent.m_AnimatableProperties.Length ? (uint)GetInstanceID() : 0, + modifiedMaterial ? (uint)modifiedMaterial.GetHashCode() : 0, + texture ? (uint)texture.GetHashCode() : 0, + 0 < _parent.m_AnimatableProperties.Length ? (uint)GetHashCode() : 0, #if UNITY_EDITOR (uint)EditorJsonUtility.ToJson(modifiedMaterial).GetHashCode() #else diff --git a/Packages/src/Runtime/Utilities/ParticleSystemExtensions.cs b/Packages/src/Runtime/Utilities/ParticleSystemExtensions.cs index ee59b7d..292078f 100644 --- a/Packages/src/Runtime/Utilities/ParticleSystemExtensions.cs +++ b/Packages/src/Runtime/Utilities/ParticleSystemExtensions.cs @@ -92,7 +92,7 @@ namespace Coffee.UIParticleInternal if (sortByMaterial) { - return aMat.GetInstanceID() - bMat.GetInstanceID(); + return aMat.GetHashCode() - bMat.GetHashCode(); } if (aMat.renderQueue != bMat.renderQueue) @@ -131,7 +131,7 @@ namespace Coffee.UIParticleInternal { for (var i = 0; i < list.Count; i++) { - if (list[i].GetInstanceID() == ps.GetInstanceID()) + if (list[i].GetHashCode() == ps.GetHashCode()) { return i; } From f8ac9869f141238169730e74f5d65c4fc6081f51 Mon Sep 17 00:00:00 2001 From: tako Date: Tue, 21 Apr 2026 10:47:25 +0900 Subject: [PATCH 3/7] fix: updated support for some changed menu paths close #397 --- Packages/src/Editor/UIParticleMenu.cs | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/Packages/src/Editor/UIParticleMenu.cs b/Packages/src/Editor/UIParticleMenu.cs index 256a4f9..283c9ef 100644 --- a/Packages/src/Editor/UIParticleMenu.cs +++ b/Packages/src/Editor/UIParticleMenu.cs @@ -6,11 +6,22 @@ namespace Coffee.UIExtensions { internal class UIParticleMenu { - [MenuItem("GameObject/UI/Particle System (Empty)", false, 2018)] +#if UNITY_6000_5_OR_NEWER + private const string k_MenuPathToCreateParticleSystem = "GameObject/Visual Effects/Particle System"; +#else + private const string k_MenuPathToCreateParticleSystem = "GameObject/Effects/Particle System"; +#endif +#if UNITY_6000_3_OR_NEWER + private const string k_MenuPathForUgui = "GameObject/UI (Canvas)"; +#else + private const string k_MenuPathForUgui = "GameObject/UI"; +#endif + + [MenuItem(k_MenuPathForUgui + "/Particle System (Empty)", false, 2018)] private static void AddParticleEmpty(MenuCommand menuCommand) { // Create empty UI element. - EditorApplication.ExecuteMenuItem("GameObject/UI/Image"); + EditorApplication.ExecuteMenuItem(k_MenuPathForUgui + "/Image"); var ui = Selection.activeGameObject; Object.DestroyImmediate(ui.GetComponent()); @@ -21,7 +32,7 @@ namespace Coffee.UIExtensions uiParticle.rectTransform.sizeDelta = Vector2.zero; } - [MenuItem("GameObject/UI/Particle System", false, 2019)] + [MenuItem(k_MenuPathForUgui + "/Particle System", false, 2019)] private static void AddParticle(MenuCommand menuCommand) { // Create empty UIEffect. @@ -29,7 +40,7 @@ namespace Coffee.UIExtensions var uiParticle = Selection.activeGameObject.GetComponent(); // Create ParticleSystem. - EditorApplication.ExecuteMenuItem("GameObject/Effects/Particle System"); + EditorApplication.ExecuteMenuItem(k_MenuPathToCreateParticleSystem); var ps = Selection.activeGameObject; ps.transform.SetParent(uiParticle.transform, false); ps.transform.localPosition = Vector3.zero; From b740dd662d423c6bef849662ce1b0bfbb4940ed4 Mon Sep 17 00:00:00 2001 From: mob-sakai <12690315+mob-sakai@users.noreply.github.com> Date: Mon, 8 Jun 2026 13:11:39 +0900 Subject: [PATCH 4/7] fix: potential access to UIParticleRenderer that has already been destroyed close #403 --- Packages/src/Runtime/UIParticle.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Packages/src/Runtime/UIParticle.cs b/Packages/src/Runtime/UIParticle.cs index 3f3ffa6..0146f67 100644 --- a/Packages/src/Runtime/UIParticle.cs +++ b/Packages/src/Runtime/UIParticle.cs @@ -358,6 +358,7 @@ namespace Coffee.UIExtensions _isScaleStored = false; UIParticleUpdater.Unregister(this); + _renderers.RemoveAll(r => r == null); _renderers.ForEach(r => r.Reset()); UnregisterDirtyMaterialCallback(UpdateRendererMaterial); From 48b38ec34fc804a42e2219c475578a2ca6b5360c Mon Sep 17 00:00:00 2001 From: mob-sakai <12690315+mob-sakai@users.noreply.github.com> Date: Mon, 8 Jun 2026 13:27:27 +0900 Subject: [PATCH 5/7] update internal code --- Packages/src/Runtime/AnimatableProperty.cs | 28 +++---------------- .../Extensions/ComponentExtensions.cs | 2 +- .../PreloadedProjectSettings.cs | 2 ++ .../Utilities/{Logging.cs => Logger.cs} | 2 +- .../Runtime/Internal/Utilities/Logger.cs.meta | 2 ++ .../Internal/Utilities/Logging.cs.meta | 11 -------- .../src/Runtime/Internal/Utilities/Misc.cs | 2 +- .../Runtime/Internal/Utilities/ObjectPool.cs | 8 +++--- .../Internal/Utilities/ObjectRepository.cs | 10 +++---- .../Internal/Utilities/UIExtraCallbacks.cs | 13 +++++++-- 10 files changed, 31 insertions(+), 49 deletions(-) rename Packages/src/Runtime/Internal/Utilities/{Logging.cs => Logger.cs} (99%) create mode 100644 Packages/src/Runtime/Internal/Utilities/Logger.cs.meta delete mode 100644 Packages/src/Runtime/Internal/Utilities/Logging.cs.meta diff --git a/Packages/src/Runtime/AnimatableProperty.cs b/Packages/src/Runtime/AnimatableProperty.cs index 2793395..b0b892a 100644 --- a/Packages/src/Runtime/AnimatableProperty.cs +++ b/Packages/src/Runtime/AnimatableProperty.cs @@ -37,37 +37,17 @@ namespace Coffee.UIExtensions switch (type) { case ShaderPropertyType.Color: - var color = mpb.GetColor(id); - if (color != default) - { - material.SetColor(id, color); - } - + material.SetColor(id, mpb.GetColor(id)); break; case ShaderPropertyType.Vector: - var vector = mpb.GetVector(id); - if (vector != default) - { - material.SetVector(id, vector); - } - + material.SetVector(id, mpb.GetVector(id)); break; case ShaderPropertyType.Float: case ShaderPropertyType.Range: - var value = mpb.GetFloat(id); - if (!Mathf.Approximately(value, 0)) - { - material.SetFloat(id, value); - } - + material.SetFloat(id, mpb.GetFloat(id)); break; case ShaderPropertyType.Texture: - var tex = mpb.GetTexture(id); - if (tex != default(Texture)) - { - material.SetTexture(id, tex); - } - + material.SetTexture(id, mpb.GetTexture(id)); break; } } diff --git a/Packages/src/Runtime/Internal/Extensions/ComponentExtensions.cs b/Packages/src/Runtime/Internal/Extensions/ComponentExtensions.cs index 82314bf..e95c5f6 100644 --- a/Packages/src/Runtime/Internal/Extensions/ComponentExtensions.cs +++ b/Packages/src/Runtime/Internal/Extensions/ComponentExtensions.cs @@ -184,7 +184,7 @@ namespace Coffee.UIParticleInternal /// /// Verify whether it can be converted to the specified component. /// - internal static bool CanConvertTo(this Object context) where T : MonoBehaviour + internal static bool CanConvertTo(this Object context) where T : MonoBehaviour { return context != null && context.GetType() != typeof(T); } diff --git a/Packages/src/Runtime/Internal/ProjectSettings/PreloadedProjectSettings.cs b/Packages/src/Runtime/Internal/ProjectSettings/PreloadedProjectSettings.cs index 2f469cb..fd09928 100644 --- a/Packages/src/Runtime/Internal/ProjectSettings/PreloadedProjectSettings.cs +++ b/Packages/src/Runtime/Internal/ProjectSettings/PreloadedProjectSettings.cs @@ -158,6 +158,8 @@ namespace Coffee.UIParticleInternal private void OnPlayModeStateChanged(PlayModeStateChange state) { + if (!this) return; + switch (state) { case PlayModeStateChange.ExitingEditMode: diff --git a/Packages/src/Runtime/Internal/Utilities/Logging.cs b/Packages/src/Runtime/Internal/Utilities/Logger.cs similarity index 99% rename from Packages/src/Runtime/Internal/Utilities/Logging.cs rename to Packages/src/Runtime/Internal/Utilities/Logger.cs index 12c5b79..ef8593a 100644 --- a/Packages/src/Runtime/Internal/Utilities/Logging.cs +++ b/Packages/src/Runtime/Internal/Utilities/Logger.cs @@ -11,7 +11,7 @@ using Conditional = System.Diagnostics.ConditionalAttribute; namespace Coffee.UIParticleInternal { - internal static class Logging + internal static class Logger { #if !ENABLE_COFFEE_LOGGER private const string k_DisableSymbol = "DISABLE_COFFEE_LOGGER"; diff --git a/Packages/src/Runtime/Internal/Utilities/Logger.cs.meta b/Packages/src/Runtime/Internal/Utilities/Logger.cs.meta new file mode 100644 index 0000000..5ce2425 --- /dev/null +++ b/Packages/src/Runtime/Internal/Utilities/Logger.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 4f9f22bb079324476b1473030ad9fec3 \ No newline at end of file diff --git a/Packages/src/Runtime/Internal/Utilities/Logging.cs.meta b/Packages/src/Runtime/Internal/Utilities/Logging.cs.meta deleted file mode 100644 index 6db7856..0000000 --- a/Packages/src/Runtime/Internal/Utilities/Logging.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 8255313895da84e7cbdc876be3795334 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/src/Runtime/Internal/Utilities/Misc.cs b/Packages/src/Runtime/Internal/Utilities/Misc.cs index 353abe6..b6654cc 100644 --- a/Packages/src/Runtime/Internal/Utilities/Misc.cs +++ b/Packages/src/Runtime/Internal/Utilities/Misc.cs @@ -20,7 +20,7 @@ namespace Coffee.UIParticleInternal { public static T[] FindObjectsOfType() where T : Object { -#if UNITY_6000_5_OR_NEWER +#if UNITY_6000_4_OR_NEWER return Object.FindObjectsByType(FindObjectsInactive.Include); #elif UNITY_2023_1_OR_NEWER return Object.FindObjectsByType(FindObjectsInactive.Include, FindObjectsSortMode.None); diff --git a/Packages/src/Runtime/Internal/Utilities/ObjectPool.cs b/Packages/src/Runtime/Internal/Utilities/ObjectPool.cs index 141cccf..67c94f4 100644 --- a/Packages/src/Runtime/Internal/Utilities/ObjectPool.cs +++ b/Packages/src/Runtime/Internal/Utilities/ObjectPool.cs @@ -34,7 +34,7 @@ namespace Coffee.UIParticleInternal } // If there are no instances in the pool, create a new one. - Logging.Log(this, $"A new instance is created (pooled: {_pool.CountInactive}, created: {_pool.CountAll})."); + Logger.Log(this, $"A new instance is created (pooled: {_pool.CountInactive}, created: {_pool.CountAll})."); return _pool.Get(); } @@ -47,7 +47,7 @@ namespace Coffee.UIParticleInternal if (instance == null) return; // Ignore if already pooled or null. _pool.Release(instance); - Logging.Log(this, $"An instance is released (pooled: {_pool.CountInactive}, created: {_pool.CountAll})."); + Logger.Log(this, $"An instance is released (pooled: {_pool.CountInactive}, created: {_pool.CountAll})."); instance = default; // Set the reference to null. } #else @@ -80,7 +80,7 @@ namespace Coffee.UIParticleInternal } // If there are no instances in the pool, create a new one. - Logging.Log(this, $"A new instance is created (pooled: {_pool.Count}, created: {++_count})."); + Logger.Log(this, $"A new instance is created (pooled: {_pool.Count}, created: {++_count})."); return _onCreate(); } @@ -94,7 +94,7 @@ namespace Coffee.UIParticleInternal _onReturn(instance); // Return the instance to the pool. _pool.Push(instance); - Logging.Log(this, $"An instance is released (pooled: {_pool.Count}, created: {_count})."); + Logger.Log(this, $"An instance is released (pooled: {_pool.Count}, created: {_count})."); instance = default; // Set the reference to null. } #endif diff --git a/Packages/src/Runtime/Internal/Utilities/ObjectRepository.cs b/Packages/src/Runtime/Internal/Utilities/ObjectRepository.cs index 9f47e16..037b0d7 100644 --- a/Packages/src/Runtime/Internal/Utilities/ObjectRepository.cs +++ b/Packages/src/Runtime/Internal/Utilities/ObjectRepository.cs @@ -103,7 +103,7 @@ namespace Coffee.UIParticleInternal Release(ref obj); ++entry.reference; obj = entry.storedObject; - Logging.Log(_name, $"Get(total#{count}): {entry}"); + Logger.Log(_name, $"Get(total#{count}): {entry}"); } Profiler.EndSample(); @@ -131,7 +131,7 @@ namespace Coffee.UIParticleInternal newEntry.reference = 1; _cache[hash] = newEntry; _objectKey[newObject.GetHashCode()] = hash; - Logging.Log(_name, $"Add(total#{count}): {newEntry}"); + Logger.Log(_name, $"Add(total#{count}): {newEntry}"); Release(ref obj); obj = newObject; Profiler.EndSample(); @@ -157,12 +157,12 @@ namespace Coffee.UIParticleInternal } else { - Logging.Log(_name, $"Release(total#{_cache.Count}): {entry}"); + Logger.Log(_name, $"Release(total#{_cache.Count}): {entry}"); } } else { - Logging.Log(_name, $"Release(total#{_cache.Count}): Already released: {obj}"); + Logger.Log(_name, $"Release(total#{_cache.Count}): Already released: {obj}"); } obj = null; @@ -178,7 +178,7 @@ namespace Coffee.UIParticleInternal _objectKey.Remove(entry.storedObject.GetHashCode()); _pool.Push(entry); entry.reference = 0; - Logging.Log(_name, $"Remove(total#{_cache.Count}): {entry}"); + Logger.Log(_name, $"Remove(total#{_cache.Count}): {entry}"); entry.Release(_onRelease); Profiler.EndSample(); } diff --git a/Packages/src/Runtime/Internal/Utilities/UIExtraCallbacks.cs b/Packages/src/Runtime/Internal/Utilities/UIExtraCallbacks.cs index 6ad33ed..758536a 100755 --- a/Packages/src/Runtime/Internal/Utilities/UIExtraCallbacks.cs +++ b/Packages/src/Runtime/Internal/Utilities/UIExtraCallbacks.cs @@ -1,4 +1,5 @@ using System; +using System.Reflection; using UnityEditor; using UnityEngine; using UnityEngine.UI; @@ -20,7 +21,7 @@ namespace Coffee.UIParticleInternal static UIExtraCallbacks() { Canvas.willRenderCanvases += OnBeforeCanvasRebuild; - Logging.LogMulticast(typeof(Canvas), "willRenderCanvases", message: "ctor"); + Logger.LogMulticast(typeof(Canvas), "willRenderCanvases", message: "ctor"); } /// @@ -67,9 +68,17 @@ namespace Coffee.UIParticleInternal if (s_IsInitializedAfterCanvasRebuild) return; s_IsInitializedAfterCanvasRebuild = true; + // Explicitly set `Canvas.willRenderCanvases += CanvasUpdateRegistry.PerformUpdate`. CanvasUpdateRegistry.IsRebuildingLayout(); +#if TMP_ENABLE + // Explicitly set `Canvas.willRenderCanvases += TMP_UpdateManager.DoRebuilds`. + typeof(TMPro.TMP_UpdateManager) + .GetProperty("instance", BindingFlags.NonPublic | BindingFlags.Static) + .GetValue(null); +#endif + Canvas.willRenderCanvases -= OnAfterCanvasRebuild; Canvas.willRenderCanvases += OnAfterCanvasRebuild; - Logging.LogMulticast(typeof(Canvas), "willRenderCanvases", + Logger.LogMulticast(typeof(Canvas), "willRenderCanvases", message: "InitializeAfterCanvasRebuild"); } From 9cd47c32bc84188582be2fe9f3a169bbdf7bf23b Mon Sep 17 00:00:00 2001 From: mob-sakai <12690315+mob-sakai@users.noreply.github.com> Date: Mon, 8 Jun 2026 16:45:12 +0900 Subject: [PATCH 6/7] chore: ignore alpha for test --- .github/CODEOWNERS | 6 ++++ .github/FUNDING.yml | 12 ++++++++ .github/ISSUE_TEMPLATE/bug_report.md | 35 +++++++++++++++++++++ .github/ISSUE_TEMPLATE/feature_request.md | 22 ++++++++++++++ .github/ISSUE_TEMPLATE/question.md | 16 ++++++++++ .github/pull_request_template.md | 37 +++++++++++++++++++++++ .github/workflows/release.yml | 4 +-- .github/workflows/test.yml | 16 +++++----- 8 files changed, 138 insertions(+), 10 deletions(-) create mode 100644 .github/CODEOWNERS create mode 100644 .github/FUNDING.yml create mode 100644 .github/ISSUE_TEMPLATE/bug_report.md create mode 100644 .github/ISSUE_TEMPLATE/feature_request.md create mode 100644 .github/ISSUE_TEMPLATE/question.md create mode 100644 .github/pull_request_template.md diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 0000000..2ecc390 --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1,6 @@ +# This is a comment. +# Each line is a file pattern followed by one or more owners. +# https://docs.github.com/ja/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners + +# Default owners +* @mob-sakai diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000..b8d0037 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,12 @@ +# These are supported funding model platforms + +github: mob-sakai # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] +patreon: mob_sakai # Replace with a single Patreon username +open_collective: # Replace with a single Open Collective username +ko_fi: # Replace with a single Ko-fi username +tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +otechie: # Replace with a single Otechie username +custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 0000000..6e2802e --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,35 @@ +--- +name: Bug report +about: Create a report to help us improve +title: '' +labels: bug +assignees: mob-sakai + +--- + +NOTE: Your issue may already be reported! Please search on the [issue tracker](../) before creating one. + +**Describe the bug** +A clear and concise description of what the bug is. + +**To Reproduce** +Steps to reproduce the behavior: +1. Go to '...' +2. Click on '....' +3. Scroll down to '....' +4. See error + +**Expected behavior** +A clear and concise description of what you expected to happen. + +**Screenshots** +If applicable, add screenshots to help explain your problem. + +**Environment (please complete the following information):** + - Version [e.g. 1.0.0] + - Platform: [e.g. Editor(Windows/Mac), Standalone(Windows/Mac), iOS, Android, WebGL] + - Unity version: [e.g. 2018.2.8f1] + - Build options: [e.g. IL2CPP, .Net 4.x, LWRP] + +**Additional context** +Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 0000000..e55417e --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,22 @@ +--- +name: Feature request +about: Suggest an idea for this project +title: '' +labels: enhancement +assignees: mob-sakai + +--- + +NOTE: Your issue may already be reported! Please search on the [issue tracker](../) before creating one. + +**Is your feature request related to a problem? Please describe.** +A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + +**Describe the solution you'd like** +A clear and concise description of what you want to happen. + +**Describe alternatives you've considered** +A clear and concise description of any alternative solutions or features you've considered. + +**Additional context** +Add any other context or screenshots about the feature request here. diff --git a/.github/ISSUE_TEMPLATE/question.md b/.github/ISSUE_TEMPLATE/question.md new file mode 100644 index 0000000..8fa7151 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/question.md @@ -0,0 +1,16 @@ +--- +name: Question +about: Ask a question about this project +title: '' +labels: question +assignees: mob-sakai + +--- + +NOTE: Your issue may already be reported! Please search on the [issue tracker](../) before creating one. + +**Describe what help do you need** +A description of the question. + +**Additional context** +Add any other context or screenshots about the question here. diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 0000000..381c56f --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,37 @@ + +# Pull Request Template + +## Description + +- Please include a summary of the change and which issue is fixed. +- Please also include relevant motivation and context. +- List any dependencies that are required for this change. + +Fixes #{issue_number} + +## Type of change + +Please write the commit message in the format corresponding to the change type. +Please see [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/) for more information. + +- [ ] Bug fix (non-breaking change which fixes an issue) +- [ ] New feature (non-breaking change which adds functionality) +- [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected) +- [ ] Update documentations +- [ ] Others (refactoring, style changes, etc.) + +## Test environment + +- Platform: [e.g. Editor(Windows/Mac), Standalone(Windows/Mac), iOS, Android, WebGL] +- Unity version: [e.g. 2022.2.0f1] +- Build options: [e.g. IL2CPP, .Net 4.x, URP/HDRP] + +## Checklist + +- [ ] This pull request is for merging into the `develop` branch +- [ ] My code follows the style guidelines of this project +- [ ] I have performed a self-review of my own code +- [ ] I have commented my code, particularly in hard-to-understand areas +- [ ] I have made corresponding changes to the documentation +- [ ] My changes generate no new warnings +- [ ] I have checked my code and corrected any misspellings diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index fee2c3b..8abcd39 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -27,10 +27,10 @@ jobs: split_to: ${{ steps.summary.outputs.split_to }} steps: - name: ๐Ÿšš Checkout (${{ github.ref_name }}) - uses: actions/checkout@v5 + uses: actions/checkout@v6 - name: ๐Ÿ”– Run semantic release - uses: cycjimmy/semantic-release-action@v5 + uses: cycjimmy/semantic-release-action@v6 id: release with: working_directory: Packages/src diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 839c884..c79c6ca 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -7,9 +7,9 @@ run-name: ๐Ÿงช Test (${{ github.event.pull_request.title || github.ref_name }}) env: # MINIMUM_VERSION: The minimum version of Unity. - MINIMUM_VERSION: 2019.4 + MINIMUM_VERSION: 2020.3 # EXCLUDE_FILTER: The excluded versions of Unity. - EXCLUDE_FILTER: "(2020.2.0|2021.1|2023.3)" + EXCLUDE_FILTER: "(2017|2018|2023.3)" PROJECT_PATH: . on: @@ -46,9 +46,9 @@ jobs: id: setup run: | echo "==== Target Unity Versions ====" - LATEST_VERSIONS=`npx unity-changeset@latest list --versions --latest-patch --min ${MINIMUM_VERSION} --json --all` + LATEST_VERSIONS=`npx unity-changeset@latest list --versions --latest-patch --min ${MINIMUM_VERSION} --json --all --ignore-alpha` if [ "${{ inputs.usePeriodVersions }}" = "true" ]; then - ADDITIONAL_VERSIONS=`npx unity-changeset list --versions --grep '0f' --min ${MINIMUM_VERSION} --json` + ADDITIONAL_VERSIONS=`npx unity-changeset list --versions --grep '0f' --min ${MINIMUM_VERSION} --json --ignore-alpha` else ADDITIONAL_VERSIONS=[] fi @@ -72,11 +72,11 @@ jobs: steps: - name: ๐Ÿšš Checkout ($${{ github.ref }}) if: github.event_name == 'push' - uses: actions/checkout@v5 + uses: actions/checkout@v6 - name: ๐Ÿšš Checkout pull request (pull_request_target) if: github.event_name == 'pull_request_target' - uses: actions/checkout@v5 + uses: actions/checkout@v6 with: ref: ${{ github.event.pull_request.head.sha }} fetch-depth: 0 @@ -90,7 +90,7 @@ jobs: git log --oneline -n 10 - name: ๐Ÿ“ฅ Cache library - uses: actions/cache@v4 + uses: actions/cache@v5 with: path: ${{ env.PROJECT_PATH }}/Library key: ${{ env.PROJECT_PATH }}-Library-${{ matrix.unityVersion }}-${{ github.event.pull_request.head.sha || github.sha }} @@ -99,7 +99,7 @@ jobs: ${{ env.PROJECT_PATH }}-Library- - name: ๐Ÿ› ๏ธ Build Unity Project (Test) - uses: game-ci/unity-builder@main + uses: game-ci/unity-builder@v5 timeout-minutes: 45 with: customImage: ghcr.io/mob-sakai/unity3d:${{ matrix.unityVersion }} From 18175c040e0a7de8a81344128b0b68f90fc8b2f9 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Mon, 8 Jun 2026 13:33:41 +0000 Subject: [PATCH 7/7] chore(release): 4.12.2 [skip ci] ## [4.12.2](https://github.com/mob-sakai/ParticleEffectForUGUI/compare/v4.12.1...v4.12.2) (2026-06-08) ### Bug Fixes * add `meshCleared` flag to optimize mesh clearing ([859fa20](https://github.com/mob-sakai/ParticleEffectForUGUI/commit/859fa20d297c3f44e3361f20dbb7ce966407e03e)) * fix Unity6.5 compile errors and warnings ([a5ee687](https://github.com/mob-sakai/ParticleEffectForUGUI/commit/a5ee6878212be2fc4d7b48879426f239e8753009)), closes [#400](https://github.com/mob-sakai/ParticleEffectForUGUI/issues/400) * potential access to UIParticleRenderer that has already been destroyed ([b740dd6](https://github.com/mob-sakai/ParticleEffectForUGUI/commit/b740dd662d423c6bef849662ce1b0bfbb4940ed4)), closes [#403](https://github.com/mob-sakai/ParticleEffectForUGUI/issues/403) * updated support for some changed menu paths ([f8ac986](https://github.com/mob-sakai/ParticleEffectForUGUI/commit/f8ac9869f141238169730e74f5d65c4fc6081f51)), closes [#397](https://github.com/mob-sakai/ParticleEffectForUGUI/issues/397) --- Packages/src/CHANGELOG.md | 10 ++++++++++ Packages/src/package.json | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/Packages/src/CHANGELOG.md b/Packages/src/CHANGELOG.md index d3fa134..fe8f706 100644 --- a/Packages/src/CHANGELOG.md +++ b/Packages/src/CHANGELOG.md @@ -1,3 +1,13 @@ +## [4.12.2](https://github.com/mob-sakai/ParticleEffectForUGUI/compare/v4.12.1...v4.12.2) (2026-06-08) + + +### Bug Fixes + +* add `meshCleared` flag to optimize mesh clearing ([859fa20](https://github.com/mob-sakai/ParticleEffectForUGUI/commit/859fa20d297c3f44e3361f20dbb7ce966407e03e)) +* fix Unity6.5 compile errors and warnings ([a5ee687](https://github.com/mob-sakai/ParticleEffectForUGUI/commit/a5ee6878212be2fc4d7b48879426f239e8753009)), closes [#400](https://github.com/mob-sakai/ParticleEffectForUGUI/issues/400) +* potential access to UIParticleRenderer that has already been destroyed ([b740dd6](https://github.com/mob-sakai/ParticleEffectForUGUI/commit/b740dd662d423c6bef849662ce1b0bfbb4940ed4)), closes [#403](https://github.com/mob-sakai/ParticleEffectForUGUI/issues/403) +* updated support for some changed menu paths ([f8ac986](https://github.com/mob-sakai/ParticleEffectForUGUI/commit/f8ac9869f141238169730e74f5d65c4fc6081f51)), closes [#397](https://github.com/mob-sakai/ParticleEffectForUGUI/issues/397) + ## [4.12.1](https://github.com/mob-sakai/ParticleEffectForUGUI/compare/v4.12.0...v4.12.1) (2026-03-24) diff --git a/Packages/src/package.json b/Packages/src/package.json index 934c343..c1813d1 100644 --- a/Packages/src/package.json +++ b/Packages/src/package.json @@ -2,7 +2,7 @@ "name": "com.coffee.ui-particle", "displayName": "UI Particle", "description": "This package provides a component to render particle effects for uGUI.\nThe particle rendering is maskable and sortable, without the need for an extra Camera, RenderTexture, or Canvas.", - "version": "4.12.1", + "version": "4.12.2", "unity": "2018.2", "license": "MIT", "repository": {