示例
// 将shader加到AlwaysIncludedShaders
public static void AlwaysIncludedShaders(Object folder)
{
if (folder == null)
return;
string folder_path = AssetDatabase.GetAssetPath(folder);
if (!AssetDatabase.IsValidFolder(folder_path)) {
EditorUtility.DisplayDialog("Error", "请选中Shader所在文件夹", "OK");
return;
}
//在用户所选中的文件夹下搜索所有Shader
Shader[] shaders = Selection.GetFiltered<Shader>(SelectionMode.DeepAssets);
if (shaders == null || shaders.Length == 0) {
EditorUtility.DisplayDialog("Error", "未搜索到Shader文件", "OK");
return;
}
//修改GraphicsSettings
SerializedObject graphicsSettings = new SerializedObject(AssetDatabase.LoadAssetAtPath<Object>("ProjectSettings/GraphicsSettings.asset"));
SerializedProperty m_AlwaysIncludedShaders = graphicsSettings.FindProperty("m_AlwaysIncludedShaders");
m_AlwaysIncludedShaders.ClearArray();
SerializedProperty element;
for(int i=0; i<shaders.Length; i++) {
m_AlwaysIncludedShaders.InsertArrayElementAtIndex(i);
element = m_AlwaysIncludedShaders.GetArrayElementAtIndex(i);
element.objectReferenceValue = shaders[i];
}
graphicsSettings.ApplyModifiedProperties();
}
效果
Always-included Shaders中的shader会存放到游戏包中