You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过C#脚本调用Unity保存着色器变体清单至资源的功能?

如何通过C#脚本调用Unity Graphics面板的“Save to Asset”功能

Unity Graphics面板里的“Save to Asset”功能,本质是把当前追踪到的Shader变体集合导出为ShaderVariantCollection资源文件。你猜的没错,确实和ShaderVariantCollection类直接相关,用以下步骤就能通过脚本实现同样的功能:

实现步骤

  1. 获取追踪到的Shader变体
    用GraphicsSettings.GetShaderVariantCollection()方法可以直接拿到当前在Graphics面板中记录的所有Shader变体集合。

  2. 保存为Asset资源
    通过AssetDatabase.CreateAsset()把拿到的变体集合保存成指定路径的.asset文件,这个操作需要在Editor环境下执行。

完整示例代码

把下面的脚本放在项目的Editor文件夹下(必须在Editor目录,否则无法使用UnityEditor相关API):

using UnityEditor;
using UnityEngine;

public static class ShaderVariantSaver
{
    // 添加菜单选项,方便直接调用
    [MenuItem("Tools/Save Shader Variant Manifest")]
    public static void SaveCurrentShaderVariants()
    {
        // 获取当前追踪的Shader变体集合
        ShaderVariantCollection trackedVariants = GraphicsSettings.GetShaderVariantCollection();
        
        if (trackedVariants == null || trackedVariants.variants.Count == 0)
        {
            Debug.LogWarning("没有可保存的Shader变体!请先在Graphics面板启用变体追踪,然后运行游戏收集变体数据");
            return;
        }
        
        // 自定义保存路径,可根据需求修改
        string savePath = "Assets/ShaderVariantManifest.asset";
        
        // 保存资源并刷新数据库
        AssetDatabase.CreateAsset(trackedVariants, savePath);
        AssetDatabase.SaveAssets();
        AssetDatabase.Refresh();
        
        Debug.Log($"Shader变体清单已成功保存到:{savePath}");
    }
}

注意事项

  • 脚本必须放在Editor目录下,因为用到了UnityEditor命名空间的API,只能在编辑模式下运行。
  • 要先在Edit → Project Settings → Graphics面板中开启Shader Variant Tracking,然后运行游戏让Unity收集到变体数据,否则保存的文件会是空的。
  • 如果指定路径已有同名资源,CreateAsset会直接覆盖原有文件,操作前请注意确认路径。

内容的提问来源于stack exchange,提问作者Maxim Vasilev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 07:15:44