diff --git a/CHANGELOG.md b/CHANGELOG.md index 0efce0d..a3cab20 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +# [3.0.0-preview.37](https://github.com/mob-sakai/ParticleEffectForUGUI/compare/v3.0.0-preview.36...v3.0.0-preview.37) (2020-10-01) + + +### Bug Fixes + +* fix menus ([5fa12b5](https://github.com/mob-sakai/ParticleEffectForUGUI/commit/5fa12b5338a90764a3bf384dcd3911f2ab4eba61)) + # [3.0.0-preview.36](https://github.com/mob-sakai/ParticleEffectForUGUI/compare/v3.0.0-preview.35...v3.0.0-preview.36) (2020-09-28) diff --git a/Scripts/Editor/ImportSampleMenu.cs b/Scripts/Editor/ImportSampleMenu.cs index 7a18e2c..6c4a169 100644 --- a/Scripts/Editor/ImportSampleMenu.cs +++ b/Scripts/Editor/ImportSampleMenu.cs @@ -4,67 +4,76 @@ using System.Linq; using System.Text.RegularExpressions; using UnityEditor; -static class ImportSampleMenu_UIParticle +namespace Coffee.UIExtensions { - private const string k_DisplayName = "UI Particle"; - private const string k_JsonGuid = "823dc693d087a4b559c7e1547274cc7d"; - - [MenuItem("Assets/Samples/" + k_DisplayName + "/Import Demo")] - private static void ImportDemo() + internal static class ImportSampleMenu_UIParticle { - ImportSample(k_JsonGuid, "Demo"); - } + private const string k_DisplayName = "UI Particle"; + private const string k_JsonGuid = "823dc693d087a4b559c7e1547274cc7d"; - private static void ImportSample(string jsonGuid, string sampleName) - { - var jsonPath = AssetDatabase.GUIDToAssetPath(jsonGuid); - var packageRoot = Path.GetDirectoryName(jsonPath).Replace('\\', '/'); - var json = File.ReadAllText(jsonPath); - var version = Regex.Match(json, "\"version\"\\s*:\\s*\"([^\"]+)\"").Groups[1].Value; - var src = string.Format("{0}/Samples~/{1}", packageRoot, sampleName); - var dst = string.Format("Assets/Samples/{0}/{1}/{2}", k_DisplayName, version, sampleName); - var previousPath = GetPreviousSamplePath(k_DisplayName, sampleName); - - // Remove the previous sample directory. - if (!string.IsNullOrEmpty(previousPath)) + [MenuItem("Assets/Samples/" + k_DisplayName + "/Demo")] + private static void ImportSample() { - var msg = "A different version of the sample is already imported at\n\n" - + previousPath - + "\n\nIt will be deleted when you update. Are you sure you want to continue?"; - if (!EditorUtility.DisplayDialog("Sample Importer", msg, "OK", "Cancel")) - return; - - FileUtil.DeleteFileOrDirectory(previousPath); - - var metaFile = previousPath + ".meta"; - if (File.Exists(metaFile)) - FileUtil.DeleteFileOrDirectory(metaFile); + ImportSample(k_JsonGuid, "Demo"); } - if (!Directory.Exists(dst)) - FileUtil.DeleteFileOrDirectory(dst); + [MenuItem("Assets/Samples/" + k_DisplayName + "/Cartoon FX & War FX Demo")] + private static void ImportSample_CFX() + { + ImportSample(k_JsonGuid, "Cartoon FX & War FX Demo"); + } - var dstDir = Path.GetDirectoryName(dst); - if (!Directory.Exists(dstDir)) - Directory.CreateDirectory(dstDir); + private static void ImportSample(string jsonGuid, string sampleName) + { + var jsonPath = AssetDatabase.GUIDToAssetPath(jsonGuid); + var packageRoot = Path.GetDirectoryName(jsonPath).Replace('\\', '/'); + var json = File.ReadAllText(jsonPath); + var version = Regex.Match(json, "\"version\"\\s*:\\s*\"([^\"]+)\"").Groups[1].Value; + var src = string.Format("{0}/Samples~/{1}", packageRoot, sampleName); + var dst = string.Format("Assets/Samples/{0}/{1}/{2}", k_DisplayName, version, sampleName); + var previousPath = GetPreviousSamplePath(k_DisplayName, sampleName); - if (Directory.Exists(src)) - FileUtil.CopyFileOrDirectory(src, dst); - else - throw new DirectoryNotFoundException(src); + // Remove the previous sample directory. + if (!string.IsNullOrEmpty(previousPath)) + { + var msg = "A different version of the sample is already imported at\n\n" + + previousPath + + "\n\nIt will be deleted when you update. Are you sure you want to continue?"; + if (!EditorUtility.DisplayDialog("Sample Importer", msg, "OK", "Cancel")) + return; - AssetDatabase.Refresh(ImportAssetOptions.ImportRecursive); - } + FileUtil.DeleteFileOrDirectory(previousPath); - private static string GetPreviousSamplePath(string displayName, string sampleName) - { - var sampleRoot = string.Format("Assets/Samples/{0}", displayName); - var sampleRootInfo = new DirectoryInfo(sampleRoot); - if (!sampleRootInfo.Exists) return null; + var metaFile = previousPath + ".meta"; + if (File.Exists(metaFile)) + FileUtil.DeleteFileOrDirectory(metaFile); + } - return sampleRootInfo.GetDirectories() - .Select(versionDir => Path.Combine(versionDir.ToString(), sampleName)) - .FirstOrDefault(Directory.Exists); + if (!Directory.Exists(dst)) + FileUtil.DeleteFileOrDirectory(dst); + + var dstDir = Path.GetDirectoryName(dst); + if (!Directory.Exists(dstDir)) + Directory.CreateDirectory(dstDir); + + if (Directory.Exists(src)) + FileUtil.CopyFileOrDirectory(src, dst); + else + throw new DirectoryNotFoundException(src); + + AssetDatabase.Refresh(ImportAssetOptions.ImportRecursive); + } + + private static string GetPreviousSamplePath(string displayName, string sampleName) + { + var sampleRoot = string.Format("Assets/Samples/{0}", displayName); + var sampleRootInfo = new DirectoryInfo(sampleRoot); + if (!sampleRootInfo.Exists) return null; + + return sampleRootInfo.GetDirectories() + .Select(versionDir => Path.Combine(versionDir.ToString(), sampleName)) + .FirstOrDefault(Directory.Exists); + } } } #endif diff --git a/Scripts/Editor/UIParticleMenu.cs b/Scripts/Editor/UIParticleMenu.cs new file mode 100644 index 0000000..4f01970 --- /dev/null +++ b/Scripts/Editor/UIParticleMenu.cs @@ -0,0 +1,46 @@ +using UnityEditor; +using UnityEngine; +using UnityEngine.UI; + +namespace Coffee.UIExtensions +{ + internal class UIParticleMenu + { + [MenuItem("GameObject/UI/Particle System (Empty)", false, 2018)] + private static void AddParticleEmpty(MenuCommand menuCommand) + { + // Create empty UI element. + EditorApplication.ExecuteMenuItem("GameObject/UI/Image"); + var ui = Selection.activeGameObject; + Object.DestroyImmediate(ui.GetComponent()); + + // Add UIParticle. + var uiParticle = ui.AddComponent(); + uiParticle.name = "UIParticle"; + uiParticle.scale = 10; + uiParticle.rectTransform.sizeDelta = Vector2.zero; + } + + [MenuItem("GameObject/UI/Particle System", false, 2019)] + private static void AddParticle(MenuCommand menuCommand) + { + // Create empty UIEffect. + AddParticleEmpty(menuCommand); + var uiParticle = Selection.activeGameObject.GetComponent(); + + // Create ParticleSystem. + EditorApplication.ExecuteMenuItem("GameObject/Effects/Particle System"); + var ps = Selection.activeGameObject; + ps.transform.SetParent(uiParticle.transform, false); + ps.transform.localPosition = Vector3.zero; + + // Assign default material. + var renderer = ps.GetComponent(); + var defaultMat = AssetDatabase.GetBuiltinExtraResource("Default-Particle.mat"); + renderer.material = defaultMat ? defaultMat : renderer.material; + + // Refresh particles. + uiParticle.RefreshParticles(); + } + } +} diff --git a/Scripts/Editor/UIParticleMenu.cs.meta b/Scripts/Editor/UIParticleMenu.cs.meta new file mode 100644 index 0000000..a27baee --- /dev/null +++ b/Scripts/Editor/UIParticleMenu.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0ad158a8abf7646d6b540eed4a91a2dc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scripts/UIParticleUpdater.cs b/Scripts/UIParticleUpdater.cs index 23c2523..6eee462 100755 --- a/Scripts/UIParticleUpdater.cs +++ b/Scripts/UIParticleUpdater.cs @@ -6,7 +6,7 @@ using UnityEngine.Profiling; namespace Coffee.UIExtensions { - public static class UIParticleUpdater + internal static class UIParticleUpdater { static readonly List s_ActiveParticles = new List(); static MaterialPropertyBlock s_Mpb; diff --git a/package.json b/package.json index 850b1ea..f9445e1 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.36", + "version": "3.0.0-preview.37", "unity": "2018.2", "license": "MIT", "repository": {