UIParticleMenu.cs 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. using UnityEditor;
  2. using UnityEngine;
  3. using UnityEngine.UI;
  4. namespace Coffee.UIExtensions
  5. {
  6. internal class UIParticleMenu
  7. {
  8. [MenuItem("GameObject/UI/Particle System (Empty)", false, 2018)]
  9. private static void AddParticleEmpty(MenuCommand menuCommand)
  10. {
  11. // Create empty UI element.
  12. EditorApplication.ExecuteMenuItem("GameObject/UI/Image");
  13. var ui = Selection.activeGameObject;
  14. Object.DestroyImmediate(ui.GetComponent<Image>());
  15. // Add UIParticle.
  16. var uiParticle = ui.AddComponent<UIParticle>();
  17. uiParticle.name = "UIParticle";
  18. uiParticle.scale = 10;
  19. uiParticle.rectTransform.sizeDelta = Vector2.zero;
  20. }
  21. [MenuItem("GameObject/UI/Particle System", false, 2019)]
  22. private static void AddParticle(MenuCommand menuCommand)
  23. {
  24. // Create empty UIEffect.
  25. AddParticleEmpty(menuCommand);
  26. var uiParticle = Selection.activeGameObject.GetComponent<UIParticle>();
  27. // Create ParticleSystem.
  28. EditorApplication.ExecuteMenuItem("GameObject/Effects/Particle System");
  29. var ps = Selection.activeGameObject;
  30. ps.transform.SetParent(uiParticle.transform, false);
  31. ps.transform.localPosition = Vector3.zero;
  32. // Assign default material (UIAdditive).
  33. var renderer = ps.GetComponent<ParticleSystemRenderer>();
  34. var path = AssetDatabase.GUIDToAssetPath("9944483a3e009401ba5dcc42f14d5c63");
  35. renderer.material = AssetDatabase.LoadAssetAtPath<Material>(path);
  36. // Refresh particles.
  37. uiParticle.RefreshParticles();
  38. }
  39. }
  40. }