From 67de3d1bd3e16dc9b564625cb990c53d75769506 Mon Sep 17 00:00:00 2001 From: mob-sakai <12690315+mob-sakai@users.noreply.github.com> Date: Wed, 1 Jan 2025 10:05:46 +0900 Subject: [PATCH 1/3] fix: sub-emitter's `inherit velocity` module doubles at runtime close #349 --- Packages/src/Runtime/UIParticle.cs | 6 +++-- Packages/src/Runtime/UIParticleRenderer.cs | 10 ++++---- .../Utilities/ParticleSystemExtensions.cs | 25 +++++++++++++++++++ 3 files changed, 34 insertions(+), 7 deletions(-) diff --git a/Packages/src/Runtime/UIParticle.cs b/Packages/src/Runtime/UIParticle.cs index 5ad390d..f0a2bed 100644 --- a/Packages/src/Runtime/UIParticle.cs +++ b/Packages/src/Runtime/UIParticle.cs @@ -577,12 +577,14 @@ namespace Coffee.UIExtensions { var ps = particleSystems[i]; if (!ps) continue; - GetRenderer(j++).Set(this, ps, false); + + var mainEmitter = ps.GetMainEmitter(particleSystems); + GetRenderer(j++).Set(this, ps, false, mainEmitter); // If the trail is enabled, set it additionally. if (ps.trails.enabled) { - GetRenderer(j++).Set(this, ps, true); + GetRenderer(j++).Set(this, ps, true, mainEmitter); } } } diff --git a/Packages/src/Runtime/UIParticleRenderer.cs b/Packages/src/Runtime/UIParticleRenderer.cs index 80936b8..e85d258 100644 --- a/Packages/src/Runtime/UIParticleRenderer.cs +++ b/Packages/src/Runtime/UIParticleRenderer.cs @@ -40,6 +40,7 @@ namespace Coffee.UIExtensions private Vector2Int _prevScreenSize; private bool _preWarm; private ParticleSystemRenderer _renderer; + private ParticleSystem _mainEmitter; public override Texture mainTexture => _isTrail ? null : _particleSystem.GetTextureForSprite(); @@ -112,6 +113,7 @@ namespace Coffee.UIExtensions _parent = null; _particleSystem = null; _renderer = null; + _mainEmitter = null; if (0 <= index) { _index = index; @@ -223,7 +225,7 @@ namespace Coffee.UIExtensions return _modifiedMaterial; } - public void Set(UIParticle parent, ParticleSystem ps, bool isTrail) + public void Set(UIParticle parent, ParticleSystem ps, bool isTrail, ParticleSystem mainEmitter) { _parent = parent; maskable = parent.maskable; @@ -246,10 +248,7 @@ namespace Coffee.UIExtensions ps.TryGetComponent(out _renderer); _renderer.enabled = false; - - //_emitter = emitter; _isTrail = isTrail; - _renderer.GetSharedMaterials(s_Materials); material = s_Materials[isTrail ? 1 : 0]; s_Materials.Clear(); @@ -266,6 +265,7 @@ namespace Coffee.UIExtensions _prevScreenSize = new Vector2Int(Screen.width, Screen.height); _prevCanvasScale = canvas ? canvas.scaleFactor : 1f; _delay = true; + _mainEmitter = mainEmitter; canvasRenderer.SetTexture(null); @@ -303,7 +303,7 @@ namespace Coffee.UIExtensions // Simulate particles. Profiler.BeginSample("[UIParticle] Bake Mesh > Simulate Particles"); - if (!_isTrail && _parent.canSimulate) + if (!_isTrail && _parent.canSimulate && !_mainEmitter) { #if UNITY_EDITOR if (!Application.isPlaying) diff --git a/Packages/src/Runtime/Utilities/ParticleSystemExtensions.cs b/Packages/src/Runtime/Utilities/ParticleSystemExtensions.cs index 48329f0..b9c08a0 100644 --- a/Packages/src/Runtime/Utilities/ParticleSystemExtensions.cs +++ b/Packages/src/Runtime/Utilities/ParticleSystemExtensions.cs @@ -171,5 +171,30 @@ namespace Coffee.UIParticleInternal action.Invoke(p); } } + + public static ParticleSystem GetMainEmitter(this ParticleSystem self, List list) + { + if (!self || list == null || list.Count == 0) return null; + + for (var i = 0; i < list.Count; i++) + { + var parent = list[i]; + if (parent != self && IsSubEmitterOf(self, parent)) return parent; + } + + return null; + } + + public static bool IsSubEmitterOf(this ParticleSystem self, ParticleSystem parent) + { + var subEmitters = parent.subEmitters; + var count = subEmitters.subEmittersCount; + for (var i = 0; i < count; i++) + { + if (subEmitters.GetSubEmitterSystem(i) == self) return true; + } + + return false; + } } } From 8276684c3b1646f0490ed64557547ba15281664a Mon Sep 17 00:00:00 2001 From: mob-sakai <12690315+mob-sakai@users.noreply.github.com> Date: Fri, 3 Jan 2025 22:50:36 +0900 Subject: [PATCH 2/3] fix: sub-emitter particles may not render correctly in certain scenarios close #348 --- Packages/src/Runtime/UIParticleRenderer.cs | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/Packages/src/Runtime/UIParticleRenderer.cs b/Packages/src/Runtime/UIParticleRenderer.cs index e85d258..a73b4b4 100644 --- a/Packages/src/Runtime/UIParticleRenderer.cs +++ b/Packages/src/Runtime/UIParticleRenderer.cs @@ -548,6 +548,24 @@ namespace Coffee.UIExtensions * Matrix4x4.Scale(scale) * Matrix4x4.Translate(-psPos); } + + if (_mainEmitter) + { + if (_mainEmitter.IsLocalSpace()) + { + return Matrix4x4.Translate(psPos) + * Matrix4x4.Scale(scale) + * Matrix4x4.Translate(-psPos); + } + else + { + psPos = _particleSystem.transform.position - _mainEmitter.transform.position; + return Matrix4x4.Translate(psPos) + * Matrix4x4.Scale(scale) + * Matrix4x4.Translate(-psPos); + } + } + return Matrix4x4.Scale(scale); case ParticleSystemSimulationSpace.Custom: return Matrix4x4.Translate(_particleSystem.main.customSimulationSpace.position.GetScaled(scale)) From a1ca74f854cbb4c87d0a4c5274f9d83f833e23ce Mon Sep 17 00:00:00 2001 From: mob-sakai <12690315+mob-sakai@users.noreply.github.com> Date: Fri, 3 Jan 2025 22:58:18 +0900 Subject: [PATCH 3/3] chore: update coffee.internal --- Packages/manifest.json | 1 + Packages/packages-lock.json | 11 ++++-- Packages/src/Runtime/Coffee.UIParticle.R.dll | Bin 0 -> 3072 bytes .../src/Runtime/Coffee.UIParticle.R.dll.meta | 33 ++++++++++++++++++ .../PreloadedProjectSettings.cs | 2 ++ .../Internal/Utilities/MaterialRepository.cs | 2 +- .../src/Runtime/Internal/Utilities/Misc.cs | 2 ++ ProjectSettings/MinimalResourceSettings.json | 11 ++++++ 8 files changed, 59 insertions(+), 3 deletions(-) create mode 100644 Packages/src/Runtime/Coffee.UIParticle.R.dll create mode 100644 Packages/src/Runtime/Coffee.UIParticle.R.dll.meta create mode 100644 ProjectSettings/MinimalResourceSettings.json diff --git a/Packages/manifest.json b/Packages/manifest.json index 1c33961..b9829e7 100644 --- a/Packages/manifest.json +++ b/Packages/manifest.json @@ -1,6 +1,7 @@ { "dependencies": { "com.coffee.development": "https://github.com/mob-sakai/Coffee.Internal.git?path=Packages/Development", + "com.coffee.minimal-resource": "https://github.com/mob-sakai/Coffee.Internal.git?path=Packages/MinimalResource", "com.coffee.nano-monitor": "https://github.com/mob-sakai/Coffee.Internal.git?path=Packages/NanoMonitor", "com.unity.ide.rider": "3.0.31", "com.unity.test-framework": "1.1.33", diff --git a/Packages/packages-lock.json b/Packages/packages-lock.json index 575c773..defda3e 100644 --- a/Packages/packages-lock.json +++ b/Packages/packages-lock.json @@ -5,7 +5,14 @@ "depth": 0, "source": "git", "dependencies": {}, - "hash": "4e5f735ccf956ee469b5014ae781068c49a2825d" + "hash": "52987fb6e66e7fc48498d8d164c3c8808de4de6b" + }, + "com.coffee.minimal-resource": { + "version": "https://github.com/mob-sakai/Coffee.Internal.git?path=Packages/MinimalResource", + "depth": 0, + "source": "git", + "dependencies": {}, + "hash": "52987fb6e66e7fc48498d8d164c3c8808de4de6b" }, "com.coffee.nano-monitor": { "version": "https://github.com/mob-sakai/Coffee.Internal.git?path=Packages/NanoMonitor", @@ -14,7 +21,7 @@ "dependencies": { "com.unity.ugui": "1.0.0" }, - "hash": "4e5f735ccf956ee469b5014ae781068c49a2825d" + "hash": "52987fb6e66e7fc48498d8d164c3c8808de4de6b" }, "com.coffee.ui-particle": { "version": "file:src", diff --git a/Packages/src/Runtime/Coffee.UIParticle.R.dll b/Packages/src/Runtime/Coffee.UIParticle.R.dll new file mode 100644 index 0000000000000000000000000000000000000000..de59dad0bf2d83bfe317c10c555ff1eea6470ba3 GIT binary patch literal 3072 zcmeHJ&2Jk;6#s4Fge0YfsHhatmTg@mK3A@i14tD(u>+(^8aIy9h)c7!$Iilf*V-Mo zi9je94&0Cs|3N`qka9pMLV`=h1rgLkFC36KaYdXeAw>AS*>&u+DNv56&zU#x`)g)L znSb*`3DuAIY%$IhmqOEbWnHHdHZ@HJnI)$a1&2@?5~9 zh8{>vL?HDW*d(T0U=aED#Z>-!d&-K4@Gj#n2$2VFrhdZi!7A`DnN`}I*c1K>!UjhA z%tpw+(Z@Slt!whPWcbvX2JXmD@v0NWQH^R-TRyc*XF|?Ep4B^%@R){InldxeHKaJ@gnb zDh2;;P2gBkyNpOgL+KKlwrOQQru#5Fj9J6@#NYyM;}JYZ(=lAe4dM@o1;kshg;D%Q zJWf1}Cy2-Jtf9{t?BEck4vyjs@spS$&f)^`^Te4=2H6L4Km%!XQ6$%Tp9z^4_5@PL zsf0T}AJ#j*dIg2B(NM~%%$D3pdo^D#1lnT z?KGQi)mKxR2T<*3g;Jzq652=d+HUw!f@$E%Mr$m*AjwoVxGBsp&96c_Y@UJ%R6!7t;To1AY)tB$e;~th{X8#$oKCY z-Q9Wdr%NMNdjC(!@h=S=yBxXgi(xRcUQ?_%43^fS@LFuqPVN_PZ*p1EJpG$_hWZ58 z({E2i-w16BbvJas(L{5FM_BazdDjcjifcSiWd(WrM*agmiV>g)y3DDU;pfWU&b*-uco`a z1$|+SRNexMQC&og<*{j-?yUM^bXfdac|@Td55P@!dsy2#|MnMpXDwSziod263Bwa(GHX(EY#8ylwDCf4W& zbM014-i1^y6Op{#9) literal 0 HcmV?d00001 diff --git a/Packages/src/Runtime/Coffee.UIParticle.R.dll.meta b/Packages/src/Runtime/Coffee.UIParticle.R.dll.meta new file mode 100644 index 0000000..fb448a1 --- /dev/null +++ b/Packages/src/Runtime/Coffee.UIParticle.R.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: 4d73b3825bf044d418ae21bb331d3902 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 1 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/src/Runtime/Internal/ProjectSettings/PreloadedProjectSettings.cs b/Packages/src/Runtime/Internal/ProjectSettings/PreloadedProjectSettings.cs index 21ff15a..7f5326a 100644 --- a/Packages/src/Runtime/Internal/ProjectSettings/PreloadedProjectSettings.cs +++ b/Packages/src/Runtime/Internal/ProjectSettings/PreloadedProjectSettings.cs @@ -133,6 +133,8 @@ namespace Coffee.UIParticleInternal #if UNITY_EDITOR private string _jsonText; + public static bool hasInstance => s_Instance; + public static T instance { get diff --git a/Packages/src/Runtime/Internal/Utilities/MaterialRepository.cs b/Packages/src/Runtime/Internal/Utilities/MaterialRepository.cs index 7f15945..cd3c05e 100644 --- a/Packages/src/Runtime/Internal/Utilities/MaterialRepository.cs +++ b/Packages/src/Runtime/Internal/Utilities/MaterialRepository.cs @@ -15,7 +15,7 @@ namespace Coffee.UIParticleInternal #if UNITY_EDITOR [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] - private static void Clear() + public static void Clear() { s_Repository.Clear(); } diff --git a/Packages/src/Runtime/Internal/Utilities/Misc.cs b/Packages/src/Runtime/Internal/Utilities/Misc.cs index 26c03cf..3f6fb47 100644 --- a/Packages/src/Runtime/Internal/Utilities/Misc.cs +++ b/Packages/src/Runtime/Internal/Utilities/Misc.cs @@ -69,6 +69,8 @@ namespace Coffee.UIParticleInternal return prefabStage.prefabContentsRoot.GetComponentsInChildren(true); } + + public static bool isBatchOrBuilding => Application.isBatchMode || BuildPipeline.isBuildingPlayer; #endif } } diff --git a/ProjectSettings/MinimalResourceSettings.json b/ProjectSettings/MinimalResourceSettings.json new file mode 100644 index 0000000..1203a9b --- /dev/null +++ b/ProjectSettings/MinimalResourceSettings.json @@ -0,0 +1,11 @@ +{ + "MonoBehaviour": { + "m_Enabled": true, + "m_EditorHideFlags": 0, + "m_Name": "", + "m_EditorClassIdentifier": "", + "m_OutputDllPaths": [ + "Packages/com.coffee.ui-particle/Runtime/Coffee.UIParticle.R.dll" + ] + } +} \ No newline at end of file