71 lines
2.7 KiB
C#
71 lines
2.7 KiB
C#
#if UNITY_EDITOR
|
|
using System.IO;
|
|
using UnityEditor;
|
|
using UnityEngine;
|
|
|
|
/// <summary>
|
|
/// Editor utility that builds ready-to-use materials from the Rainbow-Cats
|
|
/// "Unity Dissolve HDR Shaders" pack. We resolve shaders through Shader.Find so
|
|
/// Unity fills in each graph's real fileID + default property values — hand-writing
|
|
/// a .mat's shader reference is error-prone and usually ends in a pink material.
|
|
/// Menu: Tools > Rainbow Dissolve > Create Materials
|
|
/// </summary>
|
|
public static class RainbowDissolveMaterialCreator
|
|
{
|
|
// Shader Graph registers its shader name as "<m_Path>/<asset file name>".
|
|
private const string DissolveUrpShaderName = "Shader Graphs/Dissolve Lit URP Shader";
|
|
private const string OutlineUrpShaderName = "Shader Graphs/HDR Outline Lit URP Shader";
|
|
private const string DissolveHdrpShaderName = "Shader Graphs/Dissolve Lit HDRP Shader";
|
|
|
|
private const string OutputFolder = "Assets/Rainbow-Cats-Unity-Dissolve-HDR-Shaders-main/Materials";
|
|
|
|
[MenuItem("Tools/Rainbow Dissolve/Create Materials")]
|
|
public static void CreateMaterials()
|
|
{
|
|
EnsureFolder(OutputFolder);
|
|
|
|
// URP shaders (this project is URP 17). HDRP variant is created only if that
|
|
// shader compiles in the current pipeline, otherwise it would be pink.
|
|
CreateMaterial(DissolveUrpShaderName, "M_Dissolve_URP");
|
|
CreateMaterial(OutlineUrpShaderName, "M_HDROutline_URP");
|
|
CreateMaterial(DissolveHdrpShaderName, "M_Dissolve_HDRP");
|
|
|
|
AssetDatabase.SaveAssets();
|
|
AssetDatabase.Refresh();
|
|
}
|
|
|
|
private static void CreateMaterial(string shaderName, string materialName)
|
|
{
|
|
Shader shader = Shader.Find(shaderName);
|
|
if (shader == null)
|
|
{
|
|
Debug.LogWarning($"[RainbowDissolve] Shader not found: \"{shaderName}\". " +
|
|
"Skipped (likely a different render pipeline or the graph hasn't imported yet).");
|
|
return;
|
|
}
|
|
|
|
string path = $"{OutputFolder}/{materialName}.mat";
|
|
var material = new Material(shader) { name = materialName };
|
|
AssetDatabase.CreateAsset(material, AssetDatabase.GenerateUniqueAssetPath(path));
|
|
Debug.Log($"[RainbowDissolve] Created material {path} using shader \"{shaderName}\".", material);
|
|
}
|
|
|
|
private static void EnsureFolder(string assetFolder)
|
|
{
|
|
if (AssetDatabase.IsValidFolder(assetFolder))
|
|
{
|
|
return;
|
|
}
|
|
|
|
string parent = Path.GetDirectoryName(assetFolder).Replace('\\', '/');
|
|
string leaf = Path.GetFileName(assetFolder);
|
|
if (!AssetDatabase.IsValidFolder(parent))
|
|
{
|
|
EnsureFolder(parent);
|
|
}
|
|
|
|
AssetDatabase.CreateFolder(parent, leaf);
|
|
}
|
|
}
|
|
#endif
|