public static Material EditorCreateOrLoadMaskMaterialAsset(SkeletonRenderer.SpriteMaskInteractionMaterials maskMaterials, UnityEngine.Rendering.CompareFunction maskFunction, Material originalMaterial) { string originalMaterialPath = UnityEditor.AssetDatabase.GetAssetPath(originalMaterial); int posOfExtensionDot = originalMaterialPath.LastIndexOf('.'); string materialPath = (maskFunction == SkeletonRenderer.STENCIL_COMP_MASKINTERACTION_VISIBLE_INSIDE) ? originalMaterialPath.Insert(posOfExtensionDot, MATERIAL_FILENAME_SUFFIX_INSIDE_MASK) : originalMaterialPath.Insert(posOfExtensionDot, MATERIAL_FILENAME_SUFFIX_OUTSIDE_MASK); Material material = UnityEditor.AssetDatabase.LoadAssetAtPath <Material>(materialPath); if (material != null) { return(material); } material = new Material(originalMaterial); material.SetFloat(SkeletonRenderer.STENCIL_COMP_PARAM_ID, (int)maskFunction); UnityEditor.AssetDatabase.CreateAsset(material, materialPath); Debug.Log(string.Concat("Created material '", materialPath, "' for mask interaction based on '", originalMaterialPath, "'.")); UnityEditor.EditorUtility.SetDirty(material); UnityEditor.AssetDatabase.SaveAssets(); return(material); }
public static void EditorInitMaskMaterials(SkeletonRenderer skeleton, SkeletonRenderer.SpriteMaskInteractionMaterials maskMaterials, SpriteMaskInteraction maskType) { if (maskType == SpriteMaskInteraction.None) { EditorConfirmDisabledMaskMaterialsInit(skeleton); } else if (maskType == SpriteMaskInteraction.VisibleInsideMask) { EditorInitSpriteMaskMaterialsInsideMask(skeleton); } else if (maskType == SpriteMaskInteraction.VisibleOutsideMask) { EditorInitSpriteMaskMaterialsOutsideMask(skeleton); } }
public static void EditorDeleteMaskMaterials(SkeletonRenderer.SpriteMaskInteractionMaterials maskMaterials, SpriteMaskInteraction maskType) { Material[] targetMaterials; if (maskType == SpriteMaskInteraction.VisibleInsideMask) { targetMaterials = maskMaterials.materialsInsideMask; } else if (maskType == SpriteMaskInteraction.VisibleOutsideMask) { targetMaterials = maskMaterials.materialsOutsideMask; } else { Debug.LogWarning("EditorDeleteMaskMaterials: Normal materials are kept as a reference and shall never be deleted."); return; } for (int i = 0; i < targetMaterials.Length; ++i) { var material = targetMaterials[i]; if (material != null) { string materialPath = UnityEditor.AssetDatabase.GetAssetPath(material); UnityEditor.AssetDatabase.DeleteAsset(materialPath); Debug.Log(string.Concat("Deleted material '", materialPath, "'")); } } if (maskType == SpriteMaskInteraction.VisibleInsideMask) { maskMaterials.materialsInsideMask = new Material[0]; } else if (maskType == SpriteMaskInteraction.VisibleOutsideMask) { maskMaterials.materialsOutsideMask = new Material[0]; } }