void PrepareGUI() { m_IsNewGUI = false; TextShaderUtilities.GetShaderPropertyIDs(); // New GUI just got constructed. This happens in response to a selection, // but also after undo/redo events. if (s_LastSeenUndoRedoCount != s_UndoRedoCount) { // There's been at least one undo/redo since the last time this GUI got constructed. // Maybe the undo/redo was for this material? Assume that is was. TextEventManager.ON_MATERIAL_PROPERTY_CHANGED(true, m_Material as Material); } s_LastSeenUndoRedoCount = s_UndoRedoCount; }
static void PasteMaterialProperties(MenuCommand command) { if (m_copiedProperties == null) { Debug.LogWarning("No Material Properties to Paste. Use Copy Material Properties first."); return; } Material mat = null; if (command.context.GetType() == typeof(Material)) { mat = (Material)command.context; } else { mat = Selection.activeGameObject.GetComponent <CanvasRenderer>().GetMaterial(); } Undo.RecordObject(mat, "Paste Material"); TextShaderUtilities.GetShaderPropertyIDs(); // Make sure we have valid Property IDs if (mat.HasProperty(TextShaderUtilities.ID_GradientScale)) { // Preserve unique SDF properties from destination material. m_copiedProperties.SetTexture(TextShaderUtilities.ID_MainTex, mat.GetTexture(TextShaderUtilities.ID_MainTex)); m_copiedProperties.SetFloat(TextShaderUtilities.ID_GradientScale, mat.GetFloat(TextShaderUtilities.ID_GradientScale)); m_copiedProperties.SetFloat(TextShaderUtilities.ID_TextureWidth, mat.GetFloat(TextShaderUtilities.ID_TextureWidth)); m_copiedProperties.SetFloat(TextShaderUtilities.ID_TextureHeight, mat.GetFloat(TextShaderUtilities.ID_TextureHeight)); } EditorShaderUtilities.CopyMaterialProperties(m_copiedProperties, mat); // Copy ShaderKeywords from one material to the other. mat.shaderKeywords = m_copiedProperties.shaderKeywords; // Let TextMeshPro Objects that this mat has changed. TextEventManager.ON_MATERIAL_PROPERTY_CHANGED(true, mat); }
public override void OnGUI(MaterialEditor materialEditor, MaterialProperty[] properties) { m_Editor = materialEditor; m_Material = materialEditor.target as Material; this.m_Properties = properties; if (m_IsNewGUI) { PrepareGUI(); } //DoDragAndDropBegin(); EditorGUI.BeginChangeCheck(); DoGUI(); if (EditorGUI.EndChangeCheck()) { TextEventManager.ON_MATERIAL_PROPERTY_CHANGED(true, m_Material); } //DoDragAndDropEnd(); }
static void ResetSettings(MenuCommand command) { Material mat = null; if (command.context.GetType() == typeof(Material)) { mat = (Material)command.context; } else { mat = Selection.activeGameObject.GetComponent <CanvasRenderer>().GetMaterial(); } Undo.RecordObject(mat, "Reset Material"); TextShaderUtilities.GetShaderPropertyIDs(); // Make sure we have valid Property IDs if (mat.HasProperty(TextShaderUtilities.ID_GradientScale)) { // Copy unique properties of the SDF Material var texture = mat.GetTexture(TextShaderUtilities.ID_MainTex); var gradientScale = mat.GetFloat(TextShaderUtilities.ID_GradientScale); var texWidth = mat.GetFloat(TextShaderUtilities.ID_TextureWidth); var texHeight = mat.GetFloat(TextShaderUtilities.ID_TextureHeight); var stencilId = 0.0f; var stencilComp = 0.0f; if (mat.HasProperty(TextShaderUtilities.ID_StencilID)) { stencilId = mat.GetFloat(TextShaderUtilities.ID_StencilID); stencilComp = mat.GetFloat(TextShaderUtilities.ID_StencilComp); } var normalWeight = mat.GetFloat(TextShaderUtilities.ID_WeightNormal); var boldWeight = mat.GetFloat(TextShaderUtilities.ID_WeightBold); // Reset the material Unsupported.SmartReset(mat); // Reset ShaderKeywords mat.shaderKeywords = new string[0]; // { "BEVEL_OFF", "GLOW_OFF", "UNDERLAY_OFF" }; // Copy unique material properties back to the material. mat.SetTexture(TextShaderUtilities.ID_MainTex, texture); mat.SetFloat(TextShaderUtilities.ID_GradientScale, gradientScale); mat.SetFloat(TextShaderUtilities.ID_TextureWidth, texWidth); mat.SetFloat(TextShaderUtilities.ID_TextureHeight, texHeight); if (mat.HasProperty(TextShaderUtilities.ID_StencilID)) { mat.SetFloat(TextShaderUtilities.ID_StencilID, stencilId); mat.SetFloat(TextShaderUtilities.ID_StencilComp, stencilComp); } mat.SetFloat(TextShaderUtilities.ID_WeightNormal, normalWeight); mat.SetFloat(TextShaderUtilities.ID_WeightBold, boldWeight); } else { Unsupported.SmartReset(mat); } TextEventManager.ON_MATERIAL_PROPERTY_CHANGED(true, mat); }