diff --git a/Packages/packages-lock.json b/Packages/packages-lock.json
index 0f5278651..4262a6fb6 100644
--- a/Packages/packages-lock.json
+++ b/Packages/packages-lock.json
@@ -362,6 +362,12 @@
},
"url": "https://packages.unity.com"
},
+ "com.utj.profilerreader": {
+ "version": "file:jp.unity3d.profilerreader",
+ "depth": 0,
+ "source": "embedded",
+ "dependencies": {}
+ },
"com.unity.modules.ai": {
"version": "1.0.0",
"depth": 0,
diff --git a/Packages/src/Editor/ParticleBatchAssigner.cs b/Packages/src/Editor/ParticleBatchAssigner.cs
new file mode 100644
index 000000000..1045c01d6
--- /dev/null
+++ b/Packages/src/Editor/ParticleBatchAssigner.cs
@@ -0,0 +1,249 @@
+using System.Collections.Generic;
+using System.Linq;
+using UnityEditor;
+using UnityEngine;
+
+#if UNITY_2021_2_OR_NEWER
+using UnityEditor.SceneManagement;
+#elif UNITY_2018_3_OR_NEWER
+using UnityEditor.Experimental.SceneManagement;
+#endif
+
+namespace Coffee.UIExtensions
+{
+ ///
+ /// Editor window that batch-assigns multiple ParticleSystem GameObjects/effects
+ /// into a UIParticle's "Particles" list in one click.
+ ///
+ public class ParticleBatchAssigner : EditorWindow
+ {
+ private UIParticle _target;
+ private readonly List