/// <summary> /// Create a material for the sprite asset. /// </summary> /// <returns></returns> Material GetDefaultSpriteMaterial() { //isEditingAsset = true; ShaderUtilities.GetShaderPropertyIDs(); // Add a new material Shader shader = Shader.Find("TextMeshPro/Sprite"); Material tempMaterial = new Material(shader); tempMaterial.SetTexture(ShaderUtilities.ID_MainTex, spriteSheet); tempMaterial.hideFlags = HideFlags.HideInHierarchy; #if UNITY_EDITOR UnityEditor.AssetDatabase.AddObjectToAsset(tempMaterial, this); UnityEditor.AssetDatabase.ImportAsset(UnityEditor.AssetDatabase.GetAssetPath(this)); #endif //isEditingAsset = false; return(tempMaterial); }
/// <summary> /// Create a Masking Material Instance for the given ID /// </summary> /// <param name="baseMaterial"></param> /// <param name="stencilID"></param> /// <returns></returns> public static Material GetStencilMaterial(Material baseMaterial, int stencilID) { // Check if Material supports masking if (!baseMaterial.HasProperty(ShaderUtilities.ID_StencilID)) { Debug.LogWarning("Selected Shader does not support Stencil Masking. Please select the Distance Field or Mobile Distance Field Shader."); return(baseMaterial); } int baseMaterialID = baseMaterial.GetInstanceID(); // If baseMaterial already has a corresponding masking material, return it. for (int i = 0; i < m_materialList.Count; i++) { if (m_materialList[i].baseMaterial.GetInstanceID() == baseMaterialID && m_materialList[i].stencilID == stencilID) { m_materialList[i].count += 1; #if TMP_DEBUG_MODE ListMaterials(); #endif return(m_materialList[i].stencilMaterial); } } // No matching masking material found. Create and return a new one. Material stencilMaterial; //Create new Masking Material Instance for this Base Material stencilMaterial = new Material(baseMaterial); stencilMaterial.hideFlags = HideFlags.HideAndDontSave; #if UNITY_EDITOR stencilMaterial.name += " Masking ID:" + stencilID; #endif stencilMaterial.shaderKeywords = baseMaterial.shaderKeywords; // Set Stencil Properties ShaderUtilities.GetShaderPropertyIDs(); stencilMaterial.SetFloat(ShaderUtilities.ID_StencilID, stencilID); //stencilMaterial.SetFloat(ShaderUtilities.ID_StencilOp, 0); stencilMaterial.SetFloat(ShaderUtilities.ID_StencilComp, 4); //stencilMaterial.SetFloat(ShaderUtilities.ID_StencilReadMask, stencilID); //stencilMaterial.SetFloat(ShaderUtilities.ID_StencilWriteMask, 0); MaskingMaterial temp = new MaskingMaterial(); temp.baseMaterial = baseMaterial; temp.stencilMaterial = stencilMaterial; temp.stencilID = stencilID; temp.count = 1; m_materialList.Add(temp); #if TMP_DEBUG_MODE ListMaterials(); #endif return(stencilMaterial); }