DEV Community

Sunder Iyer
Sunder Iyer

Posted on

2 2

TIL AssetDatabase Ops

2021-05-04
May the fourth be with you

So I exported a SGB project to Unity and needed to change all the shaders on the exported materials. This is a tedious task to do by hand especially when there are many materials --- but fortunately, Unity makes Editor Scripting easy and you can perform batch operations on assets easily.

I learned about the AssetDatabase and how you can use it to find and manipulate assets. I slapped together a scriptable-wizard that takes two shader values and runs through all materials in the project and swaps the first with the second. This lets me target shaders that I know can be replaced properly.

using UnityEngine;
using UnityEditor;
using System.Collections;

public class Wizard : ScriptableWizard
{
    public Shader target;
    public Shader replacement;

    [MenuItem("Batch Ops/Wizard")]
    public static void SetWizard()
    {
        ScriptableWizard.DisplayWizard("Some Batch Op",typeof(Wizard),"Swap Shaders");
    }

    void OnWizardCreate()
    {
        string[] guids =  AssetDatabase.FindAssets("t:material");
        foreach (string guid in guids)
        {
            string path = AssetDatabase.GUIDToAssetPath(guid);
            Material material = (Material) AssetDatabase.LoadAssetAtPath(path, typeof(Material));
            if (material.shader == target)
            {
                material.shader = replacement;
                Debug.Log("Replaced shader in " + material.name);
            }
        }
        AssetDatabase.SaveAssets();
        AssetDatabase.Refresh();
    }
}
Enter fullscreen mode Exit fullscreen mode

The following wizard shows up when I access it from the top menu.
Wizard and output log

Fortunately, the script ran with no issues and I was able to avoid tedious shader replacement. I'm sure it's prone to errors but I'll deal with those as they happen.

Top comments (0)

AWS Security LIVE!

Join us for AWS Security LIVE!

Discover the future of cloud security. Tune in live for trends, tips, and solutions from AWS and AWS Partners.

Learn More

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay