如何通过C#脚本调用Unity保存着色器变体清单至资源的功能?
如何通过C#脚本调用Unity Graphics面板的“Save to Asset”功能
Unity Graphics面板里的“Save to Asset”功能,本质是把当前追踪到的Shader变体集合导出为ShaderVariantCollection资源文件。你猜的没错,确实和ShaderVariantCollection类直接相关,用以下步骤就能通过脚本实现同样的功能:
实现步骤
获取追踪到的Shader变体
用GraphicsSettings.GetShaderVariantCollection()方法可以直接拿到当前在Graphics面板中记录的所有Shader变体集合。保存为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
相关产品推荐
相关产品推荐

