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.

Image of Timescale

🚀 pgai Vectorizer: SQLAlchemy and LiteLLM Make Vector Search Simple

We built pgai Vectorizer to simplify embedding management for AI applications—without needing a separate database or complex infrastructure. Since launch, developers have created over 3,000 vectorizers on Timescale Cloud, with many more self-hosted.

Read full post →

Top comments (0)

Postmark Image

Speedy emails, satisfied customers

Are delayed transactional emails costing you user satisfaction? Postmark delivers your emails almost instantly, keeping your customers happy and connected.

Sign up