From 458224e9c0bdd441126c64f6b5286eef7acdc56e Mon Sep 17 00:00:00 2001 From: mob-sakai <sakai861104@gmail.com> Date: Thu, 17 Aug 2023 09:21:12 +0900 Subject: [PATCH] fix: built-in shaders are no longer supported close #233, close #257 Use UI shaders instead. If built-in non-UI shaders are used, an error is displayed in the inspector. --- Scripts/Editor/UIParticleEditor.cs | 25 ++++++++- Scripts/Editor/UIParticleMenu.cs | 6 +-- Shaders/UIAdditive.mat | 85 ++++++++++++++++++++++++++++++ Shaders/UIAdditive.mat.meta | 8 +++ 4 files changed, 119 insertions(+), 5 deletions(-) create mode 100644 Shaders/UIAdditive.mat create mode 100644 Shaders/UIAdditive.mat.meta diff --git a/Scripts/Editor/UIParticleEditor.cs b/Scripts/Editor/UIParticleEditor.cs index 14240f3..2a7e6c6 100644 --- a/Scripts/Editor/UIParticleEditor.cs +++ b/Scripts/Editor/UIParticleEditor.cs @@ -11,6 +11,7 @@ using UnityEditor.Experimental.SceneManagement; using System; using System.Collections.Generic; using System.Linq; +using System.Text.RegularExpressions; using UnityEditor; using UnityEditor.UI; using UnityEditorInternal; @@ -299,8 +300,21 @@ namespace Coffee.UIExtensions } } - // Does the shader support UI masks? + // Non-UI built-in shader is not supported. + foreach (var mat in current.materials) + { + if (!mat || !mat.shader) continue; + var shader = mat.shader; + if (IsBuiltInObject(shader) && !shader.name.StartsWith("UI/")) + { + EditorGUILayout.HelpBox( + $"Built-in shader '{shader.name}' in '{mat.name}' is not supported.\n" + + "Use UI shaders instead.", + MessageType.Error); + } + } + // Does the shader support UI masks? if (current.maskable && current.GetComponentInParent<Mask>()) { foreach (var mat in current.materials) @@ -314,7 +328,8 @@ namespace Coffee.UIExtensions if (mat.HasProperty(propName)) continue; EditorGUILayout.HelpBox( - $"Shader '{shader.name}' doesn't have '{propName}' property. This graphic cannot be masked.", + $"Shader '{shader.name}' doesn't have '{propName}' property." + + "\nThis graphic cannot be masked.", MessageType.Warning); break; } @@ -369,6 +384,12 @@ namespace Coffee.UIExtensions } } + private bool IsBuiltInObject(Object obj) + { + return AssetDatabase.TryGetGUIDAndLocalFileIdentifier(obj, out var guid, out long _) + && Regex.IsMatch(guid, "^0{16}.0{15}$", RegexOptions.Compiled); + } + private static int GetUsedComponentCount(ParticleSystemVertexStream s) { switch (s) diff --git a/Scripts/Editor/UIParticleMenu.cs b/Scripts/Editor/UIParticleMenu.cs index 4f01970..256a4f9 100644 --- a/Scripts/Editor/UIParticleMenu.cs +++ b/Scripts/Editor/UIParticleMenu.cs @@ -34,10 +34,10 @@ namespace Coffee.UIExtensions ps.transform.SetParent(uiParticle.transform, false); ps.transform.localPosition = Vector3.zero; - // Assign default material. + // Assign default material (UIAdditive). var renderer = ps.GetComponent<ParticleSystemRenderer>(); - var defaultMat = AssetDatabase.GetBuiltinExtraResource<Material>("Default-Particle.mat"); - renderer.material = defaultMat ? defaultMat : renderer.material; + var path = AssetDatabase.GUIDToAssetPath("9944483a3e009401ba5dcc42f14d5c63"); + renderer.material = AssetDatabase.LoadAssetAtPath<Material>(path); // Refresh particles. uiParticle.RefreshParticles(); diff --git a/Shaders/UIAdditive.mat b/Shaders/UIAdditive.mat new file mode 100644 index 0000000..9eb4c66 --- /dev/null +++ b/Shaders/UIAdditive.mat @@ -0,0 +1,85 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: UIAdditive + m_Shader: {fileID: 4800000, guid: ecfa8f5732b504ef98fba10aa18d0326, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 10300, guid: 0000000000000000f000000000000000, type: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _ColorMask: 15 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UVSec: 0 + - _UseUIAlphaClip: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Shaders/UIAdditive.mat.meta b/Shaders/UIAdditive.mat.meta new file mode 100644 index 0000000..76c7bed --- /dev/null +++ b/Shaders/UIAdditive.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9944483a3e009401ba5dcc42f14d5c63 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: